您是否一直想设计自己的3D模型? 3D打印您设计的零件怎么样?周围有很多3D建模程序,但是如果您不懂艺术(例如我),这些程序可能很难使用。 OpenSCAD为您提供了一种专门设计3D打印模型的方法,仅使用 code 。
什么是OpenSCAD?
OpenSCAD是免费的,请不要担心,如果您也不知道如何编写代码,今天我将指导您。 >固态计算机辅助设计建模器。适用于Windows,Mac和Linux。与许多其他程序的不同之处在于,您使用代码而不是鼠标来设计零件。这样一来,进行数学计算,将尺寸存储在变量中,调整零件尺寸等等就变得非常容易。
在3D打印模型中,您需要考虑一些因素,但是其中许多因素都适用于3D打印一般而言,CAD模型不仅限于OpenSCAD设计。如果您想了解有关3D打印的更多信息,请查阅我们的《终极入门指南》。
进行设置
首先,转到下载页面并找到适用于该版本的OpenSCAD版本您的操作系统。我使用的是Mac OS,但这些OpenSCAD原则适用于所有系统。
安装后,继续打开它。您将看到以下启动菜单:
这将向您显示您上次打开的文件,并提供了一些加载示例的选项。随意浏览一些示例,但是我发现这些示例在刚开始时会让事情变得更加混乱。对于本教程,通过单击 new 按钮来创建一个新文件。
打开后,将为您提供一个外观简洁的界面:
这分为三个主要区域。左侧是您的编辑器和菜单。这是您编写代码的地方。由于要创建新文件,因此尚无任何代码。顶部有一些菜单按钮可以执行基本任务,例如加载,保存,撤消等。
右下角是控制台。这将向您显示构建模型的任何错误。
最后一部分是右上角的主界面。在这里您可以与模型进行交互,但是您将无法在此处进行编辑(您将在其中编写代码来进行此操作)。
此主界面底部有几个按钮。这些方法主要是让您以不同的方式查看设计。
继续并通过按编辑器菜单中的保存按钮保存新文件或通过转到文件>保存。
基本知识
OpenSCAD大部分时间的工作方式是通过添加和减去简单形状。您可以通过这种方式构建非常复杂的模型,所以让我们直接进入。
这是第一个形状,一个简单的盒子:
这是生成该形状的代码:
cube(); // create a cube
要执行代码和构建模型,您需要对其进行预览。默认情况下,每次保存时,OpenSCAD都会默认执行此操作,也可以按 F5 强制刷新。按住鼠标左键或右键在3D空间中进行实验。
现在,这会生成一个漂亮的立方体,但是如果没有任何尺寸,它并不是非常有用。 OpenSCAD在任何特定的测量系统中均不起作用,而是单位彼此相对。您可以创建一个20 x 10的框,该框由任何其他程序(例如3D打印切片机)来解释,无论是公制还是英制。实际上,它提供了极大的灵活性。
让我们为多维数据集添加一些尺寸。您可以通过将参数传递给 cube 方法来实现:
cube(size = [10, 20, 30]); // rectangle
值 10 , 20 和 30 表示 X , Y 和 Z 轴上的多维数据集的大小。请注意,这是如何产生更大的矩形的:
默认情况下,OpenSCAD从左下方绘制组件。您可以通过将 center 参数设置为 true 来进行调整。以下是对矩形执行此操作的代码:
cube(size = [10, 20, 30], center = true); // rectangle centered
看起来是这样的:
对中对象在简单形状上效果很好,但对非对称对象却很复杂。您需要确定哪种方法最适合您。
移动到更复杂的形状,这里是一个圆柱:
下面是代码创建它:
cylinder(d = 10, h = 10, center = true); // cylinder
与立方体不同,圆柱会自动在X和Y轴的中心绘制。 d 参数代表直径(如果愿意,可以通过半径代替)。 h 参数是高度。但是这里有些问题。这个圆柱体看起来很“块状"。您需要增加在圆周上绘制的面的数量。这很容易-将以下参数添加到圆柱体代码中。
$fn = 100
因此圆柱体定义变为:
cylinder(d = 10, h = 10, center = true, $fn = 100);
这会增加制作圆所需的面数-100为一个很好的起点。请记住,这将极大地增加渲染时间,尤其是在复杂模型上,因此通常最好在设计完成之前将其忽略。
在形状上应用转换很容易。您需要在创建形状之前调用特殊方法。以下是使用 rotate 方法旋转圆柱体的方法:
rotate(a = [0, 90, 0]) cylinder(d = 10, h = 10, center = true); // rotated cylinder
传递给 a 参数的值表示X,Y的旋转角度和Z轴。结果如下:
另一个非常有用的功能是翻译。这使您可以在3D空间中移动对象。再一次,您将需要传递每个轴的运动量。结果如下:
代码如下:
translate(v = [0, 25, 0]) cylinder(d = 10, h = 10, center = true); // translated cylinder
了解翻译方法是您可以做的最重要的事情之一。最后,另一个有用的形状是球形:
这是代码:
sphere(d = 100);
就像圆柱体一样,您可以使用上面的 $ fn 代码对其进行平滑处理。
高级编码
现在,您已经了解了基本知识,让我们来看一下掌握一些更高级的技能设计零件时,考虑一下如何由较小的形状和物体组成零件会有所帮助。您不必这样做,可以随时进行“整理",但这有助于制定一个粗略的计划,即使只是在您脑海中。
让我们创建一个高级形状:具有空心内部球体的立方体。创建一个立方体和一个球体,并将中心设置为true。使用 difference 方法减去另一个:
difference() { // subtraction cube(size = [50, 50, 50], center = true); // outer cube sphere(d = 65, center = true); // inner sphere}
结果为:
直径为( d
在OpenSCAD中,通常有很多方法可以完成相同的任务。如果要在多维数据集中创建凹槽,则可以从中减去另一个多维数据集,或者在其上方再添加两个。通常情况下,完成操作并不重要,但是根据零件的复杂程度,首先进行某些操作可能会更容易。
这里是如何在多维数据集中创建通道。代替使用另一个立方体,使用圆柱体将创建一个圆形通道。注意如何再次使用 difference 方法,以及如何使用 translate 和 rotate 方法来操纵形状。使用 rotate 方法通常会使转换变得棘手,因此请试用这些参数,直到获得所需的结果。这是代码:
difference() { // subtraction cube(size = [50, 150, 50]); // outer cube translate(v = [25, 150, 50]) rotate(a = [90, 0, 0]) cylinder(d = 40, h = 150); // cylinder channel}
这是下面的样子:
您可能想知道所有绿色的东西是什么。这是因为3D模型现在只是预览。要解决此问题,请按 F6 完全渲染模型。根据复杂程度,这可能需要一些时间。预览( F5 )通常在工作时就足够好了。最终渲染效果如下( $ fn 设置为100):
这是另一个高级示例。假设您想使用螺栓将其安装。使用 cylinder 创建一个孔非常简单,但是如果您想将平头安装在沉头螺栓上怎么办?您可以简单地为螺栓头创建一个大圆柱体,但这看起来并不好。解决方案是倒角,可以使用 cylinder 方法创建该倒角。这里的技巧是指定两个直径- d1 和 d2 。设置这些不同的尺寸,其余的将由OpenSCAD完成。
我是英国人,在这里,我将使用公制尺寸制作M5沉头螺栓。您可以轻松地调整它以适合您要使用的任何固定装置。代码如下:
$fn = 100;// bolt settingsm5_clearance_diameter = 5.5;m5_head_clearance_diameter = 11;m5_head_depth = 5;difference() { // subtract cube(20, 20, 20); bolt_hole(10, 10, 20); bolt_bevel(10, 10, 15);}module bolt_hole(x, y, height) { /* M5 hole at 90 deg. */ translate(v = [x, y, 0]) cylinder(d = m5_clearance_diameter, h = height);}module bolt_bevel(x, y, z) { // M5 bevel translate(v = [x, y, z]) cylinder(d2 = m5_head_clearance_diameter, d1 = m5_clearance_diameter, h = m5_head_depth);}
注意螺栓尺寸如何存储在变量中?这使编码和维护更加容易。 模块是您可能尚未遇到的一种方法。这使您可以定义一个代码块,以便在任何需要的时候执行。实际上,这是一个功能。您应将模块和变量用于任何复杂的形状,因为它们使内容更易于阅读,并且可以更快地进行任何更改。倒角如下所示:
让我们看一个最后的示例。假设您想在圆上产生一系列孔。您可以手动测量,平移和旋转所有这些,但是即使使用模块,这也很繁琐。这是最终结果,十个圆柱均匀分布在一个圆上:
以下是代码:
$fn = 100;number_of_holes = 10;for(i = [1 : 360 / number_of_holes : 360]) { // number_of_holes defines number of times this code runs make_cylinder(i);}module make_cylinder(i) { // make cylinder and even distribute rotate([0, 0, i]) translate([10, 0, 0]) cylinder(h = 2, r = 2);}
此代码比您期望的要简单。 for 循环用于调用 make_cylinder 模块十次。由于圆周成360度,并且360/10 = 36,因此每个圆柱需要以36度为增量旋转。此循环的每次迭代都会使 i 变量增加36。此循环调用 make_cylinder 模块,该模块仅绘制一个圆柱体并根据传递给它的度数对其进行定位。循环。您可以通过修改 number_of_holes 变量来绘制或多或少的圆柱体-尽管您可能需要调整间距。这是100个圆柱体的样子,它们略有重叠:
导出
现在您知道了如何在OpenScad中进行编码,在进行3D打印模型之前,还需要执行最后一步。您需要将设计从OpenSCAD导出为大多数3D打印机使用的标准 STL 格式。幸运的是,有一个导出到STL按钮:编辑器菜单>右上方:
今天就是这样。您现在应该具有OpenSCAD的出色工作知识-所有复杂的东西都是建立在这些基础之上的,许多复杂的形状实际上是许多简单形状的组合。
要挑战一下,为什么不看看我们的一些3D打印项目,并尝试在OpenSCAD中重新创建零件:
您今天学到了任何新技巧吗?您最喜欢的OpenSCAD功能是什么?您将很快从其他CAD工具切换吗?在下面的评论中让我们知道!