球体を並べるコマンドプラグイン

コマンドプラグインの仕様

以下のようなフラグをもったlineUpというコマンド名の球体を横に並べるMELコマンドを、コマンドプラグインによって作成してみます。

-n int
-number int
並べる球体の個数を表す、intの引数をもつフラグ
-rad double
-radius double
並べる球体の半径を表す、doubleの引数をもつフラグ

実行例

  1. Python フォルダーの中に lineUp.py というファイルをエディターによって作ります。
    import sys
    import maya.cmds
    import maya.OpenMaya
    import maya.OpenMayaMPx
    
    kPluginCmdName = 'lineUp'
    kRepeatFlag = '-n'
    kRepeatLongFlag = '-number'
    kRadFlag = '-rad'
    kRadLongFlag = '-radius'
    
    class LineUp(maya.OpenMayaMPx.MPxCommand):
        def __init__(self):
            maya.OpenMayaMPx.MPxCommand.__init__(self)
    
    
        def doIt(self, args):
            rep = 1
            rad = 1.0
            argData = maya.OpenMaya.MArgDatabase(self.syntax(), args)
            if argData.isFlagSet(kRepeatFlag):
                rep = argData.flagArgumentInt(kRepeatFlag, 0)
            if argData.isFlagSet(kRadFlag):
                rad = argData.flagArgumentDouble(kRadFlag, 0)
            for i in range(rep):
                maya.cmds.sphere()
                maya.cmds.scale(rad, rad, rad)
                maya.cmds.move(2*rad*i, 0, 0)
    
    
    def creator():
        return maya.OpenMayaMPx.asMPxPtr(LineUp())
        
    
    def syntaxCreator():
        syntax = maya.OpenMaya.MSyntax()
        syntax.addFlag(kRepeatFlag, kRepeatLongFlag, maya.OpenMaya.MSyntax.kLong)
        syntax.addFlag(kRadFlag, kRadLongFlag, maya.OpenMaya.MSyntax.kDouble)
        return syntax
    
    
    def initializePlugin(mObject):
        mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
        try:
            mPlugin.registerCommand(kPluginCmdName, creator, syntaxCreator)
        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. lineUp.py をロードします。
    以下のどちらかの方法でロードします。
  3. スクリプト エディタ の MEL タブから以下のように実行します。
    lineUp -n 5 -rad 2;
  4. シーンに半径2のNURBS球体が5個並んで作成されます。

参考


Prev | Next
Home | Contents
Mail