|
アウトライナ カラーは .outlinerColor では、アトリビュートエディタで行った操作のログからコマンドが推測できるか見てみましょう。 スクリプトエディタ内ヒストリ > [レ] すべてのコマンドのエコーを一時的に有効にします。(いつも有効だとウザイです) [レ] アウトライナ カラーを使用を有効/無効にすると以下ログが出ます。 続いて色を変えてみたログです。
これで大体の感じはわかります。 cmds.getAttr と cmds.setAttr でアウトライナカラーの設定が有効か無効かが取得、設定ができるはずです。 で、アウトライナ色を設定しているであろう Mel のAEoutlinerColorSetって何?と思う時は、 スクリプトエディタで whatIs AEoutlinerColorSet って記述して実行し、コマンドを探します。 コマンドではなくスクリプトとして何処かのファイルに書かれている場合は そのファイルのフルパスが返って来ます。 すると、 C:/Program Files/Autodesk/Maya2017/scripts/AETemplates/AEdagNodeCommon.mel に書かれているって返って来るのでテキストで覗いて見ます。 任意のテキストエディタで ”AEoutlinerColorSet” という言葉で検索をかけると、以下の行が見つかります。
すると、なんだ、また cmds.setAttr でRGB値を設定してるだけやん、とわかります。 なので pCone1 のアウトライナ色を設定するにはたった2行です。
[レ] オーバーライド有効化を有効/無効にすると以下ログが出ます。 続いて色を変えてみたログです。こちらはインデックスカラーの場合です。 試しにインデックスカラーをRGBカラーにしてみると4行目が表示されます。 (本当はもっといっぱい表示されますが、欲しい情報は以下の通りになります。他はGUIの設定等になります)
で、オーバーライド色を設定しているであろう Mel の changeObjColor と changeObjLayerColorType は スクリプトエディタで whatIs を打ってみると、実は同じファイルを見ていて、 C:/Program Files/Autodesk/Maya2017/scripts/AETemplates/AEdrawInfo.mel を返します。 これは結構解くのか難しいのですが、結論を先に書きますとまたもや cmds.setAttr で設定しています。 そしてインデックスカラーの設定値は0~31の実数が有効範囲ですが、 デフォルトで表示の 0 は グレー色ではなく"色設定無し"という意味であって、1~31が色のある設定値です。 なので pCone1 のオーバーライド色を設定するにはたった3行です。(17番は黄色です)
ここまで理解出来て、後は両方の色を同時に設定したい場合の対応ですが、 上図の通り、アウトライナ色の設定は RGBカラーがデフォルトで、オーバーレイ色はインデックスカラーがデフォルトになっています。 そこで、 インデックスカラー値 を指定したらコマンドではアウトライナを RGB色値 に変えて設定する、にしたいと思います。 幸い、 colorIndex というコマンドがあり、インデックスカラー番号を指定するとRGB値を返してくれるようになっています。 ■ colorIndex http://help.autodesk.com/cloudhelp/2017/JPN/Maya-Tech-Docs/CommandsPython/colorIndex.html なので pCone1 のオーバーライド色用のインデックスカラー値からアウトライナ色を指定してみると、こうなります。 (インデックスカラー17番は黄色ですが、RGB値に変換した値をプリントすると(1.0,1.0,0.0)と黄色になっています。)
|
アウトライナのウィンドウについて 既に公開しているカスタムグラフエディタやカスタムハイパーグラフと同様に、カスタムのアウトライナも Window の中に Panel を作って Outliner を表示しますので、複数表示が可能になります。 コマンドを調べてみると アウトライナ は、 outlinerEditor というコマンドがあり、Python 例の部分を見るとばっちりサンプルが載っています。 ■ outlinerEditor http://help.autodesk.com/cloudhelp/2017/JPN/Maya-Tech-Docs/CommandsPython/outlinerEditor.html
アウトライナ用のオプションがたくさん設定されていますが、一番最後に追加されている設定、 ignoreOutlinerColor=False が、 Maya2016 から追加された色を変えられるオプションで、Maya2016 以前の Maya のバージョンで実行するとエラーを起こします。 なので、ツール起動時に Maya のバージョンを調べ Maya2016 以前だった場合はこの行の無い方で設定し、 更に注意文を表示するようにしました。 そして、上記サンプルで注目すべき点は、アウトライナは scriptedPanel ではなく、専用の outlinerPanel を使用しているところです。 ■ outlinerPanel http://help.autodesk.com/cloudhelp/2017/JPN/Maya-Tech-Docs/CommandsPython/outlinerPanel.html グラフエディタもハイパーグラフも scriptedPanel でしたので、新たなパネルです。 試しに scriptedPanel で記述してみると、、
最後の考察は、以前にも遭遇した、 複数のパネルを作成した後、Mayaビュー画面には表示していなくても Mayaシーンデータ的にはパネルがまだ残っていて、 どんどん溜まっていく~、という部分です。 ここは、 getPanel の Type で'outlinerPanel'を指定できるので、 表示していない(invisiblePanels=True)'outlinerPanel' があったら消す、にしますが、 慎重に Try 文の中に記述しました。(最初からデフォルトとして存在する 'outlinerPanel1'は例外扱いにします。)
|
CustomOutliner.py と 既知の制限・注釈 という訳で皆様のリクエストの カスタムアウトライナ のツールを公開します。 (Pyファイルは シェルフにボタン登録する か、 プルダウンメニューに登録して実行します。) あくまでも自己責任でお使いください。Use as your own risk.
|
次回も Mayaスクリプトの予定・・・ 乞う、ご期待!! Stay tuned ..
|