MAYAでよく使う機能や自作スクリプトを実行するコマンドをまとめる方法として、
- シェルにまとめる
- 自作スクリプトのGUIウィンドウでまとめる
そして今回紹介する
- メインメニューバーに項目を追加
基本的に。この3つが考えられます。
シェルにまとめる方法は、スクリプトを書く必要が無いので、まとめる方法として最も簡単に出来ます。
自作スクリプトのGUIウィンドウ内でまとめる方法はスクリプトを書く必要はありますが、ボタン、アイコン、メニュー、など様々な方法でまとめる事ができます。
メニューバーに追加する方法は、MAYAを起動時には既に追加されているので、チーム内で共通に使われるツール群をまとめる場合等に適していると思います。
メインウィンドウのメニューバーには、あらかじめMELの変数が用意されているのが、スクリプトを書く際に気づきにくい部分ですが、そこを注意して参考にしてもらえたらと思います。
|
MELで作成したGUIウィンドウにメニューバーを追加
まずはMELスクリプトで自作のGUIウィンドウを作成して、メニュー、ボタン、アイコン を配置したいと思います。
MEL:
window -menuBar true -width 250; menu -label "File" -tearOff true; menuItem -label "New"; menuItem -label "Open"; menuItem -label "Save"; menu -label "Tools" -helpMenu true; menuItem -label "Script_01" -command "command01" ; menuItem -label "Script_02" -command "command02" ; menuItem -label "Script_03" -command "command03" ; columnLayout; rowColumnLayout -numberOfRows 1; button -label "Tool_Button1" ; button -label "Tool_Button2" ; button -label "Tool_Button3" ; setParent ..; gridLayout -numberOfColumns 5 -cellWidthHeight 39 43; iconTextButton -style "iconAndTextCentered" -image1 "pointToPoint.png" -command "SnapPointToPoint"; iconTextButton -style "iconOnly" -image1 "textureEditor.png" -command "TextureViewWindow"; iconTextButton -style "iconOnly" -image "polyApplyColor.png" -command "PolygonApplyColorOptions"; iconTextButton -style "iconOnly" -image1 "polyAppendFacet.xpm" -command "setToolTo polyAppendFacetContext ; polyAppendFacetCtx -e -pc `optionVar -q polyKeepFacetsPlanar` polyAppendFacetContext"-annotation "polyAppendFacet"; iconTextButton -style "iconOnly" -image1 "polySubdFacet.xpm" -command "SubdividePolygonOptions" -annotation "SubdividePolygonOptions"; setParent ..; showWindow;
説明:
window -menuBar true -width 250;
[-menuBar true]でメニューバー付きのウィンドウ
menu -label "File" -tearOff true;
menuItem -label "New";
menuItem -label "Open";
menuItem -label "Save";
menu -label "Tools" -helpMenu true;
menuItem -label "Script_01" -command "command01" ;
menuItem -label "Script_02" -command "command02" ;
menuItem -label "Script_03" -command "command03" ;
ラベル名が”File”と”Tools”のメニュー項目を追加しました。それぞれの項目に[menuItem]でアイテムを追加しています。
実行:
MELで作成した自作GUIウィンドウに、メニュー、ボタン、アイコンが配置されました。
ボタンを押したらメニューバーに項目を追加する
作成した自作GUIウィンドウのメニューバーに項目を新たに追加したいと思います。
コマンド [menu]は、フラグ[-parent(-p)]で親となるメニューバーを指定する事ができます。メニューバーに新たに項目を追加するには、親のメニューバーを指定して項目を追加します。
親となるメニューバーはコマンド[menuBarLayout]を指定する事ができます。
window -width 250; //-menuBar true を削除 string $menuBarLayout = `menuBarLayout`; //メニューバーの変数 $menuBarLayout を親にしてレイアウトします menu -label "File" -tearOff true; menuItem -label "New"; menuItem -label "Open"; menuItem -label "Save"; menu -label "Tools" -helpMenu true; menuItem -label "Script_01" -command "command01" ; menuItem -label "Script_02" -command "command02" ; menuItem -label "Script_03" -command "command03" ; columnLayout; string $menuName = "newMenu"; //メニューに追加する項目の名前 rowColumnLayout -numberOfRows 1; button -label "Tool_Button1" -command ("menu -parent " + $menuBarLayout + " -label "+ $menuName +" ;"); //親 $menuBarLayout に項目を追加します button -label "Tool_Button2" ; button -label "Tool_Button3" ; setParent ..; gridLayout -numberOfColumns 5 -cellWidthHeight 39 43; iconTextButton -style "iconAndTextCentered" -image1 "pointToPoint.png" -command "SnapPointToPoint"; iconTextButton -style "iconOnly" -image1 "textureEditor.png" -command "TextureViewWindow"; iconTextButton -style "iconOnly" -image "polyApplyColor.png" -command "PolygonApplyColorOptions"; iconTextButton -style "iconOnly" -image1 "polyAppendFacet.xpm" -command "setToolTo polyAppendFacetContext ; polyAppendFacetCtx -e -pc `optionVar -q polyKeepFacetsPlanar` polyAppendFacetContext"-annotation "polyAppendFacet"; iconTextButton -style "iconOnly" -image1 "polySubdFacet.xpm" -command "SubdividePolygonOptions" -annotation "SubdividePolygonOptions"; showWindow;
説明:
window -width 250;
string $menuBarLayout = `menuBarLayout`;
コマンド menuBarLayout は”window -menuBar true”と書いた場合と同様にメニューバーが表示されるので、”-menuBar true” は削除しました。
メニューバーの親と成る変数 $menuBarLayout に menuBarLayout を代入します。
string $menuName = "newMenu"; // button -label "Tool_Button1" -command ("menu -parent " + $menuBarLayout + " -label "+ $menuName +" ;");
[-parent] で追加する親を指定できるので、親の $menuBarLayout を指定して、メニューバーに ”newMenu” の名前で項目を追加します。
実行:
「Tool_Button1」をクリックすると、メニューバーに[newNemu]が追加されました。
MAYAのメインメニューバーに項目を追加
自作GUIウィンドウのメニューバーに項目を追加する場合は、親のメニューバーを指定する必要がありました。
しかし自作GUIウィンドウの親のメニューバーは、コマンド[menuBarLayout]を指定する事が出来ましたが、MAYAのメインウィンドウのメニューバーは[menuBarLayout]を指定する事ができません。
MELにはメインウィンドウのメニューバーを指定する変数
$gMainWindow
が用意されています。
この変数を親として指定すれば、自作GUIウィンドウのメニューバーと同様に、メインウィンドウのメニューバーに項目を追加する事ができます。
スクリプトエディターに以下のコマンドを書いて実行してみます。
menu -parent $gMainWindow -tearOff true -label "newMenu";
[-tearOff]はメニューバーから切り離せるフラグ
実行:
メインウィンドウのメニューバーに”newMenu”が追加されました。
|
MAYAを起動時にメインメニューバーに項目を追加する
メインメニューバーに項目を追加する事はできました。
でもMAYAを起動した時には、既に追加された状態であってほしいです。
MAYAが起動した時に、”メインメニューバーに項目を追加するスクリプト” を実行すれば実現できそうです。
userSetup.melでコマンドを実行
MAYAは起動時に userSetup.mel という名前のファイルに書かれたコマンドを実行します。
つまり、このuserSetup.melファイルに”メインメニューバーに項目を追加するスクリプト”が書かれたファイルを、実行するコマンドを書けば良さそうです。
userSetup.mel ファイルをスクリプトパスのフォルダに作成します。
Windows: ..\[User name]\Documents\maya\<バージョン>\scripts
Mac OS X: ~/Library/Preferences/Autodesk/maya/<version>/scripts
userSetup.melファイルを開いて以下のコマンドを書いて保存します。
addMenu;
userSetup.mel ファイルと同じフォルダに addMenu.mel ファイルを作成します。
addMenu.melファイルを開いて以下のコードを書いて保存します。
global proc addMenu(){ global string $newMenuItem; global string $gMainWindow; if (`menu -exists $newMenuItem`) deleteUI $newMenuItem; $newMenuItem = `menu -p $gMainWindow -to true -l "newMenu" `; menuItem -p $newMenuItem -l "newMenu_Item01"; menuItem -p $newMenuItem -l "newMenu_Item02"; menuItem -p $newMenuItem -l "newMenu_Item03"; menuItem -divider true; menuItem -p $newMenuItem -l "newMenu_Item04"; }
実行:
MAYAを起動します。
addMenu.mel が実行され、メインメニューバーに項目が追加されました。
|
まとめ:メインメニューバーの変数
MAYAのメインメニューバーにMELスクリプトで項目を追加する方法を紹介しました。
メニューバーに項目を追加するには、親となるメニューバーの変数を指定する必要があります。
自作GUIスクリプトのメニューバーはコマンド[menuBarLayout]を親として指定する事ができますが、メインメニューバーでは使えません。
MELにはメインウィンドウのメニューバーの変数として、$gMainWindow を使うことができます。
$gMainWindow を親として指定すれば、メインメニューバーに項目を追加する事ができます。
MAYAを起動時に メインメニューバーに項目を追加するには、userSetup.mel に実行したいコマンドを書くとで実現できます。
|
Adobeのプラチナパートナーに認定されているデジタルハリウッドのオンラインCGスクール「デジハリONLINE」が提供する「Adobeマスター講座」。
基礎動画教材とAdobe creative cloudの一年版ライセンスがセットになった、コスパ最強のパッケージプランです。
学習ノルマは一切ありません。AdobeCCだけを目的に契約してもOK!
>> デジハリONLINE「Adobeマスター講座」
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|