OpenSCAD 使用者手冊/自定義器
[注意: 需要版本 2019.05]
自定義器功能為編輯模型引數提供了圖形使用者介面。使用此功能,無需編輯程式碼即可更改引數/變數的值。程式設計師可以為給定模型建立模板,並進一步自定義這些模板以適應不同的需求/使用者。還可以儲存一組引數值,這實際上儲存了特定模型的一個變體。
如果未顯示自定義器面板,請使用選單切換視窗 > 隱藏自定義器使其可見。
自定義器顯示滿足以下條件的所有變數
- 變數在主檔案中分配。自定義器不會顯示透過include和use引入的檔案中的變數(儘管使用include,它們仍然可以在呼叫指令碼中引用)。
- 變數具有簡單的文字值 - 字串、數字或布林值 - 或最多四個數字文字的列表。
- 變數未在“隱藏”部分中分配,如僅包含註釋/* [Hidden] */的行所定義(詳細資訊如下)。
- 賦值語句必須出現在第一個{語法元素之前。例如,一些指令碼在頂部包含一個空模組,僅用於此目的
module __Customizer_Limit__ () {} // Hide following assignments from Customizer.
debug_mode = false;
因為它出現在{之後,所以自定義器不會顯示變數debug_mode。這是一種過時的結束可自定義引數列表的方法 - 註釋/* [Hidden] */現在被認為是最佳實踐。
注意:可以輸入不包含{字元的模組或函式,這不會阻止自定義器顯示後續變數。
module does_not_stop_customizer () echo("Some text");
shown_by_customizer = true; // still displayed by Customizer
如上所述,只有簡單的文字和最多四個數字的陣列可用作引數。文字示例如下
a = "Text"; b = 123; c = 456.789; d = [1,2,3,4];
表示式(即使是簡單的示例)如
e = str("String"," ","concat");
f = 12 + 0.5;
不支援作為引數。
// variable description
variable name = defaultValue; // possible values
描述註釋必須調整到原始檔的左列,沒有空格。
以下是如何在表單中定義不同型別小部件的語法

// combo box for number
Numbers=2; // [0, 1, 2, 3]
// combo box for string
Strings="foo"; // [foo, bar, baz]
//labeled combo box for numbers
Labeled_values=10; // [10:S, 20:M, 30:L]
//labeled combo box for string
Labeled_value="S"; // [S:Small, M:Medium, L:Large]
此項僅允許數字,指定以下任何一項

// slider widget for number with max. value
sliderWithMax =34; // [50]
// slider widget for number in range
sliderWithRange =34; // [10:100]
//step slider for number
stepSlider=2; //[0:5:100]
// slider widget for number in range
sliderCentered =0; // [-10:0.1:10]
請注意,這
// slider widget for number with max. value
sliderWithMax =34; // [50]
主要是為了與Thingiverse相容

Thingiverse 不支援。
//description
Variable = true;

// spinbox with step size 1
Spinbox= 5;
// spinbox with step size 0.5
Spinbox= 5.5; // .5

注意:文字框示例僅在 2021.01 版本中有效,在未來版本中可能無效!
// Text box for string
String="hello";
// Text box for string with length 8
String="length"; //8

//Spin box box for vector with less than or equal to 4 elements
Vector2=[12,34];
Vector3=[12,34,45];
Vector4=[12,34,45,23];
您還可以為向量設定範圍
VectorRange3=[12,34,46]; //[1:2:50]
VectorRange4=[12,34,45,23]; //[1:50]
一些理想的自定義約束當前不支援。
- 多行文字框。
- 直接可編輯的(非旋鈕框)數值
SerialNumber = 0; //[::non-negative integer]
Offset = 10.0; //[::float]
引數可以分組到選項卡中。此功能允許將相關引數關聯到組中。語法與 Thingiverse 選項卡規則非常相似。要建立選項卡,請使用如下所示的多行塊註釋
/* [Tab Name] */
也可以,但不推薦
/* [Tab] [Name] */
三個選項卡名稱具有特殊功能;
全域性選項卡中的引數始終顯示在每個選項卡上,無論選擇哪個選項卡。全域性引數不顯示任何選項卡;它們出現在所有選項卡中。
隱藏選項卡中的引數(首字母大寫)永遠不會顯示。甚至不顯示選項卡。這可以防止 Thingiverse 或 OpenSCAD 自定義器未引數化的全域性變量出現在自定義器介面或小部件中。包含是為了與 Thingiverse 相容。
您可以在隱藏組下有多個段。另請參閱 #hidden_parameters
不在任何選項卡下的引數將在名為“引數”的選項卡下顯示。在 Thingiverse 中,這些引數列出時沒有選項卡。

/* [Drop down box:] */
// combo box for number
Numbers=2; // [0, 1, 2, 3]
// combo box for string
Strings="foo"; // [foo, bar, baz]
//labeled combo box for numbers
Labeled_values=10; // [10:L, 20:M, 30:XL]
//labeled combo box for string
Labeled_value="S"; // [S:Small, M:Medium, L:Large]
/*[ Slider ]*/
// slider widget for number
slider =34; // [10:100]
//step slider for number
stepSlider=2; //[0:5:100]
/* [Checkbox] */
//description
Variable = true;
/*[Spinbox] */
// spinbox with step size 1
Spinbox = 5;
/* [Textbox] */
// Text box for string
String="hello";
/* [Special vector] */
//Text box for vector with less than or equal to 4 elements
Vector1=[12]; //[0:2:50]
Vector2=[12,34]; //[0:2:50]
Vector3=[12,34,46]; //[0:2:50]
Vector4=[12,34,46,24]; //[0:2:50]
/* [Hidden] */
debugMode = true;
此功能允許使用者儲存所有引數的值。然後可以透過命令列重用JSON引數值。
openscad -o model-2.stl -p parameters.json -P model-2 model.scad
openscad -o <output-file> -p <parameteric-file (JSON File) > -P <NameOfSet> <input-file SCAD file >
- -p 用於指定儲存引數的輸入JSON檔案。
- -P 用於指定JSON檔案中寫入的引數集的名稱。
JSON檔案以以下格式編寫
{
"parameterSets":
{
"FirstSet": {
"Labeled_values": "13",
"Numbers": "18",
"Spinbox": "35",
"Vector": "[2, 34, 45, 12, 23, 56]",
"slider": "2",
"stepSlider": "12",
"string": "he"
},
"SecondSet": {
"Labeled_values": "10",
"Numbers": "8",
"Spinbox": "5",
"Vector": "[12, 34, 45, 12, 23, 56]",
"slider": "12",
"stepSlider": "2",
"string": "hello"
}
},
"fileFormatVersion": "1"
}
{
"parameterSets":{
"set-name ":{
"parameter-name " :"value ",
"parameter-name " :"value "
},
"set-name ":{
"parameter-name " :"value ",
"parameter-name " :"value "
},
},
"fileFormatVersion": "1"
}
透過GUI,您可以使用下面解釋的自定義器中的預設部分輕鬆應用和儲存JSON檔案中的引數。
在自定義器中,第一行選項如下
- 自動預覽:如果選中,則在您更改自定義器中的任何引數時,模型的預覽會自動更新,否則您必須在更新自定義器中的引數後單擊預覽按鈕或按F5。
- 顯示詳細資訊
- 顯示詳細資訊:如果選擇,則引數的描述將顯示在引數名稱下方。
- 內聯詳細資訊:如果選擇,則引數的描述將顯示在引數名稱旁邊。較長的描述會被截斷。此選項是在垂直空間使用和保留部分描述之間的折衷方案。
- 隱藏詳細資訊:詳細資訊被抑制,但您仍然可以透過將游標懸停在輸入小部件上檢視描述。
- 重置按鈕:單擊時,它會將所有引數的輸入小部件的值重置為SCAD檔案中提供的預設值。
接下來是預設部分:它包含四個按鈕
- 組合框
- 用於選擇要使用的引數集。
- + 按鈕
- 新增新的引數集。
- - 按鈕
- 用於刪除組合框中選擇的集。
- 儲存預設按鈕
- 儲存/覆蓋當前預設。
最後,在預設部分下方是您可以操作引數的地方。
您還可以參考OpenSCAD中包含的兩個示例以瞭解更多資訊
- Parametric/sign.scad
- Parametric/candlStand.scad
您可以透過修改JSON檔案以符合上述格式並定義自己的變數來手動建立資料集。載入資料集時,**僅**修改資料集中定義的引數,其他引數**不會**設定為預設值。這允許建立由修飾符組成的部分資料集,而不是完整的資料集。
屬於隱藏組的變數儲存在JSON檔案中,但**不會**從JSON檔案中檢索。
含義:如果將變數從隱藏組移動到其他組,它也將變得適用。這允許設計人員將隱藏組用於保留變數,這些變數在未來版本中可以自定義(並分配不同的預設值),而不會破壞現有預設。
隱藏變數也可以用作“上次儲存的”指示器,可以透過手動檢視JSON檔案來讀取。
其思想是,自定義器僅修改使用者可以從自定義器UI中看到和控制的變數。
自定義器嘗試猜測合適的範圍和步長,但可能會根據您的設計意圖給出不一致的結果。例如,自定義器也將像0.0、1.0、2.0等數字視為整數。自定義器也不知道負數是否有意義。因此,建議以註釋的形式提供範圍和步長。請記住,如有疑問,使用者始終可以修改SCAD檔案。
不要猶豫限制範圍。例如,在智慧手機支架的設計中,將尺寸限制在合理的智慧手機尺寸範圍內。如果有人想將您的智慧手機支架用作平板電腦支架,他始終可以直接編輯SCAD檔案本身。此操作還會讓使用者意識到,該設計並非旨在用作平板電腦支架,並且他或她可能需要例如修改支撐結構。
旋轉框上的按鈕很小,但您可以使用滑鼠上的滾輪舒適地更改值。首先,單擊旋轉框以聚焦旋轉框。
cubeColor = [1,0.5,0]; //[0:0.1:1] sphereColor = "blue"; // [red, green, blue] echo(cubeColor); color(cubeColor) cube(); color(sphereColor) sphere();