2023年6月26日月曜日

不明なプラグインを削除するスクリプト

 当時は mentalrayに限定していましたが、maya2016くらいの頃に作成した 不要なプラグインを除去するツールを改めて作成してみました。

 tryRemovePlugin.mel


 今回のスクリプトでは、Turtleなどの既知のプラグインも除去できるようになっています。
 なぜ前回は出来なかったのかというと、不明なプラグインと既知のプラグインで、使用する MELコマンドが違っているので除去できないみたいでした。
 不明なプラグインの場合は、unknownPluginコマンドを使用すればよいのですが、インストールされているプラグインの場合は、pluginInfoコマンドの  -removeフラグを使わないと除去できなかったようです。
 不明なプラグインと既知のプラグインで使用するコマンドが違うとは盲点でした。

 Turtleみたいなプラグインの場合、プラグインマネージャーを使用すれば除去できると考えるかもしれませんが、ここに罠が仕掛けられていました。

 プラグインマネージャーでロードのチェックを外すと、こんなダイアログが出てくることが有ります。

 シーンの中にプラグインの関与しているノードが存在している場合に出てくるようです。
 強制的にロードの解除を実行すると、こんな警告がスクリプトエディタに出てきます。

Plugin "Turtle" has been forced to unload even though it still has services in use.

This could cause Maya to become unstable and even crash.

You are advised to save your data in MayaAscii format and restart Maya as soon as possible.

 クラッシュする危険性があるので、Mayaの再起動を促されています。
 スクリプトエディタでの警告なので見逃してしまうかもしれませんが、クラッシュするとか穏やかではないですね。
 ロードの解除を行う前には、シーン内の関連ノードの削除をしないとイケナイみたいです。

 関連ノードの削除に関して、更に、注意しておかなければいけない事として、リファレンスしているシーン内の関連ノードは削除してはいけない。という事があります。
 リファレンスしているシーン内のノードを削除しようとしてノードのロックを外して削除してしまうと Mayaが強制終了してしまいます。

 プラグインの除去には、いたるところに罠が仕掛けられていますね。

 そんなこんなを対応していたら、けっこう複雑な処理のスクリプトになってしまいました。

 基本的な使用方法としては不明なプラグインの除去なので、スクリプトエディタで以下のようなコードを書いて使用します。

{
    string $unknowns[]=`unknownPlugin -q -l`;
    for($unknown in $unknowns) tryRemovePlugin( $unknown );
    
}

 これでファイルを開いたときに出るプラグインのエラーは回避できるようになると思います。

 あとは個別に Turtleや Arnordを個別に指定して実行します。

tryRemovePlugin("Turtle");
tryRemovePlugin("mtoa");

 こうすれば、関連ノードも除去しながら安全にロードを解除できます。




0 件のコメント:

コメントを投稿