OpenSCAD 用户手册/2D 图元
所有 2D 图元都可以使用 3D 变换进行变换。它们通常用作 3D 挤出的部分。虽然它们无限薄,但它们以 1 个单位的厚度渲染。
注意:尝试使用difference()
从 3D 对象中减去,会导致最终渲染出现意外结果。
在第一象限创建一个正方形或矩形。当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 坐标列表创建一个多边形。多边形是最强大的 2D 对象。它可以创建圆形和正方形可以创建的任何东西,以及更多。这包括具有凹边和凸边的不规则形状。此外,它可以在该形状内放置孔。
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);
第一个路径向量 [0,1,2] 选择点 [0,0]、[100,0]、[0,100] 作为主要形状。第二个路径向量 [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 的 2D 形状,因为以红色指示的射线交叉了 2D 形状,外部⇒内部(或内部⇒外部)最多 2 次。3D 形状的凸性将以类似的方式确定。将其设置为 10 应该适用于大多数情况。
[已弃用: import_dxf() 将在将来的版本中删除。 请改用import()。]
读取 DXF 文件并创建一个 2D 形状。
示例
linear_extrude(height = 5, center = true, convexity = 10) import_dxf(file = "example009.dxf", layer = "plate");