LoginSignup
7
4

More than 5 years have passed since last update.

maya Python API2.0 MItDependencyNodesでシーン内のノード全てを参照する

Posted at

maya python API 2.0でクラスのテストをした際にまとめている自分用のメモです。
テストしながらまとめているので、間違いや文中で行っていることでよりよい方法などありましたら指摘していただけるとありがたいです。


maya Python API2.0 MItDependencyNodesでシーン内のノード全てを参照する

MItDependencyNodes クラスの挙動テストをしたのでまとめたものです。
実行環境はMaya2017です。

公式ドキュメントリンク - OpenMaya.MItDependencyNodes Class Reference

PAI2.0でスクリプトを組むときはMGlobalで対象ノードを選んでいたのですが、ゆくゆくはそういうわけにも行かない場合が出てくると思うので、cmds で言うところの ls として利用が出来るクラスを探しました。

ドキュメントを見ると判るとおり機能はとてもシンプルでシーン内の全てのノードを取得することしか出来ない模様。

MItDependencyNodes_test.py
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_test.PNG

また、MItDependencyNodesを定義した後に作成したノードもちゃんと参照されました。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4