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) 为中心
- size
缺省使用: square(); 得到: square(size = [1, 1], center = false);
- 示例 :
上例的等效脚本 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]);
上例的等效脚本 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); // 创建一个半径为 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");