APIでオブジェクトの選択リストを取得する

     PythonAPIで選択されたオブジェクトのリストを取得する方法
    import maya.OpenMaya as OM
    
    # 各種変数の定義
    node      = OM.MDagPath()
    component = OM.MObject()
    slist     = OM.MSelectionList()
    nodeFn    = OM.MFnDagNode()
    
    # アクティブリストの取得
    OM.MGlobal.getActiveSelectionList( slist )
    
    for i in range( slist.length() ):
        slist.getDagPath( i, node, component )
        # nodeFn変数にダグオブジェクトをセット
        nodeFn.setObject( node )
    
        # 名前を出力する
        print( nodeFn.name() )
    
     これで選択されたノードの名前を出力するスクリプトの完成~



    と、これだけたくさん書いて選択したオブジェクトの名前出力だけかいっ! んならmaya.cmdsで書けば
    import maya.cmds as mc
    for n in mc.ls( sl=True ):
        print( n )
    
    の3行で終わるわボケェ!! とお思いでしょう、いやまったくその通りですww



     APIを使用した最大の旨みは、やはり選択オブジェクトのリストを名前で取得するのではなく、ノード情報自体を受け取れる事でしょう!
     どういう事かと言うと・・・
    import maya.cmds as mc
    # ポリキューブを作成
    mc.polyCube()
    node = mc.ls( sl=True )[0]
    
    # ポリキューブの名前を変更
    mc.rename( node, 'pBox' )
    # 変数ノードを出力
    print( node )
    
    ↑を実行すると実際のノードの名前と出力される文字列が一致しません。
    リネームしたので変数nodeの中の文字列と実際の名前が変わってしまったからですね。
    変数に入っている情報が文字列である以上、当たり前の現象であり、スクリプターはこれらに注意しながら記述する必要がありました。



    ところがこれを先ほどのAPIでやると
    import maya.cmds as mc
    import maya.OpenMaya as OM
    
    component = OM.MObject()
    slist     = OM.MSelectionList()
    nodeFn    = OM.MFnDagNode()
    
    # ポリキューブを作成
    mc.polyCube()
    
    OM.MGlobal.getActiveSelectionList( slist )
    for i in range( slist.length() ):
        node = OM.MDagPath()
        slist.getDagPath( i, node, component )
        nodeFn.setObject( node )
    
    # ポリキューブの名前を変更
    mc.rename( nodeFn.name(), 'pBox' )
    # nameメソッドを呼び出してnodeFnに格納されているノードの名前を出力
    print( nodeFn.name() )
    
    なんと!!!!!! ちゃんとリネームに対応してますっ! これは素晴らしい!!!
    今までペアレントやリネームの度にノードを追えるよう気をつけていたのが、これによって開放されます!
    このAPIを使用した選択オブジェクトのリストを関数化しておけば、色々大活躍できそうですね。

    え? 前Pymelの時に同じ事いって騒いでなかったかって?
    バカヤロー、必ずしもPymelが入ってる環境でスクリプト書くとは限らないんじゃぁぁぁぁぁ!

    是非有効活用したいところです(^^)/
    スポンサーサイト

    コメントの投稿

    非公開コメント

    No title

    おお!グイグイAPIやってるじゃないですか!
    是非、デフォーマも(*´ω`*)v

    デフォーマー

    いやぁ、実はちょっくらmayaPython書く時に、ノードの名前追ってくの面倒だったんで利用しようかなぁと。今の環境だとPymel使えないんですヨ~w

    でも、そろそろデフォーマーの作成を考える時が来たかもです。MayaのWrapじゃぁ心もとないですからねぇ。。。
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR