ON-BLOG

CGのこと、あれこれ書いてます。

オーダー変えるやつ

続けて次はアニメーションの結果を変えずに
オーダーを切り替えるスクリプトを書いていきたいと思います。
SI時代にも作成していて、さらに昨年MAYA版も作ったんですが
色々あり、闇に消えてしまったので一から作り直してみたいと思います。
※今回は色々時間がないので、さらにスローに作ります‥

では、このスクリプトの仕様を見ていきましょう。

お題:オーダー変更スクリプト
制作理由:オーダーを変えるのが、地味に面倒。
     外部に出して、変更しないとアニメーションの結果が変わる。
     一度プロットしないといけない。
     複数実行ができない。

実装方法:
●選択したものを取得して、ロケータを取得→コンストかけて
 オーダーを変えれるように
 またイテレーションをできるだけ、少なくしたいので
 オーダーを確認できるようにテストモードを実装。
 ボタンで一時的に確認できるようにする。

●テストモードは、実行と同じで、選択物に対して
ロケータを生成して、コンストをかける。
 そのロケーターでプルダウンを選ぶ度に、オーダーが変えれるようにして
 目視で実行後のイメージが見えるようにします。
     
●後は、この時のエラー処理をどうしようかと‥
 選択を固定する事はできないので、スクリプトジョブかなんかで
 監視する事が必要かも‥まだモヤモヤしてる箇所。
 あとアニメーションしていない、物は弾く。

●さらにキーが一個ならプロットせずに
 オーダーのそのまま変えるように設定。
 オーダー変えた際に、デフォルトのオーダーも
記憶しておかないと、いけないのでアトリビュートを追加

     
●オーダー変更自体は、一時的に作ったロケータをプロットして
 選択コントローラーを逆コンストする形で実装。
 ただ、複数あるとプロット祭りになるので
 一度配列にコントローラーを追加して、プロット自体は一気に行う。
 またコンスト自体も同様に一括で行う。

以上な感じで。

今回はぱっとUIを先作ってみました。
こんな感じ。
f:id:tommy_on:20160912165233p:plain

タブ切り替えると
f:id:tommy_on:20160912165245p:plain

現状のイメージでここにコマンド入れ込んでいきたいですね。
あと、マニュピレーターをボタンかなんかで変えれるようにした方がいいのか‥
また考えます。
一応コード
※すみません。汚いです。。。

# -*- 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)



今回は短いですが、以上です。