【发布时间】:2021-12-19 11:54:41
【问题描述】:
我想在一个库中创建一些函数,我希望使用 $Precision 来修改其行为,类似于 $fn 如何控制许多内置对象和操作中的构面数量。
例如,如果我使用圆柱对象或 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 被询问它的对象和操作看到的所有方式使用。
【问题讨论】:
-
使用 is_undef($Precision) 检查变量是否已设置。
-
应该是一个答案,而不仅仅是评论。我得到的文档没有提到 is_... 函数——感谢你,我现在知道了。完美运行。
-
有openscad.org/cheatsheet 在身边总是很好:)
标签: openscad