2019年5月27日月曜日

mayaLTでもPythonでできることはPythonで

mayaLT の python コマンドでは、どこまでできるのか?
とりあえず maya.OpenMaya はインポートできました。
さすがに pymel は使えませんでしたが、サポート対象外だからでしょうね。

C:\Program Files\Autodesk\MayaLT2019\Python\Lib\site-packages の中身を調べれば何となく使えるものが分かるかもです。
まぁ、デバッグが大変そうなので mayaLT でそんな深いとこまで触ることは無いと思いますが。



で、Pythonといえば数学と文字列操作。

python("import math");
が通ったので、色々と使えるかと思いましたが、ほとんど同じ名称で同じ機能のものがMELにも有るのでアリガタみが薄れます。
けれども、
float $PI=python("math.pi");
とすれば円周率の値をググる必要が無くなるので、この部分は良いかも。
このためだけに math をインポートするのはどうかと思いますが・・・。


そしてMELの文字列関連のコマンド。
Python で似た機能のものは言語切り替えを容易にするためにも pythonコマンドで実行するクセを付けておきたいものです。
どのMELコマンドがどのメソッドに当たるのか判断するのは最初のうち苦労するかも。

MEL の eval みたいに python コマンドへは配列を渡すことが出来ないので、join,append,insert,extend みたいなメソッドは使えないっぽい。
そして戻り値はMELのデータ型に返還されるので、どんな型が返ってくるかを予測して変数へ代入しないとエラーで止まってしまいます。

とりあえず、よく使う文字列コマンド。
stringToStringArray は splitメソッドへ
{
    string $csvLine="1,2,3,4,5";
    
    string $array[]=stringToStringArray($csvLine,",");
    print("MEL\n");
    print $array;
    
    string $split[]=python("'"+$csvLine+"'.split(',')");
    print("Python\n");
    print $split;
    
}

substitute は replaceとか
{
    string $str="test_test_test_test";
    
    string $rep =python("'"+$str+"'.replace('_','-')");
    string $rep2=python("'"+$str+"'.replace('_','-',2)");
    
    print("$rep :"+$rep +"\n");
    print("$rep2:"+$rep2+"\n");
}

startString,endString,substringはスライスで
{
    string $str="abcdefghijklmn";
     
    string $a=python("'"+$str+"'[0:6:2]");// 先頭から6文字目まで2文字置きに
    string $b=python("'"+$str+"'[:-4]");  // 先頭から末尾の4文字手前まで
    string $c=python("'"+$str+"'[::-1]"); // 末尾から先頭へ逆転
    
    print($a+"\n");
    print($b+"\n");
    print($c+"\n");
}


シングルクォーテが使えるのでダブルクォーテをエスケープしなくて良いのは楽ですね。
微妙にMELより高機能だったりしますし。

探せば他にも使えそうな関数とかメソッドとかが有りそうです。
けれど、tolower と toupperは、わざわざ Python 使わなくても良いか。


MELで慣れると、リストやタプルも操作できるのを忘れてしまいそう・・・。

0 件のコメント:

コメントを投稿