2012年5月4日金曜日

[MEL]シーン内インスタンスオブジェクトの取得

タイトルの通り、シーン内のインスタンスのリストを取得するMEL。
関数にしてみたので取得後の使い道はいろいろ。
ダウンロードしたファイルをスクリプトフォルダにコピー後、
Mayaを起動すると使用できる。

「SelectInstance.mel」をダウンロード

//【シーン内インスタンスリストの取得】
global proc SelectInstance(string $ReturnList[])
{
//変数の宣言
    string $Trans[];
    string $Shape[];
    string $ListDAG[];
    int $NoT;
    int $NUM;
    int $NoI = 0;
//配列の初期化
    clear $Trans;
    clear $Shape;
//トランスノードリストの作成
    $Trans =`ls -tr`;
    $NoT =`size $Trans`;
//シェイプノードリストの作成
    for ($i=0 ; $i<$NoT ; $i++)
    {
        select -r $Trans[$i];
        clear $ListDAG;
        $ListDAG =`ls -sl -dag -s`;
        $Shape[$i]=$ListDAG[0];
    }


//インスタンスの選出
    for ($i=0 ; $i<$NoT ; $i++)
    {
        $NUM = 0;
        for ($j=0 ; $j<$NoT ; $j++)
        {
            if ($Shape[$i] == $Shape[$j])
            {
                $NUM++;
            }
        }
        if ($NUM>1)
        {
            $ReturnList[$NoI]=$Trans[$i];
            $NoI++;
        }
    }
}

【使い方】
下のサンプルのように配列を引数として渡す事により、
その配列にインスタンスのリストが書き込まれる。


//インスタンスを選択する
string $a[];
SelectInstance($a);
select -r $a;