MEL,Python MAYAのMELスクリプトにPythonのコードを組み込む方法-MAYA アーティストのスクリプト入門-

MAYAのMELスクリプトにPythonのコードを組み込む方法-MAYA アーティストのスクリプト入門-

pythoncode_in_melcode_topimage

MAYAは使えるスクリプトとしてMELの他にPythonも使うことが出来ます。

通常MELで書くときはMELだけ。 Pythonで書く時はPythonだけで済ましますし、殆どの場合それで十分対応可能です。

だた例えば、

  • MELでPythonで書かれたスクリプトを実行したい場合
  • Pythonにしか無い機能やモジュールを使いたい場合


などMELのみで書こうとすると面倒そうな事がPythonを使うことで簡単に済ませられる場面があります。

この記事ではMAYAのMELスクリプトにMAYAのもう一つのスクリプト言語のPythonを組み込んだ書き方を紹介したいと思います。

python()関数でMELにPythonコードを組み込む

MELにPythonコードを組み込むには

python(Pythonコード)

を使います。

python()にPythonコードを「“”」で囲んで文字列として書きます。


選択したオブジェクト名を出力するMELのスクリプトコード

まずMELで選択したオブジェクト名を出力するスクリプトコードを書きました。

$list_sl = `ls -sl`;
print($list_sl);


オブジェクトを選択してスクリプトを実行

オブジェクトを選択


結果:

選択したオブジェクトの名前が出力されました。

pCube4
pCube3
pCube2
pCube1


MELのスクリプトコードにPythonコードを組み込む。

今度はMELで書かれたスクリプトコードに同じ結果になるようにPythonコードを組み込みます。

python("import maya.cmds as cmds");
$list_sl = python("cmds.ls(sl=True)");
print($list_sl);


説明:

python("import maya.cmds as cmds")

Pythonで書くのと同じくMELでpython()を使う場合もmaya.cmdsをインポートします。

$list_sl = python("cmds.ls(sl=True)")

python()を使ってPythonコードの”cmds.ls(sl=True)”を実行して戻り値をMELの変数「$list_sl」に代入します。

print($list_sl)

MELの変数「$list_sl」をMELのprint()で出力

結果:

MELだけで書かれたスクリプトの結果と同じくオブジェクトの名前が出力されました。
$list_sl = python(“cmds.ls(sl=True)”)
このコードで選択したオブジェクト名がMELの変数に代入された事が確認できました。

pCube4
pCube3
pCube2
pCube1

print()も含め全てPythonコードにする

試しに出力print()も含めてpython()で書いてみます。

python("import maya.cmds as cmds");
python("list_sl = cmds.ls(sl=True)");
python("print(list_sl)");


説明:

python("list_sl = cmds.ls(sl=True)");

python()の中でPythonの変数「list_sl」に選択したオブジェクトのリストが代入されました。


python("print(list_sl)");

python()の中で変数「list_sl」をPythonのprint()を使って出力


結果:

スクリプトをPythonで書いた時のようにリストで出力されました。

[u’pCube2′, u’pCube1′, u’pCube3′, u’pCube4′]

python()内でfor文を使ったPythonコードを実行する

python()には文字列で書く必要がありますが、裏を返せば文字列であればPythonの構文に必要なインデントを含めたスクリプトコードも実行可能となります。

Pythonのfor文を使ったスクリプトコードをpython()内で実行してみます。

$python_code = "list_sl = cmds.ls(sl=True)\nfor i_list_sl in list_sl:\n    print(i_list_sl)";
python("import maya.cmds as cmds");
python($python_code);


説明:

$python_code = "list_sl = cmds.ls(sl=True)\nfor i_list_sl in list_sl:\n    print(i_list_sl)";

以下のPythonコードをインデントの箇所に改行文字「\n」を使い一列の文字列にしました。

list_sl = cmds.ls(sl=True)
for i_list_sl in list_sl:
    print(i_list_sl)
python($python_code);

一列にしたPythonコードの文字列を代入した変数「$python_code」をpython()で実行します。

結果:

python()の中でPythonコードが実行されオブジェクト名がfor文で出力されました。

pCube2
pCube1
pCube3
pCube4

MELにPythonを組み込んで辞書を使用する

MEL内でPythonコードを組み込む主な理由として、Pythonで書かれたスクリプトをMELで実行したい場合や、PythonにあってMELには無い機能を使いたい場合が在ると思います。

例えばPythonにあってMELには無い機能として

辞書

が思いつきます。

ではpython()を使ってMELの中でPythonの辞書を扱ってみましょう。

python("import maya.cmds as cmds");
python("dic = {'pCube1':'mcdonalds','pCube2':'MosBurger','pCube3':'BurgerKing','pCube4':'FreshnessBurger'}");

$list_sl = `ls -sl`;

for($i_list_sl in $list_sl)
{

    $new_name = python("dic[\"" + $i_list_sl + "\"]");
    rename $i_list_sl $new_name;

}


説明:

python("dic = {'pCube1':'mcdonalds','pCube2':'MosBurger','pCube3':'BurgerKing','pCube4':'FreshnessBurger'}");

python()内でPythonの辞書を用意しました。辞書は{オブジェクト名:新しい名前}の組になっています。

$list_sl = `ls -sl`;

MELで選択したオブジェクト名を取得

$new_name = python("dic[\"" + $i_list_sl + "\"]");

python()内でオブジェクト名をKeyにして辞書から組になる新しい名前を取得。MELの変数「$new_name」に代入します。

rename $i_list_sl $new_name;

MELのrenameでオブジェクト名を変更

オブジェクトを選択して実行します。

 オブジェクトを選択して実行します。


結果:

選択したオブジェクト名をKeyにして辞書「dic」から組になる名前を取得、オブジェクトの名前を変更しました。

オブジェクトの名前を変更

まとめ

MAYAのMELスクリプトにPythonのコードを組み込む方法を紹介しました。

MELにPythonコードを組み込むには

python()

を使います。

python()にはPythonコードを「””」で囲んだ文字列として書きます。

改行文字「\n」を使ってインデントを含めたPythonコードの文字列を実行する事が出来る。

MELでPythonスクリプトを実行したい場合や、Pythonにしか無い機能やモジュールを使いたい場合に役立ちます。
MELだけでは面倒な事もPythonを組み込む事で解決出来てしまうかも知れません。

python()

使ってみてはどうでしょう。


おすすめの関連記事:
コチラの記事も読まれています
あわせてよく読まれている記事