“OpenSCAD 第一个简单模型快速上手”的版本间差异

本页内容
无编辑摘要
Neo讨论 | 贡献
无编辑摘要
第130行: 第130行:
     cylinder(h=3,r=8);
     cylinder(h=3,r=8);
</sample>
</sample>
[[文件:Two cubes and a rotated cylinder.jpg]]
您应该注意到的第一件事是旋转和翻译命令之间没有分号。您应该已经熟悉这个概念。分号只添加在语句的末尾。您可以以类似的方式继续添加任意数量的转换命令,但不应在它们之间包含分号。
您应该注意的第二件事是旋转命令有一个输入参数,它是一个包含三个值的向量。与 translate 命令完全类似,每个值表示对象将围绕 X、Y 和 Z 轴旋转多少度。
您应该注意的第三件事是,车轮是笔直的,但由于它围绕 x 轴旋转,它已经移动到汽车下方。发生这种情况是因为对象在旋转之前已经远离原点。将对象放置在模型中的一个好习惯是首先旋转它们,然后将它们平移到所需位置。
<sample desc="通过更改旋转和平移命令的顺序,尝试先旋转滚轮然后平移它。">
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([0,-20,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);
</sample>
[[文件:Two cubes and a rotated and translated cylinder.jpg]]
它已经看起来比车轮之前的位置好多了。
<sample desc="尝试修改 translate 命令的输入参数,使该轮子成为您汽车的左前轮。
">
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);
</sample>
[[文件:Car body and front left wheel.jpg]]
<sample desc="尝试通过复制最后一条语句并仅更改一个值的符号来添加汽车的右前轮。
">
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);
</sample>
[[文件:Car body and misaligned front wheels.jpg]]
您应该注意到轮子的位置不是对称的。发生这种情况是因为圆柱体不是以原点为中心创建的。
<sample desc="尝试在圆柱体命令中添加一个额外的输入参数,以向 OpenSCAD 表示两个轮子在首次创建时都应以原点为中心。你的轮子的位置现在对称了吗?
">
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
</sample>
[[文件:Car body and aligned front wheels.jpg]]
=== 完成你的第一个模型 ===
<sample desc="尝试使用您所学的知识将缺少的后轮添加到汽车上。尝试在前轮和后轮上添加连接轴。
">
cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,0,0])
    rotate([90,0,0])
    cylinder(h=30,r=2,center=true);
translate([20,0,0])
    rotate([90,0,0])
    cylinder(h=30,r=2,center=true);
</sample>
[[文件:Completed_car.jpg]]
您应该注意到,在上面的模型中,车轴和车轮之间的重叠部分等于车轮厚度的一半。如果模型是以车轮和车轴相互接触的方式创建的,那么就需要确保它们之间有小的重叠,就像对汽车车身的两个立方体所做的那样。
到目前为止,可能困扰您的一件事是车轮的分辨率。到目前为止,您一直在使用 OpenSCAD 的默认分辨率设置。OpenSCAD 语言中有一些特殊的命令可以让您完全控制模型的分辨率。每次更新设计时,增加模型的分辨率也会增加所需的渲染时间。因此,建议您在构建模型时保留默认分辨率设置,并仅在完成设计后增加分辨率。由于汽车示例已完成,您可以通过在脚本中添加以下两个语句来增加分辨率。
<syntaxhighlight lang="scad" line>
$fa = 1;
$fs = 0.4;
</syntaxhighlight>

2022年7月20日 (三) 20:37的版本

关于 OpenSCAD

OpenSCAD 是一个实体 3D 建模器,可以使用其脚本语言创建参数模型。模型是通过使用一种称为构造立体几何的技术创建的。根据这项技术,可以转换和组合简单的对象,以创建几乎任何复杂的模型。

教程入门

本教程是一个后续教程。当您按照示例进行操作时,您将被要求修改和扩展它们以及创建您自己的模型。要继续,请安装 OpenSCAD 并从空白模型开始。

关于 OpenSCAD 软件操作环境的一些基本信息

您应该注意到的第一件事是 OpenSCAD 的窗口分为两列。左栏是文本编辑器,您将在其中键入 OpenSCAD 脚本语言来创建模型。您将要创建的任何模型都将在此文本编辑器中“输入”。右列的顶部是模型将存在的“虚拟”3D 空间。您目前应该能够找到的唯一内容是带注释的参考轴 X、Y 和 Z。右列的底部是控制台,OpenSCAD 将在您构建模型时打印任何错误消息或其他信息。您应该注意的最后一件事是在文本编辑器上方存在一个操作栏,在参考轴下方存在一个操作栏。 1360px-OpenSCAD environment.png

创建你的第一个对象

示例

您的第一个对象将是一个边长为 10 的完美立方体。要创建它,您需要在文本编辑器中键入以下代码并点击参考轴下方操作栏上的预览(第一个)图标。

cube(10);

A small cube.jpg

