1 新建空项目

2测数据

测量得出数据.这个长方体的长宽高分别是1.6、4.6、8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备)

3画图

写代码

导入模型

为了方便以后其他零件定位,统一在他们的后面使用对齐中心命令 center=true
得到第一个长方体之后,第二个就简单了.直接复制第一个,并且以Z轴为中心,对其进行旋转操作,如下图

这样,我们就得到了这个十字键槽,但是,键帽上并不是这样的啊. 别急.下面,我们将见到OPENSCAD中最常用的一个布尔运算是如何做的.
首先我们画一个圆柱体

然后我们把之前做好的那个十字立方体放到这个圆柱体的下面

cylinder(7.9,r=4,center=true,$fn=36);//画圆
//下面
cube([1.6,4.6,8],center=true);//画长方体
rotate([0,0,90])//旋转得到长方体
cube([1.6,4.6,8],center=true);

  这个时候,使用三个布尔运算函数中的 差集 命令 difference()
把它们都包起来,

是的,差集命令的含义,是用第一个立方体,减去之后的所有立方体.

difference(){

cylinder(7.9,r=4,center=true,$fn=36);//画圆

cube([1.6,4.6,8],center=true);//画长方体

rotate([0,0,90])//旋转得到长方体
cube([1.6,4.6,8],center=true); }

  请注意顺序差别,如果不一样就会相反操作,如下图,十字减去圆柱,

这时,我们就有了键帽中最关键的零件了.
接下来,我们就要开始画键帽了.
在openscad中,有一个叫hull()的命令. 我把他理解为蒙皮.就是将两个物体,最表面的部分,连接起来的一个命令. 我们就能利用这个命令,生成我们需要的键帽主体.

首先我们要先用一个长宽18毫米,高0.1毫米的长方体来做键帽的底

然后再做一个长12.5、宽15、高1的长方体作为顶。并且把它往Z轴方向上移10毫米。
也就是键帽的高度。

利用hull命令给他们蒙皮。

hull(){
cube([18,18,0.1],center=true);
translate([0,0,10])cube([12.5,15,1],center=true);
}

  但是这是一个实心的东西啊,要怎么才能实现其他建模软件中的 抽壳 命令呢?
其实很简单,我们键帽的外壳是2mm,那么我们就再做一个尺寸缩小2mm的梯形立方体,再做一下减法不是就成了?

difference(){
hull(){
cube([18,18,0.1],center=true);
translate([0,0,10])cube([12.5,15,1],center=true);
} hull(){
cube([16,16,0.2],center=true);
translate([0,0,6.5])cube([10.5,13,1],center=true);
}
}

  接下来,就是把两个东西组合在一起了。
这一步,需要慢慢的调整具体的位置。 好在,我们一开始就在画所有立方体的时候都在中心位置。我们只需要单纯的移动一个轴就能调整了。
最后我们得到了这样的结果。

// 模型1 十字星柱体
module caozhu(){
difference(){ cylinder(7.9,r=4,center=true,$fn=36);//画圆 cube([1.6,4.6,8],center=true);//画长方体 rotate([0,0,90])//旋转得到长方体
cube([1.6,4.6,8],center=true); }
}
//模型二 外壳
module zhuti(){ difference(){
hull(){
cube([18,18,0.1],center=true);
translate([0,0,10])cube([12.5,15,1],center=true);
} hull(){
cube([16,16,0.2],center=true);
translate([0,0,6.5])cube([10.5,13,1],center=true);
}
}
} // 模型三 1+2 组合
module chengshuti(){
zhuti();
translate([0,0,3.5])caozhu();
}

//程序执行
chengshuti();

  

这里大家会看到,为了方便对每个部件进行操作,我使用了 模块 的方式,把它们分别的包装起来,然后就能方便的进行各种操作了。

然后,键帽不可能是这么四平八稳的,上面是有弧度,而下面也是有斜面的。要怎么样做出这样的效果呢?
还是很简单,我们一样来做减法。
首先上面画一个非常大的圆柱体,并且旋转它,移动它,让他刚刚接触到键帽主体的顶部表面。

//Z方向移动28.4  绕X轴旋转90
translate([0,0,28.4])rotate([90,0,0])cylinder(20,r=19,center=true,$fn=100);

  然后再画一个比底部大一点的方块,旋转它。

   rotate([-8,0,0])cube([20,20,4],center=true);

  这样,我们就得到了这样的东西。

