OpenSCAD 使用者手冊/開發中
本節包含有關正在進行的工作的文件,這些工作作為 OpenSCAD 快照版本中的實驗功能可用,或者尚未完全整合,並掛起在 分支 或 拉取請求 中,位於 OpenSCAD github 儲存庫。
此處列出的資訊主要旨在幫助使用和測試實驗功能的人員提供反饋。在這些功能正式釋出之前,API 和功能行為可能會發生變化。
注意:如果此處提到的功能已包含在快照版本中,通常還需要在“首選項”對話方塊中啟用該功能!
roof() 在 2D 子多邊形上生成 45° 的倒角。它是透過沃羅諾伊或直線點網格生成構建的。
roof(method = ["straight" | "voronoi"], convexity = N) { children };
- 引數:
- 方法
- "straight" 或 "voronoi"。 "voronoi"(預設)設定在多邊形角為凹角時生成圓形曲線。對於凸多邊形,"straight" 和 "voronoi" 之間沒有區別。
- 凸度
- 整數。凸度引數指定與物件相交的光線可能穿過的最大面數。此引數僅在 OpenCSG 預覽模式下正確顯示物件時才需要。它對多面體渲染沒有影響。對於顯示問題,在大多數情況下將其設定為 10 應該可以正常工作。
- 方法
default values: roof() square(10); yields: roof(method = "voronoi", convexity = 1) square(10);
示例:斜面文字
$fa=1; $fs=0.4;
intersection() {
cube([100,100,2],true);
scale([1,1,3]) roof(convexity=6) text("Wow");
}
textmetrics() 返回有關文字大小和位置的資訊,如果按照其引數指定的佈局,則會將這些資訊應用於文字。
引數
textmetrics() 的引數與 text() 的引數完全相同。
返回值
textmetrics() 的返回值是一個具有以下屬性的物件
position 一個 [x,y] 對,給出完全包圍文字的最小框的左下角。
size 一個 [x,y] 對,給出該框的大小。
ascent 文字基線到文字最高點之間的垂直距離(通常為正數)。
descent 文字基線到文字最低點之間的垂直距離(通常為零或負數)。
offset 一個 [x,y] 對,給出從原點到文字基線起點的距離。此值通常為 [0,0],但在使用非預設對齊方式時可能是非零值。
advance 一個 [x,y] 對,給出從此文字的起點到後續文字的起點的距離。通俗地說,它表示在開始下一段文字之前筆應該移動多遠。此值僅在預設對齊方式(水平文字左/基線對齊和垂直文字中心/頂部對齊)下直接有用。
注意:與任何陣列一樣,您可以使用類似物件的 ".x" 或 ".y" 來引用 [x,y] 對中的兩個條目。因此,您可以引用 obj.size[0] 或 obj.size.x 來獲取文字的 X 維度。

示例輸出(重新格式化以提高可讀性)
ECHO: {
position = [2.2784, -5.7728];
size = [87.0362, 24.8832];
ascent = 19.1104;
descent = -5.7728;
offset = [0, 0];
advance = [89.5186, 0];
}
示例
echo(textmetrics(text="A",size=10));
fontmetrics() 返回有關指定字型和大小的資訊。
fontmetrics() 的引數是大小和字型名稱。
引數
size 字型大小 font 字型名稱
返回值
fontmetrics() 的返回值是一個具有以下屬性的物件
nominal 一個具有 ascent 和 descent 屬性的物件,描述字型的“通常”上升和下降。對於大多數字體,這將是大寫字母的上升和帶下降字母的小寫字母的下降。
max 一個具有 ascent 和 descent 屬性的物件,描述字型的最大上升和下降。
interline 作為正數給出字型的設計行間距。
font 一個具有 family 和 style 成員的物件,給出所選字型的名稱和樣式。如果指定的字型不可用,或者如果指定了“sans”或“serif”之類的通用名稱,或者僅指定了樣式,則這些名稱可能與提供的名稱不同。
模組引用使用模組字面量進行初始化。在以下程式碼段中,my_cube 是模組引用,module cube([2,3,4]) 是模組字面量。模組字面量是一種表示式,其語法特徵是在其字首使用module關鍵字。
有多種方法可以定義模組引用,具體取決於您想要做什麼。
在此語法中,您完全按照希望輸出的方式定義模組。
// Create a reference to a cube module
my_cube = module cube([2,3,4]);
|
以上程式碼建立了變數my_cube,但沒有例項化它,因此圖形視窗中不會有任何輸出。要例項化模組,您可以使用與模組一起使用的現有語法。
// Instantiate the module through the module reference
my_cube();
|
在這種變化中,模組引用的名稱只是模組的另一個名稱。
my_cylinder = module cylinder;
|
要例項化模組,別名採用與它所引用的模組完全相同的引數。
my_cylinder(h=20, r=10, center=true);
|
在另一種形式中,您向module_literal提供引數。這些引數將轉發到原始模組。
my_cylinder = module(height) cylinder(h = height, r=10, center=true);
|
在這種情況下,您使用修改後的引數呼叫引用。
my_cylinder(20);
|
在最終形式中,您可以建立一個匿名module_literal並將引用初始化為它。
(請注意,在此形式中,在結束花括號之後必須有一個分號)
my_shapes = module {
cube(2,center = true);
translate([5,0,0])
sphere(1,center = true);
};
|
可以以通常的方式例項化模組。
my_shapes();
|
當然,匿名模組形式也可以接受引數。
my_rotated_square = module ( r, s) { rotate(r) square(s);};
|
模組引用以通常的方式例項化。
my_rotated_square(45,10);
|
模組文字可以儲存在陣列中並從函式中返回。在這些情況下,在呼叫它們之前將它們分配給符號可能會很不方便。您可以透過在例項化引數之前將解析為module_literal的表示式括在括號中來例項化它。
//-------------
// n is an integer index between 0 and 3
// choose_shape returns the shape given by the index
function choose_shape(n) =
let (ar = [
module cube([5,20,30]),
module sphere(r = 6 , $fn = 20),
module cylinder(d = 15, h = 20, $fn = 30)
])
ar[n];
//--------------
// instantiate the chosen module
(choose_shape(2))(); // choose the cylinder
|
有關module_literals和模組引用的更高階用法,請參閱https://github.com/kwikius/openscad/tree/module_literal_v3/examples/ModuleLiterals
OpenSCAD中渲染幾何體的快取資料僅限於應用程式的生命週期。此功能為渲染幾何體的持久儲存提供瞭解決方案。所有渲染的幾何體都使用boost序列化庫進行序列化,並根據使用者偏好推送到本地檔案系統快取或Redis資料庫中。
- 下載並安裝Redis資料庫
- 從以下地址下載並安裝Hiredis 0.14.1或更高版本,並進行構建:,構建並安裝它。
- 此功能的原始碼尚未合併。它在此PR中可用https://github.com/openscad/openscad/pull/3316。克隆並構建此PR。
- 啟動Redis伺服器,並記下其配置檔案中的IP地址、埠號和密碼(如果有)。
- GUI模式:開啟首選項對話方塊並移動到高階選項卡。啟用使用Redis的持久快取複選框。填寫配置詳細資訊並關閉首選項對話方塊。

- CLI模式:OpenSCAD添加了一個新的選項cache。在Redis的情況下,此選項的使用方法如下所示。
example: ""--cache=redis,127.0.0.1,6379,foobared""
- 就是這樣,現在OpenSCAD已準備好使用Redis進行快取。
- GUI模式:開啟首選項對話方塊並移動到高階選項卡。啟用本地快取複選框。
- CLI模式:這是cache選項的另一個變體。此選項的使用方法如下所示。
example: ""--cache=file""
- 就是這樣,現在OpenSCAD已準備好使用本地檔案系統進行快取。