关于 OpenSCAD 脚本语言,您应该从一开始就设置一些基本概念,尤其是在您没有编程背景的情况下。立方体一词是 OpenSCAD 脚本语言的一部分,用于命令 OpenSCAD 创建立方体。多维数据集命令后跟一对括号,其中参数大小定义为 10。命令可能需要的任何参数定义总是在命令字后面的一对匹配括号内完成。最后一个括号后面的分号表示该语句的结束,并帮助 OpenSCAD 解析您在文本编辑器中键入的脚本。因为分号用于指示每个语句的结尾,所以您可以通过插入空格来自由地以任何您喜欢的方式格式化您的代码。

创建一个不同的立方体

示例

立方体不一定是完美的。立方体可以有不同的边长。使用以下语句创建边长为 20、30 和 50 的立方体。

cube([20,30,50]);

A cube with different side lengths.jpg

您应该注意到的第一件事是,与前一个相比,这个立方体相当大。事实上,它足够大,以至于它不适合视口。为了解决这个问题,您可以将鼠标移到视口上并向外滚动,直到可以看到整个立方体。您始终可以通过将鼠标移动到视口上并使用滚轮来放大和缩小。或者,您可以使用视口下方操作栏上的放大(第四个)和缩小(第五个)图标。您可以使用同一操作栏中的查看全部(第三个)图标让 OpenSCAD 自动选择方便的缩放级别。

除了放大和缩小,您还可以移动和旋转模型的视图。为此,您需要将鼠标移动到视口上并在按住鼠标右键的同时拖动以移动或按住鼠标左键进行旋转。您可以使用视口下方操作栏上的重置视图(第六个)图标来重置视图。

Rotated viewing angle.jpg

您应该注意的第二件事是,为了创建具有不同边长的立方体,您需要在括号内定义一对括号,其中包含三个值。这对括号用于表示值的向量。向量的值需要用逗号分隔并对应于立方体沿 X、Y 和 Z 轴的边长。当 cube 命令使用三个值的向量作为其输入时,OpenSCAD 会创建一个对应于向量值的具有不同边长的立方体。请记住,您之前使用 cube 命令通过定义参数 size 的值来创建一个完美的立方体。大多数 OpenSCAD 命令可以与不同的参数一起使用,甚至可以使用更多、更少或没有参数来实现不同的结果。



示例

您应该注意到每个立方体都是在第一个八分点上创建的。您可以定义一个名为 center 的附加参数并将其设置为 true 以使立方体以原点为中心。完整的声明如下。

cube([20,30,50],center=true);

A centered cube with different side lengths.jpg

请注意,当括号内定义了多个参数时,它们需要用逗号分隔。

添加更多对象和转换对象

构造实体建模方法使用许多基本对象以及多种方法来转换和组合这些对象以创建更复杂的模型。您在前面的示例中使用的立方体就是这样一个基本对象。基本对象也称为原语,可直接在 OpenSCAD 脚本语言中使用。例如,汽车不是 OpenSCAD 原语,因为脚本语言中没有相应的关键字。这是绝对有意义的,因为 OpenSCAD 是一组建模工具,而不是预定义模型的库。使用可用的工具,您可以组合可用的原语来创建自己的汽车。为此,您需要知道如何将多个对象添加到模型中。


示例

首先创建一个以原点为中心的边长分别为 60、20 和 10 的立方体。

cube([60,20,10],center=true);

A centered cube.jpg


示例

为了在您的模型中添加第二个立方体,请在文本编辑器的下一行中键入相同的语句,但将边长更改为 30、20 和 10。

cube([60,20,10],center=true);
cube([30,20,10],center=true);

A centered cube.jpg



示例

您应该看不到模型中的任何变化,因为第二个立方体在任何方向上都不大于第一个立方体,并且当前完全被第一个立方体覆盖。通过按以下方式修改第二个语句,您可以翻转第二个立方体,使其部分位于第一个立方体顶部的上方。

cube([60,20,10],center=true);
translate([0,0,5])
    cube([30,20,10],center=true);

Two cubes.jpg

您通过使用 translate 命令实现了这一点,该命令是可用的转换之一。translate 命令以及其他转换不会自行创建任何对象。它们更适用于现有对象以某种方式修改它们。translate 命令可用于将对象移动到空间中的任何点。translate 命令的输入参数是三个值的向量。每个值表示对象将沿 X、Y 和 Z 轴移动的单位数量。您应该注意到 translate 命令后没有分号。translate 命令后面是要转换的对象的定义。末尾加分号表示语句完成。


示例

尝试更改 translate 命令的输入参数,使立方体沿 X 轴平移 5 个单位,沿 Z 轴平移 10 个单位。如果您想以不同的方式格式化此语句,请尝试添加一些空格。尝试在 translate 命令后添加分号。

cube([60,20,10],center=true);
translate([0,0,10])
    cube([30,20,10],center=true);

Two cubes barely touching.jpg

