知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“OpenSCAD”的源代码
←
OpenSCAD
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
==简介== ===时间轴=== ==快速入门== ==执行顺序== 在OpenSCAD中,变换的执行顺序是从右向左(或者说从内向外)的。如 <syntaxhighlight lang="text" line='line'> // 添加坐标轴参考线,便于观察 color("red") translate([0,0,0]) cube([10,0.1,0.1]); // X轴 color("green") translate([0,0,0]) cube([0.1,10,0.1]); // Y轴 color("blue") translate([0,0,0]) cube([0.1,0.1,10]); // Z轴 translate([0, 1.4, 0]) rotate([90, 0, 0]) my_box(...); </syntaxhighlight> 执行顺序是: *先执行 rotate([90, 0, 0]) - 旋转物体 *后执行 translate([0, 1.4, 0]) - 平移已旋转的物体 == 速查表格 == === 语法 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>var = value;</code> || 变量赋值 || <code>size = 10;</code> |- | <code>var = cond ? value_if_true : value_if_false;</code> || 条件赋值 || <code>result = (x > 5) ? "large" : "small";</code> |- | <code>var = function (x) x + x;</code> || 匿名函数 || <code>double = function (x) x * 2;</code> |- | <code>module name(…) { … }</code><br><code>name();</code> || 定义模块并调用 || <code>module box(size) { cube(size); }<br>box(10);</code> |- | <code>function name(…) = …</code><br><code>name();</code> || 定义函数并调用 || <code>function square(x) = x * x;<br>area = square(5);</code> |- | <code>include <….scad></code> || 执行文件中的所有代码,会显示文件中的几何体 || <code>include <MCAD/boxes.scad></code> |- | <code>use <….scad></code> || 只导入模块和函数定义,不显示文件中的几何体 || <code>use <utils.scad></code> |} === 常量 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>undef</code> || 未定义的值 || <code>if (value == undef) echo("未定义");</code> |- | <code>PI</code> || 数学常量 π (~3.14159) || <code>circumference = 2 * PI * 5;</code> |} === 运算符 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>n + m</code> || 加法 || <code>sum = 5 + 3; // 结果为8</code> |- | <code>n - m</code> || 减法 || <code>diff = 10 - 4; // 结果为6</code> |- | <code>n * m</code> || 乘法 || <code>product = 6 * 7; // 结果为42</code> |- | <code>n / m</code> || 除法 || <code>quotient = 15 / 3; // 结果为5</code> |- | <code>n % m</code> || 模运算(取余) || <code>remainder = 17 % 5; // 结果为2</code> |- | <code>n ^ m</code> || 幂运算 || <code>power = 2 ^ 4; // 结果为16</code> |- | <code>n < m</code> || 小于 || <code>isLess = 3 < 5; // 结果为true</code> |- | <code>n <= m</code> || 小于等于 || <code>isLE = 4 <= 4; // 结果为true</code> |- | <code>b == c</code> || 等于 || <code>isEqual = (5 == 5); // 结果为true</code> |- | <code>b != c</code> || 不等于 || <code>isNotEqual = (5 != 3); // 结果为true</code> |- | <code>n >= m</code> || 大于等于 || <code>isGE = 8 >= 6; // 结果为true</code> |- | <code>n > m</code> || 大于 || <code>isGreater = 10 > 7; // 结果为true</code> |- | <code>b && c</code> || 逻辑与 || <code>result = (x > 0) && (y > 0);</code> |- | <code><nowiki>b || c</nowiki></code> || 逻辑或 || <code><nowiki>result = (x > 0) || (y > 0);</nowiki></code> |- | <code>!b</code> || 逻辑非(取反) || <code>isNot = !(x > 5);</code> |} === 特殊变量 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>$fa</code> || 最小角度(影响圆弧分段) || <code>$fa = 12; circle(10);</code> |- | <code>$fs</code> || 最小尺寸(影响圆弧分段) || <code>$fs = 1; circle(10);</code> |- | <code>$fn</code> || 圆弧分段数 || <code>$fn = 24; sphere(10);</code> |- | <code>$t</code> || 动画步进值 || <code>translate([0, $t * 100, 0]) cube(10);</code> |- | <code>$vpr</code> || 视口旋转角度(度) || <code>echo($vpr); // 输出当前视口旋转</code> |- | <code>$vpt</code> || 视口平移 || <code>echo($vpt); // 输出当前视口平移</code> |- | <code>$vpd</code> || 视口相机距离 || <code>echo($vpd); // 输出相机距离</code> |- | <code>$vpf</code> || 视口相机视野 || <code>echo($vpf); // 输出视野角度</code> |- | <code>$children</code> || 子模块数量 || <code>module test() echo($children); test() { cube(5); sphere(3); }</code> |- | <code>$preview</code> || F5预览时为true,F6渲染时为false || <code>if ($preview) color("red") cube(10);</code> |} === 修饰符字符 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>!</code> || 仅显示此模块 || <code>!cube(); sphere(); // 只显示cube</code> |- | <code>#</code> || 高亮/调试 || <code>#cube(); // 高亮显示cube</code> |- | <code>%</code> || 透明/背景 || <code>%cube(); // 半透明显示cube</code> |- | <code>*</code> || 禁用 || <code>*cube(); sphere(); // cube被禁用不显示</code> |} === 2D图形 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code><nowiki>circle(radius | d=diameter)</nowiki></code> || 创建圆形 || <code>circle(r=10); circle(d=20);</code> |- | <code>square(size,center)</code><br><code>square([width,height],center)</code> || 创建正方形或矩形 || <code>square(10); square([20,10], center=true);</code> |- | <code>polygon([points])</code><br><code>polygon([points],[paths])</code> || 创建多边形 || <code>polygon([[0,0],[10,0],[5,10]]);</code> |- | <code>text(t, size, font, halign, valign, spacing)</code> || 创建2D文本 || <code>text("Hello", size=10, halign="center");</code> |- | <code><nowiki>import("….extformats: DXF|SVG", convexity)</nowiki></code> || 导入2D文件(DXF/SVG) || <code>import("logo.svg", convexity=10);</code> |- | <code>projection(cut)</code> || 投影 || <code>projection(cut=true) cylinder(h=10,r=5);</code> |} === 3D图形 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code><nowiki>sphere(radius | d=diameter)</nowiki></code> || 创建球体 || <code>sphere(r=10); sphere(d=20);</code> |- | <code>cube(size, center)</code><br><code>cube([width,depth,height], center)</code> || 创建立方体 || <code>cube(10); cube([20,10,5], center=true);</code> |- | <code><nowiki>cylinder(h,r|d,center)</nowiki></code><br><code><nowiki>cylinder(h,r1|d1,r2|d2,center)</nowiki></code> || 创建圆柱体或圆锥体 || <code>cylinder(h=10,r=5); cylinder(h=10,r1=5,r2=2);</code> |- | <code>polyhedron(points, faces, convexity)</code> || 创建多面体 || <code>polyhedron(points=[[0,0,0],[10,0,0],[0,10,0],[0,0,10]], faces=[[0,1,2],[0,2,3],[0,3,1],[1,2,3]]);</code> |- | <code><nowiki>import("….extformats: STL|OFF|AMF|3MF", convexity)</nowiki></code> || 导入3D文件(STL/OFF/AMF/3MF) || <code>import("model.stl", convexity=10);</code> |- | <code>linear_extrude(height,center,convexity,twist,slices)</code> || 线性拉伸2D图形为3D || <code>linear_extrude(height=10) square(10);</code> |- | <code>rotate_extrude(angle,convexity)</code> || 旋转拉伸2D图形为3D || <code>rotate_extrude(angle=360) translate([60,0,0]) circle(10);</code> |- | <code><nowiki>surface(file = "….extformats: DAT|PNG",center,convexity)</nowiki></code> || 根据高度图文件创建3D表面 || <code>surface(file="heightmap.png", center=true);</code> |} === 变换 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>translate([x,y,z])</code> || 平移 || <code>translate([10,20,5]) cube(10);</code> |- | <code>rotate([x,y,z])</code><br><code>rotate(a, [x,y,z])</code> || 旋转 || <code>rotate([45,0,0]) cube(10); rotate(45, [0,0,1]) cube(10);</code> |- | <code>scale([x,y,z])</code> || 缩放 || <code>scale([2,1,0.5]) sphere(5);</code> |- | <code>resize([x,y,z],auto,convexity)</code> || 调整大小 || <code>resize([20,10,5]) sphere(10);</code> |- | <code>mirror([x,y,z])</code> || 镜像 || <code>mirror([1,0,0]) cube(10);</code> |- | <code>multmatrix(m)</code> || 应用变换矩阵 || <code>multmatrix([[1,0,0,10],[0,1,0,0],[0,0,1,0],[0,0,0,1]]) cube(5);</code> |- | <code>color("colorname",alpha)</code><br><code>color([r,g,b,a])</code> || 设置颜色 || <code>color("red") cube(10); color([1,0,0,0.5]) sphere(5);</code> |- | <code><nowiki>offset(r|delta,chamfer)</nowiki></code> || 2D偏移 || <code>offset(r=2) square(10); offset(delta=1, chamfer=true) circle(5);</code> |- | <code>hull()</code> || 凸包运算 || <code>hull() { cube(5); translate([10,10,0]) sphere(3); }</code> |- | <code>minkowski(convexity)</code> || 闵可夫斯基和 || <code>minkowski() { cube(5); sphere(2); }</code> |} === 列表 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>list = […, …, …];</code> || 创建列表 || <code>myList = [1, 3, 5, 7, 9];</code> |- | <code>var = list[2];</code> || 索引列表(从0开始) || <code>value = myList[2]; // 结果为5</code> |- | <code>var = list.x;</code><br><code>var = list.y;</code><br><code>var = list.z;</code> || 点表示法索引(x/y/z) || <code>point = [10,20,30]; xCoord = point.x; // 结果为10</code> |} === 布尔运算 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>union()</code> || 并集 || <code>union() { cube(10); translate([5,0,0]) sphere(5); }</code> |- | <code>difference()</code> || 差集 || <code>difference() { cube(10); translate([5,5,0]) cylinder(h=10,r=3); }</code> |- | <code>intersection()</code> || 交集 || <code>intersection() { cube(10); translate([5,0,0]) sphere(8); }</code> |} === 列表推导式 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code><nowiki>[ for (i = range|list) i ]</nowiki></code> || 基于范围或列表生成 || <code>list = [ for (i = [0:5]) i * i ]; // [0,1,4,9,16,25]</code> |- | <code>[ for (init;condition;next) i ]</code> || C风格循环生成 || <code>list = [ for (i = 0; i < 10; i = i + 1) i ];</code> |- | <code>[ each i ]</code> || 展平列表 || <code>flat = [ each [[1,2],[3,4]] ]; // [1,2,3,4]</code> |- | <code>[ for (i = …) if (condition(i)) i ]</code> || 带条件的生成 || <code>evens = [ for (i = [0:10]) if (i % 2 == 0) i ];</code> |- | <code>[ for (i = …) if (condition(i)) x else y ]</code> || 带条件分支的生成 || <code>result = [ for (i = [0:5]) if (i < 3) i else i*2 ];</code> |- | <code>[ for (i = …) let (assignments) a ]</code> || 带局部变量赋值的生成 || <code>result = [ for (i = [1:5]) let (square = i*i) square + i ];</code> |} === 流程控制 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>for (i = [start:end]) { … }</code> || for循环(步长1) || <code>for (i = [0:5]) { translate([i*10,0,0]) cube(5); }</code> |- | <code>for (i = [start:step:end]) { … }</code> || for循环(指定步长) || <code>for (i = [0:2:10]) { translate([i,0,0]) sphere(2); }</code> |- | <code>for (i = […,…,…]) { … }</code> || for循环(遍历列表) || <code>for (i = [2,4,6,8]) { cube(i); }</code> |- | <code>for (i = …, j = …, …) { … }</code> || 多重for循环 || <code>for (x = [0:2], y = [0:2]) { translate([x*10,y*10,0]) cube(5); }</code> |- | <code>intersection_for(i = [start:end]) { … }</code> || 交集for循环 || <code>intersection_for(i = [0:2]) { rotate([0,i*45,0]) cube(10); }</code> |- | <code>if (…) { … }</code> || 条件判断 || <code>if (x > 5) { cube(10); } else { sphere(5); }</code> |- | <code>let (…) { … }</code> || 局部变量赋值 || <code>let (radius = 5, height = 10) cylinder(r=radius, h=height);</code> |} === 类型测试函数 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>is_undef</code> || 检查是否为未定义 || <code>is_undef(someVar); // 如果未定义返回true</code> |- | <code>is_bool</code> || 检查是否为布尔值 || <code>is_bool(true); // 返回true</code> |- | <code>is_num</code> || 检查是否为数字 || <code>is_num(3.14); // 返回true</code> |- | <code>is_string</code> || 检查是否为字符串 || <code>is_string("hello"); // 返回true</code> |- | <code>is_list</code> || 检查是否为列表 || <code>is_list([1,2,3]); // 返回true</code> |- | <code>is_function</code> || 检查是否为函数 || <code>is_function(function(x) x*x); // 返回true</code> |} === 其他 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>echo(…)</code> || 输出调试信息 || <code>echo("Value =", x, "Size =", size);</code> |- | <code>render(convexity)</code> || 强制渲染 || <code>render(convexity=5) difference() { cube(10); sphere(6); }</code> |- | <code>children([idx])</code> || 引用子模块 || <code>module wrap() { children(); sphere(5); } wrap() cube(10);</code> |- | <code>assert(condition, message)</code> || 断言检查 || <code>assert(x > 0, "x must be positive");</code> |- | <code>assign (…) { … }</code> || 变量赋值(已废弃) || <code>assign (x = 5, y = 10) { cube([x,y,2]); }</code> |} === 函数 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>concat</code> || 连接列表 || <code>newList = concat([1,2], [3,4], [5,6]); // [1,2,3,4,5,6]</code> |- | <code>lookup</code> || 查表 || <code>value = lookup(5, [[0,0],[3,10],[6,20]]); // 插值结果约16.67</code> |- | <code>str</code> || 转换为字符串 || <code>text = str("Value: ", 42); // "Value: 42"</code> |- | <code>chr</code> || 将ASCII码转换为字符 || <code>char = chr(65); // "A"</code> |- | <code>ord</code> || 将字符转换为ASCII码 || <code>code = ord("A"); // 65</code> |- | <code>search</code> || 搜索 || <code>index = search("apple", ["banana","apple","orange"]); // 返回1</code> |- | <code>version</code> || 返回OpenSCAD版本 || <code>ver = version(); // [2021, 1, 0]</code> |- | <code>version_num</code> || 返回OpenSCAD版本号 || <code>verNum = version_num(); // 20210100</code> |- | <code>parent_module(idx)</code> || 返回父模块信息 || <code>module test() echo(parent_module(0)); test();</code> |} === 数学函数 === {| class="wikitable" ! 内容 !! 描述 !! 示例 |- | <code>abs</code> || 绝对值 || <code>abs(-5); // 结果为5</code> |- | <code>sign</code> || 符号函数 || <code>sign(-3); // 结果为-1, sign(0)为0, sign(4)为1</code> |- | <code>sin</code> || 正弦 || <code>sin(30); // 结果为0.5</code> |- | <code>cos</code> || 余弦 || <code>cos(60); // 结果为0.5</code> |- | <code>tan</code> || 正切 || <code>tan(45); // 结果为1</code> |- | <code>acos</code> || 反余弦 || <code>acos(0.5); // 结果为60度</code> |- | <code>asin</code> || 反正弦 || <code>asin(0.5); // 结果为30度</code> |- | <code>atan</code> || 反正切 || <code>atan(1); // 结果为45度</code> |- | <code>atan2</code> || 两参数反正切 || <code>atan2(1, 1); // 结果为45度</code> |- | <code>floor</code> || 向下取整 || <code>floor(3.7); // 结果为3</code> |- | <code>round</code> || 四舍五入 || <code>round(3.5); // 结果为4</code> |- | <code>ceil</code> || 向上取整 || <code>ceil(3.2); // 结果为4</code> |- | <code>ln</code> || 自然对数 || <code>ln(2.71828); // 结果约1</code> |- | <code>len</code> || 长度 || <code>len([1,2,3,4]); // 结果为4, len("hello")为5</code> |- | <code>log</code> || 常用对数 || <code>log(100); // 结果为2</code> |- | <code>pow</code> || 幂运算 || <code>pow(2, 3); // 结果为8</code> |- | <code>sqrt</code> || 平方根 || <code>sqrt(16); // 结果为4</code> |- | <code>exp</code> || 指数函数 || <code>exp(1); // 结果约2.71828</code> |- | <code>rands</code> || 随机数 || <code>rands(0, 10, 5); // 生成5个0-10之间的随机数</code> |- | <code>min</code> || 最小值 || <code>min(3, 7, 2, 9); // 结果为2</code> |- | <code>max</code> || 最大值 || <code>max(3, 7, 2, 9); // 结果为9</code> |- | <code>norm</code> || 范数 || <code>norm([3, 4]); // 结果为5 (3²+4²的平方根)</code> |- | <code>cross</code> || 向量叉积 || <code>cross([1,0,0], [0,1,0]); // 结果为[0,0,1]</code> |} {{了解更多 |https://openscad.org/cheatsheet/index.html }} ==资源== ===官网=== * https://openscad.org/ * https://openscad.org/cheatsheet/index.html ===网站=== ===文章===
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
OpenSCAD
”。