goo blog サービス終了のお知らせ 

日々適当

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 コメント投稿終了予定)
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。