MetaBox/Scripts/Animation/aTools/animTools/framePlaybackRange.py
2025-01-14 03:08:55 +08:00

85 lines
3.2 KiB
Python

'''
========================================================================================================================
Author: Alan Camilo
www.alancamilo.com
Modified: Michael Klimenko
Requirements: aTools Package
------------------------------------------------------------------------------------------------------------------------
To install aTools, please follow the instructions in the file how_to_install.txt
------------------------------------------------------------------------------------------------------------------------
To unistall aTools, go to menu (the last button on the right), Uninstall
========================================================================================================================
'''
from maya import cmds
from aTools.generalTools.aToolsGlobals import aToolsGlobals as G
from aTools.commonMods import utilMod
import importlib
def toggleframePlaybackRange(onOff):
utilMod.killScriptJobs("G.framePlaybackRangeScriptJobs")
if onOff:
G.framePlaybackRangeScriptJobs.append(cmds.scriptJob(runOnce = False, killWithScene = False, event =('ToolChanged', framePlaybackRangeFn)) )
G.framePlaybackRangeScriptJobs.append(cmds.scriptJob(runOnce = False, killWithScene = False, event =('SelectionChanged', framePlaybackRangeFn)) )
framePlaybackRangeFn()
def getMinMax(rangeStart=None, rangeEnd=None):
displayNormalized = cmds.animCurveEditor( 'graphEditor1GraphEd', query=True, displayNormalized=True)
if displayNormalized: return [-1.1, 1.1]
if not rangeStart:
rangeStart = cmds.playbackOptions(query=True, minTime=True)
rangeEnd = cmds.playbackOptions(query=True, maxTime=True)
curvesShown = cmds.animCurveEditor( 'graphEditor1GraphEd', query=True, curvesShown=True)
keysTimes = []
keysValues = []
keysShown = []
if curvesShown:
for aCurve in curvesShown:
kTimes = cmds.keyframe(aCurve, query=True, timeChange=True)
if kTimes:
keysTimes.extend(kTimes)
keysValues.extend(cmds.keyframe(aCurve, query=True, valueChange=True))
for n, key in enumerate(keysTimes):
if rangeStart <= key <= rangeEnd:
keysShown.append(keysValues[n])
if not keysShown:
keyMax = 0
keyMin = 0
else:
keyMax = max(keysShown)
keyMin = min(keysShown)
total = keyMax - keyMin
if total == 0: total = 10
border = total * .1
return [keyMax+border, keyMin-border]
else:
return [0, 100]
def framePlaybackRangeFn(rangeStart=None, rangeEnd=None):
from aTools.commonMods import animMod; importlib.reload(animMod)
animMod.filterNonAnimatedCurves()
if not rangeStart:
rangeStart = cmds.playbackOptions(query=True, minTime=True) -1
rangeEnd = cmds.playbackOptions(query=True, maxTime=True) +1
val = getMinMax(rangeStart, rangeEnd)
minVal = val[0]
maxVal = val[1]
cmds.animView('graphEditor1GraphEd', startTime=rangeStart, endTime=rangeEnd, minValue=minVal, maxValue=maxVal)