OpenSCAD 用户手册/使用二维子系统
所有二维基本图形都可以使用三维变换进行变换。它们通常用作三维挤出的部分。虽然它们无限薄,但以 1 个单位的厚度渲染。
注意:尝试使用 difference()
从三维对象中减去会导致最终渲染中出现意外结果。
在第一象限创建正方形或矩形。当 center
为真时,正方形以原点为中心。如果按此处显示的顺序给出,参数名称是可选的。
square(size = [x, y], center = true/false); square(size = x , center = true/false);
- 参数:
- 大小
- 单个值,两边都具有该长度的正方形
- 2 值数组 [x,y],尺寸为 x 和 y 的矩形
- 中心
- false(默认),第 1 象限(正),一个角在 (0,0)
- true,正方形以 (0,0) 为中心
- 大小
default values: square(); yields: square(size = [1, 1], center = false);
- 示例:
equivalent scripts for this example square(size = 10); square(10); square([10,10]); . square(10,false); square([10,10],false); square([10,10],center=false); square(size = [10, 10], center = false); square(center = false,size = [10, 10] );
equivalent scripts for this example square([20,10],true); a=[20,10];square(a,true);
在原点创建圆形。除 r 外,所有参数必须命名。
circle(r=radius | d=diameter);
- 参数
- r : 圆形半径。r 名称是唯一可选的圆形参数。
- 圆形分辨率基于大小,使用 $fa 或 $fs。
- r : 圆形半径。r 名称是唯一可选的圆形参数。
- 对于一个小的,高分辨率的圆形,您可以创建一个大圆形,然后将其缩小,或者您可以设置 $fn 或其他特殊变量。注意:这些示例超过了 3D 打印机的分辨率以及显示屏的分辨率。
scale([1/100, 1/100, 1/100]) circle(200); // create a high resolution circle with a radius of 2. circle(2, $fn=50); // Another way.
- d : 圆形直径(仅在 2014.03 之后的版本中可用)。
- $fa : 每个片段的最小角度(以度为单位)。
- $fs : 每个片段的最小圆周长度。
- $fn : 360 度中的固定片段数。3 或更大的值会覆盖 $fa 和 $fs。
- 如果使用它们,$fa、$fs 和 $fn 必须是命名参数。点击此处了解更多详情,.
defaults: circle(); yields: circle($fn = 0, $fa = 12, $fs = 2, r = 1);
此示例的等效脚本
circle(10); circle(r=10); circle(d=20); circle(d=2+9*2);
可以通过使用 scale()
或 resize()
使 x 和 y 尺寸不相等来从圆形创建椭圆。参见 OpenSCAD 用户手册/变换
equivalent scripts for this example resize([30,10])circle(d=20); scale([1.5,.5])circle(d=20);
可以通过使用 circle()
并将 $fn 设置为边数来创建 3 个或更多边的规则多边形。以下两段代码等效。
circle(r=1, $fn=4);
module regular_polygon(order = 4, r=1){ angles=[ for (i = [0:order-1]) i*(360/order) ]; coords=[ for (th=angles) [r*cos(th), r*sin(th)] ]; polygon(coords); } regular_polygon();
这些结果是以下形状,其中多边形内接于圆形,所有边(和角)相等。一个角指向正 x 方向。对于不规则形状,请参见下面的多边形基本图形。
script for these examples translate([-42, 0]){circle(20,$fn=3);%circle(20,$fn=90);} translate([ 0, 0]) circle(20,$fn=4); translate([ 42, 0]) circle(20,$fn=5); translate([-42,-42]) circle(20,$fn=6); translate([ 0,-42]) circle(20,$fn=8); translate([ 42,-42]) circle(20,$fn=12); color("black"){ translate([-42, 0,1])text("3",7,,center); translate([ 0, 0,1])text("4",7,,center); translate([ 42, 0,1])text("5",7,,center); translate([-42,-42,1])text("6",7,,center); translate([ 0,-42,1])text("8",7,,center); translate([ 42,-42,1])text("12",7,,center); }
polygon() 函数从 x、y 坐标列表中创建多边形形状。多边形是最强大的二维对象。它可以创建圆形和正方形所能创建的任何东西,以及更多。这包括具有凹边和凸边的不规则形状。此外,它可以在该形状内放置孔洞。
polygon(points = [ [x, y], ... ], paths = [ [p1, p2, p3..], ...], convexity = N);
- 参数
- 点
- 多边形的 x、y 点列表。 : 2 元素向量组成的向量。
- 注意:点从 0 到 n-1 索引。
- 路径
- 默认
- 如果未指定路径,则所有点都按列出的顺序使用。
- 单个向量
- 遍历点的顺序。使用 0 到 n-1 的索引。可能以不同的顺序使用,并使用列出的所有点或部分点。
- 多个向量
- 创建主要和次要形状。次要形状从主要形状中减去(如
difference()
)。次要形状可能完全或部分位于主要形状内。
- 创建主要和次要形状。次要形状从主要形状中减去(如
- 默认
- 通过从指定的最后一点返回到第一点来创建封闭形状。
- 凸度
- "内向"曲线的整数,即通过多边形的任意直线预期的路径交叉。见下文。
defaults: polygon(); yields: polygon(points = undef, paths = undef, convexity = 1);
equivalent scripts for this example polygon(points=[[0,0],[100,0],[130,50],[30,50]]); polygon([[0,0],[100,0],[130,50],[30,50]], paths=[[0,1,2,3]]); polygon([[0,0],[100,0],[130,50],[30,50]],[[3,2,1,0]]); polygon([[0,0],[100,0],[130,50],[30,50]],[[1,0,3,2]]); a=[[0,0],[100,0],[130,50],[30,50]]; b=[[3,0,1,2]]; polygon(a); polygon(a,b); polygon(a,[[2,3,0,1,2]]);
equivalent scripts for this example polygon(points=[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]], paths=[[0,1,2],[3,4,5]],convexity=10); triangle_points =[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]]; triangle_paths =[[0,1,2],[3,4,5]]; polygon(triangle_points,triangle_paths,10);
第 1 个路径向量 [0,1,2] 选择点 [0,0],[100,0],[0,100] 用于主要形状。第 2 个路径向量 [3,4,5] 选择点 [10,10],[80,10],[10,80] 用于次要形状。次要形状从主要形状中减去(想想 difference()
)。由于次要形状完全位于主要形状内,它会留下一个有孔洞的形状。
[注意: 需要版本 2015.03] (用于使用 concat()
)
//example polygon with multiple holes a0 = [[0,0],[100,0],[130,50],[30,50]]; // main b0 = [1,0,3,2]; a1 = [[20,20],[40,20],[30,30]]; // hole 1 b1 = [4,5,6]; a2 = [[50,20],[60,20],[40,30]]; // hole 2 b2 = [7,8,9]; a3 = [[65,10],[80,10],[80,40],[65,40]]; // hole 3 b3 = [10,11,12,13]; a4 = [[98,10],[115,40],[85,40],[85,10]]; // hole 4 b4 = [14,15,16,17]; a = concat (a0,a1,a2,a3,a4); b = [b0,b1,b2,b3,b4]; polygon(a,b); //alternate polygon(a,[b0,b1,b2,b3,b4]);
translate([0,-20,10]) { rotate([90,180,90]) { linear_extrude(50) { polygon( points = [ //x,y /* O . */ [-2.8,0], /* O__X . */ [-7.8,0], /* O \ X__X . */ [-15.3633,10.30], /* X_______._____O \ X__X . */ [15.3633,10.30], /* X_______._______X \ / X__X . O */ [7.8,0], /* X_______._______X \ / X__X . O__X */ [2.8,0], /* X__________.__________X \ / \ O / \ / / \ / / X__X . X__X */ [5.48858,5.3], /* X__________.__________X \ / \ O__________X / \ / / \ / / X__X . X__X */ [-5.48858,5.3], ] ); } } }
凸度参数指定与对象相交的射线可能穿透的最大正面(背面)数。此参数仅在 OpenCSG 预览模式下正确显示对象时需要,对多面体渲染没有影响。
此图像显示了一个凸度为 2 的二维形状,因为以红色指示的射线与二维形状的交叉从外到内(或从内到外)最多 2 次。三维形状的凸度将以类似的方式确定。将其设置为 10 应该适用于大多数情况。
[已弃用: import_dxf() 将在未来的版本中删除。使用 import() 代替。]
读取 DXF 文件并创建一个 2D 形状。
示例
linear_extrude(height = 5, center = true, convexity = 10) import_dxf(file = "example009.dxf", layer = "plate");
text
模块使用本地系统安装的字体或单独提供的字体文件创建文本作为 2D 几何对象。
[注意: 需要版本 2015.03]
参数
- text
- 字符串。要生成的文本。
- 大小
- 十进制。生成的文本的升高(高于基线的距离)大约为给定值。默认值为 10。不同的字体会有所不同,可能无法完全填充指定的大小,通常会略微小一些。在公制系统中,大小为 25.4(英制 1 英寸)对应于 100pt ⇒ 12pt 字号将为 12×0.254 用于公制转换或 0.12 用于英制。
- font
- 字符串。要使用的字体的名称。这不是字体文件的名字,而是逻辑字体名称(由 fontconfig 库内部处理)。这也可以包括样式参数,见下文。可以使用字体列表对话框(帮助 -> 字体列表)获取已安装字体的列表和样式。
- halign
- 字符串。文本的水平对齐方式。可能的取值是 "left"、"center" 和 "right"。默认值为 "left"。
- valign
- 字符串。文本的垂直对齐方式。可能的取值是 "top"、"center"、"baseline" 和 "bottom"。默认值为 "baseline"。
- spacing
- 十进制。增加/减少字符间距的因子。默认值 1 导致字体具有正常间距,给出大于 1 的值会导致字母间距更大。
- direction
- 字符串。文本流向。可能的取值是 "ltr"(从左到右)、"rtl"(从右到左)、"ttb"(从上到下)和 "btt"(从下到上)。默认值为 "ltr"。
- language
- 字符串。文本的语言(例如 "en"、"ar"、"ch")。默认值为 "en"。
- script
- 字符串。文本的文字(例如 "latin"、"arabic"、"hani")。默认值为 "latin"。
- $fn
- 用于细分 freetype 提供的曲线路径段
示例
text("OpenSCAD");
- 注意
为了允许指定特定的 Unicode 字符,您可以在字符串中使用以下转义代码指定它们;
- \x03 - 十六进制字符值(仅支持从01到7f的十六进制值)
- \u0123 - 使用 4 个十六进制数字的 Unicode 字符(注意:小写\u)
- \U012345- 使用 6 个十六进制数字的 Unicode 字符(注意:大写\U)
空字符 (NUL) 映射到空格字符 (SP)。
assert(version() == [2019, 5, 0]); assert(ord(" ") == 32); assert(ord("\x00") == 32); assert(ord("\u0000") == 32); assert(ord("\U000000") == 32);
示例
t="\u20AC10 \u263A"; // 10 euro and a smilie
字体由其逻辑字体名称指定;此外,可以添加样式参数来选择特定的字体样式,如 "粗体" 或 "斜体",例如
font="Liberation Sans:style=Bold Italic"
字体列表对话框(在帮助 > 字体列表中可用)显示每个可用字体的字体名称和字体样式。为了参考,对话框还会显示字体文件的路径。您可以将字体列表中的字体拖放到编辑器窗口中以在 text() 语句中使用。
OpenSCAD 包含 Liberation Mono、Liberation Sans 和 Liberation Serif 字体。因此,由于字体通常因平台类型而异,因此使用这些包含的字体很可能在平台之间可移植。
对于常见/休闲文本使用,出于这个原因,建议指定这些字体之一。Liberation Sans 是默认字体,以鼓励这样做。
除了已安装的字体(对于 Windows,仅以管理员身份安装的所有用户的字体),还可以添加特定于项目的字体文件。支持的字体文件格式为 TrueType 字体 (*.ttf) 和 OpenType 字体 (*.otf)。这些文件需要使用 use<> 注册。
use <ttf/paratype-serif/PTF55F.ttf>
注册后,字体将列在字体列表对话框中,因此如果不知道字体的逻辑名称,可以在注册后查找。
OpenSCAD 使用 fontconfig 来查找和管理字体,因此可以使用命令行上的 fontconfig 工具以类似于 GUI 对话框的格式列出系统配置的字体。
$ fc-list -f "%-60{{%{family[0]}%{:style[0]=}}}%{file}\n" | sort
...
Liberation Mono:style=Bold Italic /usr/share/fonts/truetype/liberation2/LiberationMono-BoldItalic.ttf
Liberation Mono:style=Bold /usr/share/fonts/truetype/liberation2/LiberationMono-Bold.ttf
Liberation Mono:style=Italic /usr/share/fonts/truetype/liberation2/LiberationMono-Italic.ttf
Liberation Mono:style=Regular /usr/share/fonts/truetype/liberation2/LiberationMono-Regular.ttf
...
在 Windows 下,字体存储在 Windows 注册表中。要获取包含字体文件名的文件,请使用以下命令
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /s > List_Fonts_Windows.txt
示例
square(10); translate([15, 15]) { text("OpenSCAD", font = "Liberation Sans"); } translate([15, 0]) { text("OpenSCAD", font = "Liberation Sans:style=Bold Italic"); }
- top
- 文本与给定 Y 坐标处边界框的顶部对齐。
- 中心
- 文本与给定 Y 坐标处边界框的中心对齐。
- baseline
- 文本与给定 Y 坐标处字体基线对齐。这是默认值。
- bottom
- 文本与给定 Y 坐标处边界框的底部对齐。
text = "Align"; font = "Liberation Sans"; valign = [ [ 0, "top"], [ 40, "center"], [ 75, "baseline"], [110, "bottom"] ]; for (a = valign) { translate([10, 120 - a[0], 0]) { color("red") cube([135, 1, 0.1]); color("blue") cube([1, 20, 0.1]); linear_extrude(height = 0.5) { text(text = str(text,"_",a[1]), font = font, size = 20, valign = a[1]); } } }
多行文本不支持 `text()`,但将每行大小 × .72 平移将导致 1em 的行间距(em= 字体的正文高度或磅值)。可以添加 20%(× 1.2)。
- left
- 文本与给定 X 坐标处边界框的左侧对齐。这是默认值。
- 中心
- 文本与给定 X 坐标处边界框的中心对齐。
- right
- 文本与给定 X 坐标处边界框的右侧对齐。
text = "Align"; font = "Liberation Sans"; halign = [ [10, "left"], [50, "center"], [90, "right"] ]; for (a = halign) { translate([140, a[0], 0]) { color("red") cube([115, 2,0.1]); color("blue") cube([2, 20,0.1]); linear_extrude(height = 0.5) { text(text = str(text,"_",a[1]), font = font, size = 20, halign = a[1]); } } }
文本可以通过使用 linear_extrude 函数从二维对象变为三维对象。
//3d Text Example linear_extrude(4) text("Text");
3D 到 2D 投影
[编辑 | 编辑源代码]使用 projection()
函数,您可以从 3D 模型创建 2d 图纸,并将其导出为 dxf 格式。它通过将 3D 模型投影到 (x,y) 平面(z 为 0)来工作。如果 cut=true
,则仅考虑 z=0 的点(有效地切割对象),如果 cut=false
(默认值),则也考虑平面之上和之下的点(创建适当的投影)。
示例:考虑随 OpenSCAD 提供的 example002.scad。
然后,您可以进行“切割”投影,它将为您提供 z=0 的 x-y 平面的“切片”。
projection(cut = true) example002();
您还可以进行“普通”投影,这将为对象在 xy 平面上的“阴影”。
projection(cut = false) example002();
另一个示例
您也可以使用投影来获取对象的“侧视图”。让我们以 example002 为例,将其向上移动到 X-Y 平面之外,然后旋转它
translate([0,0,25]) rotate([90,0,0]) example002();
现在,我们可以使用 projection() 获取侧视图
projection() translate([0,0,25]) rotate([90,0,0]) example002();
链接
- 更复杂的示例 来自 Giles Bathgate 的博客
挤压 是使用固定横截面轮廓创建物体的过程。OpenSCAD 提供两个命令来从二维形状创建三维实体:linear_extrude() 和 rotate_extrude()。线性挤压类似于将橡皮泥通过带有特定形状模具的压机挤压。
两种挤压方法都作用于位于 XY 平面的(可能分离的)二维形状。虽然作用于二维形状和三维实体的变换可以将形状移出 XY 平面,但在执行挤压时,最终结果并不直观。实际发生的是,任何三维坐标(Z 坐标)中的信息都会被任何二维形状忽略,这个过程相当于在执行挤压之前对任何二维形状执行隐式projection()。建议对严格保留在 XY 平面的形状执行挤压。
linear_extrude
[edit | edit source]线性挤压是一个操作,它以二维对象作为输入,生成三维对象作为结果。
挤压遵循 **V** 向量,该向量默认为 **Z** 轴,为了指定自定义值,需要版本 > 2021.01。
在 OpenSCAD 中,挤压始终在二维对象的 xy 平面投影(阴影)上执行;因此,如果您在挤压之前旋转或对二维对象应用其他变换,它的阴影形状将被挤压。
虽然挤压沿着 **V** 向量是线性的,但有一个扭曲参数可用,它会导致对象在向上挤压时围绕 **V** 向量旋转。这可以用来围绕其中心旋转对象,就像螺旋柱一样,或者产生围绕 **V** 向量的螺旋挤压,就像猪尾巴一样。
还包括一个缩放参数,以便可以扩展或收缩对象在挤压范围内的尺寸,从而使挤压向内或向外扩展。
用法
[edit | edit source]linear_extrude(height = 5, v = [0, 0, 1], center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0, $fn = 16) {...}
由于向后兼容性问题,您必须使用参数名称。
height
必须为正。
v
是一个三维向量,它必须指向正 Z 方向 [注意: 需要版本 开发快照]
$fn
是可选的,它指定 linear_extrude 的分辨率(数字越大,"平滑度"越高,但需要更多计算时间)。
如果对非平凡的二维形状挤压失败,请尝试设置凸度参数(默认值不是 10,但 10 是一个 "好" 的值,可以尝试)。有关解释,请参见下面的内容。
扭曲
[edit | edit source]扭曲是形状挤压的度数。设置参数 twist = 360 表示挤压一个完整的旋转。扭曲方向遵循左手定则。
0° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = 0) translate([2, 0, 0]) circle(r = 1);
-100° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = -100) translate([2, 0, 0]) circle(r = 1);
100° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = 100) translate([2, 0, 0]) circle(r = 1);
-500° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
中心
[edit | edit source]它类似于圆柱体的参数 center。如果 center
为 false,则线性挤压 Z 范围为从 0 到 height;如果为 true,则范围为从 -height/2 到 height/2。
center = true
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
center = false
linear_extrude(height = 10, center = false, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
网格细化
[edit | edit source]slices 参数定义挤压的 Z 轴上中间点的数量。它的默认值随着 twist 值的增加而增加。显式设置 slices 可能会提高输出细化程度。此外,segments 参数会向挤压的多边形添加顶点(点),从而产生更平滑的扭曲几何形状。Segments 需要是多边形片段的倍数才能产生效果(对于 circle($fn=3),为 6 或 9..;对于 square(),为 8、12..)。
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100) translate([2, 0, 0]) circle(r = 1);
特殊变量 $fn、$fs 和 $fa 也可以用来提高输出效果。如果未定义 slices,则它的值将从定义的 $fn 值中获取。
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100) translate([2, 0, 0]) circle(r = 1);
缩放
[edit | edit source]在挤压的高度上,根据此值缩放二维形状。Scale 可以是标量或向量
linear_extrude(height = 10, center = true, convexity = 10, scale=3) translate([2, 0, 0]) circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, scale=[1,5], $fn=100) translate([2, 0, 0]) circle(r = 1);
请注意,如果 scale 是向量,则生成的侧壁可能是非平面的。使用 twist=0
和 slices
参数来避免 不对称。
linear_extrude(height=10, scale=[1,0.1], slices=20, twist=0) polygon(points=[[0,0],[20,10],[20,-10]]);
与导入的 SVG 一起使用
[edit | edit source]此函数的常见用法是导入二维 svg
linear_extrude(height = 10, center = true) import("knight.svg");
rotate_extrude
[edit | edit source]旋转挤压使二维形状围绕 Z 轴旋转,形成具有旋转对称性的实体。理解此操作的一种方法是想象一个放置在 XY 平面上的陶轮,其旋转轴指向 +Z 方向。然后将要制作的物体放置在这个虚拟陶轮上(可能延伸到 XY 平面下方,指向 -Z 方向)。要制作的物体是物体在 XY 平面上的横截面(仅保留右侧,X >= 0)。这就是将作为子元素馈送到 rotate_extrude() 以生成此实体的二维形状。请注意,物体最初位于 XY 平面,但倾斜向上(围绕 X 轴旋转 +90 度)以挤压。
由于二维形状由 OpenSCAD 在 XY 平面渲染,因此理解此操作的另一种方法如下:使二维形状围绕 Y 轴旋转以形成实体。生成的实体放置的位置使其旋转轴位于 Z 轴上。
就像 linear_extrude 一样,挤压始终在二维多边形到 XY 平面的投影上执行。应用于二维多边形的 rotate、translate 等变换会修改二维多边形到 XY 平面的投影,因此也会修改最终三维物体的外观。
- 二维多边形的 Z 方向平移对结果没有影响(因为投影也不受影响)。
- X 方向平移会增加最终物体的直径。
- Y 方向平移会导致最终物体在 Z 方向上发生偏移。
- 围绕 X 轴或 Y 轴旋转会扭曲最终物体的横截面,因为到 XY 平面的投影也会被扭曲。
不要混淆,因为 OpenSCAD 会在 Z 方向上渲染二维多边形,并具有一定的高度,所以二维对象(及其高度)似乎对 XY 平面具有更大的投影。但是,对于到 XY 平面的投影以及随后的挤压,仅使用没有高度的底座多边形。
它不能用来产生螺旋或螺纹。(这些可以通过 linear_extrude() 使用扭曲参数来完成。)
二维形状**必须**完全位于 Y 轴的右侧(建议)或左侧。更准确地说,形状的**每个**顶点都必须满足 x >= 0 或 x <= 0。如果形状跨越 X 轴,控制台窗口中会出现警告,并且 rotate_extrude() 将被忽略。如果二维形状接触 Y 轴,即 x=0,则**必须**是一条接触的直线,而不是一个点,因为一个点会导致一个厚度为零的三维物体,这是无效的,会导致 CGAL 错误。对于 2016.xxxx 之前的 OpenSCAD 版本,如果形状位于负轴上,则生成的面的方向是内向的,这可能会导致意外效果。
用法
[edit | edit source]rotate_extrude(angle = 360, convexity = 2) {...}
由于向后兼容性问题,您必须使用参数名称。
- convexity : 如果对非平凡的二维形状挤压失败,请尝试设置凸度参数(默认值不是 10,但 10 是一个 "好" 的值,可以尝试)。有关解释,请参见下面的内容。
- angle [注意: 需要版本 2019.05] : 默认为 360。指定要扫描的度数,从正 X 轴开始。扫描方向遵循右手定则,因此负角度表示顺时针扫描。
- $fa : 每个片段的最小角度(以度为单位)。
- $fs : 每个片段的最小圆周长度。
- $fn : 360 度中**固定**的片段数量。3 或更大的值会覆盖 $fa 和 $fs
- $fa、$fs 和 $fn 必须是命名参数。点击此处了解更多详细信息。
可以使用旋转拉伸创建一个简单的圆环。
rotate_extrude(convexity = 10) translate([2, 0, 0]) circle(r = 1);
增加组成 2D 形状的片段数量可以提高网格质量,但渲染时间会更长。
rotate_extrude(convexity = 10) translate([2, 0, 0]) circle(r = 1, $fn = 100);
也可以增加拉伸使用的片段数量。
rotate_extrude(convexity = 10, $fn = 100) translate([2, 0, 0]) circle(r = 1, $fn = 100);
使用参数角度(在 OpenSCAD 版本 2016.xx 中),可以建模一个钩子。
eps = 0.01; translate([eps, 60, 0]) rotate_extrude(angle=270, convexity=10) translate([40, 0]) circle(10); rotate_extrude(angle=90, convexity=10) translate([20, 0]) circle(10); translate([20, eps, 0]) rotate([90, 0, 0]) cylinder(r=10, h=80+eps);
也可以对用户选择点的多边形进行拉伸。
这是一个简单的多边形及其 200 步旋转拉伸。(注意它已经旋转了 90 度,以显示旋转是如何出现的;rotate_extrude()
需要它平放)。
rotate([90,0,0]) polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );
rotate_extrude($fn=200) polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );
有关多边形的更多信息,请参见:2D 基本图形:多边形。
凸度 | 整数。凸度参数指定与对象相交的射线可能穿透的最大正面(或背面)数量。此参数仅在使用标准 Goldfeather 算法时,在 OpenCSG 预览模式下正确显示对象时才需要,对多面体渲染(网格生成)没有影响。
|
此图像显示了一个凸度为 2 的 2D 形状,因为以红色指示的射线最多与 2D 形状相交 4 次(2 个正面和 2 个背面)。3D 形状的凸度将以类似的方式确定。将其设置为 10 对大多数情况都适用。一般情况下,只设置高数字可能会导致预览渲染速度变慢。
高度 | 拉伸高度 |
中心 | 如果为真,则在拉伸后将实体居中 |
扭曲 | 拉伸扭曲角度(度) |
缩放 | 在拉伸高度上,按此值缩放 2D 形状。 |
切片 | 类似于特殊变量 $fn,但不会传递给子 2D 形状。 |
段 | 类似于切片,但在多边形的段上添加点,而不会改变多边形的形状。 |
使用 import() 和拉伸模块,可以将从 DXF 文件中读取的 2D 对象转换为 3D 对象。另请参见2D 到 3D 拉伸。
从 DXF 文件导入的 2D 对象的线性拉伸示例。
linear_extrude(height = fanwidth, center = true, convexity = 10) import (file = "example009.dxf", layer = "fan_top");
从 DXF 文件导入的 2D 对象的旋转拉伸示例。
rotate_extrude(convexity = 10) import (file = "example009.dxf", layer = "fan_side", origin = fan_side_center);
Inkscape 是一个开源绘图程序。有关将 2d DXF 图纸从 Inkscape 传输到 OpenSCAD 的教程,请参见此处
- http://repraprip.blogspot.com/2011/05/inkscape-to-openscad-dxf-tutorial.html(非常简单,需要路径段为直线)
- http://tonybuser.com/?tag=inkscape(更复杂,涉及转换为 Postscript)
- http://bobcookdev.com/inkscape/inkscape-dxf.html(更好的 DXF 导出,对贝塞尔曲线的原生支持)
- http://www.bigbluesaw.com/saw/big-blue-saw-blog/general-updates/big-blue-saws-dxf-export-for-inkscape.html(甚至更好的支持,截至 2014 年 10 月 29 日,请参见注册窗口下面的链接。注意:截至 2015 年 6 月 17 日,仅适用于 0.48.5 或更早版本的 Inkscape,因为在 0.91 中进行了重大更改。)
- http://www.instructables.com/id/Convert-any-2D-image-to-a-3D-object-using-OpenSCAD/(使用 OpenSCAD 将任何 2D 图像转换为 3D 对象)
- http://carrefour-numerique.cite-sciences.fr/fablab/wiki/doku.php?id=projets:de_inkscape_a_openscad(法语,直接导出 OpenSCAD 文件)