OpenSCAD 将2D形状挤压成3D对象

本页内容

从 2D 对象旋转挤出 3D 对象

到目前为止,已经创建了大量模型并定制了您的汽车设计,同时参数化建模了解了 OpenSCAD 的不同功能。到目前为止创建的每个模型都只使用三个基本的元素:球体、立方体和圆柱体,通过将这些基本的元素与转换命令相结合,可以创建大量模型,但仍有一些模型无法单独使用这些原语来创建。比如下面的车轮。

Rounded wheel.jpg

上面的轮子设计需要创建一个看起来像甜甜圈的对象。

Donut shaped object.jpg

无法使用球体、立方体和圆柱体基元创建此甜甜圈形状的对象。相反,它需要使用 2D 图元和一个可以从 2D 轮廓创建 3D 形状的新命令。具体来说,可以通过首先使用圆形基元定义圆形 2D 轮廓,然后使用 rotate_extrude 命令旋转拉伸该轮廓来创建甜甜圈。


示例

$fa = 1;
$fs = 0.4;
wheel_radius = 12;
tyre_diameter = 6;
rotate_extrude(angle=360) {
    translate([wheel_radius - tyre_diameter/2, 0])
        circle(d=tyre_diameter);
}

Extruded donut.jpg rotate_extrude让对象围绕z轴旋转了360度,并且轨迹形成了相应的对象。当然我们可以让其旋转270度得到下面的效果。

Extruded donut 270 degrees.jpg


rounded_wheel_horizontal.scad

通过定义缺少的圆柱体对象来完成新的车轮设计。圆柱体的高度应该等于一个wheel_width 变量的值,而圆柱体的半径应该等于wheel_radius - tyre_diameter/2。圆柱体应以原点为中心。

$fa = 1;
$fs = 0.4;
wheel_radius = 12;
wheel_width = 4;
tyre_diameter = 6;
rotate_extrude(angle=360) {
    translate([wheel_radius-tyre_diameter/2,0])
        circle(d=tyre_diameter);
}
cylinder(h=wheel_width, r=wheel_radius - tyre_diameter/2, center=true);

Rounded wheel horizontal.jpg


示例

为了使这个轮子与前面章节中的模型兼容,将它绕 X 轴旋转 90 度。将此车轮设计转换为名为 rounded_simple_wheel 的模块,并将其添加到您的 vehicle_parts.scad 脚本中以供以后使用。

…
module rounded_simple_wheel(wheel_radius=12, wheel_width=4, tyre_diameter=6) {
    rotate([90,0,0]) {
        rotate_extrude(angle=360) {
            translate([wheel_radius-tyre_diameter/2,0])
                circle(d=tyre_diameter);
        }
        cylinder(h=wheel_width, r=wheel_radius - tyre_diameter/2, center=true);
    }
}
…

上面的轮子是一个轴对称物体,这意味着它围绕一个轴呈现对称性。具体来说,对称轴是 2D 轮廓围绕其旋转以形成 3D 对象的轴。当对象为轴对称时,只要提供适当的 2D 轮廓,只需一个 rotate_extrude 命令即可创建它。上述车轮设计并非如此,因为中心部分添加了与旋转挤压分开的圆柱命令。从上述模块中删除圆柱体命令,并在提供的 2D 轮廓上进行适当的添加,以便通过 rotate_extrude 命令创建整个车轮。

Complete profile.jpg


示例

…
translate([wheel_radius-tyre_diameter/2,0])
    circle(d=tyre_diameter);
translate([0,-wheel_width/2])
    square([wheel_radius-tyre_diameter/2,wheel_width]);
…

示例

…
module rounded_simple_wheel(wheel_radius=12, wheel_width=4, tyre_diameter=6) {
    rotate([90,0,0]) {
        rotate_extrude(angle=360) {
            translate([wheel_radius-tyre_diameter/2,0])
                circle(d=tyre_diameter);
            translate([0,-wheel_width/2])
                square([wheel_radius-tyre_diameter/2,wheel_width]);
        }
    }
}
…

记住轴对称对象可以完全由 rotate_extrude 命令创建。之前的车轮设计就是一个具体的例子。您是否决定通过提供整个对象的 2D 轮廓并使用单个 rotate_extrude 或仅对无法以任何其他方式创建的部分使用 rotate_extrude 命令来创建轴对称对象,取决于每种情况,并且是由你决定。例如,如果您想进一步模块化车轮设计并将它们分成可组合的轮胎和轮辋模块,您将不可避免地需要使用 rotate_extrude 命令创建圆环形状的轮胎。因为在这种情况下,轮辋将是一个单独的模块,其中已经不存在 rotate_extrude 命令,

从 2D 对象线性挤出 3D 对象

如前所述,还有另一个 OpenSCAD 命令可用于从提供的 2D 轮廓创建 3D 对象。这是 linear_extrude 命令。与 rotate_extrude 命令相反,linear_extrude 通过沿 Z 轴延伸位于 XY 平面上的 2D 轮廓来创建 3D 对象。与 rotate_extrude 命令类似,当您要创建的 3D 对象无法通过组合可用的 3D 图元直接创建时,可以使用 linear_extrude。下面是一个这样的例子。

Extruded ellipse.jpg


extruded_ellipse.scad

$fa = 1;
$fs = 0.4;
linear_extrude(height=50)
    scale([2,1,1])
    circle(d=10);

Ellipse profile.jpg


ellipse_profile.scad

$fa = 1;
$fs = 0.4;
scale([2,1,1])
    circle(d=10);

关于使用 linear_extrude,您应该注意几点。linear_extrude 的语法类似于 rotate_extrude 命令的语法。创建将沿 Z 轴拉伸的 2D 轮廓的命令需要放置在 linear_extrude 命令之后的一对花括号内。参数高度用于定义沿 Z 轴拉伸 2D 轮廓的单位数。默认情况下,二维轮廓沿 Z 轴的正方向拉伸,其单位量等于指定给高度参数的值。

通过传递一个名为 center 的附加参数并将其设置为 true,2D 轮廓将沿 Z 轴的两个方向拉伸。结果对象的总长度仍将等于高度参数。

此页面最后编辑于2022年7月30日 (星期六) 10:13。