XSIユーザーから観たMELスクリプトについて 其の二
では次。
球を円状に配置するスクリプト。
MELはこんな感じでした。
global proc circlesphere2(float $rad,float $pai,int $num) { int $i; float $r = 0.0; float $add = 360.0 / $num; for($i = 0; $i < $num ; $i ++) { sphere; scale $pai $pai $pai; move $rad 0 0; rotate -ws -p 0 0 0 0 $r 0; $r += $add; } }
こんな感じ
引数だけみましょうか。。
この部分
global proc circlesphere2(float $rad,float $pai,int $num)
それぞれ引数が
float $rad・・・・配置される円の半径
float $pai・・・・作成される球の半径
int $num・・・・・作られる球の数
コード自体の説明は特にいらないっすね。
で、SI版↓
「rotate -ws -p 0 0 0 0 $r 0;」
このコマンドはSIにはないので、
こんな感じに。
circlesphere(10.0,2.0,6); function circlesphere(rad,pai,num) { var r = 0.0; var add = 360.0 / num; for(var i = 0; i < num ; i++) { var Sphere= CreatePrim("Sphere", "NurbsSurface"); SetValue(Sphere+".sphere.radius", 1); Scale(Sphere, pai, pai, pai); Translate(Sphere, rad, 0, 0, siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0, null); TranslatePivot(Sphere,0,0,0); Rotate(Sphere, 0, 0, r , siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, 0, null); r += add; } }
このコマンドでMELっぽくしてます。
TranslatePivot(Sphere,0,0,0);
要はセンターを原点にして、スフィアを回してるだけですね。
まぁこんな感じで細かい部分ではSI、MAYAは違えど、
根本はやっぱ一緒ですね。特に数学系。
上げるとすれば、
「変数の前には「$」をつける」
「変数を使う場合は必ず(``)をつける」(シングルクォテーションではないです。)
「引数に型をきちんと設定する」
「セミコロンは必ずつける」
「プロシージャの名前にコマンド名は付けない」
この辺りを気をつけていればなんとかなるはず。。。
あと操作に関していえば、
スクリプトはエディタで実行できますが、
実行するとコードはエディタ上から消えます。
あとプロシージャの起動は
「SourceScript」を実行して名前と引数を指定すれば、
新しいソースを読むまで名前と引数だけでひたすら実行出来ます。
この微妙な違いが結構きつかったりしますね。。。
では…