2016年3月22日火曜日

フレーム移動スクリプト

アニメーション作業中にフレームの計算が面倒なので、スクリプト化しました。



●add frame
入力した数字分だけ、フレームがプラス方向に移動します。

●minus frame
入力した数字分だけ、フレームがマイナス方向に移動します。

●start frame
中間フレームを求めるための、始めのフレームをセットします。

●end frame
中間フレームを求めるための、終わりのフレームをセットします。

●intermidiate frame
start frame、end frameで入力されたフレームの中間フレームに移動します。
フレーム間が奇数だった場合は、小数点切り捨ての値になります。
例)start frame「10f」、end frame「19f」の場合、「14f」に移動します。


●スクリプト(Python)
################################################################
#
#    [name]Set various frame
#    [function]add frame, minus frame, culculate intermidiate frame
#    [note]if result value is odd, result value round down.
#
#    [author]Kyohei Ueno(heikyonoeu.blogspot.jp)
#
################################################################

import maya.cmds as mc

###set current frame in start frame###
def setStaFCurFrame():
    curF = mc.currentTime(q=1)
    mc.textFieldButtonGrp('staF_fld',edit=1,tx=curF)

###set current frame in end frame###
def setEndFCurFrame():
    curF = mc.currentTime(q=1)
    mc.textFieldButtonGrp('endF_fld',edit=1,tx=curF)

###set intermidiate frame###
def setIntermidiateFrame():
    staF = float(mc.textFieldButtonGrp('staF_fld',q=1,tx=1))
    endF = float(mc.textFieldButtonGrp('endF_fld',q=1,tx=1))
    intmF = int((endF - staF) / 2)
    intmF_result = int(staF + intmF)
    mc.textFieldButtonGrp('intm_fld',edit=1,tx=intmF_result)
    mc.currentTime(intmF_result)

###add frame###
def addFrame():
    a = float(mc.currentTime(q=1))
    b = float(mc.textFieldButtonGrp('addFrame',q=1,tx=1))
    c = a + b
    mc.currentTime(c)

###minus frame###
def minusFrame():
    a = float(mc.currentTime(q=1))
    b = float(mc.textFieldButtonGrp('minusFrame',q=1,tx=1))
    c = a - b
    mc.currentTime(c)

###window###
if mc.window('setVariousFrame',ex=1):
    mc.deleteUI('setVariousFrame')
 
mc.window('setVariousFrame',t='Set various frame',s=0)
mc.columnLayout()
mc.rowLayout(nc=2)
mc.textFieldButtonGrp('addFrame',l='add frame',bl='set',tx=0,cw3=(60,50,30),bc=addFrame)
mc.textFieldButtonGrp('minusFrame',l='minus frame',bl='set',tx=0,cw3=(60,50,30),bc=minusFrame)

mc.setParent('..')
mc.rowLayout(nc=3)
mc.textFieldButtonGrp('staF_fld',l='start frame',bl='set',cw3=(60,50,30),bc=setStaFCurFrame)
mc.textFieldButtonGrp('endF_fld',l='end frame',bl='set',cw3=(60,50,30),bc=setEndFCurFrame)
mc.textFieldButtonGrp('intm_fld',l='intermidiate frame',bl='set',cw3=(95,50,30),bgc=(1,0.443,0),bc=setIntermidiateFrame)

mc.showWindow()