MEL,Python MAYAのメインウィンドウのシェルフをPythonで操作する方法

MAYAのメインウィンドウのシェルフをPythonで操作する方法

maya_python_select_shelftoplevel_topimage

「メインウィンドウのシェルフをPythonスクリプトで操作したい」


MAYAのメインウィンドウの上部に配置されている

Shelf/シェルフ

ツールやコマンドを登録して1クリックで機能にアクセスする事ができ非常に便利です。

そしてMAYAではこのシェルフを操作するためのコマンドも用意されています。

  • saveShelf
  • shelfButton
  • shelfLayout
  • shelfTabLayout
  • saveAllShelves 


例として「shelfTabLayout」と「shelfLayout」「shelfButton」を使ってスクリプトを書きました。

import maya.cmds as cmds

cmds.window()
cmds.shelfTabLayout( 'mainShelfTab', image='smallTrash.png', imageVisible=True )
cmds.shelfLayout( 'Modeling' )
cmds.shelfButton(image1="polySphere.png",
                         label="Polygon Sphere", annotation="Polygon Sphere",
                         command="CreatePolygonSphere")
                        
cmds.shelfButton(image1="polyCone.png",
                         label="Polygon Cone", annotation="Polygon Cone",
                         command="CreatePolygonCone")
                        
cmds.shelfButton(image1="polySVG.png",
                         label="SVG", annotation="SVG",
                         command="CreatePolygonSVG")                        
cmds.setParent( '..' )
cmds.shelfLayout( 'Rendering' )
cmds.shelfButton(image1="pointlight.png",
                         label="Point Light", annotation="Point Light",
                         command="CreatePointLight")
                        
cmds.shelfButton(image1="art3dPaint.png",
                         label="3D Paint Tool", annotation="3D Paint Tool",
                         command="Art3dPaintTool")        
cmds.setParent( '..' )

cmds.showWindow()


説明:

cmds.shelfTabLayout( 'mainShelfTab', image='smallTrash.png', imageVisible=True )

シェルフタブ名‘mainShelfTab’として親シェルフを設置

cmds.shelfLayout( 'Modeling' )

シェルフタブ名’Modeling’として子シェルフを設置


cmds.shelfButton(image1="polySphere.png",
                         label="Polygon Sphere", annotation="Polygon Sphere",
                         command="CreatePolygonSphere")

シェルフ’Modeling’に”Polygon Sphere”を追加


実行:

タブでカテゴリ分けされたシェルフが設置されたウィンドウが作られました。

タブでカテゴリ分けされたシェルフが設置されたウィンドウ


続けて以下のスクリプトを実行すると

cmds.shelfTabLayout('mainShelfTab', e=True, selectTab="Rendering")


説明:

親シェルフタブ名’mainShelfTab‘から”Rendering”タブを選択

結果:

選択されるタブが”Modeling”から”Rendering”に変わりました。

選択されるタブが"Modeling"から"Rendering"に変わりました。



新たに作ったウィンドウに配置した親シェルフ名’mainShelfTab’を指定する事が出来たので、タブを任意に選択する事が出来ましたが、ではMAYAのメインウィンドウのシェルフを指定するにはどうしたら良いのか。

はMAYAのメインウィンドウのシェルフ



この記事では、PythonスクリプトでMAYAのメインウィンドウにあるShelf/シェルフの、タブを選択したりツールを追加する方法を紹介します。

MELでメインウィンドウのシェルフを指定する方法

MELにはメインウィンドウのシェルフを指定する変数

$gShelfTopLevel

が用意されています。


MELを使ってメインウィンドウのシェルフから任意のタブを選択してみます。

shelfTabLayout -e -selectTab "Animation" $gShelfTopLevel;


実行:

シェルフのタブから”Animation”が選択されました

シェルフのタブから"Animation"が選択

Pythonでメインウィンドウのシェルフを指定する方法

MELに用意されている$gShelfTopLevelと同等の変数?はPythonにはありません。
そのためPythonでMELコマンドを実行する

maya.mel.eval()

を使う必要があります。

変数「gShelfTopLevel」を用意して以下のスクリプトコードを書きました。

import maya.mel
gShelfTopLevel = maya.mel.eval('$tmpVar=$gShelfTopLevel')

これで変数「gShelfTopLevel」を親シェフ名として指定することができます。

Pythonでメインウィンドウのシェルフのタブを選択する

変数「gShelfTopLevel」を親シェルフ名としてメインウィンドウのシェルフから任意のタブを選択してみます。

import maya.mel
gShelfTopLevel = maya.mel.eval('$tmpVar=$gShelfTopLevel')
cmds.shelfTabLayout(gShelfTopLevel, e=True, selectTab="Rendering")


説明:

cmds.shelfTabLayout(gShelfTopLevel, e=True, selectTab="Rendering")

「gShelfTopLevel」を親シェルフ名に指定してタブ名”Rendering”を選択します。

結果:

タブ名”Rendering”が選択されました。

タブ名"Rendering"が選択

Pythonでメインウィンドウのシェルフにシェルフボタンを追加する

変数「gShelfTopLevel」を親シェルフ名としてメインウィンドウのシェルフを指定して、選択されているタブにシェルフボタンを追加したいと思います。

import maya.cmds as cmds
import maya.mel

gShelfTopLevel = maya.mel.eval('$tmpVar=$gShelfTopLevel')                        
selectTab = cmds.tabLayout(gShelfTopLevel,q=True,selectTab=True)
cmds.shelfButton(parent = selectTab ,image1="polyCone.png",
                         label="Polygon Cone", annotation="Polygon Cone",
                         command="CreatePolygonCone")     


説明:

selectTab = cmds.tabLayout(gShelfTopLevel,q=True,selectTab=True)

シェルフ「gShelfTopLevel」のタブから選択されているタブ名を取得。変数「selectTab」に代入

cmds.shelfButton(parent = selectTab ,image1="polyCone.png",
                         label="Polygon Cone", annotation="Polygon Cone",
                         command="CreatePolygonCone")   

取得したタブ名が代入された変数「selectTab」を親parentにして[CreatePolygonCone]を追加

実行:

シェルフから任意のタブを選択してスクリプトコードを実行。

選択したタブ「Motion Graphics」に[CreatePolygonCone]のシェルフボタンが追加されました。

シェルフボタンが追加されました

まとめ

PythonスクリプトでMAYAのメインウィンドウにあるShelf/シェルフを指定する方法を紹介しました。

Pythonでメインウィンドウのシェルフを指定するには

import maya.mel
gShelfTopLevel = maya.mel.eval('$tmpVar=$gShelfTopLevel')

maya.mel.eval()を使って変数を親シェルフ名とすることでメインウィンドウのシェルフを指定することができます。

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