選択されたノードを調べるコマンド

必要なメソッド

選択されているオブジェクトのリストを得て、 リストの中から 1 つずつノードを取り出すためには、 以下のメソッドを使用します。

maya.OpenMaya.MSelectionList()
選択されているノードを入れておくためのリストを作成するためのメソッド
maya.OpenMaya.MGlobal.getActiveSelectionList()
選択されているノードのリストを得るためのメソッド
maya.OpenMaya.MItSelectionList()
選択されているノードが入っているリストからイテレータを得るメソッド

実行例

選択されているオブジェクトの移動Xアトリビュートをスクリプトエディタに表示するコマンドプラグインです。

  1. Python フォルダーの中に selectionList.py というファイルをエディターによって作ります。
    ファイル(selectionList.py)の内容は、以下のように書いておきます。
    import sys
    import maya.OpenMaya
    import maya.OpenMayaMPx
    
    kPluginCmdName = 'selectionList'
    
    class selectionList(maya.OpenMayaMPx.MPxCommand):
        def __init__(self):
            maya.OpenMayaMPx.MPxCommand.__init__(self)
    
        def doIt(self, args):
            dependNode = maya.OpenMaya.MObject()
    
            slist = maya.OpenMaya.MSelectionList()
            maya.OpenMaya.MGlobal.getActiveSelectionList(slist)
            iter = maya.OpenMaya.MItSelectionList(slist)
    
            while not iter.isDone():
                iter.getDependNode(dependNode)
                fnDependNode = maya.OpenMaya.MFnDependencyNode(dependNode)
                txAttr = fnDependNode.attribute('translateX')
                txPlug = maya.OpenMaya.MPlug(dependNode, txAttr)
                tx = txPlug.asDouble()
                print ("tx " + str(tx))
                iter.next()
    
    
    def creator():
        return maya.OpenMayaMPx.asMPxPtr(selectionList())
        
    def initializePlugin(mObject):
        mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
        try:
            mPlugin.registerCommand(kPluginCmdName, creator)
        except:
            sys.stderr.write('Failed load plugin : %s' % kPluginCmdName)
            raise
    
    def uninitializePlugin(mObject):
        mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
        try:
            mPlugin.deregisterCommand(kPluginCmdName)
        except:
            sys.stderr.write('Failed unload plugin : %s' % kPluginCmdName)
            raise
    
  2. selectionList.py をロードします。
    以下のどちらかの方法でロードします。
  3. Maya のシーンに存在するオブジェクトをいくつか選択しておきます.
  4. スクリプト エディタ の MEL タブから以下のように実行します。
    selectionList;
  5. スクリプト エディタ のヒストリペインに以下のような表示が出ます。
    tx -3.92930274546
    tx 8.856042999
    tx 1.42260569659

スクリプトの解説

selectionList クラスの doIt メソッドの部分だけを解説します。

dependNode = maya.OpenMaya.MObject()
選択されているノードを入れておくための MObject を作成します。
slist = maya.OpenMaya.MSelectionList()
選択されているノードを入れておくリストを作成します。
maya.OpenMaya.MGlobal.getActiveSelectionList(slist)
slist の中に現在選択されているノードのリストを入れます。
iter = maya.OpenMaya.MItSelectionList(slist)
ノードを 1 つずつ処理させるために、イテレータを作成します。
while not iter.isDone():
イテレータの次の要素がなくなるまでループを繰り返します。
iter.getDependNode(dependNode)
イテレータからノードを取り出して dependNode に入れます。
fnDependNode = maya.OpenMaya.MFnDependencyNode(dependNode)
ノードを操作するためのメソッドを集めたクラスを作成します。
txAttr = fnDependNode.attribute('translateX')
ノードから translateX アトリビュートを取り出します。
txPlug = maya.OpenMaya.MPlug(dependNode, txAttr)
translateX アトリビュートのプラグを作成します。
tx = txPlug.asDouble()
プラグの値を double の値として tx に代入します。
print ("tx " + str(tx))
tx の値をスクリプトエディタに表示します。
iter.next()
イテレータを次のオブジェクト(ここでは次の選択されているノード)にします。

参考


Prev | Next
Home | Contents
Mail