OpenSCAD 用户手册/WIP/迁移指南
外观
< OpenSCAD 用户手册 | WIP
OpenSCAD 2019 包含了一些破坏旧设计或对之前没有错误和警告的代码产生错误和警告的更改。
在以下情况下,OpenSCAD 2019 会在重复赋值的情况下产生警告
- 在同一个文件和范围内覆盖变量
- 主文件中的赋值被包含文件覆盖
在以下情况下,变量会由最后一个赋值静默覆盖
- 通过命令行赋值
- 包含文件中的变量被主文件覆盖
这段代码现在会导致警告,因为 $test 没有被初始化
test = $test==undef ? 1 : $test ;
解决方法是使用新的 is_undef() 函数
test = is_undef($test) ? 1 : $test ;
内置函数和模块现在会在参数类型不匹配时发出警告。
由于类型检查以前是通过使用内置函数返回 undef 来完成的,因此现在建议/要求使用 is_list()、is_num()、is_bool() 和 is_string() 来进行类型检查。
OpenSCAD 2019 会在多次提供命名参数时发出警告。
cube(size=2,size=1);
OpenSCAD 现在会在模块或函数参数未声明时发出警告。
这意味着现在会导致警告
a=1;
module test(){
cube(a);
}
test();
translate([2,0,0])
test(a=2);
如果您打算这样做 - 比如在 Write.scad 库中 - 您可以按如下方式更新代码
a=1;
module test(a){
cube(a);
}
test();
translate([2,0,0])
test(a=2);
对于 Write.scad,具体来说:像这样的定义
module writecircle(text,where,radius){
需要更改为
module writecircle(text, where, radius, rotate, font, h, t, spac, east, west, middle, ccw){
</syntaxhighlight lang="unknown">
==== builtin modules ====
Same goes for builtin modules, so this now creates a warning:
<syntaxhighlight lang="text">
sphere(center=true);
以及
circle(center=true);
circle 和 sphere 都不支持 center 参数 - circle 和 sphere 始终居中。
另一个例子是
circle(radius=5);
因为 circle 接受 r,而不是 radius。
module test(a){
a=2;
sphere(a);
}
test();
translate([4,0,0])
test(a=1);
请注意,这个非常类似的示例不会触发警告,因为实现中有缺陷
module test(a){
a=1+1;
sphere(a);
}
test();
translate([4,0,0])
test(a=2);
像这样的
cube(-1);
cube([1,1,-1]);
cube(0);
cube([1,1,0]);
cylinder(h = 1, r1 = 0, r2 = 1, d = 2, center = true);
如果内置函数的参数计数不匹配,OpenSCAD 2019 会显示警告
echo(abs(123,456));
内置 Assert 不能被用户函数或模块覆盖。如果您有一个名为 assert 的函数或模块,则必须重命名它。