OpenSCAD 使用者手冊/使用二維子系統
所有二維基本圖形都可以使用三維變換進行變換。它們通常用作三維擠出的部分。雖然它們無限薄,但以 1 個單位的厚度渲染。
注意:嘗試使用 difference() 從三維物件中減去會導致最終渲染中出現意外結果。
在第一象限建立正方形或矩形。當 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 座標列表中建立多邊形形狀。多邊形是最強大的二維物件。它可以建立圓形和正方形所能建立的任何東西,以及更多。這包括具有凹邊和凸邊的不規則形狀。此外,它可以在該形狀內放置孔洞。
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);
第 1 個路徑向量 [0,1,2] 選擇點 [0,0],[100,0],[0,100] 用於主要形狀。第 2 個路徑向量 [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 的二維形狀,因為以紅色指示的射線與二維形狀的交叉從外到內(或從內到外)最多 2 次。三維形狀的凸度將以類似的方式確定。將其設定為 10 應該適用於大多數情況。
[已棄用: import_dxf() 將在未來的版本中刪除。使用 import() 代替。]
讀取 DXF 檔案並建立一個 2D 形狀。
示例
linear_extrude(height = 5, center = true, convexity = 10) import_dxf(file = "example009.dxf", layer = "plate");
text 模組使用本地系統安裝的字型或單獨提供的字型檔案建立文字作為 2D 幾何物件。
[注意: 需要版本 2015.03]
引數
- text
- 字串。要生成的文字。
- 大小
- 十進位制。生成的文字的升高(高於基線的距離)大約為給定值。預設值為 10。不同的字型會有所不同,可能無法完全填充指定的大小,通常會略微小一些。在公制系統中,大小為 25.4(英制 1 英寸)對應於 100pt ⇒ 12pt 字號將為 12×0.254 用於公制轉換或 0.12 用於英制。
- font
- 字串。要使用的字型的名稱。這不是字型檔案的名字,而是邏輯字型名稱(由 fontconfig 庫內部處理)。這也可以包括樣式引數,見下文。可以使用字型列表對話方塊(幫助 -> 字型列表)獲取已安裝字型的列表和樣式。
- halign
- 字串。文字的水平對齊方式。可能的取值是 "left"、"center" 和 "right"。預設值為 "left"。
- valign
- 字串。文字的垂直對齊方式。可能的取值是 "top"、"center"、"baseline" 和 "bottom"。預設值為 "baseline"。
- spacing
- 十進位制。增加/減少字元間距的因子。預設值 1 導致字型具有正常間距,給出大於 1 的值會導致字母間距更大。
- direction
- 字串。文字流向。可能的取值是 "ltr"(從左到右)、"rtl"(從右到左)、"ttb"(從上到下)和 "btt"(從下到上)。預設值為 "ltr"。
- language
- 字串。文字的語言(例如 "en"、"ar"、"ch")。預設值為 "en"。
- script
- 字串。文字的文字(例如 "latin"、"arabic"、"hani")。預設值為 "latin"。
- $fn
- 用於細分 freetype 提供的曲線路徑段
示例

text("OpenSCAD");
- 注意
為了允許指定特定的 Unicode 字元,您可以在字串中使用以下轉義程式碼指定它們;
- \x03 - 十六進位制字元值(僅支援從01到7f的十六進位制值)
- \u0123 - 使用 4 個十六進位制數字的 Unicode 字元(注意:小寫\u)
- \U012345- 使用 6 個十六進位制數字的 Unicode 字元(注意:大寫\U)
空字元 (NUL) 對映到空格字元 (SP)。
assert(version() == [2019, 5, 0]);
assert(ord(" ") == 32);
assert(ord("\x00") == 32);
assert(ord("\u0000") == 32);
assert(ord("\U000000") == 32);
示例
t="\u20AC10 \u263A"; // 10 euro and a smilie
字型由其邏輯字型名稱指定;此外,可以新增樣式引數來選擇特定的字型樣式,如 "粗體" 或 "斜體",例如
font="Liberation Sans:style=Bold Italic"
字型列表對話方塊(在幫助 > 字型列表中可用)顯示每個可用字型的字型名稱和字型樣式。為了參考,對話方塊還會顯示字型檔案的路徑。您可以將字型列表中的字型拖放到編輯器視窗中以在 text() 語句中使用。

OpenSCAD 包含 Liberation Mono、Liberation Sans 和 Liberation Serif 字型。因此,由於字型通常因平臺型別而異,因此使用這些包含的字型很可能在平臺之間可移植。
對於常見/休閒文字使用,出於這個原因,建議指定這些字型之一。Liberation Sans 是預設字型,以鼓勵這樣做。
除了已安裝的字型(對於 Windows,僅以管理員身份安裝的所有使用者的字型),還可以新增特定於專案的字型檔案。支援的字型檔案格式為 TrueType 字型 (*.ttf) 和 OpenType 字型 (*.otf)。這些檔案需要使用 use<> 註冊。
use <ttf/paratype-serif/PTF55F.ttf>
註冊後,字型將列在字型列表對話方塊中,因此如果不知道字型的邏輯名稱,可以在註冊後查詢。
OpenSCAD 使用 fontconfig 來查詢和管理字型,因此可以使用命令列上的 fontconfig 工具以類似於 GUI 對話方塊的格式列出系統配置的字型。
$ fc-list -f "%-60{{%{family[0]}%{:style[0]=}}}%{file}\n" | sort
...
Liberation Mono:style=Bold Italic /usr/share/fonts/truetype/liberation2/LiberationMono-BoldItalic.ttf
Liberation Mono:style=Bold /usr/share/fonts/truetype/liberation2/LiberationMono-Bold.ttf
Liberation Mono:style=Italic /usr/share/fonts/truetype/liberation2/LiberationMono-Italic.ttf
Liberation Mono:style=Regular /usr/share/fonts/truetype/liberation2/LiberationMono-Regular.ttf
...
在 Windows 下,字型儲存在 Windows 登錄檔中。要獲取包含字型檔名的檔案,請使用以下命令
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /s > List_Fonts_Windows.txt
示例

square(10);
translate([15, 15]) {
text("OpenSCAD", font = "Liberation Sans");
}
translate([15, 0]) {
text("OpenSCAD", font = "Liberation Sans:style=Bold Italic");
}
- top
- 文字與給定 Y 座標處邊界框的頂部對齊。
- 中心
- 文字與給定 Y 座標處邊界框的中心對齊。
- baseline
- 文字與給定 Y 座標處字型基線對齊。這是預設值。
- bottom
- 文字與給定 Y 座標處邊界框的底部對齊。

text = "Align";
font = "Liberation Sans";
valign = [
[ 0, "top"],
[ 40, "center"],
[ 75, "baseline"],
[110, "bottom"]
];
for (a = valign) {
translate([10, 120 - a[0], 0]) {
color("red") cube([135, 1, 0.1]);
color("blue") cube([1, 20, 0.1]);
linear_extrude(height = 0.5) {
text(text = str(text,"_",a[1]), font = font, size = 20, valign = a[1]);
}
}
}
多行文字不支援 `text()`,但將每行大小 × .72 平移將導致 1em 的行間距(em= 字型的正文高度或磅值)。可以新增 20%(× 1.2)。
- left
- 文字與給定 X 座標處邊界框的左側對齊。這是預設值。
- 中心
- 文字與給定 X 座標處邊界框的中心對齊。
- right
- 文字與給定 X 座標處邊界框的右側對齊。

text = "Align";
font = "Liberation Sans";
halign = [
[10, "left"],
[50, "center"],
[90, "right"]
];
for (a = halign) {
translate([140, a[0], 0]) {
color("red") cube([115, 2,0.1]);
color("blue") cube([2, 20,0.1]);
linear_extrude(height = 0.5) {
text(text = str(text,"_",a[1]), font = font, size = 20, halign = a[1]);
}
}
}
文字可以透過使用 linear_extrude 函式從二維物件變為三維物件。
//3d Text Example
linear_extrude(4)
text("Text");

3D 到 2D 投影
[編輯 | 編輯原始碼]使用 projection() 函式,您可以從 3D 模型建立 2d 圖紙,並將其匯出為 dxf 格式。它透過將 3D 模型投影到 (x,y) 平面(z 為 0)來工作。如果 cut=true,則僅考慮 z=0 的點(有效地切割物件),如果 cut=false(預設值),則也考慮平面之上和之下的點(建立適當的投影)。
示例:考慮隨 OpenSCAD 提供的 example002.scad。
然後,您可以進行“切割”投影,它將為您提供 z=0 的 x-y 平面的“切片”。
projection(cut = true) example002();
您還可以進行“普通”投影,這將為物件在 xy 平面上的“陰影”。
projection(cut = false) example002();
另一個示例
您也可以使用投影來獲取物件的“側檢視”。讓我們以 example002 為例,將其向上移動到 X-Y 平面之外,然後旋轉它
translate([0,0,25]) rotate([90,0,0]) example002();
現在,我們可以使用 projection() 獲取側檢視
projection() translate([0,0,25]) rotate([90,0,0]) example002();
連結
- 更復雜的示例 來自 Giles Bathgate 的部落格
擠壓 是使用固定橫截面輪廓建立物體的過程。OpenSCAD 提供兩個命令來從二維形狀建立三維實體:linear_extrude() 和 rotate_extrude()。線性擠壓類似於將橡皮泥透過帶有特定形狀模具的壓機擠壓。

兩種擠壓方法都作用於位於 XY 平面的(可能分離的)二維形狀。雖然作用於二維形狀和三維實體的變換可以將形狀移出 XY 平面,但在執行擠壓時,最終結果並不直觀。實際發生的是,任何三維座標(Z 座標)中的資訊都會被任何二維形狀忽略,這個過程相當於在執行擠壓之前對任何二維形狀執行隱式projection()。建議對嚴格保留在 XY 平面的形狀執行擠壓。
linear_extrude
[edit | edit source]線性擠壓是一個操作,它以二維物件作為輸入,生成三維物件作為結果。
擠壓遵循 **V** 向量,該向量預設為 **Z** 軸,為了指定自定義值,需要版本 > 2021.01。
在 OpenSCAD 中,擠壓始終在二維物件的 xy 平面投影(陰影)上執行;因此,如果您在擠壓之前旋轉或對二維物件應用其他變換,它的陰影形狀將被擠壓。
雖然擠壓沿著 **V** 向量是線性的,但有一個扭曲引數可用,它會導致物件在向上擠壓時圍繞 **V** 向量旋轉。這可以用來圍繞其中心旋轉物件,就像螺旋柱一樣,或者產生圍繞 **V** 向量的螺旋擠壓,就像豬尾巴一樣。
還包括一個縮放參數,以便可以擴充套件或收縮物件在擠壓範圍內的尺寸,從而使擠壓向內或向外擴充套件。
用法
[edit | edit source]linear_extrude(height = 5, v = [0, 0, 1], center = true, convexity = 10, twist = -fanrot, slices = 20, scale = 1.0, $fn = 16) {...}
由於向後相容性問題,您必須使用引數名稱。
height 必須為正。
v 是一個三維向量,它必須指向正 Z 方向 [注意: 需要版本 開發快照]
$fn 是可選的,它指定 linear_extrude 的解析度(數字越大,"平滑度"越高,但需要更多計算時間)。
如果對非平凡的二維形狀擠壓失敗,請嘗試設定凸度引數(預設值不是 10,但 10 是一個 "好" 的值,可以嘗試)。有關解釋,請參見下面的內容。
扭曲
[edit | edit source]扭曲是形狀擠壓的度數。設定引數 twist = 360 表示擠壓一個完整的旋轉。扭曲方向遵循左手定則。
0° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = 0) translate([2, 0, 0]) circle(r = 1);
-100° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = -100) translate([2, 0, 0]) circle(r = 1);
100° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = 100) translate([2, 0, 0]) circle(r = 1);
-500° 扭曲
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
中心
[edit | edit source]它類似於圓柱體的引數 center。如果 center 為 false,則線性擠壓 Z 範圍為從 0 到 height;如果為 true,則範圍為從 -height/2 到 height/2。
center = true
linear_extrude(height = 10, center = true, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
center = false
linear_extrude(height = 10, center = false, convexity = 10, twist = -500) translate([2, 0, 0]) circle(r = 1);
網格細化
[edit | edit source]slices 引數定義擠壓的 Z 軸上中間點的數量。它的預設值隨著 twist 值的增加而增加。顯式設定 slices 可能會提高輸出細化程度。此外,segments 引數會向擠壓的多邊形新增頂點(點),從而產生更平滑的扭曲幾何形狀。Segments 需要是多邊形片段的倍數才能產生效果(對於 circle($fn=3),為 6 或 9..;對於 square(),為 8、12..)。
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100) translate([2, 0, 0]) circle(r = 1);
特殊變數 $fn、$fs 和 $fa 也可以用來提高輸出效果。如果未定義 slices,則它的值將從定義的 $fn 值中獲取。
linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100) translate([2, 0, 0]) circle(r = 1);
縮放
[edit | edit source]在擠壓的高度上,根據此值縮放二維形狀。Scale 可以是標量或向量
linear_extrude(height = 10, center = true, convexity = 10, scale=3) translate([2, 0, 0]) circle(r = 1);
linear_extrude(height = 10, center = true, convexity = 10, scale=[1,5], $fn=100) translate([2, 0, 0]) circle(r = 1);
請注意,如果 scale 是向量,則生成的側壁可能是非平面的。使用 twist=0 和 slices 引數來避免 不對稱。
linear_extrude(height=10, scale=[1,0.1], slices=20, twist=0) polygon(points=[[0,0],[20,10],[20,-10]]);
與匯入的 SVG 一起使用
[edit | edit source]此函式的常見用法是匯入二維 svg
linear_extrude(height = 10, center = true)
import("knight.svg");
rotate_extrude
[edit | edit source]旋轉擠壓使二維形狀圍繞 Z 軸旋轉,形成具有旋轉對稱性的實體。理解此操作的一種方法是想象一個放置在 XY 平面上的陶輪,其旋轉軸指向 +Z 方向。然後將要製作的物體放置在這個虛擬陶輪上(可能延伸到 XY 平面下方,指向 -Z 方向)。要製作的物體是物體在 XY 平面上的橫截面(僅保留右側,X >= 0)。這就是將作為子元素饋送到 rotate_extrude() 以生成此實體的二維形狀。請注意,物體最初位於 XY 平面,但傾斜向上(圍繞 X 軸旋轉 +90 度)以擠壓。
由於二維形狀由 OpenSCAD 在 XY 平面渲染,因此理解此操作的另一種方法如下:使二維形狀圍繞 Y 軸旋轉以形成實體。生成的實體放置的位置使其旋轉軸位於 Z 軸上。
就像 linear_extrude 一樣,擠壓始終在二維多邊形到 XY 平面的投影上執行。應用於二維多邊形的 rotate、translate 等變換會修改二維多邊形到 XY 平面的投影,因此也會修改最終三維物體的外觀。
- 二維多邊形的 Z 方向平移對結果沒有影響(因為投影也不受影響)。
- X 方向平移會增加最終物體的直徑。
- Y 方向平移會導致最終物體在 Z 方向上發生偏移。
- 圍繞 X 軸或 Y 軸旋轉會扭曲最終物體的橫截面,因為到 XY 平面的投影也會被扭曲。
不要混淆,因為 OpenSCAD 會在 Z 方向上渲染二維多邊形,並具有一定的高度,所以二維物件(及其高度)似乎對 XY 平面具有更大的投影。但是,對於到 XY 平面的投影以及隨後的擠壓,僅使用沒有高度的底座多邊形。
它不能用來產生螺旋或螺紋。(這些可以透過 linear_extrude() 使用扭曲引數來完成。)
二維形狀**必須**完全位於 Y 軸的右側(建議)或左側。更準確地說,形狀的**每個**頂點都必須滿足 x >= 0 或 x <= 0。如果形狀跨越 X 軸,控制檯視窗中會出現警告,並且 rotate_extrude() 將被忽略。如果二維形狀接觸 Y 軸,即 x=0,則**必須**是一條接觸的直線,而不是一個點,因為一個點會導致一個厚度為零的三維物體,這是無效的,會導致 CGAL 錯誤。對於 2016.xxxx 之前的 OpenSCAD 版本,如果形狀位於負軸上,則生成的面的方向是內向的,這可能會導致意外效果。
用法
[edit | edit source]rotate_extrude(angle = 360, convexity = 2) {...}

