【Maya/MEL】インポート後に読み込んだノードを選択させる方法

Softimageではファイルをインポートした時にインポートしたものが選択状態になっています。

Mayaではインポートしても選択状態になっていないため、インポート前にオブジェクトがたくさんあったりすると

インポートした後にインポートしたものがきちんと読み込めているのかすぐ確認できなかったり、

インポート後にすぐに移動させたい場合も探して選択しないとダメですよね。

 

なので、インポート後に選択状態にしてくれるようにインポートを実行している既存のスクリプトファイルに少し手を加えてみましょう。

※と言っても既存のファイルをそのまま書き換えちゃうのは安全性の面でやりたくないので既存ファイルをコピーしたものを編集します。

 

まず、調べ方ですがインポート時にスクリプトエディタのヒストリのすべてのエコーをONにして実行してみます。

(※改変方法だけを知りたい方はここは飛ばして下さい)

すると、ズラズラと出力されたヒストリの中に

projectViewer Import;

というのが見つかります。

 

whatIs projectViewer で調べてみると

C:\Program Files\Autodesk\Maya2016\scripts\others\projectViewer.mel だとわかります。

 

このファイルの中を見ると480行目にprojectViewerというグルーバル関数があります。

この関数の中を見ているとさらにperformFileActionに選択されたファイルのパスを渡しているのがわかります。

 

また whatIs performFileAction で調べてみると

C:\Program Files\Autodesk\Maya2016\scripts\others\performFileAction.mel でした。

 

このファイルの中を見ると366行目に performFileAction というグルーバル関数があります。

この中でprint出力してみるとわかりますが、この関数がファイルのオープンやセーブ、エクスポート、インポートなどの時に実行されています。

その実行の振り分けはif文で if ( $gv_operationMode == "Import" ){ hogehoge }  という感じで条件分岐されています。

 


いよいよ performFileAction.mel に手を加えていくんですが・・・

その前に前述の通り既存のファイルをぐちゃぐちゃにしたくありません。

別の場所にコピーを取っておくという方法もありますが、自分は下記のサイトを参考にして、

C:\Program Files\Autodesk\Maya2016\scripts\others

                                  

C:\Users\ユーザー名\Documents\maya\2016\ja_JP\scripts

こちらに performFileAction.mel をコピーして、コピーした方に手を加えていきます。

※下記のサイトによるとユーザーのドキュメントのscriptsフォルダの方が先に読み込まれるようです。

    また自分は2016でやっていますが、大したコマンドは使っていないので過去のバージョンでも使える方法だと思います。

 

第53回:自動でセットプロジェクトを行うようにしよう!(2/2) | 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ | AREA JAPAN
http://area.autodesk.jp/column/tutorial/maya_atoz/set_project_2/

 

 

performFileAction.mel に手を加える位置ですが大きくわけて2箇所あります。

 

①426行目あたり(インポートなどが行われる前であれば良いので絶対にこの行じゃないとダメという訳ではないです)

まずインポートなどを行われる前にその時にシーン内にあるノードを取得しておきます。

※今回の方法では最終的に各トップノードのみを選択状態にするために-assemblies(-as)」というフラを利用してリストを取得しています。

トップノードだけでなく全部を選択した場合はこのフラグは消して下さい。

~~~~~~~~~~

        $gFileOptionsString = `optionVar -q $translatorOptions`;
    } else {
        $gFileOptionsString = "";
    }
    // インポート前のシーンにあるトップノードのリスト取得
    string $nodeListBeforeImport[] = `ls -as`;   
    if ($gv_operationMode == "SaveAs" ||
        $gv_operationMode == "ExportAll" ||
        $gv_operationMode == "ExportOfflineFile" ||

 

~~~~~~~~~~

②1361行目あたり(こちらはインポートなどが行われた後にできれば良いのでこの関数の最後らへんに書きます)

下記の例ではインポート時とリファレンスを読み込んだ時に選択する設定ですが、

もし通常のオープン時にも選択してほしい場合は

if文の中に || で区切ってから$gv_operationMode == "Open"という感じで条件を加えて下さい。

~~~~~~~~~~
    if ($gv_operationMode == "Open" || $gv_operationMode == "Import")
    {
        checkForUnknownImageTypes();
    }

    if ($gv_operationMode == "Import" || $gv_operationMode == "Reference") {
        // インポート後のシーンにあるトップノードのリスト取得
        string $nodeListAfterImport[] = `ls -as`;

   //インポート前と後のリストから同じものを削除して追加されたものだけのリストを取得し、選択する
        string $diff[] = stringArrayRemove($nodeListBeforeImport, $nodeListAfterImport
        select -r $diff;
    }
    return $status;
}

~~~~~~~~~~


以上です。

これでMayaを再起動でもしてもらってインポートなどを試してみてください。

 

自分の環境では今のところ問題ないですが、この設定は自己責任でお願いします。