Open SCAD CN User Manual

openSCAD-CN-user-manual

User Manual: Pdf

Open the PDF directly: View PDF PDF.
Page Count: 146 [warning: Documents this large are best viewed by clicking the View PDF Link!]

OpenSCAD 语言
1概述
1.1 标注
1.2 变量
1.2.1 矢量
1.2.1.1 选项
1.2.2 字符串
1.2.3 变量的编译时间设置,不是运行时间
1.2.3.1 例外 1
1.2.3.2 例外 2
1.1.3 获得输入
2 条件和循环函数
2.1 循环
2.2 交叉 For 循环
2.3 If 阐述
2.4 Assign 阐述
3 数学运算符
3.1 数量的算术运算符
3.2 关系运算符
3.3 逻辑运算符
3.4 条件运算符
3.5 矢量数字运算符
3.6 矢量运算符
3.7 矢量 点-积 运算符
3.8 矩阵乘法
4 数学函数
5 三角函数
6 其他的数学函数
7 字符串函数
7.1 str
7.2 Also See search()
8 基础的立体模型
8.1 cube 方形
8.2 sphere 球形
8.3 cylinder 圆柱形
8.4 polyhedron 多面体
9 转变(类似 librecad 的编辑功能)
9.1 scale 比例
9.2 resize 改变大小
9.3 rotate 旋转
9.4 translate 调动(改变位置)
9.5 mirror 镜像
9.6 multmatrix 多点矩阵分布
9.7 color 颜色
9.8 minkowski 闵可夫斯基,
9.9 hull 去壳
10 CSG Modeling CSG 模型
10.1 union 联合
10.2 difference 剪切
10.3 intersection 求交
10.4 render 穿透(渲染)
11 Modifier Characters 特征修整
11.1 Background Modifier 背景修整
11.2 Debug Modifier 调试修整
11.3 Root Modifier 根 修整
11.4 Disable Modifier 无效修整
12 Modules 模块
13 Importing Geometry 导入几何
13.1 import 导入
13.2 import_stl 导入 stl
14 Include Statement include 描述
15 Other Language Features 其他的语言特点
15.1 Special variables 特殊变量
15.1.1 $fa, $fs and $fn
15.1.2 $t
15.1.3 $vpr and $vpt
15.2 User-Defined Functions 用户自定义函数
15.3 Echo Statements echo 描述
15.4 Render 渲染
15.5 Surface 表面
15.6 Search 搜索
15.6.1 Index values return as list 索引数值返回就像列表
15.6.2 Search on different column; return Index values 搜索在不同的行,返回索引数值
15.6.3 Search on list of values 搜索在数值列表上
15.6.4 Search on list of strings 搜索在字符串列表上
15.6.5 Getting the right results 获取正确的结果 pt
(根据官方 openSCAD user manual 用户手册为基础,以及个人领悟,并非完全官方直译,仅供参考,
以官方教程为准。)
个人感觉:整体感觉模型画图的的方法就像是用 C语言编写一段程序,然后编译,编译后,在某个第三
3D2D 环境下观看到模型,甚至模型的基础组件像,方 形,圆柱,等,就像是 C语言的函数,后边
配置用括号指定参数,多参数设置像 C语言的数组,还有很多数学的调试功能,更像是 math.h 库的应用
了,如果你 编写过用 math.h 库的 C语言程序的话,这个软件对你的帮助将会更大,C语言一般输出的
就是数值,而这个软件把这些数值直接当成了 2D3D 模型的输入 参数直接用 openGLcgal, 软件转
换成视觉模型出来,而不是数据模型,而是可视模型,而软件的“功能部分”,就像 2个模型组合,联合,
区分,交集,镜像,颜色,多矩阵,等,是依赖一 个单独的 3D 模型组合软件库 openCSG 来完成的,总
体感觉简单,便捷,强悍,易学,教程完善,安装方便等特点集聚一身,不错的软件,希望更多的中国
的 机和其他的 3D 模型设计者 ,能多学和应用这个软件。
问题可以探讨
我做了一些,个人感觉应的调整,了一些数序的调整,并并把整个 OpenSCAD 语言这一
分成了 3个部分。 178121315, 其后整2部分。
序是 8~12 是第一部分部分, 171315, 是第部分。为第一部分属于画图部分,这行函
是用于生基础的件,组件,模块,而第部分是根据第一部分的基础模型基础上以编辑,
功能强大,理解译的时,就调整了序。
序,感觉理解内容有修改。
第一部分(简标,键盘,和).
部分,( 8~12) ;
第三部分,(17) && (1315);
第一部分(简标,键盘,和).
1介绍
OpenSCAD 是一个用于创建立体三CAD 的软件。免费软件,可用GNU/LinuxMSWindows
OSX
Copyright (C) 2009-2013 Marius Kintel <marius@kintel.net> and Clifford Wolf
<clifford@clifford.at>
License
This program is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later version.
Please visit this link for a copy of the license: GPL 2.0
载地址链
http://www.openscad.org/downloads.html
载地址链
不同大多数自软件,用于创建 3D 模型(如著名的应用 Blender),OpenSCAD 于艺术方面的
3D 模,而是CAD 方面。因此可能当你正在寻找一个建造 3D 械零件的应用,可能不是
你在望的你非兴趣的在电脑动画电影
OpenSCAD 不是一个交互建模。相反是在脚本文件中描述对,并呈现从脚本文件中的 3D 模型,上
面写像一个三解释。这了你(设计师)的模过程的完全控制权使您可以轻松地更改
模过程中,甚至设计所定义的配置参数
OpenSCAD 主要术:首先的立体几何(CSG,二维轮廓映射
AutoCAD DXF(qcad,librecad) 为数据交换格式二维轮廓2D 路径输出,但也可以
DXF 取设参数。DXF 件,OpenSCAD 还可以取和创建模型的 STL OFF
格式
软件类openCASCADE,:openCASCADE 是一个标准的 C++库,身就是专业CAD ;
openSCAD openCSG CGAL,个标准 C++库来完成 CAD, 主要以立体几何图像术和
openGL 渲染完成 CAD 模型。
openCSG 图形的构建立体几何用 openGL 渲染的软件库,使C++语言编写并在 windows/Linux
支持大多数.
CGAL 开源,标是以 C++库的形式提供方便,效,可的几何运算,CGAL 应用到在多方面有几
何运算需要方,如:算机图形学,学可视 算机助设计与建模,地理信息,分子生
学,学成像,机术和运动规划网格生成,数值算方法等等, 相见
http://www.cgal.org/
2OpenSCAD 第一
2.1 创建一个简单模型
2.2 打开一个已经存在的例模型
2.3 位置布(置位)模型
2.4 更改对模型的颜色
2.5 模型观看()'
2.1 创建一个简单的模型
我们第一个模型是创建一个简单的 234的立方,在 openSCAD 的编辑,输入一下命令
cube([2,3,4]);
编译和透视我们的第一个模型立方体模型可以编译和透视,(当 openSCAD 编辑在中的时敲击
F6 ,是用 CGAL 模块透视和编译模型。然后点Design-> compile, 或者直接键盘敲击 F5,表
文本输入的命令转换编译成三模型,到模型openGL 的模块。
2-1openSCAD 简单的立方体模型
File, Edit, Design, View, Help
件,编辑,设看,帮助
左侧的编辑,是 openSCAD 语言代码编辑的区
右侧上面的大块区是图像模型成区
右侧下部小块是系编译源代码语言的状态信息
最底下的状态栏显示的视图角和一些信息
2.2 打开一个已存在的例模型
打开一个或者多个模型是OpenSCAD File->open ( Ctrl+O)就可以打开一个管理窗口
择目可,可以在终端中直接输入命令打开openscad
/home/user/xxx/example004.scad 命令openscad, 件的路径或者在当前路径可直
接输入名即可。
还可以把件用 gedit, geany, leafpad, vi, nano 类的文本编辑 Text Editor 打开
然后将内容复制openSCAD 文本编辑中,
使1 example004.scad:
difference() {
cube(30, center=true);
sphere(20);
}
translate([0, 0, 30]) {
cylinder(h=40, r=10);
}
完成复制子代码敲击 F5
然后就可以预览复制代码的透视图。
你可以有三预览框架
1按住鼠左键,将动到模型,可以旋转预览部的消息栏rotate = [ 22.22 000
333], 这些信息随着你的标选的旋转方的角而改变角按住 shift 键盘可以旋转的方
2按住鼠右键,将动到模型,可以置和预览观看,消息栏translate = [ 22,
222, 333] 的参数将随着鼠标的动而改变。
3, 使标的旋转滑轮(第三)可以大和小模型,可以用+-或者按住鼠标的右键/或者
按住鼠标的第三,同时按住键盘shift ,可以大和缩放部的信息栏distance =
555, 的位置会伴随大和缩放的改变而改变。
2-2,旋转方
2-3,位置
2-4大和缩放
2.3 一个对模型 Positioning an object
我们已经看到了如何创建一个简单的立方体,我们下一段试着使用位置命令一个已经存在的立
方体动出一个同的立方体
使用例 1- 移放置一个对模型
cube([2,3,4]);
translate([3,0,0]) {
cube([2,3,4]);
}
OpenSCAD 置一个对模型
置(translate) 命令后的那里没有分号。
:那里没有分号跟随置位移命令置位移命令属于跟随的对模型。如果分号被省略
,然后置位命令的效果将会终止那么个立方体的位置将和第一个的位置是同的,重叠
的。
2.4 更改颜色到对模型
我们可以改变一个对模型的颜色源于给出的 RGB 值。传统RGB 0-255 点数使
0.0 1.0.
Usage example 1 - changing the color of an object:
使1- 改变一个对模型的颜色:
color([1,0,0]) cube([2,3,4]);
translate([3,0,0])
color([0,1,0]) cube([2,3,4]);
translate([6,0,0])
color([0,0,1]) cube([2,3,4]);
2.4.1-OpenSCAD 改变一个对模型的颜色
颜色的字可以2011.12 版本或者版本)。字就像是网页的颜色,例如:
color(“red”) cube();
版本,颜色可以用 RGB 数字来代替
color([1, 0, 0]) cube(20);
如果你想相关的命令就像是句子,然后,在句子color()就是一个”形容词“,可以描述”体“(名词)。
体就是 cube()将会创建。在句子中形容词的位置在名词面,就像:color() cube();.
translate()可以想象成一个“动”可以是体运动,就像:translate() color() cube();
接下来的代码产生的结果:
translate([6,0,0])
{
color([0,0,1])
cube([2,3,4]);
}
// notice that there is NO semicolon
// notice the semicolon is at the end of all related
F5 openCSG render
F6, CGAL render.
颜色的更改仅仅局限于预览F5),透视图模F6)支持配置的颜色。
2.5 模型
The text in its current form is incomplete.
前文本格式完善。
目录
2.5.1 表面
2.5.2 CGAL 网格
2.5.3 The OpenCSG
2.5.4 网格查
2.5.5 投影起查查
2.5.1 表面
表面看是初始模型产生,当模型代码第一透视。
CGAL 网格
CGAL 网格查看仅表在边面下的”框架“,想象埃菲尔铁塔
OpenCSG
这个看模的功能open 立体几何软件库,成的 openGL 功能的模型预览。如果 openCSG
库不可用或者显卡或者驱动不openGL,这个看将无法产生输出图形。
The grid only view
有视图显示网格线弥补的对也被称线框
线框是一个三维或物理的视觉呈现使线框模型允许底层的三模型的可视由于线
效果图是比简单和快速计算,他们经常使用的情况下,画面的帧速的(例如,当使用一
个特别复3D 模型,时系中的型外观现象)。当需要更大的图形细节
表面可以自动完成后的初始呈现线框。这允许计师快速chansolids旋转对
拖延的看法,并有更逼真rendering.The 线框格式也是非广泛应用刀具
编程 DNC(直接数字控制)机线框模型也被用来为输入 CAM算机
制造)。线框的和最现实的三个主要CAD 模型。这种建模方法,括仅定义一个对的边
线,点和线
从维http://en.wikipedia.org/wiki/Wire-frame_model
下图分看选项中,选项 View-> show edge / show axes /show crosschair,
下方的图是 openGL 看。
Show Grid. Ctrl+1.
Show Grid and Cross. Ctrl+2.
F6, the CGAL render.
3, The OpenSCAD 用户
目录
3.1 View navigation 看导视
3.2 View setup 看设置
3.2.1 Render modes 透视图模
2.1.1 OpenCSG (F9)
2.1.2 CGAL (Surfaces and Grid, F10 and F11) (表面和网格,)
3.2.2 View options 看选项
2.2.1 Show Edges (Ctrl+1) 显示
2.2.2 Show Axes (Ctrl+2) 显示
2.2.3 Show Crosshairs (Ctrl+3) 显示字准线(方位)
3.2.3 Animation 动画
3.2.4 View alignment
3.2.4 View alignment
看导视
可视面积主要使标导视:
左键动旋转视图沿轴的可视面积。保留垂
shift ,用左键动旋转视图沿垂用户。
右侧或鼠标中键移看区
缩放,有三方法:
使
右或中间的按住 Shift
+-
旋转可以使Ctrl+0。运动可以使Ctrl+ P
看设置
可视面积可以配置为使用不同的渲染方法和使用其他选项
单。这描述的可供选的方大多是使
渲染模
OpenCSGF9
OpenCSG , OpenCSG 库,用于产生的模型。使OpenGL2.0)功能,如 Z
和不说明最终网格。,它跟的对是如何合并。例如,当渲染球形凹痕在一个立方
体,它首先显卡渲染立方体,然后渲染球体,而是使Z缓冲隐藏部分的球体覆盖的立方体,
这些仅渲染部分的球体,在视觉上产生的一个立方体的球形凹痕
方法产生时结果,率工高度Example :
color("blue")
difference() {
cube(30, center=true);
sphere(20);
}
color("green")
translate([0, 0, 30]) {
cylinder(h=40, r=10);
}
说明 OpenCSG 使F9 切换到最终产生 OpenCSG 视图,
不会重新的编译源代码。你可能要使用的编译功能(F5
样式单),以重新评估源代码OpenCSG ,然后切换到
OpenCSG 视图。
CGAL (Surfaces and Grid, F10 and F11)
写的 CGAL,指到开源算几何算法库。
CGAL CGAL 库是用来基础对网格,然后使用简单的 OpenGL 显示
方法可能需要一些时间,当第一次使用一个的程序,时将有更高帧.
OpenCSGF10 F11 之前只CGAL 显示和不更新相关对,编译和使用的渲染功能(F6
在“Design”单中到)。
两种显示方法的点结合来,你可以用你的选择性部分程序在渲染功能,并使网状
OpenCSG 用。
Example 302, F10 output view:
Example 303, F11 output view:
Example 304, F12 output view:
看选项
显示Ctrl+1
CGAL OpenSCAD 间的方法差异就是用布尔代数运算立的可以看的边。。
如果显示OpenCSG CGAL 呈现以及面CGAL 甚至会出点。 CGAL
网格下,这个选项用。
选项将显示 OpenCSG CGAL 间的差异清楚然在 CGAL ,你看到无不在
属于”边.OpenCSG 不会运算显示 为这是 来确的但只个对Z
开始或
F9 output showing, not with Ctrl+1 and with Ctrl+1 both same.
F10 output view , not with Ctrl+1:
F10 output view, with Ctrl+1: showing the grid:
F12, output view, with Ctrl+1:
显示Ctrl+2
如果显示轴启用,标系的点正交的指标。外,小的指标名称显示在可
视区下角。的指示器xyz绿蓝彩色区分。
Example, Showing the coordinate axes with Ctrl+2:
显示线Ctrl+3
如果显示线用,显示行指间对角线的全标系,这是非有用的,
当对准模型中的一个特定的点,以持它屏幕居中在旋转过程中可视面积。
如果说坐90 分整个 3D 环境的话,那么线就是 45 的对模型的指示线
Example showing cross with Ctrl+3:
动画
动画”选项屏幕的动画只要 FPS Step 设置(合的值,首先,分10 100),
时间是1/StepsFPS 每秒,直到1,当一个改变的时间回到 0时,程序被重新
的用变量$t 设置为当时间。了更多有关如何使$ t, 另见 Other_Language_Features.
的动画我也做试,$t,这个函数还是明白试了一些,也没有效果,后边随着
入,会有一些领悟吧!
个人感觉这个 Animation,动画,单是 View->Animate, 仅仅是将模型的或者多个模型的组合,
应的时间段捕捉到一个 png 后多个图,以视为基础设的。
Time: 时间 ,FPS:数, Steps:, Dump Picture 图(选择或不选)
Time=FPS/Steps.
时间=1/FPS.
这个时间是对时间,而非我们用的时间。这,根据 FPS数)和 Steps(数)的参数而变换。
比如,如果 FPS 1Steps 235N那么时间就是把 1分成几分,
:
FPS:1, Steps: 2Time:就是 1/2, 第一就会显示 0.00000, 二步然后显示 0.50000,然后无限次
,FPS 1的时间间1,而这里现实Time 对的把 1分成多;
如果用的话 ,Time=FPS/Steps,的时间间,就是时间=1/FPSFPS 的数字大,
时间间FPS 的数值小,时间间越慢
:
FPS=2steps=3, 就分成 1/3, 第一0.33333, 0.66666, 第三部 0.99999时间间0.5
:
FPS=0.1, Steps=5, Time 就会依次显示 0.2000, 0.40000, 0.60000, 0.80000, 0.00000, 时间间
10 ,就是每十秒然后系自动图一,循环。
有一个 gif 设置的 FPS=0.04, Steps=4,就是1/0.04 OpenSCAD 图一
共抓4图完继续循环,行了模型的方调整,还可以看出来系自动
frame0001.png, frame0002.png, 根据数的多成,选FPS 速度的时候要根据你的
需要的效果去,这个是用 gimp 图像软件,把多个图组合成一个动gif 图像,3
换一gif 的,而不是 openscad 25 秒抓图一哈哈。如果你求的是视的话,FPS
择快一点,数量就根据视频长短而定了,很大的数字,视编辑软件有很多ogg 开源格
的比,可以试一下。
Example gif full deskscreen:
Example gif openSCAD automatic sreenshot:
看对
单项的部,部,对角线Ctrl+4Ctrl+5...Ctrl+0Ctrl + P)对看全
标系.上,下,,正面和背面对轴平行,对角线它被OpenSCAD
开始
作之前标单一下模型,表作命令在当前窗口程序下效。
Ctrl+0
对角看,看,
一般是向左旋转 45 下旋转 45 的角度查看,不之前如何的只要
View->Diagonal或者 Ctrl+0, 就会动对角线查看。
Ctrl+1 Ctrl+2, Ctrl+3,
我们在上一过了,不在多了,简单提示:
Ctrl+1, 显示网格
Ctrl+2, 显示
Ctrl+3, 显示交叉线
Ctrl+4 视图,下看模型
Ctrl+5 视图,从底上看模型
Ctrl+6 视图,从左侧向右侧看模型
Ctrl+7 视图,从右侧向左侧看模型
Ctrl+8 正视图,方观看模型
Ctrl+9 后视图,正后方观看模型
Ctrl+p
位置位中,不你把模型动到个角位置,View-> Center, 模型就会以XYZ 0点为中
,视图。
例,位置安2距离的模型,然后用不同的角度命令看,看看效果了
Example:
translate([15,15,15])
color("blue")
difference() {
cube(30, center=true);
sphere(20);
}
translate ([55,60,10])
color("green")
translate([0, 0, 30]) {
cylinder(h=40, r=10);
}
translate ([55,30,30])
color("green")
translate([0, 0, 30]) {
cylinder(h=40, r=10);
}
translate ([55,0, 60])
color("green")
translate([0, 0, 30]) {
cylinder(h=40, r=10);
}
Picture: gif, 2sec per picture, from Diagonal, Top, down, left, right, front, back view:
选项将在屏幕中间的把标中不是旋转观看)。
默认情况下,视图在透视模下,DID 距离远离希望看来更常见眼睛或相
机。当视图模改变为正交可距离将不依赖于相机间的距离(视图将模一个
距离焦距)。其是,这是很有用的结合,等上面介绍的选项,为这将导致什人会看到一个
类似的 2D 图像程图
第一部分:8~12
8 基础的立体模型
8.1 cube 方形
8.2 sphere 球形
8.3 cylinder 圆柱形
8.4 polyhedron 多面体
9 转变(类似 librecad 的编辑功能)
9.1 scale 比例
9.2 resize 改变大小
9.3 rotate 旋转
9.4 translate 调动(改变位置)
9.5 mirror 镜像
9.6 multmatrix 多点矩阵分布
9.7 color 颜色
9.8 minkowski 闵可夫斯基,
9.9 hull 去壳
10 CSG Modeling CSG 模型
10.1 union 联合
10.2 difference 剪切
10.3 intersection 求交
10.4 render 穿透(渲染)
11 Modifier Characters 特征修整
11.1 Background Modifier 背景修整
11.2 Debug Modifier 调试修整
11.3 Root Modifier 根 修整
11.5 Disable Modifier 无效修整
12 Modules 模块
基础的立体模型
方体
创建一个方体在一个点的标系。当中,方体将会在起始位置,其他的,将会立在第一个 8
间。模型的参数字是可选的如果模型是在同的序就像是配置参数一
参数
size:尺寸
十进制或者 3 位数组值列。如果一个单独的数字出,结果将会是一个方体。如果一个 3
数值出,那么数值将XYZ默认的数值是 1.
Center:
尔代数。这个定了对模型的位置。如果是(true)是,模型是位000)。否则,模型将会
置到正数的 4间以一个角000)的位置。默认的是(false)
使:
cube(size = 1, center = false);
cube(size = [1,2,3], center = true);
球体
创建一个球体在一个标系点。参数名称是可选
参数
r
十进。这个是球体的。球体的分辨率尺寸,和$fa, $fs,$fn 变量。更多的信息特殊的
变量看:其他语言特征
$fa
$fs
毫米
$fn
辨率
使例:
sphere(r = 1);
sphere(r = 5);
sphere(r = 10);
例:
// 这个将创建一个辨率的球体到 2mm ,就是把其周长平均分成 100
sphere(2, $fn=100);
图上的方来看,像是分了 50 ,不过可以了,试了把$fn1000,这时候计算机需要计算一会
儿才得出来结果,这个 cad 软件和数学的程序像关联很大,如果你用 c语言算过圆和角
的话,应该知openscad $fn 了。
$fn 后边的数值大,表辨率越算机成的速度越慢反之然。$fn 是一个可以
单独使用的,调整球体分辨率的函数。$fn 数值多,就是把其周长平均分成多少份
例:
// 创建一个 2mm 辨率的球体是这个不是用很多的小三角形在球体的支架上。
sphere(2, $fa=10, $fs=0.1);
$fa $fs 个函数是同时使用的。$fa 单独使效果,而$fs 可以单独使用,
周长以数值,单位是毫米。如果个函数结 合,$fa 可以表360 ,多一段为分辨率
如果$fa $fs 的数值,那么显示大的,如果$fa 于它的效果就是$fs 的数值,就 是周长/
$fs 的数值。
$fa $fs 的数值小,圆等分的段数多,分辨率越
圆柱体
立一个圆柱体或者体在标的点。一个单(r)成一个圆柱体,2个不同的r1, r2)
成一个形。
参数
h
十进。这个是圆柱体的高度默认数值是 1.
r1
十进。这个是体的部的默认的数值是 1.
r2
十进。这个是体的部的默认的数值是 1.
r
十进。是圆柱体的部和部一使用这个参数如果你想建立一个圆柱体。默认数值是 1.
center :
尔代数。如果 true(是)圆柱体/体的中心高围绕原点。默认的是 false,把圆/圆柱
体的(r1)置在点的位置.
$fa
数表
$fs
毫米
$fn
辨率
使例:
cylinder(h = 10, r1 = 10, r2 = 20, center = false);
cylinder(h = 10, r1 = 20, r2 = 10, center = true);
cylinder(h = 10, r=20);
cylinder(h = 10, r=20, $fs=6);
polyhedron 多面体
创建一个多面体基一系列的点和一系列的角。点列表是有的形点,角列表是如何点关
联到多面体的表面。
Parameters 参数
points
数组的点或者点(3位数组)。
triangles
数组三标点(3位数组,XYZ)。一个数字是 0为基数的点自数组点。
convexity
正整数。面的参数配置大数值在前端(后)一个射线交叉的体可能穿透。这个参数是仅仅需要
正确的显示模型在 openCSG ,而多面体有渲染效果。
Syntax example 例:
polyhedron(points = [ [x, y, z], ... ], triangles = [ [p1, p2, p3..], ... ],
convexity = N);
三 角点序:当看到外边向内的面,这个点必须。你可以从新序关或者次序参照每
一个三角的其他三位数标组合。三角的序是无形的。注你 的多面体不是左右向都是一的,
OpenSCAD 将会同时显示一个错或者崩溃以特点的序。还有,住那pN'组件
以三角数组 0基数参考的点数组组件。
Example, a square base pyramid
例,一个正方体基的:
polyhedron(
points=[ [10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], // the four points at
base
[0,0,10] ], // the apex point
triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4], // each triangle side
[1,0,3],[2,1,3] ] // two triangles for
square base
);
图形:一个简单的多面体,正方体基的
三角的点的序: 一个例是一个非常复的多面体,如何修多面体的不的方位多边形。
当 你选Throw together'观看view 单,compile (不是编译和渲染 compile
and render)你将会看到一个正面的,有方的多边形显示。不的是这个显示是不可以在
OpenCSG 预览为他干涉 OpenCSG 预览 的应用。
下方你可以看见代码和图就像一个有问题的多面体,一个问题的多边形(三角形或者组合的三角
形)会呈现色。
首先F5 可以编译,仅仅编译,compile, 其他的 F6,F7,F8,F9,F10,F11,F12 不可以
有在 Throw together 可以看到,或者视图模View->Throw
together,
// Bad polyhedron 的多面体
polyhedron
(points = [
[0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10,
60], [60, 10, 60],
[10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30,
-10, 50], [30, 10, 50]
],
triangles = [
[0,2,3], [0,1,2], [0,4,5], [0,5,1], [5,4,2], [2,4,3],
[6,8,9], [6,7,8], [6,10,11], [6,11,7], [10,8,11],
[10,9,8], [0,3,9], [9,0,6], [10,6, 0], [0,4,10],
[3,9,10], [3,10,4], [1,7,11], [1,11,5], [1,7,8],
[1,8,2], [2,8,11], [2,11,5]
]
);
:多面体有的方多边形
一个正确的多面体将会是以下代码
polyhedron
(points = [
[0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10,
60], [60, 10, 60],
[10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30,
-10, 50], [30, 10, 50]
],
triangles = [
[0,3,2], [0,2,1], [4,0,5], [5,0,1], [5,2,4], [4,2,3],
[6,8,9], [6,7,8], [6,10,11],[6,11,7], [10,8,11],
[10,9,8], [3,0,9], [9,0,6], [10,6, 0],[0,4,10],
[3,9,10], [3,10,4], [1,7,11], [1,11,5], [1,8,7],
[2,8,1], [8,2,11], [5,11,2]
]
);
:一个正确的多面体。
者提示
如 果你的确不明白“方”,努力识的方色的三角形,然后改变书则的参考点一直到你获得正
确的。说明,三角形([0,4,5])是一个错的, 我们修整为[4,0,5]外,你可能选Show
Edge”显示线条)View Menu”(视图单),显示一个取和数字有点和三角
形。
我们的一个例中,点是色的注,三角形是色的(色的)。转动对模型,复制
备份如果需要。这你可以轨迹
术:
是定义索引。这个的是如果你观看三角形(就像[4,0,5])自外边,你会看到
路径围绕面的中弯曲[4,0,5]以是的。弯曲[0,4,5]以是
的。同有其他的[4,0,5][5,4,0]&[0,5,4]的。如果你使基数,
你将会总是得到你的外表面(OpenSCAD 的外表面,其他程序始终使就像是外表面)。
想象它就像是手定义:
如果你一个三角形并弯曲你的手指是同序就像点一,然后你指点是外的。
多面体有一个的方的多边形
成功的描述“多面体”
* 点的定义有的点和数组在形上。
* 三角形是一系列的三角形来用点和数组。
一个点,在点列表中,是定义了三位数组,x,y,z 位置配置。点在点列表中是自动出定义符0
始使用三角形列表(0123...etc).
一个三角形,在三角形列表中,是定义选3个点(使用点定义符)画出点列表。
例如 ,triangles=[[0,1,2]]定义一个三角形第一个点(点是 0参考点)到第个点然后到第三个
点。
当看到多三角形的轮廓是,三角形必须列出 3个点以序。
转换(此章qcad 中是'编辑'单)
转换的是点(基础的点位置标)就像是字应用到转换他用不同的方法,比如
moving/rotating,或者 scaling 点。转换的联效应是使用一系列的转换命令完成最终点位
置。联效应是获得嵌套法的描述,例如:
transform() e.g. rotate([45,45,45])
transform() translate([10,20,30])
child() cube(10);
转换可以是应用一个组的使'{' & '}'符号来住子(一个组的组件),例如:
translate(0,0,-5) or the more compact translate(0,0,-5) {
{ cube(10);
cube(10); cylinder(r=5,h=10);
cylinder(r=5,h=10); }
}
就 像是 OpenSCAD 使用不同的库用,这个可以介绍一些和转换不一F5 预览的行为。传统的转
换符(translate,rotate, scale, mirror & multimatrix)使OpenGL 预览,而其他
更多的转换符,比如 resize,行的是 CGAL CSG 的表就像在 下面的对模型,
而不是仅仅转换其是可以显示符的字符,体的是'#' %' , 那里也许不是直
显示的,就像预先-改变尺寸pre-sizeed)的对模型,的后-比例(post-scale)
模型。
字的版本是不完善的。
scale(比例)
比例组件使用配置的数组。这个参数名称是可选的。
Usage Example:
使例:
cube(10);
translate([15,0,0]) scale([0.5,1,2]) color("red") cube(10);
// 立一个立方体,标位置是 10x=10,y=10,z=10,位置在起始位置 0
// 位置动到 x=15,y=0,z=0, 比例, x=0.5, y=1, z=2, 颜色是色,对应对是立方体
10),
// 得到的结果就是 x=10*0.5, y=10*1z=10*2,的立方体,位置在 1500XYZ
// 这些转换的参数必须在对模型的面,对模型在分号‘;’
resize尺寸)(更改尺寸
2013,05 后的版本够支持 resize()这个命令是设置模型的尺寸配的 x,y,z
标。
高于这个版本的软件,够支持文字颜色否则能用数字来表
Usage Example:
使例:
// resize the sphere to extend 30 in x, 60 in y, and 10 in the z directions.
// 球体(r=10),10 的球体,位置起始 0点。
// 位置,3300,颜色,色,更改尺寸到圆形扩展 30 x, 60 y, 10 z(高度)在的方
sphere(r=10);
translate([33,0,0])
color("pink")
resize(newsize=[30,60,10]) sphere(r=10);
version 1
version 2
version 3
如果 x,y,z 0,然后量是为准。
// 更改尺寸 1*1*1 的立方体到 2*2*1
// 位置0 400, 颜色
cube();
translate([3,0,0])
color("gray")
resize([2,2,0]) cube();
如果是'auto'自动的参数设置为“ture”是,将会自动比例有的 0 标的配,比如:
// resize the 1x2x0.5 cube to 7x14x3.5
// 更改尺寸1*2*0.5 立方体到 7*14*35
// 如果 auto=true),表自动
// resize([7,0,0],7:1 7x=1*7=7,y,z x的比例,7
// 结果是 x=1*7=7, y=2*7=14,z=0.5*7=3.5
cube([1,2,0.5]);
translate ([2,0,0])
color ("purple")
resize([7,0,0], auto=true) cube([1,2,0.5]);
如果'auto”自动的参数可以同使用如果你仅仅希望自动比例(auto-scale)一个单个的尺寸测量,
其他的就像。例如:
// resize to 10x8x1. Note that the z dimension is left alone.
// 改变尺寸10*8*1, 注z是单独的不改变的。
// resize([10,0,0]), 起始cube([5,4,1]), 10:5=2
// auto=[ture,ture,false]), x,y 2的比例,而 z单独的不
cube([5,4,1]);
translate([7,0,0])
color("teal")
resize([10,0,0], auto=[true,true,false]) cube([5,4,1]);
rotate (旋转)
旋转模型 a 度从起始标系统或者围绕着任意线x,或者 y,或者 z)。这个参数的
字是可选如果参数是一序配置的。
当一个旋转是配置多个线的旋转应用到以下的:x,y,z.
Usage 使:
rotate(a = deg, v = [x, y, z]) { ... }
For example, to flip an object upside-down, you might do this:
例:转一个对模型使变成部,你可以这
cylinder(h = 10, r1 = 10, r2 = 20, center = false);
translate([22,0,0])
rotate(a=[0,180,0])
color("green")
cylinder(h = 10, r1 = 10, r2 = 20, center = false);
例关将会旋转你的对模型 180 围绕'y'线
可选的参数'v'允许你设置一个任意到对模型将会旋转。
例用于任意线源旋转:
cube([33,22,11]);
rotate(a=45, v=[1,1,0])
color("green")
cube([33,22,11]);
这个例将会旋转你的对模型 45 围绕自定义的线数组[1,1,0],比如 45 围绕X45
Y线
Translate 调动(这指的是标位置的动)
调动(动)其组件到配置的数组数值。参数字是可选的。
法描述:translate(v = [x, y, z]) { ... }
例如:
// 的方体 center = true, 逻辑表述,表是“ture“0为中
// 如果方体的 center = false, 0
// 而球体不 center 是 “ture” 或者false” 是以线为中
cube(2,center = true);
color("teal")
cube(2,center = false);
translate([5,0,0])
sphere(1, $fn=50, center = true);
translate([8,0,0])
sphere(1, $fn=50, center = false);
version 1
version 2
mirror 镜像
镜像组件在一个面上围绕点。参数关mirror()是一个普通的数组对应一个面交叉围绕着起
对对模型行镜像效果。
:
mirror([ 0, 1, 0 ]) { ... }
mirror([1,0,0]);
mirror([1,1,0]);
mirror([1,1,1]);
应用例:
translate([3,00])
rotate([0,0,10])
cube([3,2,1], center = false);
mirror([0,0,1])
translate([3,0,0])
rotate([0,0,10])
color("magenta")
cube([3,2,1], center = false);
// 将会自动变组不同模型
// mirror([1,0,0]),
// mirror([0,1,0]),
// mirror([0,0,1])
translate([3,00])
rotate([0,0,10])
cube([3,2,1], center = true);
mirror([0,0,1])
translate([3,0,0])
rotate([0,0,10])
color("slateblue")
cube([3,2,1], center = true);
version 1
version 2
version 3
Multmatrix 多矩阵
倍增的几何是有的组件用出的 4*4 转换数组矩阵。
(这一章我时还有应用成功,正在试)
法描述: multmatrix(m = [...]) { ... }
例(转换[10,20,30]):
multmatrix(m = [ [1, 0, 0, 21],
[0, 1, 0, 20],
[0, 0, 1, 30],
[0, 0, 0, 1]
]) cylinder(20);
Example (rotates by 45 degrees in XY plane and translates by [10,20,30]):
angle=45;
multmatrix(m = [ [cos(angle), -sin(angle), 0, 10],
[sin(angle), cos(angle), 0, 20],
[0, 0, 1, 30],
[0, 0, 0, 1]
]) union() {
cylinder(r=10.0,h=10,center=false);
cube(size=[10,10,10],center=false);
}
color 颜色
显示子组件使用设置的 RGB 颜色 + alpha 数值。 这个仅用F5 CGAL 预览,而 STL F6 目前
颜色。alpha 数值将会默认1.0(不透的)如果你有设置。
:
color([r, g, b, a]) { ... }
的是 r, g, b 一个数值会局限于浮点数的范围{0.0 ~1.0},其他传统的正整数{0~255}.
你可以配置数值就像是函数一, 比如, RGB 正整数在{0~255}可以使用:
: color([ R/255, G/255, B/255 ]) { ... }
就像 2011.12 版本,颜色同可以选择名字不是感的情况,比如,创建一个色的球体,你可
使用下面的代码例:
color("red") sphere(5);
Alpha 可以和字的颜色一起使,例:(alpha 是表的,仅仅输入数字 0.0
1.0)
color("Blue",0.5) cube(5);
The available color names are taken from the World Wide Web consortium's SVG
color list. A chart of the color names is as follows, (note that both spelling
of grey/gray including lategrey/slategray etc are valid):
可以使用的颜色的名称World Wide Web 维网会的颜色列表。
一个图表用颜色的字如下,(注不可以同时grey/gray slategray/slategray 等等
类似的错
一个三的多颜色的正弦波
Here's a code fragment that draws a wavy multicolor object
代码数据包片段用于生成一个多颜色的线模型,代码
for(i=[0:36])
{ for(j=[0:36])
{ color([0.5+sin(10*i)/2,0.5+sin(10*j)/2,0.5+sin(10*(i+j))/2])
translate([i,j,0])
cube(size=[1,1,11+10*cos(10*i)*sin(10*j)]);
}
}
-1<=sin(x)<=1 ,然后 0<=(1/2 + sin(x)/2)<=1, 允许 for 循环 RGB 组件指定到颜色逗留
{0,1}区间。关网页颜色“的图表于维
Minkowski 闵可夫斯基
A box and a cylinder
一个和一个圆柱体
Minkowski sum of the box and cylinder
闵可夫斯基方体和圆柱体的效果
显示闵可夫斯基点。
使:
Say you have a flat box, and you want a rounded edge. There are many ways to do
this, but minkowski is very elegant. Take your box, and a cylinder:
你有一个平坦,你想要一个圆的边。那么许多的方法可以是闵可夫斯基是非优美的。
一个方体,和一个圆柱体。
$fn=50;
cube([10,10,1]);
cylinder(r=2,h=1);
Then, do a minkowski sum of them:
$fn=50;
minkowski()
{
cube([10,10,1]);
cylinder(r=2,h=1);
}
组合实例:
//first
$fn=50;
cube([10,10,1]);
cylinder(r=2,h=1);
// Then, do a minkowski sum of them:
$fn=50;
translate([15,0,0])
color("teal")
minkowski()
{
cube([10,10,1]);
cylinder(r=2,h=1);
}
hull
个圆柱体
体的个圆柱体
显示体的
使:
hull() {
translate([15,10,0]) circle(10);
circle(10);
}
10CSG Modeling CSG 模型
1.10.1 union 联合
1.10.2 difference
1.10.3 intersection 求交
1.10.4 render 穿透(渲染)
11Modifier Characters 特征修整
1.11.1 Background Modifier 背景修整
1.11.2 Debug Modifier 调试修整
1.11.3Root Modifier 根 修整
1.11.4Disable Modifier 无效修整
12Modules 模块
CSG 模型
union 联合
穿件一个联合到有的点。这个是求和 sum 有的点。
Usage example:
应用例:
union() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
声明:联合是一个的时是不可以用的。不过这个是的,比如,在分到一个首先子
到一个面。
difference
去第个(有的更的)第一个。
Usage example:
应用例:
difference() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
intersection 求交
立一个求交到有的点。这个仅重叠部分。
Usage example:
例:
intersection() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
render 穿透渲染
总是CSG 模型用这个OpenCSG 预览)。面参数配置大的数值是前侧(后
)一个射线交叉到标对穿透。这个参数是仅仅需要正确的显示OpenCSG ,对
变体穿透渲染无效。
Usage example:
render(convexity = 1) { ... }
我反试了半天如何使用这个函数。
CSG 模型函数应用例:
//组合部的有基础模型
union() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
// 第一个去第个(或者更多个)
//重叠部分都被
translate([0,-5,0])
difference() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
//保留重叠部分
translate([-4,0,0,])
render(convexity = 1 ) {
intersection() {
cylinder (h = 4, r=1, center = true, $fn=100);
rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
}
Version 1
version 2
修整字符
修整字符是用更改其点的出现或者行为的某个特殊符号。他是应用调试些可以用
出的特殊模型,渲染中或者包容或者排斥
理解:
就像是 OpenSCAD 用的不同的软件库到应用的量,这个可以介绍一些不一的效果到 F5 预览行为的转
换。传统的转换(位置动,旋转,比例,镜像和多个矩阵)是应用 OpenGL 出来预览的,其他的更
的转换,比如,尺寸大小, 一个 CGAL ,行为就像 CSG 下面的模型,不是仅
仅转换。求其是这个修整字符可以显示效果。,体比如”#”, “%”, 度也许不能
显示直观的,就像是预从定义尺寸的模型,不过,的是后比例的模型。
:颜色的改变触发到字符修整将会仅仅显示在“Compile””编译“模,不会在”compile and
Render(CGAL)” 。(参颜色
Background Modifier 背景修整
视这个叉到正的渲染过程,画一个有透明灰色的模型(以的转换是然应用到点的在这个
叉上)
应用:
% { ... }
代码:
difference() {
// start objects
cylinder (h = 4, r=1, center = true, $fn=100);
// first object that will subtracted
% rotate ([90,0,0]) cylinder (h = 4, r=0.3, center = true, $fn=100);
// second object that will be subtracted
% rotate ([0,90,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
背景修整
Debug Modifier 调试修整
这个(大括号的模型)就像普通的一渲染过程,是同画一个有修整的转换色。
Usage example:
# { ... }
Example:
difference() {
// start objects
cylinder (h = 4, r=1, center = true, $fn=100);
// first object that will subtracted
# rotate ([90,0,0]) cylinder (h = 4, r=0.3, center = true, $fn=100);
// second object that will be subtracted
# rotate ([0,90,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
OpenScad 调试修整
Root Modifier 根修整
视设剩余部分,用这个就像是设的根。
:
! { ... }
应用例:(一个组合和单个模型行了根命令”的可以理解为仅显示剩余
的部分)
difference() {
// start objects
cylinder (h = 4, r=1, center = true, $fn=100);
// first object that will subtracted
# rotate ([90,0,0]) cylinder (h = 4, r=0.3, center = true, $fn=100);
// second object that will be subtracted
# rotate ([0,90,0]) cylinder (h = 4, r=0.9, center = true, $fn=100);
}
translate([5,0,0])
color("steelblue")
union() {
color("pink")
cube([2,1,3]);
color("seagreen")
cylinder(h=2,r=1, $fn=10);
}
Disable Modifier 无效修整
简单的视这个关的。(可以理解视当模型)
:
* { ... }
使例:
P-4.9
模块
定义你自的模块(的比一个描述或者是一个函数在其他语言中的)是一个强大的方法用于重
新使用的手
例如:
module hole(distance, rot, size) {
rotate(a = rot, v = [1, 0, 0]) {
translate([0, distance, 0]) {
cylinder(r = size, h = 100, center = true);
}
}
}
在这个例中,过其中的 distance(距离)rot(旋转) size(尺寸)允许重新使用这个功能的乘
很多行代码渲染你的程序更的简单。类似C语言中的 struct, 或者 scanf 编译后
的函数。
你可以例模型过数值(或者)到参数就像是 C语言的函数 call:
hole(0, 90, 10);
完整的代码
module hole(distance, rot, size) {
rotate(a = rot, v = [1, 0, 0]) {
translate([0, distance, 0]) {
cylinder(r = size, h = 100, center = true);
}
}
}
hole(0, 90, 10);
模型图如下:
P-4.10
代码解释:这hole(0,90,10),
distance = 0, translate([0, distance, 0])位置动,y向移动为 0
rot = 90, a = rot, v = [1,0,0], 是 模型以 x为中,旋转 90
size = 10, cylinder(r = size, h = 100, center = true); 中, 表圆柱的10.
这个模块的定义是用 module 命令来完成的,hole 在这函数, distance, rot, size 在这
变量,在 C语言中需要声明,而这需要直接用了, 而{} 描述中C语言中
的应用, 后需要值, hole(0, 90, 10);是将这个模块或者功能函数给于相应的数值,
软件自动将这些数值导入到应的中,成模型。
The child nodes of the module instantiation can be accessed using the child()
statement within the module:
点的模块例可以访问使child() 声明在模块中:
module lineup(num, space) {
for (i = [0 : num-1])
translate([ space*i, 0, 0 ]) child(0);
}
lineup(5, 65) sphere(30);
P-4.11
If you need to make your module iterate over all children you will need to make
use of the $children variable, e.g.:
如果你需要制作你的模块重复所有的模型你将会需要使$符号模型变量,例如:
module elongate() {
for (i = [0 : $children-1])
scale([10 , 1, 1 ]) child(i);
}
elongate() { sphere(30); cube([10,10,10]); cylinder(r=10,h=50); }
P-4.12
一个可以配置默认数值到参数:
module house(roof="flat",paint=[1,0,0]){
color(paint)
if(roof=="flat"){
translate([0,-1,0])
cube();
} else if(roof=="pitched"){
rotate([90,0,0])
linear_extrude(height=1)
polygon(points=[[0,0],[0,1],[0.5,1.5],[1,1],[1,0]],paths=[ [0,1,2,3,4] ]);
} else if(roof=="domical"){
translate([0,-1,0])
union(){
translate([0.5,0.5,1]) sphere(r=0.5,$fn=20);
cube();
}
}
}
// 然后使用以下供的参数:
union(){
house();
translate([2,0,0]) house("pitched");
translate([4,0,0]) house("domical",[0,1,0]);
translate([6,0,0]) house(roof="pitched",paint=[0,0,1]);
translate([8,0,0]) house(paint=[0,0,0],roof="pitched");
translate([10,0,0]) house(roof="domical");
translate([12,0,0]) house(paint=[0,0.5,0.5]);
}
P-4.13
第三部分(1~7, 13~15) 概述,语法法表,数学,运动仿真
1.1 概述
1.1.1 标注
1.1.2 变量
1.1.2.1 矢量
1.1.2.1.1 选项
1.1.2.2 字符串
1.1.2.3 变量的编译时设置,不是运行时
1.1.2.3.1 例外 1
1.1.2.3.2 例外 2
1.1.3 获得输入
2 条件和循环函数
2.1 循环
2.2 交叉 For 循环
2.3 If 阐述
2.4 Assign 阐述
3 数学运算符
3.1 数量的算术运算符
3.2 关系运算符
3.3 逻辑运算符
3.4 条件运算符
3.5 矢量数字运算符
3.6 矢量运算符
3.7 矢量 点-积 运算符
3.8 矩阵乘法
4 数学函数
5 三角函数
6 其他的数学函数
7 字符串函数
7.1 str
7.2 Also See search()
1,General 概述
1.1.1, Comments 标注(注说明
OpenSCAD 使用一个编程语言立模型然后显示屏幕上。标注是一径使代码内(不
是你自或者来的程序)描述如何这些代码或者它做。标注是不编译评估的,
以不需要使用自己明白代码
OpenSCAD 使C++ 样式的标注:
// This is a comment
myvar = 10; // The rest of the line is a comment
是表标注行, 而型号表标注一段在范围内容
1.1.2, Variables 变量
Variables in OpenSCAD are simply a name followed by an assignment via an
expression
变量在 OpenSCAD 是一个简单的跟随一个过一个表
Example:
例:
myvar = 5 + 4;
1.1.2.1, Vectors 数组(矢量)
变量 可以组合一到一个 数组中使用 中括号。数组是非有用的当XYZ标和尺寸的时
例:
deck = [64, 89, 18];
color("darkorchid")
cube(deck);
Output A cube with the sizes: X = 64, Y = 89, Z = 18.
输出一个立方体的尺寸是: X = 64, Y = 89, Z = 18.
Selection
You can also refer to individual values in a vector with vector[number].
可以选单独的的数值在一个数组用使用数组中的某一个分组,vector[number].
例:
deck = [64, 89, 18];
translate([0,0,deck[2]]) cube(deck);
效果是分别显示 0,1,2 deck 中的第一个分组数值,第个,第三个在应的线上。
输出是同的立方体和上一个例是在 Z18mm.
说明:为deck[2]的是为了 Z向移deck 函数的第三个分组的数字。如果是
deck[0], 那么 Z就会64, 如果是 deck[1],那么 Z就会89)。
1.1.2.2, Strings 字符串
外在的引号或者需要\” \\ 的)。其他的视特殊符号是行(\n),
tab(\t) 和返回(\r).
:这个功能是从新版OpenSCAD-2011.04. 你可以版本使sed 命令.linux
终端中运行命令sed 's/\\/\\\\/' non-escaped.scad > escaped.scad
例:
echo("The quick brown fox \tjumps \"over\" the lazy dog.\rThe quick brown
fox.\nThe \\lazy\\ dog.");
输出显示:
ECHO: "The quick brown fox jumps "over" the lazy dog.
The quick brown fox.
The \lazy\ dog."
这个系\t, \n,)。
1.1.2.3, 变量是在编译时间设置的,不是运行时。
OpenSCAD 的变量数值在编译时,而不是运行时,后的变量将会应用到
方的变量是使用的。它也许会帮助想象就像是奔腾量更变量。
例:
// The value of 'a' reflects only the last set value
a = 0;
echo(a);
a = 5;
echo(a);
输出显示
ECHO: 5
ECHO: 5
这个是你不可以分配一个变量在一个”if”块。
例:
a=0;
if (a==0)
{
a=1; // <- this line will generate an error.
}
输出编译错
这个行为无如何是及到不是根或者特殊的召唤一个模块,你可以重新定义一个变量使用一个
模块,不的外部的数值。有的例子包召唤将会对描述关于随后的设置的数值成为
使用。
例:
p = 4;
test(5);
echo(p);
p = 6;
test(8);
echo(p);
module test(q)
{
p = 2 + q;
echo(p);
p = 4 + q;
echo(p);
}
这个现象始终是一种顺感觉,它允许一些有例如,如果你设置你的件得到
一个默认的数值定义一个变量在根,当你件(引用件)到你自代码,你可以重新定义
或者放这些量,使用简单的值到一个的数值
值到更多的范围更改数值。
1.1.3Getting input 获得输入
我们有变量,可以是完的能得到一个输入将他们从代码代替设置的数值。那里有一些函数到
取数据DXF 件,或者你可以设置一个变量使-D 切换到命令行。
1.1.3.1,获取一个点一个图中。
获得一个点是比较使用的从读取一个的点在一个二维预览在一个术图中。函数 dxf_cross
取交叉的个直线在一个上你可以配置和返回交叉点。这个是点必须条直线DXF
件,而不是一个点在。
例:
OriginPoint = dxf_cross(file="drawing.dxf", layer="SCAD.Origin",
origin=[0, 0], scale=1);
1.1.3.2, 获取一个量数值
你可以取一个一个术图上。这是非有用的从读取一个旋转角,一个出的高度或者
介于零间的距离。在图中,创建一个是不显示量的数值,但要有一个标符。
取其数值,你配置这个标你的描述中:
例:
TotalWidth = dxf_dim(file="drawing.dxf", name="TotalWidth",
layer="SCAD.Origin", origin=[0, 0], scale=1);
color("slategray")
translate([TotalWidth * 0,0,0])
cylinder( r = TotalWidth, h = TotalWidth * 2, center = false);
color("sienna")
translate([100,0,0])
cube(100);
我先librecad 创建一个件,命名drawing.dxf,必须在和 scad 件同一个
首先必须把你的 scad 到 一个指定的默认的是/home/user(用户/,然后
librecad 软件创建一个字是 SCAD.Origin, 然后,在这个量,模型
可以在其他中画,必须在这个下,并量的数值更改成'TotalWidth'的标 符,
librecad 命令从 modify->text_edit 选项,然后选量,然后把数值更改成标符,用
OpenSCAD 。然后你就 可以在 OpenSCAD 继续创建模型,并将标符引入模型,标
dxf 中的量的数值。这模型中的数值是 50用圆柱体使用标符和立 方体使用数字对比模型。
这个图形是 librecad dxf 模型图。
图形是 openscad 使drawing.dxf 中的'TotalWidth'符后,立的和数字对比的模型。
动画效果,改变 X的位置和中的逻辑是
为一个使有的量, Example009 (file-> example->example009)和在
OpenSCAD 主页上的PC 风扇模型。
1.2 条件和循环函数
1.2.1 循环
1.2.2 交叉 For 循环
1.2.3 If 阐述
1.2.4 Assign 阐述
1.2.1, For 循环
循环根据某个数值在一个数组中或者在一个范围
数组版本法描述): for(变量=<数组>) <运行一些>-<变量> 是指定一个成功的数值在数
组中。
范围版本法描述): for(变量=<范围>) < 运行一些>
范围[<开始>:<>]-循环从开始到结。同如果 if<>是小<开始>.
范围[<开始>:<><>]-循环从开始到结使出的量可以是一个分数,几分
几。
量是出的就像是一个对数值并不能数。如果<>是小<开始>必须保
变。
:如果量不是一个数的<开始><>,循环数值在后的循环中将会是<>-<
>-<开始> mod<>).
嵌套循环: for( 变量 1 = <范围或者数组>, 变量 2 = <范围和数组> ) <运行一些, 使
全部变量>
for 循环可以嵌套,就像是一个常规的程序。一个个循环可以出同的阐述。
1-循环过一个数组:
color("cadetblue")
for (z = [-1, 1]) // two iterations, z = -1, z = 1
{
translate([0, 0, z])
cube(size = 1, center = false);
}
OpenSCAD 循环过一个数组
2a-循环过一个范围
color("tomato")
for ( i = [0 : 5] )
{
rotate( i * 360 / 6, [1, 0, 0])
translate([0, 10, 0])
sphere(r = 1, $fn=100);
}
解释:旋转的角默认量是正整数,1 5,然后,如果选i*360/6,结果是 60 ,而
360/5 72 ,和量一以等分,如果是 360/8那么就会是 45 ,会45 有一个模型,
而有一个多的,在以可能是系默认的,0或者起始吧!
OpenSCAD 循环过一个范围
2b-循环过一个范围配置一个量:
//:中间的参数在范围指定
//'0.2' 这个例)是一个‘增数值
// : 取''数值,的结数值将会小于给出的个。
color("rosybrown")
for ( i = [0 : 0.2 : 5] )
{
rotate( i * 360 / 6, [1, 0, 0])
translate([0, 10, 0])
sphere(r = 1, $fn=100);
}
解释:为么没有成一个完整的环形,需要计算,量是 0.205共增25 ,而系
出的是 i*360/6,就是 60 ,而系呈现紧密序,如果是 360/8那么序就会更
紧密,而完全平均排是(360/25*5,得出是 72 那么 360/5 得到 72 或者 更简单的方
法就是量的正数是多,角旋转就是 360/,这就可以等分了。
3-循环过一个数组的一个数组(方旋转):
color("slateblue")
for(i = [
[0, 0, 0],
[10, 20, 300],
[200, 40, 57],
[20, 88, 57] ])
{
rotate(i)
cube([100, 20, 20], center = true);
}
//就是旋转立方体[100,20,20],
//旋转角[x, y, z] 是循环中的数组的数值。
OpenSCAD for 循环(旋转)
Usage example 4 - iteration over a vector of vectors (translation):
4-循环过一个数组的数组(位移或者置位):
for(i = [
[ 0, 0, 0],
[10, 12, 10],
[20, 24, 20],
[30, 36, 30],
[20, 48, 40],
[10, 60, 50] ])
{
translate(i)
cube([50, 15, 10], center = true);
}
这个就理解多了,循环一个不同标位置的数组,立方体模型尺寸[50,15,10].
OpenSCAD for 循环(位
Nested loop example
嵌套循环例:
color("palevioletred")
for (xpos=[0:3], ypos = [2,4,6])
// do twelve iterations, using each xpos with each ypos
translate([xpos*ypos, ypos, 0])
cube([0.5, 0.5, 0.5]);
color("blueviolet")
translate([0,1.5,0])
cube([2,0.5,0.5]);
color("fuchsia")
translate([0,3.5,0])
cube([4,0.5,0.5]);
color("cyan")
translate([0,5.5,0])
cube([6,0.5,0.5]);
:这,循环数组,xpos[0:3], 这个为有了:分号,表是循环的数,0开始,到末尾
数值结循环,而 ypos[2,4,6], 仅仅是表一组数值的数组,引用到循环。置位 translate
函数定义了标的位置,x, y,z, x = xpos * ypos, 就是一个循环数组乘以一组数组, 是一个
变量,随着循环的结的数值数,而中间的距离2,4, 6 的,数值的标结果就像
y 6 6 6 6
y 4 4 4 4
y 2 2 2 2
x x x x
交叉的 For 循环
循环过数值在一个数组中或者范围且使用一个交叉的内容
intersection_for()函数是一个围绕为一个问题)你不可以获得预期的结果使
用一个组合的标准的 for()函数或者 intersection()阐述。
参数
<循环变量的名称>
变量的名称for 循环的使用。
1 – 循环过一个范围
color("firebrick")
intersection_for(n = [1 : 6])
{
rotate([0, 0, n * 60])
{
translate([6,0,0])
sphere(r=12);
}
}
color("olivedrab")
translate([30,0,0])
sphere(r=12);
我做了一个对比,以方便更理解translate([6,0,0]),是将模型x向移6mm,
然后围绕标的中,循环和旋转,(如果动的数值大12,那么全部有交叉,就不会产生
模型了)rotate([0,0,n*60]),z线为中线旋转 60 ,循环 16,得出 6个模型,(如
果旋转中是 60,而不是 n*60,那么输出就是一个根据 z旋转而有交叉的圆形)然后,将这 6个模
型的交叉部分,其以这的位置动和旋转的角度都其变的变量。
OpenSCAD Intersection for
OpenSCAD 交集 for 循环
2 – 循环过一个数组-旋转:
color("thistle")
intersection_for(i = [
[ 0, 0, 0],
[ 10, 20, 300],
[200, 40, 57],
[ 20, 88, 57] ])
{
rotate(i)
cube([100, 20, 20], center = true);
}
如果你理解了以上的例的描述,那么里实例就比较容理解了,这数组有 4组,出了的数值
x,y,z 的旋转角,表将立方体 ([100,20,20]),center=true 标中为基准参考,
循环对 4组不同的数值分xyz 的旋转,体旋转的数是数组中 的用号间的数值。然
后将有的模型交叉(交集)的部分下,其他的全部,就是一个的模型。
图:
OpenSCAD 交集 for (旋转)
If 阐述
条件评估的一个分
参数
尔代数表必须应用到这个条件。
混淆符号'=' 和等符号'==', 法描述是 if(a=b) 运行一些程序函数()
// 将会导失败且没何错提示
例:
x = 5; y = 6;
if (x > y)
{
color("lime")
cube(size = 1, center = false);
} else {
color("plum")
cube(size = 2, center = true);
}
里我定义了 x=5, y=6, 一组程序 x=7,y=6,其他参数不变,我们可以看到系的选
值的阐述
设置变量到一个的数值用一个分)。
参数
变量必须或者从新值的(re-)assigned.
例:
color("powderblue")
for (i = [10:50])
{
assign (angle = i*360/20, distance = i*10, r = i*2)
{
rotate(angle, [1, 0, 0])
translate([0, distance, 0])
sphere(r = r);
}
}
值有一点C语言中的值,不过 C中是直接值的,而这多了一个 assign 函数和一个括
^_^,不如何,非阿!
,循环 for(i=[10:50],就是循环10 开始50 40 个,0就是 41 循环,
angle=i*360/20, 就是个球形旋转 18 rotate(angle,[1,0,0]),旋转是围绕x线行的,
而置位 translate([0,distance,0]),把置位成了一个量循环,distance=i*10,就是沿y
线个球形
循环的应参数*10 的位置,sphere(r=r)符号后边的 r值的于代数的字符,是一个
量数值,r=i*2, 就是球形的径从量的数值中一个乘以 2后得到的结果是球体的
有个图形分对不同的参数了调整得出不同的结果。
OpenSCAD 教程——6.1
数学运算符
很多的内容个人的创建的模型,在学数学的函数应用到 CAD 模型中,C语言的编程模
算一个的机模型,本想就可以过数 学,没想到写就多了,2
了,引用了大量的 C语言的 math.h 的应用,希望可以对如何学和应用 openSCAD 的数学算模型方
面 有帮助,有一点像 CAS算机数系或者 gnuplot, octave 类数学软件了。
是的确有这个功能,无openCSG(结立体机软件库),还是 CGAL(几是一个强大的开源
数学和理科的软件库,例的大),其 数学功入的,以学openSCAD 就像是
用数学的算法来构建一个机模型,然有时候计算机的速度的确不上,有有的方法,就可
以 非简便,简,简的描述语言完成一个的机模型。
把这个数学那么你在算机(CAD)算机(CAM),和算机
程(CAE)的学和应用,甚至到用的。
数学运算符——第一部分
量的运算符号
标量运算符使用数字就像是运作或者产生一个的数字。
+ add
- subtract
* multiply 乘法
/ divide
% modulo
'-'可以使用就像是运算符应用到一个数中。
关系运算符
有的关系把一个数字就像是运算或者产生一个布尔代数数值。等和不等符号可以同
尔代数数值。
<
<=
==
!= 不等
>=
>
逻辑运算符
有的逻辑运算符把布尔代数就像是运算或者产生一个的布尔代数数值。
&& Logical AND 逻辑''
|| Logical OR 逻辑''
! Logical NOT 逻辑'
条件运算符
: 运算符可以是使用到条件的评估这个或者下一个表就像?:运算符源于 C语言家庭
: 条件运算符
出:x>0?”pos”:”neg”,输出的结果是”pos”如果 x0否则neg”.
-数字运算符 (应线性代数的基础
-数字运算符把一个量数组和一个数字就像是运算和产生一个量数组。
*, 乘以有的量数组中的有成用数字
/量数组中的有成用数字
量数组运算符
量数组运算符把数组就像是运算和产生一个的数组
+ add element-wise 个成相加
- subtract element-wise 个成
-”可以是运算符应用到成量数组。
量数组 点-积 运算符
量数组 点-积 运算符把量数组就像是运算和产生一个量。
*加向量数组的成的和
矩阵乘积
乘以一个矩阵使用一个量数组,矩阵的量和矩阵的
*, 矩阵/量数组 乘积
(关以上的运算,单独的算并应用到模型中,是比费内存以,我们到如何引入数据模型,
dat 格式文本数据模型,然后算出一个模型后,来完善如何使用这些数学运算符)。
数学函数
,希望多了一些关三角函数,对数指数等数学是在 C语言中编程过或者使用过一些
简单的等,gnuplot, octave, sagemath 等一些数学软件,maple, mathematica,
matlab开源数学软件),中有一些的应用,gsl 是一个不错的数学库,gnu 的项支持
CC++,如果你学过 PASCAL 或者 FORTRAN那么以上的话可以过。
abs
对值函数。返回正的数值将一个标十进数字或者小数点。
例:
abs(-5.0);
abs(0);
abs(8.0);
Results:
输出结果:
5.0
0.0
8.0
三角函数基础
xx距离yy距离r边,或者直接到达坐标的距离
如果o为一个圆r表一个圆的a的旋转角,旋转 r,形成一个圆形,跟随
旋转的角a的变随之。如果是一个机装置,数的直线,运动的方x y
,如果使其对圆完成一个不同r的数值的圆形,就需要计算,r的数值,循环角
090 ,然后分对不同的行配置 xy的正,完成后的圆形。
Sin, cos, tan, cot, sec, csc 后边一个角,运算后,这些数值是在-1 1间。用字g
表这个数值。
如果是循环 x标,或者 y标的距离,系成不同的角而根据这些角度计算出不同的
位置。而三角函数的应用是某个-1 1间的数值(三角函数的比例数值),算出其角,应用
广泛
求三角函数
Sin (a) = y / r ;
Cos (a )= x / r
Tan (a) = y / x
Cot (a) = x / y
Sec (a) = r / x
Cot (a) = x / y
Csc (a) = r / y
求角(三角函数)
asin(y/r) = a
acos(x/r)=a
atan(y/x)=a
Pytheras
x**2+y**2=r**2
R=√x**2+y**2
x=√r**2-y**2
y=√r**2- x**2
r=y/sin(a)
r=x/cos(a)
y
y=sin(a)*r
y=tan(a)*x
x
x=cos(a)*r
x=y/tan(x)
这个图是一个圆形用角距离等分求其标位置,或者根据标位置求圆
色的线y标等分,而得出的 x标的距离则绿色部分的不等的结果。
色的直线把圆形过角等分,得出的色是圆形的直,的参y
标的数值,而直的线的间距则x标的距离是不一的参三角函数
数值表。
acos 余弦
数学的 arccosine或者 余弦函数。
我们用立方体[0.5,0.5,150](一个直线, 循环-1 1量为 0.1后分用不同
0.010.001), 使acos 函数算出不同角一个(-1 1的角度只180 个圆
,使mirror 命令能完成整个圆形可循环010.1rotate 完成整个圆形)
分圆形,根据循环的,确定这个圆形的
acos(x/r)=a, 已知 x标和 r,求角y.
例:
for(i=[-1:0.1:1])
{
color("maroon")
rotate([0,acos(i),0])
cube([0.5,0.5,150]);
}
for(i=[-1:0.1:1])
{
mirror([1,0,0])
color("navy")
rotate([0,acos(i),0])
cube([0.5,0.5,150]);
}
color("tan")
rotate([90,0,0])
translate([350,0,0])
cylinder(h=1,r=150, center=true);
asin
数学 arcsine, 或者反,函数。
asin(y/r) = a已知 y标数值和 r,求其三角形角x标。和 acos, 数值应用的范围
-1 1间。的参三角函数对表。
例是根据角求出多边形,得到一个多边形组合的圆形,组合根据 asin 函数的
合。
例:(这个效果是 F12 或者 view->'thrown together',得到的效果,Ctrl+1 显示,或者
view->show edges 得到的效果,这个选择都必须,然后够开到图的效果)。
代码如下:
r=150;
z0=150;z1 = 130;z2 = 110;z3 = 90;z4 = 70;z5 = 50;z6 = 30;z7 = 10;z8 = 0;
color("blue")
polyhedron(
points=[[0,0,0],
[cos(asin(z0/r))*r,0,z0],
[cos(asin(z1/r))*r,0,z1],
[cos(asin(z2/r))*r,0,z2],
[cos(asin(z3/r))*r,0,z3],
[cos(asin(z4/r))*r,0,z4],
[cos(asin(z5/r))*r,0,z5],
[cos(asin(z6/r))*r,0,z6],
[cos(asin(z7/r))*r,0,z7],
[cos(asin(z8/r))*r,0,z8],
],
triangles=[
[0,1,2],[0,2,3],[0,3,4],
[0,4,5],[0,5,6],[0,6,7],
[0,7,8],[0,8,9]]
);
# color("tan")
rotate([90,0,0])
cylinder(h=1,r=150, $fn=100, center=true);
atan 正切
数学的 arctangent, 或者反正切,函数。是原则数值返回到 x的正切,用角来表
atan(y/x)=a, 已知 xy标数值,求角
例:
for(i=[-1:0.01:1])
{
color("maroon")
rotate([0,atan(i),0])
cube([0.5,0.5,150]);
}
for(i=[-1:0.01:1])
{
mirror([0,0,1])
color("navy")
rotate([0,atan(i),0])
cube([0.5,0.5,150]);
}
for(i=[-1:0.01:1])
{
rotate([0,90,0])
color("teal")
rotate([0,atan(i),0])
cube([0.5,0.5,150]);
}
for(i=[-1:0.01:1])
{
rotate([0,270,0])
color("goldenrod")
rotate([0,atan(i),0])
cube([0.5,0.5,150]);
}
color("tan")
rotate([90,0,0])
translate([350,0,0])
cylinder(h=1,r=150, center=true);
atan2
数学的个参数的 atan 函数。返回原则数组的正切的 y/x, 用角来表。参atan2(C
言)。
更多的例和述)
ceil 最高限
数学的 ceiling 函数。
C语言中的描述和解释
小的积分数值,是不小x(就像是一个点数值)。
#include
#include
int main ()
{
printf ( "ceil of 2.3 is %.1f\n", ceil(2.3) );
printf ( "ceil of 3.8 is %.1f\n", ceil(3.8) );
printf ( "ceil of -2.3 is %.1f\n", ceil(-2.3) );
printf ( "ceil of -3.8 is %.1f\n", ceil(-3.8) );
return 0;
}
输出结果:
ceil of 2.3 is 3.0
ceil of 3.8 is 4.0
ceil of -2.3 is -2.0
ceil of -3.8 is -3.0
openSCAD 中,应用是一的,不过这显示是用了 echo, 终端 BASH 命令,和在 BASH 编程语言
中和 printf 是一的,而在算机图形学中,是立即显示计算的数值,openSCAD 是这一类
的。例中,a=ceil(5.8); b=ceil(1.2); c=ceil(-4.3); d=ceil(-2.9);得到的输出是
a=6,b=2,c=-4,d=-2.C语言中算的一
例:
a=ceil(5.8); b=ceil(1.2);
c=ceil(-4.3); d=ceil(-2.9);
echo(a); echo(b);
echo(c); echo(d);
color("midnightblue")
translate([a,0,0]) cube([1]);
color("darkgreen")
translate([b,0,0]) cube(1);
color("indigo")
translate([c,0,0]) cube(1);
color("darkkhaki")
translate([d,0,0]) cube(1);
os 余弦
数学的余弦函数,Cos (a )= x / r, 一般指已知r径或者 x标,求 r径或者 x标。
例:
for(i=[0:36])
translate([i*10,0,0])cylinder(r=5,h=cos(i*10)*50+60);
openSCAD cos 函数
C语言函数的描述:
#include
#include
#define PI 3.14159265
int main ()
{
double param, result;
param = 60.0;
result = cos ( param * PI / 180.0 );
printf ("The cosine of %f degrees is %f.\n", param, result );
return 0;
}
输出:
The cosine of 60.000000 degrees is 0.500000.
而在 openSCAD 中,可以直接输入 cos(数值),而不是 C语言中的 cos(数值*PI/180)。
例中立方体尺寸 cube(y), y=cos(45)的数值是 0.707106781,而外一个用立方体的尺寸直接用
数值描述,输出的结果是一的。
例:
y=cos(45);
cube(y);
translate([1.5,0,0])
color("khaki")
cube(0.707106781);
,更多的应用根据可以
Cos (a) = x / r,是根据已知 r或者循环x,或者循环a,可以算出
一个圆弧轨迹
例:
(这个例是一个颜色分12 小时时图形,用数学的的方法算的.)
r=150;
for(ag=[0:30:360])
{
if(ag==0)
{
color("blue")
translate([r,0,0])
sphere(r=15,$fn=100);
}
else{
if(ag>0 && ag<90)
{
color("pink")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==90)
{
color("green")
translate([0,r,0])
sphere(r=15,$fn=100);
}
else{
if(ag>90 && ag<180)
{
color("dodgerblue")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==180)
{
color("yellow")
translate([-r,0,0])
sphere(r=15,$fn=100);
}
else{
if(ag>180 && ag<270)
{
color("lawngreen")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==270)
{
color("red")
translate([0,-r,0])
sphere(r=15,$fn=100);
}
else{
if(ag>270 && ag<360)
{
color("peru")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
}}}}}}}
}
,还有一个对简12 位置时图形的画法:
代码
r=150;
for(ag=[0:30:90])
{
if(ag>=0 && ag< 90)
{
color("red")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
if(ag>0 && ag<=90)
{
color("yellow")
translate([-cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
if(ag>=0 && ag<90)
{
color("blue")
translate([-cos(ag)*r,-sin(ag)*r,0])
sphere(r=5,$fn=100);
}
if(ag>0 && ag<=90)
{
color("green")
translate([cos(ag)*r,-sin(ag)*r,0])
sphere(r=5,$fn=100);
}
}
还有一个简单的方法,上边的例是使用了一些刚刚的数学运算符,逻辑运算符, 循环,条
件选,等等,更的方便了学openSCAD 个功能。
更简单的 12 位置时图形的画法:
代码
r=150;
for(ag=[0:30:360])
{
color("papayawhip")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=10,$fn=100);
}
如果机械加一个球形,机x,y,z,三个标(机是三标,xyz),那么
就是首先加一个圆形(x,z 标的圆形),然后以这个圆形的圆点为中旋转(x,或者 z
旋转),而可以完成整个球形。
(注一个嵌套的循环bg,旋转,bg 旋转的而循环ag 是用
成一个圆形,ag 身的, 不可以仅仅使用一个量,否则球体无法完成。
算的算机应的速度越慢轨迹运算,的确很费内存
还有,当 ag,bg 量分5的时算就出了范围,引出了一个警告WARMING)。
WARMINGNormalized tree has growing past 4000 elements. Aborting normalization.
WARMING: Normalized tree has 4000 elements.
WARMING: openCSG rendering has been disabled!
openCSG 支持 4000 个模型,正常情况有,我们这个球形轨迹了,是如果是用引入数
件(dat,txt 等基础文本格式的),然后成一个模型,可以比灵活的应用数学的功能,后边
的在学习它吧!
代码
r=150;
for(ag=[0:30:360], bg=[0:30:360])
{
color("seagreen")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=10,$fn=100);
rotate([bg,0,0])
color("blueviolet")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
7,
13 Importing Geometry 导入几何
13.1 import 导入
13.2 import_stl 导入 stl
14 Include Statement include 描述
15 Other Language Features 其他的语言特点
15.1 Special variables 特殊变量
15.1.1 $fa, $fs and $fn
15.1.2 $t
15.1.3 $vpr and $vpt
15.2 User-Defined Functions 用户自定义函数
15.3 Echo Statements echo 描述
15.4 Render 渲染
15.5 Surface 表面
15.6 Search 搜索
1.15.6.1 Index values return as list 索引数值返回就像列表
1.15.6.2 Search on different column; return Index values 搜索在不
同的行,返回索引数值
1.15.6.3 Search on list of values 搜索在数值列表上
1.15.6.4 Search on list of strings 搜索在字符串列表上
1.15.6.5 Getting the right results 获取正确的结果
13,导入几何
import 导入
在当OpenSCAD 模型导入件中使
参数
<>
一个字符串,路径STL DXF 件。
使例:
import ("example012.stl", convexity = 5);
注:在 OpenSCAD 最新版本import()在用导入二维DXF 扩展)和三STL件。
import_stl
<推荐使用。使用的命令,而不是 import..>
在当OpenSCAD 模型导入 STL 件的使
参数
<>
有对 STL 件的路径字符串
<>
Integer参数指定前侧大数量(背射线相交的对可能透。参数时,需要
正确地显示OpenCSG 预览的对,并
多面体的渲染。
使例:
import_stl("example012.stl", convexity = 5);
include
目前字是不完整的。
于包OpenSCAD 外部件的代码,有两种可用的命令
<>为,如果件的内容写在
件,并 使<>模块和功能,命令 比其他的定义。 库件中搜索在同一
中的设从开放的,还是在 在 OpenSCAD 安装的库中。可以使路径规
要么。如果他在其他方,你一定要给的完整路径新版本定义的用户库,OpenSCAD_Us
er_Manual/面,这也文 括在 OpenSCAD 一些库件。
Windows Linux/ Mac 使用不同的分符的目录Windows 使\,例如目录\ file.ext,而其
他人使/,例如目录/ file.ext。这可能导问题。然而 OpenSCAD Windows 上正确
使/使/或使用的语会在有的上。 使<>允许变量在库中
指定。这些 默认值可以在主代码覆盖。一个 openscad 变量有在一个值程序的生命。当有多个
需要后一个值,第一次创建变量时指定。这有效果库中的分配时, 如以后使用更改默认的变量,
必须分配 include 下面的第个例
首先一个库ring.scad,然后打开一个openSCAD 件,用 include 引用。
一定到同一个否则需要输入路径
// ring.scad,
module ring(r1, r2, h) {
difference() {
cylinder(r = r1, h = h);
translate([ 0, 0, -1 ]) cylinder(r = r2, h = h+2);
}
}
整个就和 C语言的引用类似。
打开一个openSCAD :
include <ring.scad>;
rotate([90, 0, 0]) ring(10, 1, 1);
translate([10,0, 0])
ring(5, 4, 10);
语言功能
目前字是不完整的。
特殊变量
有的起始'$'是特殊变量,变量的语义是类似
LISP 特殊的变量:他,而不是范围
,他正在有效自动向前作为参数
个人理解: 这个变量$C语言中的*pointer
的一个特殊的变量:
normal=2;
module doesnt_pass_it()
{
cube(normal); }
module normal_mod()
{
doesnt_pass_it(); }
normal_mod(normal=1);
//Should echo 2
$special=3; $another=5;
module passes_it()
{
translate([10, 0, 0])
cylinder($special, $another); }
module special_mod()
{
$another=6;
passes_it();
}
special_mod($special=4); //Should echo 4,6
$fa, $fs, $fn,
$fa, $fs, $fn,特殊变量控制,用来产生面的数量:
$fa,段的小角即使是一个大的圆不会有更多的360 这个数以。默认值是 12
30 段为完整的
圆)。
允许值是 0.01何试图设置一个的值将导
警告
$fs,是一个段的尺寸。这个变量,为很小的,数量使$fa 指定段。默认值是 2
允许的值是 0.01何试图设置一个的值会产生警告
$ FN 0。当这个变量的值大于零其他个变量 ,全部循环这个数字呈现
值是 0。 当$fa $fs 确定的数量为一个圆,然后 OpenSCAD 用不5段。
之前介绍过,这了。
$t
这个函数是整个 openSCAD 的运动仿真工具一。
语法: 是将$t 函数用个乘符号*’乘以定的数值,当乘以后,这个函数就变成了一个变量,就
0到这个数值。
同时这个函数必须配合"View"子菜单“Animate"使用,成一个有时间控制,和
控制函数。
1Steps, 数, 就是多
2FPSFPS每秒有多,这个数值需要输入,
3, Time,是一个自动成的函数,就是根据算出来的。
然后,我们定数量*$t 后的变量,分成多少份,就是 steps, 而多时间显示这些分数,就是
FPS.
有一个时仿真例,仅供参考。
首先我们先编辑或者 openSCAD 编辑以下代码,然后将这些代码hdf1.scad,
这个时仿真程序比大,以将一些函数体程序引用这些函数可。
// hd1.scad
module clock(){
r=150;
for(ag=[0:30:360])
{
if(ag==0)
{
color("blue")
translate([r,0,0])
sphere(r=15,$fn=100);
}
else{
if(ag>0 && ag<90)
{
color("pink")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==90)
{
color("green")
translate([0,r,0])
sphere(r=15,$fn=100);
}
else{
if(ag>90 && ag<180)
{
color("dodgerblue")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==180)
{
color("yellow")
translate([-r,0,0])
sphere(r=15,$fn=100);
}
else{
if(ag>180 && ag<270)
{
color("lawngreen")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
else{
if(ag==270)
{
color("red")
translate([0,-r,0])
sphere(r=15,$fn=100);
}
else{
if(ag>270 && ag<360)
{
color("peru")
translate([cos(ag)*r,sin(ag)*r,0])
sphere(r=5,$fn=100);
}
}}}}}}}
}
}
hdf1.scad 后,我们打开一个openSCAD 窗口这个件到 hdf1.scad 目录中,
否则无法引用 hdf1.scad 件。比如我们可以clock.scad 等等。
以下是时仿真程序代码
include <hdf1.scad>
clock();
module pin(a, b){
color("brown")
cube([b, a, 20]);
color("orange")
translate([0, a, 0])
rotate([0, 0, 180])
cube([b, a, 20]);
color("beige")
translate([0, a, 0])
rotate([-90, 0, 0])
cylinder(20, b, h=20);
}
// hours pin
rotate([0, 0, 0])
color("purple")
pin(70,10);
// minutes pin
rotate([0, 0, 0])
pin(100, 7);
// seconds pin
rotate([0, 0, 360*$t])
color("black")
pin(110, 4);
我们然后点"View"->"Animate", 当你看到Animate'上对且右下角的运动仿真状态栏
Time, FPS, Steps,的时,这时候需要你设置 FPS Steps 了。
我们已经秒针的旋转设为 360为一个圆是以 360 量一个的,秒针的指设置
rotate([0, 0, 360*$t]);参考已经设定的程序代码。这需要改动,是强调一下。
然后我们设置 FTS 4Steps=4,这个时色的秒针开始已 0.25 速度移动了。
这个图4数是 4,旋转角360 ,就是在 0.25 旋转 90
FPS=1, 就是一显示运动仿真一个 Steps, Times 还是会显示 1/Steps .
FPS=3, 就是一内显示三个 Steps.
Times = 1 / Steps ,
Steps/FPS=际每秒显示
FPS=Steps, 就是一内显示所有的 Steps.
试了,openSCAD 最快50 steps 每秒,如果 Steps 太高也是不可以运行的,当。
include <hdf1.scad>
clock();
module pin(a, b){
color("brown")
cube([b, a, 20]);
color("orange")
translate([0, a, 0])
rotate([0, 0, 180])
cube([b, a, 20]);
color("beige")
translate([0, a, 0])
rotate([-90, 0, 0])
cylinder(20, b, h=20);
}
// hours pin
rotate([0, 0, 360*$t])
color("purple")
pin(70,10);
// minutes pin
rotate([0, 0, 360*60*$t])
pin(100, 7);
openSCAD 算旋转一个圆360 以这的时仿真大可以到分和时,而
的确算了。
我们把时旋转设置成 360*$t,整个运动仅仅仿真一个圆,而这个时针则需要运动 60
就是 60 个圆,表360*60*$t
这个时设置 FPS 60Steps 360否则运算的太快openSCAD 的运动会呈现不出来的。
这个是一个液压缸运动仿真例,仅供参考。
module cushion(){
difference(){
color("red")
cube([200, 200, 400]);
translate([-5, 100, -5])
cube([200, 200, 400]);
}
translate([0,0,-120*$t])
union(){
color("blue")
translate([100, 100, 250])
cylinder (r=20, h=260);
color("beige")
union(){
translate([100, 100, 460])
cylinder (r=30, h=60);
rotate([90, 0, 0])
translate([100, 580, -120])
cylinder(r=60, h=40);
}
translate([100, 100, 580])
sphere (r= 52 , fn=200);
color("blue")
rotate([90, 0, 0])
translate([100, 580, -170])
cylinder (r=20, h=140);
color("green")
translate([100, 100, 250])
cylinder(r =100, h=20);
}
color("steelblue", 0.8)
translate([100, 100, 390])
rotate([0,180,0])
cylinder(r =100, h=120);
color("steelblue", 0.8)
translate([100, 100, 270])
rotate([0,180,0])
cylinder(r =100, h=120*$t);
color("orange", 0.8)
translate([100, 100, 130])
cylinder(r =100, h=120-120*$t);
}
cushion();
$vpr and $vpt
当你在一个位置$vpr, $vpn 的时标在编辑个位置,选
Edit “-> “Paste Viewport Rotation” or “Paste Viewport Translation”
当你选Rotation or Translation 的时最底下的状态栏的数据就会复制到你的标的位置。
就是你当图像的视图角和模型的标中的参数。
Example :
cube([10,10,$vpr [0]/10]);
// Ctrl+p && Ctrl+0
//[ 0.00, 0.00, 0.00 ]
//[ 55.00, 0.00, 25.00 ]
// Ctrl+p && Ctrl+4
//[ 0.00, 0.00, 0.00 ]
//[ 0.00, 0.00, 0.00 ]
// Ctrl+p && Ctrl+7
//[ 0.00, 0.00, 0.00 ]
//[ 90.00, 0.00, 90.00 ]
// if we move by mose
//[ 3.90, 5.65, 5.99 ]
//[ 57.80, 0.00, 22.10 ]
用户定义的函数
于代码的可读性定义一个函数。
my_d=20;
function r_from_dia(my_d) = my_d / 2;
echo("Diameter ", my_d, " is radius ", r_from_dia(my_d));
//recursion - find the sum of the values in a vector (array)
// from the start (or s'th element) to the i'th element - remember elements are
zero based
function sumv(v,i,s=0) = (i==s ? v[i] : v[i] + sumv(v,i-1,s));
vec=[ 10, 20, 30, 40 ];
echo("sum vec=", sumv(vec,2,1)); // is 20+30=50
,
echo
这个函数输出内容的编辑窗口,用的是 BASH shell 语言,echo,,就是你输入,他
显示。。代码调试用。参字符串函数 str()
Render 渲染
即使预览的强制生网格。用布运算变得轨道
这个软件无法运行这一项。
Surface
表面
我们首先要文本编辑nano,VIgedit, geany, emacs, etc...等,把一下数据编辑
sf.dat 格式,同时在同一个新建一个 sf.scad 件,
代码内容如下:
//sf.scad
color("red")
surface(file = "sf.dat", center = true, convexity = 5);
%translate([0,0,5])cube([10,10,10], center =true);
sf.dat 格式代码内容如下:
#sf.dat
10 9 8 7 6 5 5 5 5 5
9 8 7 6 6 4 3 2 1 0
8 7 6 6 4 3 2 1 0 0
7 6 6 4 3 2 1 0 0 0
6 6 4 3 2 1 1 0 0 0
6 6 3 2 1 1 1 0 0 0
6 6 2 1 1 1 1 0 0 0
6 6 1 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0
为模型比小,调整模型的视图比例,直到合
Ctrl+1,显示
Version 1,
version 2.
打开'File"-> "Examples" -> "example-010.scad", 打开后,F5 编译,直接成一个数学模型
面,如图。
search
search()函数是一个用函数来到一个多个(或所有)
量的值值的列表,列表中的字符串构造
搜索使
搜索(match_valuestring_or_vector [] index_col_num num_returns_per_match
[]
搜索参数
match_value
可以是单一值值的量。
字符串为字符遍历搜索功能的
不搜索串。
:如果match_value 是一个量的字符串,搜索查找的字符串
看下面的例9
string_or_vector
的字符串或向量搜索配。
num_returns_per_match默认值:1
默认情况下,搜索寻找返回元素match_value
为一个列表的索引
如果num_returns_per_match1,搜索返回列表上列出的
元素的索引值 match_value num_returns_per_match
看下面的例8
62
如果num_returns_per_match = 0,搜索返回一个列表,列出
元素的索引值 match_value
看下面的例6
index_col_num默认值:0
string_or_vector 是一个量的量表,多维或
列表的列表的构造复match_value 可能不会在第一个
index_col_num = 0)柱。
看下面的例5为一个简单的使用例
搜索使用的例
看到 example023.scad 括一可渲染的例OpenSCAD
指数值返回列表
Example
Code
search("a","abcdabcd");
1
Result
[0]
2 search("e","abcdabcd"); []
3 search("a","abcdabcd",0); [[0,4]]
4 search("a",[ ["a",1],["b",2],["c",3],["d",4], [[0,4]] (see also
["a",5],["b",6],["c",7],["d",8],["e",9] ], 0); Example 6 below)
Search on different column; return Index values
Example 5:
search(3,[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],
["e",3] ], 0,
1);
Returns:
[2,8]
Search on list of values
Example 6: Return all matches per search vector element.
search("abc",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],
["e",9] ],
0);
Returns:
[[0,4],[1,5],[2,6]]
Example 7: Return first match per search vector element; special case return
vector.
search("abc",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],
["e",9] ],
1);
63
Returns:
[0,1,2]
Example 8: Return first two matches per search vector element; vector of
vectors.
search("abce",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],
["e",9] ],
2);
Returns:
[[0,4],[1,5],[2,6],[8]]
Search on list of strings
Example 9:
lTable2=[ ["cat",1],["b",2],["c",3],["dog",4],["a",5],["b",6],["c",7],["d",8],
["e",9],
["apple",10],["a",11] ];
lSearch2=["b","zzz","a","c","apple","dog"];
l2=search(lSearch2,lTable2);
echo(str("Default list string search (",lSearch2,"): ",l2));
Returns
ECHO: "Default list string search
([\"b\", \"zzz\", \"a\", \"c\", \"apple\", \"dog\"]):
[1, [], 4, 2, 9, 3]"
Getting the right results
// workout which vectors get the results
v=[ ["O",2],["p",3],["e",9],["n",4],["S",5],["C",6],["A",7],["D",8] ];
//
echo(v[0]);
// -> ["O",2]
echo(v[1]);
// -> ["p",3]
echo(v[1][0],v[1][1]);
// -> "p",3
echo(search("p",v));
// find "p" -> [1]
echo(search("p",v)[0]);
// -> 1
echo(search(9,v,0,1));
// find 9 -> [2]
echo(v[search(9,v,0,1)[0]]);
// -> ["e",9]
echo(v[search(9,v,0,1)[0]][0]);
// -> "e"
echo(v[search(9,v,0,1)[0]][1]);
// -> 9
echo(v[search("p",v,1,0)[0]][1]);
// -> 3
echo(v[search("p",v,1,0)[0]][0]);
// -> "p"
echo(v[search("d",v,1,0)[0]][0]);
// "d" not found -> undef
echo(v[search("D",v,1,0)[0]][1]);
// -> 8
OpenSCAD Version
version() and version_num() will return OpenSCAD version number.
The version() function will return the OpenSCAD version as a vector, e.g.
[2011, 09,
23]
The version_num() function will return the OpenSCAD version as a number, e.g.
20110923
OpenSCAD 用户手册/使2D
2D 部分根据以上的内容,基就可以理解了。
译了,就看自领悟了。
CAD 的图有国和语言张障碍的。

Navigation menu