OpenSCAD用户手册/二维基础图形

维基教科书,自由的教学读本

所有二维基础图形都可以进行三维变换,通常是作为三维拉伸的部件。虽然它无限薄,但它们会以厚度1进行渲染。

方形[编辑]

直接创建的方块(或者说长方形)会在第一象限,把 center 设为 true 则其中心会在原点上。如果按所示顺序给出参数,则参数名称可不给出。

 square(size = [x, y], center = true/false);
 square(size = x     , center = true/false);
参数
size
单个值,方块的两对边都是这个长度
两个值的数组 [x, y],长方形的两对边分别为 x 和 y
center
false (默认值),方形在第一象限,其中一个角在原点 (0,0)
true,方形以原点 (0,0) 为中心
缺省使用: square();   得到: square(size = [1, 1], center = false);
示例

OpenSCAD中的 10x10 方块

上例的等效脚本
 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]);

OpenScad 中的 20x10 方块

上例的等效脚本
 square([20,10],true);
 a=[20,10];square(a,true);

圆形[编辑]

直接创建会是一个圆心在原点的圆形。除 r 外的所有参数都 必须 给出名称。

circle(r=radius | d=diameter);
参数
r : 半径。r 是圆形唯一可以不明确给出的参数名称。
默认情况下圆的分辨率与大小有关,请使用 $fa 或 $fs 来指定。
想要一个小的、高分辨率圆形,你可以先做一个大圆形然后将之缩小来得到。或者直接设置 $fn 或其它特定变量。注意:以下示例,不但超出了屏幕显示分辨率,也超出了3D打印机的分辨率。
scale([1/100, 1/100, 1/100]) circle(200); // 创建一个半径为 2 的高分辨率圆形
circle(2, $fn=50);                        // 同上,另一种方法
d  : 圆的直径(仅 2014.03 以后版本有效)。
$fa : 每个分片的最小角(以角度计)。
$fs : 圆周上每个分段的最小长度。
$fn : 整个 360 度中的分片 固定 数量。指定 3 以上(含)的值时会优先发挥作用,取代 $fa 和 $fs。
$fa,$fs 和 $fn 必须显式的给出名称。点击此处详细了解,.
缺省使用:  circle();   得到:  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用户手册/变换

从圆形到椭圆形 从圆形到椭圆形顶视图

上例的等效脚本
 resize([30,10])circle(d=20);
 scale([1.5,.5])circle(d=20);

正多边形[编辑]

把 $n 设置为想要的边数(3或以上),即可通过 circle() 得到正多边形。它是所指定圆的内接多边形,各边各角均相等,且有一个顶点在 x 轴正方向上。对于非正多边形,请参看下文中的多边形基础图形。

通过圆形构造正多边形

上例的等效脚本
 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);
 }

多边形[编辑]

可通过一列 x,y 坐标来创建一个多边形。多边形是最为强大的二维形状,不但可用来创建圆形和方形能创建任何的东西,更是另有无限可能——比如,不规则形状,无论凸形还是凹形。甚至,可以在形状中留有孔洞。

polygon(points = [ [x, y], ... ], paths = [ [p1, p2, p3..], ...], convexity = N);

参数

points
多边形顶点 x,y 列表 : 二元矢量的矢量
注意: 点的下标是从 0 到 n-1。
paths
缺省
如果未指定 path,所有顶点按它在矢量中的顺序依次使用。
单个矢量
指明连接顶点的顺序。矢量中的元素是顶点从 0 到 n-1 的下标。可以指定顶点的任意顺序、任意子集。
多个矢量
指明主形状与次形状。其中,次形状会用来裁剪主形状(就象差集)。次形状可以部分或完全在主形状内部。
最终会连接最后一个顶点与第一个顶点,创建一个闭合形状。
convexity
“内陷”曲线的个数,或者说,一条任意直线最多可能与多边形的边相交几次。详见下文。
默认使用:   polygon();  得到:  polygon(points = undef, paths = undef, convexity = 1);

无孔洞示例

上例的等效脚本
 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]]);

有孔洞示例

上例的等效脚本
 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);
第一个 path 矢量 [0,1,2],选择了这些顶点 [0,0],[100,0],[0,100] 作为主形状。
第二个 path 矢量 [3,4,5],选择了这些顶点 [10,10],[80,10],[10,80] 作为次形状。
把次形状从主形状减去(参考 difference())
由于次形状完全包含在主形状内部,这使最后的形状留了一个孔洞。

多孔示例

注意: concat() 只在 2015.03 之后版本中有效

      //example polygon with multiple holes
a0 = [[0,0],[100,0],[130,50],[30,50]];     // 主形状
b0 = [1,0,3,2];
a1 = [[20,20],[40,20],[30,30]];            // 孔洞1
b1 = [4,5,6];
a2 = [[50,20],[60,20],[40,30]];            // 孔洞2
b2 = [7,8,9];
a3 = [[65,10],[80,10],[80,40],[65,40]];    // 孔洞3
b3 = [10,11,12,13];
a4 = [[98,10],[115,40],[85,40],[85,10]];   // 孔洞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]);

convexity

凸性数(convexity)参数指明:一条射线与形状相交时,可以截得的最大前端(或后端)数量。 此参数仅在预览模式中用来正确显示对象,而在多面体渲染中则用不到它。

凸性数示意

此图所示之二维形状凸性数为 4,因为图中红色所示射线与二维形状的边线相交4次。三维形状的凸性数也以类似方式确定。一般来说,设置凸性数为 10 足以应对大多数情况。

import_dxf[编辑]

已废止: import_dxf() 模块将从未来版本中移除。请使用 import() 替代之。

读取 DXF 文件,并以之创建一个二维形状。

示例

linear_extrude(height = 5, center = true, convexity = 10)
		import_dxf(file = "example009.dxf", layer = "plate");