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

一、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
时间: 2024-11-09 00:31:35

OpenSCAD中使用include或use引入外部库的相关文章

Android Studio项目引入外部库注意事项(PullToRefresh)

Android Studio开发App项目时引入第三方库是个比较麻烦的事情.之前导入Volley就折腾了好久,导入下拉刷新控件PullToRefresh时又碰到了各种问题.在此记录一下,以便查阅. 一.导入PullToRefresh 1.将PullToRefresh克隆到本地 git clone https://github.com/chrisbanes/Android-PullToRefresh 2.克隆到本地后library目录复制到app同级目录下,并将名称改为PullToRefresh

Android外部库引用

库项目的结构一个库项目是一个包含了源码和资源的项目,它可以被其他的项目引用,从而让其他项目使用它包含的代码和资源.多个Android应用程序项目可以引用同一个库项目,同一个Android应用程序项目也可以引用多个库项目. 主项目:需要引入外部库的项目 子项目:被引入的项目,库项目 1. 保证子项目使用的SDK Android版本必须 <= 主应用中的版本 2. 将子项目设置为库项目 3. 在主项目中引入库项目 4. 子项目的入口Activity需要在主项目的manifest中作为普通Activi

XML配置中 引入外部property文件

新建properties配置文件 内容如下: jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/book_mybatis?user\=root&password\=root&useUnicode\=true&characterEncoding\=UTF-8 有两个属性, ①jdbc.dirverClassName ; ②jdbc.url. <!-- 导入属性配置

jsp、css中引入外部资源相对路径的问题

在jsp页面中添加base,可用相对路径: <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> 然后在<head>标签内添加base <base

jsp中的@include与jsp:include区别详解

1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include page="xxx.jsp"></jsp:include> 我们也许会使用这两种方式,但是也许很多人不名称这两种方式的区别.下面我们来看看下面的两个例子 2 开门见山引出问题 (1) /include/include.jsp <%@ page language=&

&lt;link&gt;和@import url()引入外部css文件的区别

<link>和@import url()引入外部css文件的区别:标题中的两种方式都可以引入外部css文件,关于它们的基本用法这里就不多介绍了,具体可以参阅相关阅读.相关阅读:(1).<link>标签可以参阅HTML的<link>标签一章节.(2)[email protected] url()可以参阅css的@import url用法简单介绍一章节.下面介绍一下这两者的比较明显的区别.(1).加载机制不同,link方式是首先加载完css文件,然后再加载页面,而@impo

【html】【2】html引入外部文件js css

1>引入js 我们只是写了简单必须的html标签,从未给标签添加点击事件,这次页面添加事件. >写入html页面,可以在<head>标签内  也可以在<body>标签内 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>小娜娜</title> 5 <script type="text/javascript"> 6 document.writ

辛星与您彻底分析PHP中的include和require等的区别

首先说一下require吧,我们知道如果它引入的文件不存在,将会导致程序无法继续执行,因此它通常放在程序的最前面,通常是一些特别重要的部分,比如连接数据库库,比如加载配置文件,比如引用核心函数库等等. 然后说一下include把,它引入成功与否并不重要,因此它和html的特点很接近,可以用于程序的开头,当然很多时候我们是需要引用的时候才include进来,这样,它的位置也就更加随意一些,可以放在中间. 还有一个include_once,它的开销比include 大得多,为什么呢,因为它会检测该文

JSP中动态INCLUDE与静态INCLUDE的区别

动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数. 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %> 下面非常详细地解析了有关JSP动态INCLUDE和