文档章节

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

openthings
 openthings
发布于 2015/04/07 10:09
字数 813
阅读 365
收藏 0

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


© 著作权归作者所有

共有 人打赏支持
openthings
粉丝 261
博文 972
码字总数 514168
作品 1
东城
架构师
OpenSCAD使用总结-中文

OpenSCAD是用程序的方式生成模型,搞软件的人应该很熟悉这种方式,但习惯交互式造型设计的就不用看这个了。创建模型的方法就像是用脚本语言编写一段程序,然后编译,总体感觉简单、便捷、易学...

openthings
2015/01/29
0
0
UbuntuKylin15.04编译OpenSCAD源码

OpenSCAD(http://www.openscad.org)是一个简单高效的三维建模软件,使用模型描述脚本进行建模,使用CGAL引擎进行几何体的空间布尔运算。这里介绍其源码编译方法,使用UbuntuKylin15.04. 把下...

openthings
2015/08/03
0
0
OpenSCAD三维造型设计语言

cube Creates a cube at the origin of the coordinate system. When center is true the cube will be centered on the origin, otherwise it is created in the first octant. The argumen......

openthings
2015/02/11
0
0
OpenSCAD、Blender和Textmate\SublimeText遇见后发生的一切...

TextmateSublimeText是编码极客们喜爱的玩具。OpenSCAD可以用MDL(机械定义语言)的方式来构建三维几何对象,而Blender除了交互三维建模之外,也支持以Python来构建几乎任何几何对象。 现在,这...

openthings
2015/03/13
0
1
OpenSCAD 2015.03的大变化,更方便了。

OpenSCAD 2015.03出来了,有几个大的变化: 1、增加工具按钮,操作起来更方便,尤其是在Mac OS X的窗口全屏模式下。 2、坐标的标尺显示尺寸的刻度,这个对3D打印的模型设计很方便。 3、代码编...

openthings
2015/03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bytom资产发行与部署合约教程

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 发行资产 在比原链上发行资产比较方便快捷,使用节点的dashboard图形界面...

比原链Bytom
17分钟前
0
0
Ext ComboBox 实现下拉多选,全选,反选

Ext ComboBox下拉选中-全选反选逻辑处理 Ext ComboBox 实现下拉多选,全选,反选 方法一: 代码 var me = this;var isMultiSelect = true;//是否设置为下拉多选me.selectValues = [];//保存...

javaART
20分钟前
0
0
Swoole Windows 版(4.2.1)

https://pan.baidu.com/s/1uTm77_cp4kn0_xMgO1DpIw Swoole Windows 版(内部版本,swoole-4.2.1,php-7.1,必须为64位系统,Win7或更高版本)。 解压后,将 $dir/bin 目录,设置到 系统的环境...

老查
23分钟前
0
0
美团点评上市受追捧,成中国第四大互联网企业

从建立到上市,蔚来用了不到4年,拼多多3年,趣头条更是仅用了2年3个月。在这波中概股上市浪潮中,等待了漫长8年的美团点评也终于迎来登陆资本市场的时刻。20日上午,美团创始人兼CEO王兴终于...

Mr_zebra
24分钟前
0
0
Mysql-mybatis批量插入

话不多说直接上代码吧 <insert id="batchSave" >insert into table_name (`name`,age)values<foreach collection="list" index="index" item="item" open="(" separator="," close=......

落叶清风
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部