2019-09-01に投稿

MObjectからMDagPathを取得する

MDepenedencyNodeからMDagPathを取得する

API経由で階層などを取得すると、MDepenedencyNode(インスタンスの形式はMObject)で帰ってくることが多い
でもそれを別のMFnに入れようとすると大体求められるのはMDagPath。

MDependencyNodeからMDagPathを取得するにはMFnDagPathにMObjectを入れる必要がある。MFnDependecyNodeにはDagPathを取得機能はないのでちょっと分かりづらい

MFnDagNode

Maya2019 MFnDagNode クラスリファレンス

DagPathの生成と階層の走査が出来るクラス

テストスクリプト

以下の四角があるだけのシーンで後述のスクリプトをテスト

2019-09-01 00_47_48-Autodesk Maya 2019_ 無題_.png


ボックスを選択して実行

from maya.api import OpenMaya as om2

sel_list = om2.MGlobal.getActiveSelectionList()

# selection list からの MDagPath と MDependensyNode の取得
dag_from_sel = sel_list.getDagPath(0)
dep_from_sel = sel_list.getDependNode(0)

print type(dag_from_sel)
# return : <type 'OpenMaya.MDagPath'>
print type(dep_from_sel)
# return : <type 'OpenMaya.MObject'>

定義時同様の方法で、MSelectionListを定義して取得しようとしてもMDependencyNodeからはMDagPathの取得はできない。

# DagPathならselection listに再度入れると取得できる
temp_sel_list = om2.MSelectionList()
temp_sel_list.add(dag_from_sel)
print temp_sel_list.getDependNode(0)
# return : <OpenMaya.MObject object at 0x000001B6519BF6F0>

# DepenedencyNodeはselection listに再度入れてもDagPathを取得できない
temp_sel_list = om2.MSelectionList()
temp_sel_list.add(dep_from_sel)
print temp_sel_list.getDagPath(0)
# エラー: TypeError: file <maya console> line 3: item is not a DAG path # 

MFnDagNodeクラスを経由することでMDependensyNodeからMDagPathの取得が出来る。

# MObject → MDadPathはMFnDagNodeに入れると取得できる
mfn_dag = om2.MFnDagNode(dep_from_sel)
dag_from_dep = mfn_dag.getPath()
print type(dag_from_dep)
# return : <type 'OpenMaya.MDagPath'>
print dag_from_dep
# return : pCube1

ヨセミテ

ゲームの会社でテクニカルアーティストしてます

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント