オーダー変えるやつ
続けて次はアニメーションの結果を変えずに
オーダーを切り替えるスクリプトを書いていきたいと思います。
SI時代にも作成していて、さらに昨年MAYA版も作ったんですが
色々あり、闇に消えてしまったので一から作り直してみたいと思います。
※今回は色々時間がないので、さらにスローに作ります‥
では、このスクリプトの仕様を見ていきましょう。
お題:オーダー変更スクリプト
制作理由:オーダーを変えるのが、地味に面倒。
外部に出して、変更しないとアニメーションの結果が変わる。
一度プロットしないといけない。
複数実行ができない。
実装方法:
●選択したものを取得して、ロケータを取得→コンストかけて
オーダーを変えれるように
またイテレーションをできるだけ、少なくしたいので
オーダーを確認できるようにテストモードを実装。
ボタンで一時的に確認できるようにする。
●テストモードは、実行と同じで、選択物に対して
ロケータを生成して、コンストをかける。
そのロケーターでプルダウンを選ぶ度に、オーダーが変えれるようにして
目視で実行後のイメージが見えるようにします。
●後は、この時のエラー処理をどうしようかと‥
選択を固定する事はできないので、スクリプトジョブかなんかで
監視する事が必要かも‥まだモヤモヤしてる箇所。
あとアニメーションしていない、物は弾く。
●さらにキーが一個ならプロットせずに
オーダーのそのまま変えるように設定。
オーダー変えた際に、デフォルトのオーダーも
記憶しておかないと、いけないのでアトリビュートを追加
●オーダー変更自体は、一時的に作ったロケータをプロットして
選択コントローラーを逆コンストする形で実装。
ただ、複数あるとプロット祭りになるので
一度配列にコントローラーを追加して、プロット自体は一気に行う。
またコンスト自体も同様に一括で行う。
以上な感じで。
今回はぱっとUIを先作ってみました。
こんな感じ。
タブ切り替えると
現状のイメージでここにコマンド入れ込んでいきたいですね。
あと、マニュピレーターをボタンかなんかで変えれるようにした方がいいのか‥
また考えます。
一応コード
※すみません。汚いです。。。
# -*- coding: utf-8 -*- import maya.cmds as cmds windowname = "OrderCheck" WindowWidth_Size = 230 WindowHight_Size = 300 if cmds.window(windowname,exists=True): cmds.deleteUI(windowname,window=True) Window = cmds.window(windowname,title=windowname,sizeable=False,mxb=False,w=WindowWidth_Size) #Helpの為にメインメニューバーを追加します cmds.menuBarLayout() cmds.menu(label=u"Menu",tearOff=False) cmds.menuItem(label=Window+u"の解説") cmds.separator(w = WindowWidth_Size) cmds.setParent("..") cmds.columnLayout(w=WindowWidth_Size+3) tab = cmds.tabLayout(w=WindowWidth_Size) tab1_B = cmds.frameLayout("ChangeOrder",label="ChangeOrder",bgc=[1.0,0.3,0.2]) cmds.columnLayout( columnAttach= ('left',2)) cmds.rowLayout( 'Orders', numberOfColumns= 4, columnWidth2= [100,40]) cmds.optionMenu( 'Order_List', l= '', w= 100,h=50) cmds.menuItem( l= '0. xyz') cmds.menuItem( l= '1. yzx') cmds.menuItem( l= '2. zxy') cmds.menuItem( l= '3. xzy') cmds.menuItem( l= '4. yxz') cmds.menuItem( l= '5. zyx') cmds.optionMenu( 'Order_List', e= True, bgc= [0.5,0.2,0.2], ebg= False) cmds.button( 'exe', l= u'実行!', h= 40, w= 110) cmds.separator( height= 1) cmds.setParent(tab1_B) tab_2 = cmds.frameLayout("OrderCheck",label="OrderCheck",bgc=[0.2,0.4,0.6]) cmds.columnLayout() cmds.text("") cmds.text(label=u"オーダー変更後の確認が行えます。") cmds.button( 'exe_test', l= u'オーダー確認', h= 35, w= 220) cmds.separator( h= 15) cmds.setParent( tab ) tab2_B = cmds.frameLayout("Plot",label=u"Plot処理",bgc=[0.9,0.1,0.1]) cmds.columnLayout() cmds.separator( h= 15) cmds.button( 'remove', l= u'オーダーを元にもどす', h= 40, w= 220) cmds.separator( h= 15) cmds.button( 'test', l= u'模索中‥', h= 40, w= 220) cmds.tabLayout( tab , edit=True, tabLabel=((tab1_B, u'オーダー変更'), (tab2_B,u"プロット")) ) cmds.showWindow(Window)
今回は短いですが、以上です。