是不是感觉很难看?
马上就好。让我们开始做减法吧。用键帽减去上面和下面多余的东西

// 模型1 十字星柱体
module caozhu(){
difference(){ cylinder(7.9,r=4,center=true,$fn=36);//画圆 高度7.9 半径4 cube([1.6,4.6,8],center=true);//画长方体 rotate([0,0,90])//旋转得到长方体
cube([1.6,4.6,8],center=true); }
}
//模型二 外壳
module zhuti(){ difference(){
hull(){
cube([18,18,0.1],center=true);
translate([0,0,10])cube([12.5,15,1],center=true);
} hull(){
cube([16,16,0.2],center=true);
translate([0,0,6.5])cube([10.5,13,1],center=true);
}
}
} // 模型三 1+2 组合
module chengshuti(){
zhuti();
translate([0,0,3.5])caozhu();
} //模型四
module wancheng(){
difference(){
chengshuti();
//Z方向移动28.4 绕X轴旋转90
translate([0,0,28.4])rotate([90,0,0])cylinder(20,r=19,center=true,$fn=100);
//
rotate([-8,0,0])cube([20,20,4],center=true);
}
} //程序执行
wancheng();

  好了,这样,一个机械键盘的键帽就绘制完成了。
接下来要做的事情,就是直接在openscad里面,按一下F6开始实体运算。
在运算结束后,保存该模型为STL文件。
打开你的切片软件,切片并打印吧。

如何使用openscad绘制一个简单的键帽.的更多相关文章

  1. opengl学习笔记(五):组合变换,绘制一个简单的太阳系

    创建太阳系模型 描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制.需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转.还需要使用glTranslate ...

  2. Quartz2D之绘制一个简单的机器猫

    学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...

  3. svg绘制一个简单地饼图

    一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...

  4. Unity3D学习笔记2——绘制一个带纹理的面

    目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...

  5. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  6. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

  7. 使用canvas绘制一个时钟

    周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...

  8. iOS----自定义UIView,绘制一个UIView

    绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时,drawRect:方 ...

  9. 无聊的人用JS实现了一个简单的打地鼠游戏

    直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...

随机推荐

  1. Linux C++开发学习(一)

    一.简单输出 简单的小程序 1.安装g++ sudo install g++ 2.编写c++程序,helloworld.cpp #include<iostream> using names ...

  2. [转]使用docker-compose 大杀器来部署服务 上

    本文转自:https://www.cnblogs.com/neptunemoon/p/6512121.html 使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker ...

  3. 分部类,分部方法 - 修饰符partial

    一.分部类 什么是部分类呢?简单来说就是将一个类型或方法拆分到两个或多个源文件中,每个源文件只包含类型定义的一部分. 当使用自动生成的源时,无须重新创建源文件便可将代码添加到类中.Visual Stu ...

  4. JavaScript实现省市区的三级联动

    JavaScript实现省市区的三级联动 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu ...

  5. SSM实现简单后台分页

    1.简单思路 这是最常见的分页格式,分析一下我们需要传什么数据给前端吧! 首先是左边下面的总共几条记录,然后是右边的当前页面,然后就是一些你所需要展示的数据.对了每页显示多少条是不也得控制下,下面的显 ...

  6. opencv学习系列:连通域参考处理

    OpenCV里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像,输出的是每一个连通区域的轮廓点的集合:vector<vector<Point>>. 外层 ...

  7. python爬虫入门---第四篇:网站对爬虫的限制及突破测试

    大部分网站对网络爬虫都有限制,限制方式有两种: 一.Robots协议:二.网站通过判断对网站访问http的头部信息来查看是否是爬虫,并对爬虫做相关拦截 第一种限制是书面限制,第二种是强制性阻拦限制.那 ...

  8. [HTML/CSS]有一种节点叫做文本节点

    HTML可以看成是由节点(node)组成的树结构 我们一般都是在<p>节点里面写字符串. 在上图中,<p>节点和字符串之间有一个text, 这个text就是文本节点. 我们可以 ...

  9. WEB前端面试2014阿里旺旺

    NO1.下图绿色区域的宽度为100%,其中有三个矩形,第一个矩形的宽度是200px,第二个和第三个矩形的宽度相等.请使用css3中的功能实现它们的布局. 已知HTML结构是: <div clas ...

  10. 【代码笔记】Web-ionic-表单和输入框

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...