处理派生自其他变量的 OpenSCAD 模块参数

3D打印 opencad
2021-05-01 08:26:39

我是 OpenSCAD 的新手,但我只能获得适用于简单值的默认参数。

我想知道是否有任何方法可以实现以下目标,其中我有一些参数可供模块调用者使用,但默认情况下它们是从其他参数派生的。

我原以为这会起作用 - 我认为编译器能够在编译期间在范围内解析这些变量,因为这里的一切都是确定性的 - 所以也许我只是缺少一些语法?如果没有,是否有更好的方法来实现这一目标?

module clasp(length=20, 
             pin_radius=5,
             mouth = pin_radius * 0.9,
             inner_radius = pin_radius + 0.25,
             outer_radius = inner_radius * 1.4,
             ) {
  ... do the work ...
}

不幸的是,这种方法留下了 mount/inner/outer all undef

1个回答

这似乎是语言的限制。一种稍微难看的解决方法是,在模块的主体中​​:

mouth = is_undef(mouth) ? pin_radius * 0.9 : mouth;

等等。如果您只通过use其他文件中指令使用该文件,另一种方法是文件范围变量。这些可以在模块被调用时被覆盖,就像模块参数一样,并且它们不为/从调用文件的文件范围变量命名空间提供或获取值。