由於向後相容性問題,您必須使用引數名稱。
- convexity : 如果對非平凡的二維形狀擠壓失敗,請嘗試設定凸度引數(預設值不是 10,但 10 是一個 "好" 的值,可以嘗試)。有關解釋,請參見下面的內容。
- angle [注意: 需要版本 2019.05] : 預設為 360。指定要掃描的度數,從正 X 軸開始。掃描方向遵循右手定則,因此負角度表示順時針掃描。
- $fa : 每個片段的最小角度(以度為單位)。
- $fs : 每個片段的最小圓周長度。
- $fn : 360 度中**固定**的片段數量。3 或更大的值會覆蓋 $fa 和 $fs
- $fa、$fs 和 $fn 必須是命名引數。點選此處瞭解更多詳細資訊。

可以使用旋轉拉伸建立一個簡單的圓環。
rotate_extrude(convexity = 10) translate([2, 0, 0]) circle(r = 1);

增加組成 2D 形狀的片段數量可以提高網格質量,但渲染時間會更長。
rotate_extrude(convexity = 10) translate([2, 0, 0]) circle(r = 1, $fn = 100);

也可以增加拉伸使用的片段數量。
rotate_extrude(convexity = 10, $fn = 100) translate([2, 0, 0]) circle(r = 1, $fn = 100);
使用引數角度(在 OpenSCAD 版本 2016.xx 中),可以建模一個鉤子。

