跳轉到內容

OpenSCAD 使用者手冊/開發中

來自 Wikibooks,開放世界的開放書籍

開發中

[編輯 | 編輯原始碼]

本節包含有關正在進行的工作的文件,這些工作作為 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() 返回有關文字大小和位置的資訊,如果按照其引數指定的佈局,則會將這些資訊應用於文字。

引數

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 維度。

textmetrics() 函式返回的資訊。

示例輸出(重新格式化以提高可讀性)

 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() 返回有關指定字型和大小的資訊。

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進行快取?

[編輯 | 編輯原始碼]
  • 下載並安裝Redis資料庫
  • 從以下地址下載並安裝Hiredis 0.14.1或更高版本,並進行構建:,構建並安裝它。
  • 此功能的原始碼尚未合併。它在此PR中可用https://github.com/openscad/openscad/pull/3316。克隆並構建此PR。
  • 啟動Redis伺服器,並記下其配置檔案中的IP地址、埠號和密碼(如果有)。
  • GUI模式:開啟首選項對話方塊並移動到高階選項卡。啟用使用Redis的持久快取複選框。填寫配置詳細資訊並關閉首選項對話方塊。
OpenSCAD的持久快取
  • CLI模式:OpenSCAD添加了一個新的選項cache。在Redis的情況下,此選項的使用方法如下所示。
          example: ""--cache=redis,127.0.0.1,6379,foobared""
  • 就是這樣,現在OpenSCAD已準備好使用Redis進行快取。

如何使用本地快取?

[編輯 | 編輯原始碼]
  • GUI模式:開啟首選項對話方塊並移動到高階選項卡。啟用本地快取複選框。
  • CLI模式:這是cache選項的另一個變體。此選項的使用方法如下所示。
          example: ""--cache=file""
  • 就是這樣,現在OpenSCAD已準備好使用本地檔案系統進行快取。
華夏公益教科書