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");