eps = 0.01;
translate([eps, 60, 0])
rotate_extrude(angle=270, convexity=10)
translate([40, 0]) circle(10);
rotate_extrude(angle=90, convexity=10)
translate([20, 0]) circle(10);
translate([20, eps, 0])
rotate([90, 0, 0]) cylinder(r=10, h=80+eps);
也可以對使用者選擇點的多邊形進行拉伸。
這是一個簡單的多邊形及其 200 步旋轉拉伸。(注意它已經旋轉了 90 度,以顯示旋轉是如何出現的;rotate_extrude() 需要它平放)。
rotate([90,0,0]) polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );
rotate_extrude($fn=200) polygon( points=[[0,0],[2,1],[1,2],[1,3],[3,4],[0,5]] );

有關多邊形的更多資訊,請參見:2D 基本圖形:多邊形。
| 凸度 | 整數。凸度引數指定與物件相交的射線可能穿透的最大正面(或背面)數量。此引數僅在使用標準 Goldfeather 演算法時,在 OpenCSG 預覽模式下正確顯示物件時才需要,對多面體渲染(網格生成)沒有影響。
|
此影像顯示了一個凸度為 2 的 2D 形狀,因為以紅色指示的射線最多與 2D 形狀相交 4 次(2 個正面和 2 個背面)。3D 形狀的凸度將以類似的方式確定。將其設定為 10 對大多數情況都適用。一般情況下,只設置高數字可能會導致預覽渲染速度變慢。
| 高度 | 拉伸高度 |
| 中心 | 如果為真,則在拉伸後將實體居中 |
| 扭曲 | 拉伸扭曲角度(度) |
| 縮放 | 在拉伸高度上,按此值縮放 2D 形狀。 |
| 切片 | 類似於特殊變數 $fn,但不會傳遞給子 2D 形狀。 |
| 段 | 類似於切片,但在多邊形的段上新增點,而不會改變多邊形的形狀。 |
使用 import() 和拉伸模組,可以將從 DXF 檔案中讀取的 2D 物件轉換為 3D 物件。另請參見2D 到 3D 拉伸。
從 DXF 檔案匯入的 2D 物件的線性拉伸示例。
linear_extrude(height = fanwidth, center = true, convexity = 10) import (file = "example009.dxf", layer = "fan_top");
從 DXF 檔案匯入的 2D 物件的旋轉拉伸示例。
rotate_extrude(convexity = 10) import (file = "example009.dxf", layer = "fan_side", origin = fan_side_center);
Inkscape 是一個開源繪圖程式。有關將 2d DXF 圖紙從 Inkscape 傳輸到 OpenSCAD 的教程,請參見此處
- http://repraprip.blogspot.com/2011/05/inkscape-to-openscad-dxf-tutorial.html(非常簡單,需要路徑段為直線)
- http://tonybuser.com/?tag=inkscape(更復雜,涉及轉換為 Postscript)
- http://bobcookdev.com/inkscape/inkscape-dxf.html(更好的 DXF 匯出,對貝塞爾曲線的原生支援)
- http://www.bigbluesaw.com/saw/big-blue-saw-blog/general-updates/big-blue-saws-dxf-export-for-inkscape.html(甚至更好的支援,截至 2014 年 10 月 29 日,請參見注冊視窗下面的連結。注意:截至 2015 年 6 月 17 日,僅適用於 0.48.5 或更早版本的 Inkscape,因為在 0.91 中進行了重大更改。)
- http://www.instructables.com/id/Convert-any-2D-image-to-a-3D-object-using-OpenSCAD/(使用 OpenSCAD 將任何 2D 影像轉換為 3D 物件)
- http://carrefour-numerique.cite-sciences.fr/fablab/wiki/doku.php?id=projets:de_inkscape_a_openscad(法語,直接匯出 OpenSCAD 檔案)












