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