maya python API 2.0でクラスのテストをした際にまとめている自分用のメモです。
テストしながらまとめているので、間違いや文中で行っていることでよりよい方法などありましたら指摘していただけるとありがたいです。
#maya Python API2.0 MItDependencyNodesでシーン内のノード全てを参照する
MItDependencyNodes クラスの挙動テストをしたのでまとめたものです。
実行環境はMaya2017です。
公式ドキュメントリンク - OpenMaya.MItDependencyNodes Class Reference
PAI2.0でスクリプトを組むときはMGlobalで対象ノードを選んでいたのですが、ゆくゆくはそういうわけにも行かない場合が出てくると思うので、cmds で言うところの ls として利用が出来るクラスを探しました。
ドキュメントを見ると判るとおり機能はとてもシンプルでシーン内の全てのノードを取得することしか出来ない模様。
import maya.api.OpenMaya as om
# API2.0でシーン内全てのノードを参照する
test = om.MItDependencyNodes()
while not test.isDone():
currentNode = test.thisNode() # イテレータの現在のノード
# 指定のタイプを取得(ここではtransform)
if currentNode.apiType() == om.MFn.kTransform:
### 対象ノードタイプへの処理 ###
print om.MFnDagNode(currentNode).name() # 名前を確認
test.next() # イテレータを進める
test.reset() # イテレータをリセット
APIタイプを参照して指定のノードを取得できました。
MItDependencyNodes.thisNode()からMObjectで帰ってくるのでMFnDagNode
インスタンスを作成することで無事に名前を取得完了できました。
また、MItDependencyNodesを定義した後に作成したノードもちゃんと参照されました。