2017年3月28日火曜日

回転順序を文字列で指定する

リグを組んでいる時、けっこう回転順序を変更したりするのですが、指定方法が数値なんですよね~。
いちいちアトリビュートを変更してログから調べたりするのは面倒です。
なので"zxy"みたいな文字列で変更するスクリプトを作成します。

trySetRotateOrder.mel
global proc trySetRotateOrder(
    string $node,                       // ノード名
    string $order )                     // 回転順序
{
    if(!`attributeExists "ro" $node`) return;
    $order=tolower( $order );
    
    int $ro;
    switch( $order )
    {
    case "xyz": $ro=0; break;
    case "yzx": $ro=1; break;
    case "zxy": $ro=2; break;
    case "xzy": $ro=3; break;
    case "yxz": $ro=4; break;
    case "zyx": $ro=5; break;
    default: $ro=-1; break;
    }
    if( $ro<0 ) return;
    
    evalEcho("setAttr "+$node+".rotateOrder "+$ro);
    
}


ノード名と回転順序を渡すと指定した回転順序を設定します。

6行目で小文字に変えているので大文字を渡すなどしても問題ないはず。

ノードに rotateOrder のアトリビュートが無かったり、回転順序が "xyz","yzx","zxy","xzy","yxz","zyx" 意外だと無反応です。

21行目の evalEcho は普通に eval で良いかも・・・。


0 件のコメント:

コメントを投稿