OpenSCAD入门指南:对3D打印模型进行编程

您是否一直想设计自己的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中重新创建零件:

  • 用于桌面幻想RPG的3D可打印对象
  • 自定义快捷按钮
  • Electronic D20
  • 您可以3D打印的游戏
  • 您今天学到了任何新技巧吗?您最喜欢的OpenSCAD功能是什么?您将很快从其他CAD工具切换吗?在下面的评论中让我们知道!

    标签: 3D建模 3D打印