2015年5月26日火曜日

カーブオブジェクトを作成する

リグを作成するとき、ほとんどの場合カーブオブジェクトでコントローラを作成すると思いますが、そのカーブオブジェクトを作成するコードを補佐するmelスクリプト。


global proc string createCurveObject( vector $positions[] )
{
    string $cmd ="curve -d 1";
    
    vector $pos;
    int $size = size( $positions );
    for( $i=0; $i<$size; $i++ )
    {
        $pos = $positions[$i];
        $cmd+=(" -p "+($pos.x)+" "+($pos.y)+" "+($pos.z));
        
    }
    
    for( $i=0; $i<$size; $i++ ) $cmd+=(" -k "+$i);
    
    return eval( $cmd );
    
}

座標のリストを渡すと、カーブオブジェクトの名前が返ってきます。 ドキュメントフォルダの中にあるmaya\scriptsのなかに"createCurveObject.mel"ファイルを作成して上をコピぺすると呼び出せます。
使い方としては、スクリプトエディタからであれば、
{
    vector $pos[];
    $pos[0]=<<  0,0,0>>;
    $pos[1]=<< 10,0,0>>;
    $pos[2]=<<  0,0,0>>;
    $pos[3]=<<-10,0,0>>;
    $pos[4]=<<  0,0,0>>;
    rename `createCurveObject $pos` "testCrvObj";
}


こんな感じになります。

8行目、renameコマンドへ返ってきたカーブ名を渡すことで即座にリネームできるのがミソです。
直線のカーブオブジェクトしか作れないというのが欠点ですかね・・・。



多くのリガーが使用しているであろうrigging101.comrig101 Wire Controllersは、カーブの座標がベタ書きなので可読性が悪く、なんとなくよろしくないですね。

0 件のコメント:

コメントを投稿