无法让 OpenScad $Special变量"Correctly"工作



我想在库中创建一些函数,我希望使用$Precision来修改这些函数的行为,类似于$fn控制许多内置对象和操作中的facet数量。

例如,如果我使用cylinder对象或linear_extrude操作,我不需要在对象文件中的任何位置指定$fn、$fa或$fs。该库具有默认值,不会出现任何警告或错误。但是,如果我确实指定了"$fn=45;"在我的对象文件的开头,所有使用该变量的对象或操作都将使用该值,而不是默认值,除非我在较低的范围内重写或显式地使用参数。

问题似乎是,这对于USER库来说是不可能的。

如果我没有在库中声明变量$Precision(并分配值(,那么对该库的任何使用都会在每次库调用时发出警告,除非我在对象文件中指定值。

如果我确实在库中指定了一个值,那么除了在每个函数调用中显式地将一个值列为参数之外,似乎没有任何方法可以覆盖该值。这种做法违背了目的。在对象文件中的任何其他范围内指定值都不会覆盖库中的任何默认设置。无论我在库中的哪里设置默认值,也无论我在对象文件中的哪里放置";使用";或";超驰分配";陈述

举个例子,我希望在库中有一个这样的函数。

function fn(r=0) = ((r<=0?1:r*2)*3.1415926)/($Precision==undef?0.5:($Precision<0.1 ? 0.5 : $Precision));

当我使用它时,我不想被要求指定$Precision=。。。避免

WARNING: Ignoring unknown variable '$Precision', in file...

但是,如果我在我的对象文件中声明了$Precision,我希望它在所有方面都能被使用,类似于$fn被对象和询问它的操作所看到的方式。

使用$Precision == undef仍然会在较新版本的OpenSCAD中引起警告。

对于这种特定的检查,引入了is_undef,从而可以在不产生警告的情况下检查变量。

最新更新