MEL MAYAのメインウィンドウのメニューバーに項目を追加するスクリプト|MEL編

MAYAのメインウィンドウのメニューバーに項目を追加するスクリプト|MEL編

maya_main_menubar_addmenu_topimage

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

ボタンを押したらメニューバーに項目を追加する

作成した自作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]が追加されました。

自作GUIのメニューに[newNemu]が追加されました

MAYAのメインメニューバーに項目を追加

自作GUIウィンドウのメニューバーに項目を追加する場合は、親のメニューバーを指定する必要がありました。

しかし自作GUIウィンドウの親のメニューバーは、コマンド[menuBarLayout]を指定する事が出来ましたが、MAYAのメインウィンドウのメニューバーは[menuBarLayout]を指定する事ができません。

MELにはメインウィンドウのメニューバーを指定する変数

$gMainWindow

が用意されています。

この変数を親として指定すれば、自作GUIウィンドウのメニューバーと同様に、メインウィンドウのメニューバーに項目を追加する事ができます。

スクリプトエディターに以下のコマンドを書いて実行してみます。

menu -parent $gMainWindow -tearOff true -label "newMenu"; 

[-tearOff]はメニューバーから切り離せるフラグ


実行:

メインウィンドウのメニューバーに”newMenu”が追加されました。

メインメニューバーに"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 が実行され、メインメニューバーに項目が追加されました。

addMenu.mel が実行され、メインメニューバーに項目が追加されました

まとめ:メインメニューバーの変数

MAYAのメインメニューバーにMELスクリプトで項目を追加する方法を紹介しました。

メニューバーに項目を追加するには、親となるメニューバーの変数を指定する必要があります。

自作GUIスクリプトのメニューバーはコマンド[menuBarLayout]を親として指定する事ができますが、メインメニューバーでは使えません。

MELにはメインウィンドウのメニューバーの変数として、$gMainWindow を使うことができます。

$gMainWindow を親として指定すれば、メインメニューバーに項目を追加する事ができます。

MAYAを起動時に メインメニューバーに項目を追加するには、userSetup.mel に実行したいコマンドを書くとで実現できます。


Twitter Facebook Pocket LINE はてブ

おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事