0

$fn が多くの組み込みオブジェクトと操作でファセットの数を制御する方法と同様に、$Precision を使用して動作を変更するオプションが必要なライブラリにいくつかの関数を作成したいと思います。

たとえば、円柱オブジェクトまたは linear_trusion 操作を使用する場合、オブジェクト ファイルのどこにも $fn、$fa、または $fs を指定する必要はありません。ライブラリにはデフォルトがあり、警告やエラーは発生しません。ただし、「$fn=45;」を指定すると 私のオブジェクトファイルの先頭では、変数を使用するすべてのオブジェクトまたは操作は、より低いスコープでオーバーライドするか、パラメーターで明示的にオーバーライドしない限り、デフォルトではなくこの値を使用します。

問題は、これが USER ライブラリでは不可能であるようです。

ライブラリで変数 $Precision を宣言しない (そして値を割り当てる) と、オブジェクト ファイルで値を指定しない限り、ライブラリを使用するとすべてのライブラリ呼び出しで警告がスローされます。

ライブラリで値を指定する場合、すべての関数呼び出しでパラメーターとして明示的にリストする以外に、値をオーバーライドする方法はないようです。そういうのは目的を破ります。オブジェクト ファイル内の他のスコープで値を指定しても、ライブラリ内のデフォルト セットは上書きされません。これは、ライブラリのどこにデフォルトを設定しても、オブジェクト ファイルのどこに "use" または "override assignment" ステートメントを置いても、当てはまるようです。

例として、ライブラリでこのような関数が必要です。

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 がオブジェクトとそれに問い合わせる操作からどのように見えるかと同様に、すべての方法でそれを使用したいと考えています。

4

1 に答える 1

1

を使用$Precision == undefすると、OpenSCAD の新しいバージョンで常に警告が発生します。

この特定のチェックのためis_undefに導入され、警告を生成せずに変数をチェックできるようになりました。

于 2021-12-19T03:54:41.190 に答える