一、OpenSCAD 使用include或use引入外部库
本文英文版本参考:https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement
=============================================
OpenSCAD可以快速引入外部库,功能非常强大。意味着不仅可以把一些实用函数进行封装,放到库中进行重用,还可以方便地共享代码和使用第三方代码库。包含外部库的代码,可以使用include和use两个语句:
include <filename>
所有的内容跟写在主文件一样。use <filename>
引入模块和函数,但不执行其它的任何定义。
二、OpenSCAD库文件路径
库文件默认放在设计文件目录或者OpenSCAD的安装目录,可以使用相对目录指定路径,或者直接指定绝对路径。新版本可以使用与定义的用户库路径,查看 OpenSCAD_User_Manual/Libraries ,该文档描述了包含在OpenSCAD的几个库文件。
注意:Windows and Linux/Mac 使用不同的路径分隔符。Windows 使用 \, 譬如 directory\file.ext,其它的使用 /,譬如 directory/file.ext。这会带来跨平台的一些问题,但OpenSCAD 在 Windows 上能正确地处理 /,所以在所有文件中include or use使用 / 能够工作在所有的平台。
三、使用include方法包含文件
使用 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方法:
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
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/396757