【MEL】コンポーネント編集時にオブジェクトのピボットを利用する

コンポーネント選択時にピボットが中央になってしまうので作ってみた

 頂点やフェースなどコンポーネントを編集しているときは、基本それらの中央がピボットになるんですかね?
 ただオブジェクトのピボットをそのまま使いたいことが多いので、オブジェクトのピボットを利用するための関数。

オブジェクトのピボットを利用

ソース

1
2
3
4
5
6
7
8
global proc setPivotOfObject(){
    string $aSelect[] = `ls -sl -o`;
    string $aObj[] = `listRelatives -p $aSelect[0]`;
    vector $aObjPoint = `xform -q -ws -t $aObj[0]`;
    vector $aPivot = `getAttr ($aObj[0]+".rotatePivot")`;
    $aPivot += $aObjPoint;
    manipPivot -p ($aPivot.x) ($aPivot.y) ($aPivot.z);
}

使い方

1
setPivotOfObject();

 頂点やフェースなどのコンポーネント選択時に呼び出すと、ピボットがオブジェクトのピボットの位置に移動します。

 ※オブジェクト選択時や複数のオブジェクトの頂点選択時のエラー回避はしてないです。
 ま、動けばいいやって感じでw

おまけ:ピボットを固定したままオブジェクトを回転させる関数

ピボットを固定したまま回転

ソース

1
2
3
4
5
6
7
global proc rotateFixedPivot( vector $aRotation ){
    string $aSelect[] = getSelectParticularType( "transform", true );
    select -r ( getSelectParticularType( "vertex", false ) );
    setPivotOfObject();
    rotate -r -fo ($aRotation.x) ($aRotation.y) ($aRotation.z);
    select -r $aSelect;
}

使い方

1
setPivotOfObject(<<0,90,0>>);   //選択中のオブジェクトをピボットを固定したままY軸を中心に90度回転させる
※この関数だけでは使えません。以前記事にしたgetSelectParticularTypeという関数を使っているので、そちらとセットで^^;

 Mayaでマップエディタのようなものを作っているのでその関係で作りました。
 どうもやろうとしていることの機能がMayaにあるのかないのかよくわからない;
 だから結局自作になってしまうんだけど・・・。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です