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

2022年11月4日

[追記 2022.11.4]ワールド座標、Python版に変更

 間に合わせみたいなMelを置いといたら意外と使われているみたいだったのでワールド座標で位置合わせするものをPythonで書き直しました。

 使い方は以下のMel版と同じですが、スクリプトエディタのPythonモードの窓に貼り付けて実行してください。

  1. Python モードのスクリプト窓に上記コードを貼り付ける
  2. 移動させたいオブジェクト -> 位置合わせの相手(対象)になるオブジェクト の順に選択
  3. スクリプトエディタでコードを全選択(Ctrl+A)して実行(Ctrl+Enter)

以下は過去記事

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