本文英文版本参考:https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement
=============================================
OpenSCAD可以快速引入外部库,功能非常强大。意味着不仅可以把一些实用函数进行封装,放到库中进行重用,还可以方便地共享代码和使用第三方代码库。包含外部库的代码,可以使用include和use两个语句:
include <filename>
所有的内容跟写在主文件一样。
use <filename>
引入模块和函数,但不执行其它的任何定义。
库文件默认放在设计文件目录或者OpenSCAD的安装目录,可以使用相对目录指定路径,或者直接指定绝对路径。新版本可以使用与定义的用户库路径,查看 OpenSCAD_User_Manual/Libraries ,该文档描述了包含在OpenSCAD的几个库文件。
注意:Windows and Linux/Mac 使用不同的路径分隔符。Windows 使用 \, 譬如 directory\file.ext,其它的使用 /,譬如 directory/file.ext。这会带来跨平台的一些问题,但OpenSCAD 在 Windows 上能正确地处理 /,所以在所有文件中include or use使用 / 能够工作在所有的平台。
使用 include <filename>
允许缺省变量在库中指定,这些缺省值可被主文件的代码覆盖。openscad 变量在运行期间只能是一个值,当给了多个赋值时将至采用最后一次的值,当变量第一次创建时被赋值。当在库中赋值时, 后续改变缺省值的variables ,必须在include之前被赋值,参考下面第二个例子。
创建一个Ring的库文件 (定义一个函数并且提供一个例子):
ring.scad:
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);
只显示旋转的环,使用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