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

日々適当

hibitekitou

MayaでのGUI

cg |2016-01-26

イベントに反応してリアクションを返すっての。
選択したオブジェクトの名前と位置を表示するというものを作ってみました。これで合っているのかは知らんけど、とりあえず目的としたところはできているっぽい…

GUI的にはtextFieldとfloatFieldGrpを使ってみた。

textFieldはそのままですね。floatFieldGrpはxyzとかrgbaとか、値を塊で持たせたい時に使うみたいです。textFieldGrpも存在します。余談ながら、textFieldあるいはtextFieldGrpを使って、Pythonの文字列を評価する関数eval()を使えば、フィールドに入力された数式から値を返すというSoftimage的なUIを作れるはずですね。

import maya.cmds as cmds

def changeUI():
    objs = cmds.ls(selection=True)
    if len(objs) > 0:
        cmds.textField(txt, e=True, text=objs[0])
    else:
        cmds.textField(txt, e=True, text='-')
    
    try:
        pos = cmds.xform(objs[0], q=True, worldSpace=True, translation=True)
        cmds.floatFieldGrp( xFormField , e=True, value1=float(pos[0]), value2=float(pos[1]), value3=float(pos[2]) )
    except:
        zero=float(0.0)
        cmds.floatFieldGrp( xFormField , e=True, value1=zero, value2=zero, value3=zero )
 
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='---')
xFormField = cmds.floatFieldGrp(numberOfFields=3, label='Pos: ', columnAttach=[1, 'left', 5], columnWidth4=[30,50,50,50], value1=100, value2=100, value3=100)

cmds.showWindow(win)

jobNum = cmds.scriptJob( event=["SelectionChanged",'changeUI()'], protected=True  ,parent=win) 

発生したイベントを取得するのはscriptJobってのを使うのだそうだ。eventフラグの"SelectionChanged"って部分がどのイベントに対してリアクションをするかを指定した部分。イベント以外にも条件が変わったり(conditionChange)、アトリビュートが変わったり(attributeChange)といった条件でも駆動するようです。で、今回の場合、選択したものが変わった時にchangeUI()って関数を実行するようにしています。

ちなみにこちら書いている時、# Error: line 1: invalid syntax # が続出しました。
floatFieldGrpに値を書き込む時、xformで取得したリストの値を直接書き込むとダメで、floatに明示的に変換してやるといけたのだけど、何でなんでしょ?

コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

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