Maya でオブジェクトの位置合わせをするmel

Twitter で話題になったので間に合わせみたいなmel を。

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


// 位置
setAttr(($sel[0] + ".translateX"), `getAttr ($sel[1] + ".translateX")`);
setAttr(($sel[0] + ".translateY"), `getAttr ($sel[1] + ".translateY")`);
setAttr(($sel[0] + ".translateZ"), `getAttr ($sel[1] + ".translateZ")`);

// 回転
setAttr(($sel[0] + ".rotateX"), `getAttr ($sel[1] + ".rotateX")`);
setAttr(($sel[0] + ".rotateY"), `getAttr ($sel[1] + ".rotateY")`);
setAttr(($sel[0] + ".rotateZ"), `getAttr ($sel[1] + ".rotateZ")`);

// スケール
/*
setAttr(($sel[0] + ".scaleX"), `getAttr ($sel[1] + ".scaleX")`);
setAttr(($sel[0] + ".scaleY"), `getAttr ($sel[1] + ".scaleX")`);
setAttr(($sel[0] + ".scaleZ"), `getAttr ($sel[1] + ".scaleX")`);
*/

使い方は以下のような感じ。

  1. スクリプトエディタに上記のコードを貼り付ける(MELモード)
  2. ビューポート内で、移動したいオブジェクト→合わせる相手 の順に複数選択する
  3. スクリプトエディタに貼り付けたコードを全選択(エディタ内でCtrl+A)
  4. 実行(Ctrl+Enter)

実行時にスクリプトを選択していないと、実行後にクリアされてエディタ窓から消えてしまいます。

コードには位置、回転、スケールをまとめて書いておいたので、必要に応じてコメントアウトしたりはずしたりしてほしい要素だけ実行してください。

コメントアウトは「実行したくない部分」の前後を/* と */ で囲みます。サンプルコードではスケールを実行しないようにコメントアウトしてあるので参考にしてみてください。

Maya,mel

Posted by Ken Taguma