myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

Maya | mAlignPivot 1.1

最近Mayaで作業しているから、またmelを書いてみました。

今回は、4,5ヶ月前に書いた 適当な melスクリプト の更新です。

今回は SI 版 と同じ機能にしました。


mAlign Pivot 1.1

DOWNLOAD

新しい機能

・ 複数選択可能 (前回はコードミスでオブジェクト1つしか対応していなかった)
・ オブジェクト座標対応
・ 最後に選択されたオブジェクトのピボットに合わせる(位置のみです。向きは合わせません)

Maya | mAlignPivot from myara on Vimeo.






mel 解説

前回は `exactWorldBoundingBox $obj` でバウンディングボックスを取得していましたが、これは丸いオブジェクトだと上手く行きませんでした。前回はボックスなどの四角いオブジェクトでしか試していなかった為気づきませんでした。

exactWorldBoundingBox って詐欺みたいな名前じゃないですか。exact じゃないじゃん!
バウンディングボックスしか取得出来ないコマンドのくせに。


色々調べてみたら、Mayaではワールド座標のバウンディングボックスの取得には色んな方法があります。
xform , exactWorldBoundingBox , PolyEvaluate など。


その中で、「PolyEvaluate」には 「-accurateEvaluation」 というアーギュメントがあります。


string $sel[] = `ls -sl`;
string $obj = $sel[0];

float $bBox[] = `polyEvaluate -b -ae $obj`;

print $bBox;


これを使ってみると、丸いオブジェクトでも正確にバウンディングボックスは取得が出来ました。
普通より計算は重いらしいですが、やっぱり正確じゃないと意味ないですね。


次は ローカル座標のバウンディングボックス。これはちょっとトリッキでした。
コマンドを探しても何も出てきません。ネットで検索しても何も見つかりませんでした。
色々試してみたら、なんとか「GetAttr」というコマンドでシェープのバウンディングボックスのアトリビュートは取得できました。


string $sel[] = `ls -sl`;
string $obj = $sel[0];
string $shapes[] = `listRelatives -shapes $obj`;

float $bBox[]= `getAttr ($shapes[0] + ".boundingBoxSize")`;

print $bBox;


↑ shapes[0] を使っているので、transform オブジェクトにシェープは1つしかないという前提です。

シェープから取得すれば良いですね。
そして、バウンディングボックスアトリビュートがありますね。知りませんでした。

少しだけは mel とMayaの構造が前より分かってきた気がします。

Topic:CG Design - Genre:Computer/Internet