MayaScripts_MyViewPort : ビューポートの設定をセーブ&ロード
MyViewport
今回は自作のスクリプトの紹介。
XmlとPymelの習作として制作した、アクティブなビューポートの設定を保存する スクリプトです。
Download
経緯
Mayaのビューポートの設定
この表示タブ内の項目群。どうやら シーン単位でこの項目が保存されている みたいで?、他人のシーンを開くとき等、そのシーンの設定が開かれてしまうのが、自分は好きじゃないです。
※もしかしたら、Maya自身の設定にもよる?
あと、ジョイントのX線表示とポリゴンのみ表示を切り替えながら作業したいときに、いちいち表示項目やディスプレイレイヤをポチポチとクリックするのはとても面倒なのです。
これらの設定を自分好みのものに素早く 切り替える機能がMayaにはない と判断したのが始まりでした。
使い方
C:\Users\"ユーザー名"\Documents\maya\scripts
に、フォルダごと配置します。
~コード~
import MyViewPort #インポート MyViewPort.main() #メイン(カスタムシェルフにはこっちを登録) MyViewPort.openUI() #設定用UIを表示 MyViewPort.cycleLoad() #循環ロード(ショートカットに登録) MyViewPort.cycleLoad(single = True) #単一ロード(ショートカットに登録)
~クイックリファレンス~
とりあえず利用するには?
- 設定用UIを表示(MyViewPort.openUI())
- Saveボタンを押して、現在のアクティブなビューポートの設定を保存
- 循環ロード(MyViewPort.cycleLoad())を実行
※循環ロードか単一ロードのどちらか、または両方を Mayaのホットキーに登録 すると便利。
~詳細~
■ 保存できる項目
肝心の保存できる項目ですが、
ビューポートの上部のメニューの・・・
- シェーディング
- ライティング
- 表示
の ほぼ すべての設定項目が保存できます。
■ メイン
カスタムシェルフにはこっちを登録して使います。
修飾キーを受け付ける仕様になっていまして・・・
- Ctrl + Shift
- 設定用UIを表示: .openUI()
- 初回は、UIから好みのビューポートの設定をセーブすることから始めます。※後述
- Ctrl
- 循環ロードを実行: .cycleLoad()
- セーブした複数の設定を上から順に切り替えつつロードします。
- 何も押さない
- 単一ロードを実行: .cycleLoad(single = True)
- セーブした設定一覧から頭の設定をロードします。
■ 設定用UI
メインUI
- 設定名の選択リスト
- セーブデータ内に存在するビューポートの設定名の一覧を表示しています。
- 設定名をダブルクリックすると、その設定をアクティブなビューポートに反映(ロード)します。
- シングルクリックで、下部の 設定名入力フィールド にその設定名が入ります。
- リロードボタン
- セーブデータが存在するのに、設定名がリストに反映されていない場合はこれを押すと良いです。
- オーダー設定ボタン
- セーブデータ内の設定名の順序を変更するUI(オーダー設定UI)に切り替えます。※後述
- ロードボタン
- 現在リストで選択中の設定を反映します。
- 削除ボタン
- 現在リストで選択中の設定を削除します。
- 設定名入力フィールドとセーブボタン
- リストに存在しない名前を入力してセーブを押すと、新規に設定を保存します。
- リストに存在する名前を入力してセーブを押すと、設定を上書き保存します。
- 閉じるボタン
- ウィンドウを閉じます。
オーダー設定UI
- 設定名のリスト
- セーブデータ内に存在するビューポートの設定名の一覧を表示しています。
- 設定名をシングルクリックして選択できます。
- アップとダウンボタン
- リストで選択中の設定の順序を上げ下げします。
- OKボタン
- 順序の編集を決定し、保存します。
- ウィンドウも自動的にメインUIに戻ります。
- キャンセルボタン
- 順序の編集を取りやめて、メインUIに戻ります。
その他
■ サポートしているMayaバージョン
- Maya2014
- Maya2015
- Maya2016
- Maya2017
- Maya2018
スクリプト制作自体は、Maya2018で行っていたので、もしかするとそれ以外のバージョンでは動作が怪しいかも。
制作話
スクリプトのユーザー設定情報は何の形式で保存するべきか?
ちょうど当時はXmlやJsonについて学習していたので、このスクリプトではセーブデータをXmlで扱っています。
毎度毎度、自分はあまり頭がよくないのでコードが冗長気味になってしまい・・・
ずらっと長いコードがドンっと一発あるだけで、汎用性というかハードコードというか・・・とにかく修正しづらいし見直しがめんどうなコードになりがちなので、
本スクリプトでは、それを改善すべく「なるべく目的別にファイルを分けて、コードの可読性を上げる」が目標でした!
結果的に、整理はしやすくなった代わりに、ファイル数が多くて嫌いな人は嫌いかも。
余裕があれば、ここから柔軟な対応ができるようにコードを修正するつもり。
あとバージョン管理。昔はGitを試していたのですが、無料版はパブリックなリポジトリしか使えないという制限があると知って途中でやめてしまい・・・結局、個人での開発はアンダーバーと日付を付けるリネーム方法で管理をしてました・・・これも今後もっとよい方法を考える必要がありますね。
それと、例外処理の正しい・・・というか好ましい使い方も、まだまだ怪しいです。今までの自分は何となく例外処理(それこそ、なぜか特定の場所でエラーが出るからとりあえずtryを入れとくか、みたいな)しかしていなかったのですが、このスクリプトでは「ビューポートの設定項目数がMayaのバージョンによって差がある」点から、各項目を編集する箇所に、意図して例外処理を入れています。※例外をキャッチすれば、その箇所を文字列で出力します。
逆にUIでユーザーに明示的にエラーメッセージを表示していません。(基本的にはエラーがあっても、スクリプトは停止しないようにはしているはず・・・。
スクリプトは、やればやるほど勉強すべき問題が出てくるので終わりがないですねホント。