在上面的示例中,第二个立方体正好位于第一个立方体的顶部。这是应该避免的,因为 OpenSCAD 不清楚这两个立方体是否一起形成了一个对象。这个问题可以通过始终保持相应对象之间大约 0.001 - 0.002 的小重叠来轻松解决。一种方法是将沿 Z 轴的平移量从 10 个单位减少到 9.999 个单位。

示例

cube([60,20,10],center=true);
translate([0,0,9.999])
    cube([30,20,10],center=true);

Two cubes barely touching.jpg

另一种更明确的方法是减去 0.001 个单位。

示例

cube([60,20,10],center=true);
translate([0,0,10 - 0.001])
    cube([30,20,10],center=true);

Two cubes barely touching.jpg

这是您将在整个教程中遇到的问题。当两个对象完全相互接触时,将始终通过减去或增加 0.001 个单位的容差来保证小的重叠。

圆柱体和旋转对象

您刚刚创建的模型看起来像空气动力学性能不佳的汽车车身。没关系。在接下来的章节中,您将使汽车看起来更有趣和更符合空气动力学。现在,您将使用圆柱体图元和旋转变换来为您的汽车添加轮子和车轴。您可以通过添加包含圆柱命令的第三条语句来创建轮子。您将需要定义两个输入参数 h 和 r。第一个是圆柱体的高度,第二个是它的半径。

示例

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
cylinder(h=3,r=8);

您应该注意到圆柱体被其余对象隐藏。您可以使用 translate 命令通过沿 Y 轴的负方向平移 20 个单位来使圆柱体可见。

示例

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
rotate([90,0,0])
    translate([0,-20,0])
    cylinder(h=3,r=8);

Two cubes and a cylinder.jpg

车轮现在是可见的,但如果没有正确放置,您的汽车将不会去任何地方。您可以使用旋转命令使轮子直立。为此,您需要将其绕 X 轴旋转 90 度。


示例

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
rotate([90,0,0])
    translate([0,-20,0])
    cylinder(h=3,r=8);

Two cubes and a rotated cylinder.jpg

您应该注意到的第一件事是旋转和翻译命令之间没有分号。您应该已经熟悉这个概念。分号只添加在语句的末尾。您可以以类似的方式继续添加任意数量的转换命令,但不应在它们之间包含分号。

您应该注意的第二件事是旋转命令有一个输入参数,它是一个包含三个值的向量。与 translate 命令完全类似,每个值表示对象将围绕 X、Y 和 Z 轴旋转多少度。

您应该注意的第三件事是,车轮是笔直的,但由于它围绕 x 轴旋转,它已经移动到汽车下方。发生这种情况是因为对象在旋转之前已经远离原点。将对象放置在模型中的一个好习惯是首先旋转它们,然后将它们平移到所需位置。

示例

通过更改旋转和平移命令的顺序,尝试先旋转滚轮然后平移它。

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([0,-20,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);

Two cubes and a rotated and translated cylinder.jpg 它已经看起来比车轮之前的位置好多了。


示例

尝试修改 translate 命令的输入参数,使该轮子成为您汽车的左前轮。

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);

Car body and front left wheel.jpg



示例

尝试通过复制最后一条语句并仅更改一个值的符号来添加汽车的右前轮。

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8);

Car body and misaligned front wheels.jpg

您应该注意到轮子的位置不是对称的。发生这种情况是因为圆柱体不是以原点为中心创建的。



示例

尝试在圆柱体命令中添加一个额外的输入参数,以向 OpenSCAD 表示两个轮子在首次创建时都应以原点为中心。你的轮子的位置现在对称了吗?

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);

Car body and aligned front wheels.jpg

完成你的第一个模型

示例

尝试使用您所学的知识将缺少的后轮添加到汽车上。尝试在前轮和后轮上添加连接轴。

cube([60,20,10],center=true);
translate([5,0,10 - 0.001])
    cube([30,20,10],center=true);
translate([-20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([20,-15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([20,15,0])
    rotate([90,0,0])
    cylinder(h=3,r=8,center=true);
translate([-20,0,0])
    rotate([90,0,0])
    cylinder(h=30,r=2,center=true);
translate([20,0,0])
    rotate([90,0,0])
    cylinder(h=30,r=2,center=true);

Completed car.jpg

您应该注意到,在上面的模型中,车轴和车轮之间的重叠部分等于车轮厚度的一半。如果模型是以车轮和车轴相互接触的方式创建的,那么就需要确保它们之间有小的重叠,就像对汽车车身的两个立方体所做的那样。

到目前为止,可能困扰您的一件事是车轮的分辨率。到目前为止,您一直在使用 OpenSCAD 的默认分辨率设置。OpenSCAD 语言中有一些特殊的命令可以让您完全控制模型的分辨率。每次更新设计时,增加模型的分辨率也会增加所需的渲染时间。因此,建议您在构建模型时保留默认分辨率设置,并仅在完成设计后增加分辨率。由于汽车示例已完成,您可以通过在脚本中添加以下两个语句来增加分辨率。

$fa = 1;
$fs = 0.4;
此页面最后编辑于2022年7月20日 (星期三) 20:37。