トポロジの変更(コンポーネントの追加と削除)

 
 
 

以下の表は、コンポーネントの追加と削除でよく使用するコマンドとメソッドの一部をリストしたものです。

ジオメトリ

Softimage ネイティブ コマンド

オブジェクト モデル

カーブ

ApplyTopoOp

SIAddPointOnCurve

SIAddPointOnCurveAtEnd

SIAddPointOnCurveAtStart

SIDeletePointOnCurve

注:

トポロジ変更コマンドの多くは ApplyTopoOp を使用して処理され、多くのオペレータの中から 1 つを指定します(InsertNurbsCrvKnot、RemoveNurbsCrvKnot、CrvOpenClose など)。

AddElement (SubComponent)

RemoveElement (SubComponent)

注:

オブジェクトモデルでは、これらのコマンドを使用してすべてのサブエレメントを追加および削除できますが、アイソラインとアイソポイントはインデックス付けできないため対象外です。ただし、SubComponentCluster を介してのみ使用できます。

ポリゴン

AddEdge

ApplyTopoOp

DuplicateMeshComponent

SplitEdge

SplitPolygon

注:

トポロジ変更コマンドの多くは ApplyTopoOp を使用して処理され、多くのオペレータの中から 1 つを指定します(DeleteComponent、DiceObject、WeldPoints など)。

NURBS

ApplyTopoOp

注:

トポロジ変更コマンドの多くは ApplyTopoOp を使用して処理され、多くのオペレータの中から 1 つを指定します(InsertSrfKnot、RemoveSrfKnot、SrfOpenClose など)。

注:

クラスタ内でのトポロジの変更の例については、「例: クラスタへのポイントの追加」および「例: クラスタからの削除」を参照してください。

トポロジの変更に対処する

ポリゴンのインデックスとポリゴン ID のインデックスの違いは何でしょうか。 ポリゴン ID をリストに表示するにはどうすればいいでしょうか。 その答えをひと言で言うと、表示はできません。インデックスのマッピングが公開されていないからです。 しかし、ユーザ データのプロパティを使った解決策があります。

重要:

トポロジ オペレータを適用する前後では、メッシュ コンポーネントに 0 ~ N-1 の番号と使用されるすべての ID が意図的に付けられます。

ジオメトリ コンポーネントを削除すると、トポロジ オペレーションは上記の規則を重視して、実質的にすべてのコンポーネントを再びインデックスを付けます。 たとえば、インデックス 0、1、2、3 を持つ 4 辺ポリゴンのグリッドが存在する場合、インデックス 1 とインデックス 2 でポリゴンを削除すると、結果はインデックス 0、1 を持つ 2 辺ポリゴンのグリッドになります。 つまり、このグリッドでは有効なインデックスの中で poly[1]が最も大きいので、poly[4]を使用すればエラーが発生します。

トポロジ オペレータは、以下のような内部オペレーションを実行することで、必要に応じてメッシュ コンポーネントを変更できます。

  • インデックスの名前を A から B に変更する

  • インデックス A と B をスワップする

  • [A,B,C,D...]の中から任意のインデックスの名前を A に変更する(ディゾルブする(複数の頂点を単一の頂点に減少させる)場合など)

  • A を[A,B,C,D...]に置き換える(単一のポリゴンを複数のポリゴンに分割する(ポリゴン A をポリゴン A,B,C,D にする)場合など)

すると、トポロジの更新メカニズムにより、確実にすべてのクラスタ エレメントが同じ方法で処理されます。 これらのオペレーションから分かるように、マッピングは必ずしも 1 対 1 ではありません。

トポロジ オペレータがクラスタを更新するのと同じ方法でいくつかのプロパティやデータを更新したい場合、唯一の正しい実行策は、データをクラスタの下のクラスタ プロパティに置くことです(たとえば、ユーザ データ マップを使います)。 実際に、クラスタ プロパティの使用は、1 対 1 のマッピングを抽出する方法です。 しかし、N 対 1 や 1 対 N のマッピングを伴う状況も存在するため、これは常に十分な方法ではありません。

ポリゴンを削除した後の結果処理などのために 1 対 1 のマッピングを取得する場合、安全な実行策はクラスタと同じ内容でクラスタの下にユーザ データ プロパティを作成することです。

Cluster A = {1,3,4}

Property under cluster A = {1,3,4}

その後、トポロジ オペレーションによってエレメント 3 が削除され、エレメント 4 の名前が 3 に変更されると、結果のデータは以下のようになります。

Cluster A = {1,3}

Prop under cluster A = {1,4}