OpenSCAD中使用include或use引入外部庫

1、OpenSCAD 使用include或use引入外部庫

    本文英文版本參考:https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement
shell

    =============================================
函數

    OpenSCAD能夠快速引入外部庫,功能很是強大。意味着不只能夠把一些實用函數進行封裝,放到庫中進行重用,還能夠方便地共享代碼和使用第三方代碼庫。包含外部庫的代碼,可使用include和use兩個語句:spa

  • include <filename> 全部的內容跟寫在主文件同樣。設計

  • use <filename> 引入模塊和函數,但不執行其它的任何定義。code

2、OpenSCAD庫文件路徑

    庫文件默認放在設計文件目錄或者OpenSCAD的安裝目錄,可使用相對目錄指定路徑,或者直接指定絕對路徑。新版本可使用與定義的用戶庫路徑,查看 OpenSCAD_User_Manual/Libraries ,該文檔描述了包含在OpenSCAD的幾個庫文件。文檔

    注意:Windows and Linux/Mac 使用不一樣的路徑分隔符。Windows 使用 \, 譬如 directory\file.ext,其它的使用 /,譬如 directory/file.ext。這會帶來跨平臺的一些問題,但OpenSCAD 在 Windows 上能正確地處理 /,因此在全部文件中include or use使用 / 可以工做在全部的平臺get

3、使用include方法包含文件

    使用 include <filename> 容許缺省變量在庫中指定,這些缺省值可被主文件的代碼覆蓋。openscad 變量在運行期間只能是一個值,當給了多個賦值時將至採用最後一次的值,當變量第一次建立時被賦值。當在庫中賦值時, 後續改變缺省值的variables ,必須在include以前被賦值,參考下面第二個例子。class

    建立一個Ring的庫文件 (定義一個函數而且提供一個例子):變量

    ring.scad:module

module ring(r1, r2, h) {
     difference() { 
         cylinder(r = r1, h = h);
         translate([ 0, 0, -1 ]) 
         cylinder(r = r2, h = h+2);
     } 
} 

ring(5, 4, 10);

    Includ該庫:

include <ring.scad>; 
rotate([90, 0, 0]) 
ring(10, 1, 1);

4、使用use方法引入函數和模塊

    只顯示旋轉的環,使用use方法:

use <ring.scad>; 
rotate([90, 0, 0]) 
ring(10, 1, 1);

    若是使用use 方法,請確保將use語句放在文件的開始,至少不要放在module裏面!

    下面的代碼能夠工做:

 // a.scad  
use <ring.scad>;  
module a() {
    ring();  
}

    下面的用法將會引發語法錯誤:

 //a.scad
 module a() {
    use <ring.scad>;
    ring();
  }

    在 include 中的缺省變量能夠被覆蓋,例如:

lib.scad

i=1; 
k=3; 
module x() {
     echo("hello world");
     echo("i=",i,"j=",j,"k=",k); 
}

hello.scad

j=4; 
include <lib.scad>; 
x(); 
i=5; 
x(); 
k=j; 
x();

    產生的輸出結果以下:

ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", 4 
ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", 4 
ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", 4

    可是,若是將 j=4; 放在include以後將會失敗,產生的輸出結果以下:

ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", undef 
ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", undef 
ECHO: "hello world" 
ECHO: "i=", 5, "j=", 4, "k=", undef
相關文章
相關標籤/搜索