SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

Maya Python MELスクリプトの履歴を見て、Pythonに脳内変換する(Maya Python導入始めの方むけ)その1


Python導入したい

 よくMayaでは「Python使え使え便利だよ」って言われますが

Mayaのオペレーションの履歴(スクリプトエディタに表示されるあれ)ってMEL固定ですよね。

なので導入始めの方は、どうしてもMELから変換でてこずることがあります。

 

そこで、変換のルールを簡単に解説しようかと思います。

 

 

「ポリゴン球」で

 ここでは例としてポリゴン球生成を行います。シェルフからポリゴン球を生成すると、以下の履歴が表示されます。


polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;

これをPythonにすると


cmds.polySphere(r=1,sx=20,sy=20,ax=[0,1,0],cuv=2,ch=1)

こう変換できます。詳しい解説は後述。

 

 

cmdsとは

 これはPythonの中からMELの処理にアクセスするためのライブラリになります。もともとPythonはMELのことを一切しらないので、これを一番手前につけておく必要があります。(余談ですが本来は、そのライブラリを読み込むために、import maya.cmds as cmdsという文を、スクリプトの一番上につけておく必要があります。)

 

関数の変換

 MELコマンドをPythonへ変換するときはふたつの部分にわけて考えます。


polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;

の、

「polysphere 」部分(関数)と

「-r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1」の部分(引数)です。

 

 関数部分は必ずこういう形に変換できます。


cmds.polySphere()

最初にcmds.と、最後に()をいれるだけです。

これができたら次に、()の中に引数を変換していれていきます。

 

 なお、MELで「文の終わり」を意味する最後の;(セミコロン)ですが、Pythonは「改行」がその代用となっていますので、必要ありません。

 

引数の変換

 Maya Pythonの引数は必ず 引数名=値, という形が1セットになっています。

MELでいう「-r 1」の部分は「-rは1」という意味で、pythonでは「r=1,」とかきます。引数全体を変換すると以下のようになります。


r=1,sx=20,sy=20,ax=[0,1,0],cuv=2,ch=1

 

 

 ちなみにaxは3つ数字が必要でMELではスペースをあけて0 1 0としていました。しかしPythonでは文法上その書き方が許されないので、四角カッコでくくって、[0,1,0]という配列(正確にはリスト)として値を渡します。

 

 「文法上は」って言われても、よくわからない、という方は、まず関数名(この場合cmds.polySphere)でググって、公式リファレンスサイトを見に行きます。

例えばaxis(ax)の項目をみて、「引数型」の列を確認します。

 [linear, linear, linear]

linearは数字が入るよという意味で、でくくって数字が3つならぶように書いてね。ということです。ここを参考にすると良いかと思います。

 

余談1:引数名

 引数名はMEL、Pythonともに省略する書き方と、省略しない書き方ができます。

先ほどの公式リファレンスサイト

を参考にたとえばr=0はradius=0の省略ということがわかります。

 

 個人的には、省略しない書き方がベストだと思います。なぜなら、将来他人(もしくは自分)が見たときにどんな意味だったかわからなくなるからです。(コメントとかと同じですね。)

 

余談2:引数が長くなったときは

 上記省略しない書き方で長くなったときは、Pythonではスクリプトの途中に\(バックスラッシュ)(環境によっては円マーク)をいれて改行することで関数の途中でも改行させることができます。たとえば


cmds.polySphere(r=1,sx=20,sy=20,ax=[0,1,0],cuv=2,ch=1)

これを


cmds.polySphere(r=1,\
sx=20,\
sy=20,\
ax=[0,1,0],\
cuv=2,\
ch=1)

と、かくことができます。

 

参考:

MELコマンドpolySphereのリファレンス

polySphere コマンド

画面右上にPythonバージョンへのリンクがあり、Pythonコマンドを確認することができます。