MEL と Python の重要な違い

変更点

runTimeCommand -command "sphere -name myName" mySphere;

Python タブでの場合:

import maya.cmds as cmds 
cmds.mySphere() 

同様に Python ランタイム コマンドを作成し、次の構文を使用して Python からコールすることができます。

import maya.cmds as cmds 
def mySphere(): 	 
     cmds.sphere(name='myName') 
     cmds.runTimeCommand('MyBall', command='mySphere()') 
     cmds.MyBall() 

その他の違い

結果を返すことと表示(エコー)することの違い

結果を返すことと表示(エコー)することに関して、MEL と Python では 2 つの点で異なります。1 番目の違いは正しいスクリプト実行に関することで、2 番目の違いは表面的な問題です。このセクションでは、互いを混同しがちな、結果を返すことと表示することの両方について説明します。

この説明は、主に、MEL には慣れているが Python に触れるのは初めてという場合に役立ちます。

結果を返す

MEL は、スクリプトを実行すると、最後に実行したステートメントの結果があればそれを返します。値を変数に割り当てるステートメント、結果を返すプロシージャ コールは、結果を返すタイプのステートメントです。たとえば、次のコード ブロックには結果があります。MEL はこれをスクリプト エディタやコマンド ラインのメッセージ領域に表示します。

if ( $foo == 1 ) $bar = 42; else $bar = 7;

これとは対照的に、Python は割り当てられた値を実行はしますが Python では値を割り当てるステートメントは値を返しません。

Python の構文では、単に変数を参照するだけで変数の値を返すことができます。MEL の構文では、完全なステートメントとして単に変数の名前を書くことはできません。

上記の MEL コード フラグメントは、Python では次のように書けます。最後のライン(bar)が結果を返します。

if foo == 1: bar = 42 else bar = 7 bar

いずれかの言語で計算した値を別の言語のコンテキストで使用する場合には、この違いを理解しておくことが重要です。たとえば、Python 値を MEL で使用するには以下のようにするだけ済みます。

$myMELvariable = python ("myPythonVariable");

逆に、MEL 変数を Python で使用するには、以下のように書く必要があります。

import maya.mel myPythonVariable = maya.mel.eval ('global $myMELvariable; $temp=$myMELvariable;' )

これは、eval マンドに渡されるスクリプトの最後にある割り当てステートメントが値を返すため、機能します。

Python では、関数外で作成した MEL 変数(グローバル スコープ)にのみアクセスすることができます。

結果を表示(エコー)する

MEL は、スクリプトの最後のステートメントで返された結果があれば何行でも表示します。Python では、単一のステートメントの結果だけを表示します。