跳至內容

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