NURBS クラスの操作

MAXScript では、3ds Max シーン オブジェクトを直接スクリプトで処理できますが、この NURBS ファミリのクラスだけは例外です。3ds Max NURBS オブジェクトの作業には間接的な手段だけが用意されています。また、NURBS ファミリでは、3ds Max NURBS オブジェクトを表す理想的な構造を構築できます。更に、この構造を使用して、シーン NURBS オブジェクトの新規作成や追加、または既存のシーン オブジェクトの特定部分へアクセスできます。

この構造は、「NURBS クラス」にリスト表示されている MAXScript NURBS クラスのインスタンスで構成されています。このメイン クラスは、 NURBSSet です。この構造はシーンの NURBS オブジェクトに対応し、カーブ、サーフェス、従属サーフェス、ポイントなどの NURBS 項目のコレクションが含まれています。これらの NURBS 項目は、それ自体が他の MAXScript NURBS クラスのインスタンスです。NURBS オブジェクトを記述する NURBSSet オブジェクトを構築し、それを実シーン オブジェクトとしてインスタンス化します。逆に、指定したシーン オブジェクトに対応する NURBSSet の作成を要求し、これを使用してコンポーネント NURBS 項目を調査したり、シーン オブジェクトの特定のプロパティをこのシーン オブジェクト上で直接修正したりできます。

パラメータの有効性

3ds Max NURBS SDK メソッド、同等の MAXScript メソッドおよびプロパティには、パラメータの有効性に関する機能がほとんどありません。そのため、無効なパラメータを関数に渡したり無効な範囲へアクセスしたりすると、アサーション エラーが発生します。ほとんどの場合、[再試行](Retry) または [無視](Ignore) を選択すると、3ds Max が停止することはありません。次に例を示します。

  1. CV サーフェスを作成し、それを選択します。

  2. MAXScript に次のように入力します。

s = getnurbsset $ #relational
obj = getobject s 1
tess = getviewtess obj #displacement

これは、ビューポートがディスプレイスメント近似をサポートしないため無効です。ディスプレイスメント近似は、レンダリングでのみサポートされます。結果として、この例はアサーション エラーを発生させます。

NURBSId とインデックス

NURBSSet や他の NURBS クラスで作業するときは、セット内でコンポーネント項目を識別する方法を理解することが重要です。NURBSSet がシーン NURBS オブジェクトとしてインスタンス化される前に、個々のカーブ、ポイント、およびサーフェスはインデックス番号によって識別されます。セットにオブジェクトを追加すると、1 で始まる連続するインデックスが割り当てられます。特定の項目を参照する場合、たとえば、ブレンド サーフェスの親サーフェスを指定するには、このインデックスを使用します。オブジェクトが NURBSSet に追加されると、そのインデックスを .index プロパティで特定することができます。これは読み込み専用のプロパティです。

ただし、NURBSet がいったんシーン オブジェクトに関連付けられた後や、既存のシーン オブジェクトから直接作成された場合は、このインデックスは有効ではなくなります。代わりに、 NURBSId と呼ばれる別の数字が各項目に割り当てられます。これ以降の項目の参照にはこの ID を使用する必要があります。インスタンス化されている NURBSSet 中のすべての項目の NURBSId は、そのオブジェクトの .NURBSId プロパティを介して取得できます。

これらの識別子、インデックスまたは NURBSId はその他の従属オブジェクトの親オブジェクトを指定するためにいろいろな個所で使用されます。多くの場合、これらは従属オブジェクトの .parent または .parentID プロパティを使用して指定されます。含まれている .NURBSSet がシーン オブジェクトに関連付けられているかどうかに応じて、適切なプロパティを使用していることを確認する必要があります(非関連 NURBSSet に対しては .parent 、関連 NURBSSet に対しては .parentID )。 .parent の設定で使用されているインデックスは 1 から始まることに注意してください。