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 クラスは、これらの変換が inclusiveMatrix() クラスと exclusiveMatrix() クラスを使用して返すことを可能にします。
|RootTransform|Transform1|Transform2|Shape
Transform2 までの包括的行列は、RootTransform、Transform1、および Transform2 の累積です。排他的行列は、RootTransform および Transform1 だけの累積を含みます。
Maya では、オブジェクト レベルで選択を行うと、実際に選択したシェイプの親ノードであるトランスフォーム ノードが選択されます。MGlobal::getActiveSelectionList() を使用して選択を調べると、コールした側に返される MDagPath は、このトランスフォームまでのパスのみを指定し、画面上で選択された実際のシェイプを指定しません。MDagPath には extendToShape() という便利なメソッドがあり、これをコールすると、最終変換の下のシェイプ ノードをパスに追加できます。
特定の MDagPath に適用できる有効な関数セットは、パスの最終ノードで決まります。最終ノードがトランスフォーム ノードである場合は、トランスフォーム ノード上で動作する関数セットを MDagPath インスタンスに適用できます。シェイプ ノードがパスの最終ノードである場合、MDagPath インスタンスに適用できる関数セットは、そのシェイプに作用する関数セットです。