如何使用openscad绘制一个简单的键帽.

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绘制一个简单的键帽.的更多相关文章
- opengl学习笔记(五):组合变换,绘制一个简单的太阳系
创建太阳系模型 描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制.需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转.还需要使用glTranslate ...
- Quartz2D之绘制一个简单的机器猫
学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...
- svg绘制一个简单地饼图
一个简单地svg绘制饼图的demo,代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8& ...
- Unity3D学习笔记2——绘制一个带纹理的面
目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- 如何开发一个简单的HTML5 Canvas 小游戏
原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...
- 使用canvas绘制一个时钟
周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...
- iOS----自定义UIView,绘制一个UIView
绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时,drawRect:方 ...
- 无聊的人用JS实现了一个简单的打地鼠游戏
直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...
随机推荐
- .13-浅析webpack源码之WatcherManager模块
从模块流可以看出,这个NodeWatchFileSystem模块非常深,这里暂时不会深入到chokidar模块,有点太偏离本系列文章了,从WatcherManager开始讲解. 流程如图: 源码非常简 ...
- spring cloud config与eureka配合使用
前面两篇介绍了Spring Cloud Config服务端和客户端的简单配置,本篇介绍Spring Cloud Config与Eureka配合使用 前言 默认情况下,配置客户端启动时,都是通过配置属性 ...
- IQuerable与IEnumable的区别
核心区别: IQueryable该接口会把查询表达式先缓存到表达式树Expression 中,只有当真正用到数据的时候(例如 遍历 ),才会由IQueryProvider解析表达式树,生成sql语句执 ...
- request请求 HTTPBody 格式
//Json格式 [mtbRequset setValue:@"application/json" forHTTPHeaderField:@"Content- ...
- 初学CSS-2-文本的属性
文本装饰属性: 格式:text-decoration:underline: 取值:underline(下划线) line-through(删除线) overline(上划线) none(什么都没有) ...
- 【作业三】结队任务二-----CourseManagement
031302517 031302319 ps:共同完成一篇随笔,文章中的第一人称我(517),队友(319) 一.功能分析+实现思路+结队讨论 这里我将功能分析和实现思路还有结对过程中的一些讨论结合在 ...
- Python 类的特殊成员介绍
类的成员有两种形式 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法,私有成员命名时,前两个字符是下划线. class Foo: def __init__(self, name, age ...
- 【读书笔记】iOS-iPad与iPhone
在开发通用型应用的时候,你总是需要记住,iPad并不是一个大大的iPod touch,为iPad开发的应用的界面应该更好地利用iPad的大屏幕,而不应该是iPhone应用的复制品. 参考资料:< ...
- iOS开发NSDate、NSString、时间戳之间的转化
//将UTCDate(世界标准时间)转化为当地时区的标准Date(钟表显示的时间) //NSDate *date = [NSDate date]; 2018-03-27 06:54:41 +0000 ...
- JavaScript大杂烩7 - 理解内置集合
JavaScript内置了很多对象,简单的类型如String,Number,Boolean (相应的"值类型"拥有相同的方法),复杂一点的如Function,Object,Arra ...