hibitekitou
MayaでのGUI
cg |2016-01-29
前書いたスクリプトをちょっと改造して、選択したオブジェクトのUVのリストを取得するというにしてみました。
import maya.cmds as cmds #UVのリスト def listUVSet(*args): uvSets = cmds.polyUVSet(args[0], q=True, allUVSets=True) return uvSets def changeUI(): objs = cmds.ls(selection=True) uvSets = [] if len(objs) > 0: cmds.textField(txt, e=True, text=objs[0]) shape = cmds.listRelatives( objs[0] , shapes=True ) uvSets = listUVSet(shape) else: cmds.textField(txt, e=True, text='-') menuItems = cmds.optionMenu(uvSetsMenu, q=True, itemListLong=True) if menuItems: cmds.deleteUI( menuItems ) if len(uvSets) > 0: for uvSet in uvSets: cmds.menuItem(label = uvSet, parent=uvSetsMenu) else: cmds.menuItem(label = 'None', parent=uvSetsMenu) try: if cmds.window(win, exists=True): cmds.deleteUI(win, window=True) except: pass win = cmds.window('M4G_Window_Selected', title='TEST') cmds.columnLayout(columnAttach=['left', 5], rowSpacing=10) txt = cmds.textField( text='---') uvSetsMenu = cmds.optionMenu( label='UVSets' ) cmds.menuItem(label = 'None') cmds.showWindow(win) jobNum = cmds.scriptJob( event=["SelectionChanged",'changeUI()'], protected=True ,parent=win)
こちらは、optionMenuって命令で一般的にはドロップダウンリストと呼ばれるものを出しています。ちなみに似たようなUIでコンボボックスってのがありますけど、こっちは値をユーザが編集可能なものという位置づけだそうですね。

というわけで、optionMenuでそれを出す仕組みを作り、メニュー内の項目はmenuItemで追加してくのだそうです。menuItemで追加した要素の親がoptionMenuで作成したものという構造ですね。だから、メニューの要素を変更する時は、まずメニュー要素を削除の上
cmds.menuItem(label = uvSet, parent=uvSetsMenu)
というように、親を指定してどのドロップダウンリストか指定して、そのなかにメニュー要素を入れていくという構造にしてみております。
なを、scriptJobですけど、前回やった時はparentフラグをつけていませんでした。これで親をウインドウにすることで、ウインドウが消えたらscriptJobも消えるという事をしています。これしとかないと発行したscriptJobは残り続けるようで、このスクリプトの場合、ウインドウが閉じたのにスクリプトを実行しようとして、でも実行するための関数は既に無いから、何かオブジェクトを選択するたびにエラーを吐く、ということになっておりました。
コメント ( 0 )|Trackback ( )
コメント(10/1 コメント投稿終了予定) |
コメントはありません。 |
![]() |
コメントを投稿する |
![]() |
ブログ作成者から承認されるまでコメントは反映されません |