DAG パスは、グラフ内で特定のノードまたはノードのインスタンスの場所を一意に識別するノード セットです。パスはグラフの系図を表します。グラフのルート ノードから始まり、ルート ノードの特定の子、この子の特定の子というように続き、パスで指定されるノードが含まれます。インスタンス化されたノードには、ルート ノードからインスタンス化されたノードまで続く複数のパスがあり、それぞれのインスタンスに 1 つのパスがあります。Maya では、ルート ノードで始まるパスのそれぞれのノードに名前を付け、縦線「|」で区切るという方法でパスを表示します。
DAG パスはシェイプがシーンに挿入される方法を表すため、ワールド空間の操作を API で実行する場合、必ず DAG パスを使用する必要があることに注意してください。ノードの「MObject
」ハンドルを取得して、そのノードのコンポーネントのワールド空間の位置を要求しても、API 操作はエラーになります。DAG パスがないと、ワールド空間のどこにオブジェクトが存在するかを Maya は認識できないためです。実際、インスタンス化されたオブジェクトの場合はこの要求に対する答えが複数存在することがあります。このような場合、DAG パスのみが、ノードの特定インスタンスを一意に識別します。ノードの MObject
を返すメソッドを持つほとんどすべてのクラスには、DAG パスを返すメソッドも含まれているので、目的のノードの MDagPath
ハンドルを取得できます。すべての MFn
クラスは、MObject
か MDagPath
のどちらかで構築できます。MObject
を使用すると、MFn
クラスのメソッドを使用して実行した、すべてのワールド空間の操作はエラーになりますが、MDagPath
を使用すると問題なく終了します。
MDagPath
クラスはパスの表記を構築します。ユーザはこの表記を調べて、変更できます。MDagPath
は、ルート ノードをスタックの最下部に配置したノードのスタックとしてパスを表現します。push()
メソッドと pop()
メソッドを使用して、パスのノードを表記に追加したり、削除したりすることができます。
注: これらのメソッドは、実際の DAG に対してノードの追加や削除を行うのではなく、
MDagPath
クラスで構築されたパス表記に対してのみこれを行います。比較演算子と代入演算子は、グラフ自体ではなく、MDagPath
クラスで構築された表記に作用します。このため、あるパスを別のパスに代入してもグラフは修正されず、目的のMDagPath
インスタンスの内容のみが修正されます。
パス中のノードは DAG 階層の別々のレベルに存在するので、パスの各ノードに累積したさまざまな変換が存在します。MDagPath
クラスを使用すると、inclusiveMatrix()
クラスと exclusiveMatrix()
クラスを使用してこれらの変換を返すことができます。
たとえばパスが以下のように定義されているとします。
|RootTransform|Transform1|Transform2|Shape
Transform2 までの包括的行列は、RootTransform、Transform1、および Transform2 の累積です。排他的行列は、RootTransform および Transform1 だけの累積を含みます。
Maya では、オブジェクト レベルで選択を行うと、実際に選択したシェイプの親ノードであるトランスフォーム ノードが選択されます。MGlobal::getActiveSelectionList()
を使用して選択を調べると、呼び出し側に返される MDagPath
は、このトランスフォームまでのパスのみを指定し、画面上で選択された実際のシェイプを指定しません。MDagPath
には extendToShape()
という便利なメソッドがあり、これを呼び出すと、最終変換の下のシェイプ ノードをパスに追加できます。
特定の MDagPath
に適用できる有効な関数セットは、パスの最終ノードで決まります。最終ノードがトランスフォーム ノードである場合は、トランスフォーム ノード上で動作する関数セットを MDagPath
インスタンスに適用できます。シェイプ ノードがパスの最終ノードである場合、MDagPath
インスタンスに適用できる関数セットは、そのシェイプに作用する関数セットです。
DAG パスを使用すると、オブジェクト名を再使用できます。共通の親ノードを持つ 2 つ以上の DAG ノード上に同じ名前が表示されない限り、オブジェクト名は再使用できます。