まず、単純にvisorにユーザごとのカスタムタブを追加するのはvisorのTabsメニューから可能です。
しかし、このカスタムタブのデータはユーザ設定ファイルのuserPref.melのoptionVarに記録されるのでMayaのバージョンを変えたり、ユーザを変えたりして読み込む設定ファイルが変わってしまえばカスタムタブは読み込まれません。
では、社内の全ユーザのvisorに強制的にカスタムタブを入れたい、またはバージョン違いのMayaに同じvisorのカスタムタブを追加したい場合などにはどうすればよいか。
私の思い当るところ、方法は2つあります。 まず一つ目はカスタムタブの情報を記録しているoptionVarコマンドを起動時に実行するスクリプトを書く方法です。
次のMELスクリプトはmyVisorTabというラベルのカスタムタブをvisorに追加するスクリプトです。
addCustomVisorTabs.mel
if(`optionVar -exists "visorTabCustom"`==0){
optionVar
-sva "visorFirstPaneTabs" "visorTabCustom"
-iv "visorTabCustom" 1
-sv "visorTabCustomCurrentDirectory" "C:\\Models_Maya\\"
-iv "visorTabCustomDirectoriesShown" 1
-sv "visorTabCustomDirectoriesVisorName" "directoriesCustomVisorEd"
-iv "visorTabCustomFilesShown" 1
-sv "visorTabCustomFilesVisorName" "filesCustomVisorEd"
-sv "visorTabCustomLabel" "myVisorTab"
-sv "visorTabCustomRootDirectory" "C:\\Models_Maya\\"
-sv "visorTabCustomType" "disk";
}
}
SetupCustomVisorTabs();
このスクリプトをMayaの社内共有スクリプトディレクトリに置き、Mayaを起動して
source addCustomVisor.mel
とコマンドを実行すれば、visorを開いた初期化時にカスタムタブが追加されます。
すなわちこのsource addCustomVisor.melをuserSetup.pyなどで実行してあげれば無事カスタムタブが追加されるということになります。
起動時に実行されるようにuserSetup.pyにこのコマンドを実行するコードを書きます。
userSetup.py
mel.eval("source addCustomVisorTabs.mel");
これでMayaを起動してみると無事にカスタムタブが追加されるのが確認できました。
ちなみにアイコンはsceneデータなどのアイコンはデフォルトアイコンになってしまいますが、sceneと同ディレクトリ直下に自動的に作られるmayaswatchというMayaのアイコンデータをいじるとカスタムアイコンでブラウジングが可能になります。具体的な作り方についてはまた今度書こうかと思います。
さて、それではもう一つの方法も紹介しておきます。こちらの方法は上記の方法に比べて複雑かつ管理も大変になるので特にメリットはないですが、技術的な意味で興味がある方がいるかもしれないので念のため書きます。
もう一つの方法とはvisorを初期化しているvisorPanel.melを編集してtabを追加することです。上記の方法はカスタムタブを作るモジュールを賢く分けていたのに対し、根本となっているファイルにねじこんでしまえという愚かな考え方です。
このvisorPanel.melというスクリプトファイルは次のパスにあります。
Mayaインストールディレクトリ/scripts/others
このようなインストールディレクトリにあるオリジナルファイルの編集を行う場合、ここにあるオリジナルは編集しないで、このvisorPanel.melを別のscriptディレクトリにコピーして、そちらを編集するべきです。scriptディレクトリに置けば元ではなく、コピーした方が反映されますので。
編集する個所ですが、このスクリプトを開くと1925行目あたりにinitTabs(string $panel)というプロシージャが定義されているはずですが、このinitTabsが編集するプロシージャになります。
この中の1980行目あたりに次のようなコードがあります。
$firstPaneTabVars = `optionVar -query visorFirstPaneTabs`;
このコードの下に次のようなコードを追加します。
int $addCustomTab=1;
for ($i = 0; $i < size($firstPaneTabVars); $i++){
print($firstPaneTabVars[$i]+"\n");
if(gmatch($firstPaneTabVars[$i],"visorTabCustom")){
$addCustomTab=0;
break;
}
}
if($addCustomTab==1){
optionVar
-sva "visorFirstPaneTabs" "visorTabCustom"
-iv "visorTabCustom" 1
-sv "visorTabCustomCurrentDirectory" "C:\\Models_Maya\\"
-iv "visorTabCustomDirectoriesShown" 1
-sv "visorTabCustomDirectoriesVisorName" "directoriesCustomVisorEd"
-iv "visorTabCustomFilesShown" 1
-sv "visorTabCustomFilesVisorName" "filesCustomVisorEd"
-sv "visorTabCustomLabel" "myVisorTab"
-sv "visorTabCustomRootDirectory" "C:\\Models_Maya\\"
-sv "visorTabCustomType" "disk";
}
$firstPaneTabVars = `optionVar -query visorFirstPaneTabs`;
最初のfor文ですでに同様のタブがないかを探します。タブが見つからなかった場合のみoptionVarでカスタムタブの情報を追加します。
これは1つ目に書いた方法と全く同じことをもっとわかりづらく書いている感じです。この方法でも同様にカスタムタブを強制的に作ることに成功しました。
何度も言いますが、2つ目の方法にはメリットが全く見いだせないので、やるなら1つ目に紹介した方法をやるべきかと思います。
visorはすぐにMayaにインポートができてアセットをブラウジングするのに結構便利なので、モデルデータやリグデータなどをvisorに追加しておくと作業効率アップに繋がります。是非お試しください。