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

原创
2015/04/07 10:09
阅读数 1.4K

一、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


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部