def setSmartKey(time=None, animCurves=None, select=True, insert=True, replace=True, addTo=False): if not time: time = animMod.getTimelineTime() getFrom = "timeline" if not animCurves: getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves and getFrom != "timeline": cmds.setKeyframe(animCurves, time=time, insert=insert) if select: cmds.selectKey(animCurves, replace=replace, addTo=addTo, time=time) else: objects = animMod.getObjsSel() if objects: channelboxSelObjs = animMod.channelBoxSel() if channelboxSelObjs: #objsAttrs = ["%s.%s"%(loopObj, loopChannelboxSel) for loopObj in objects for loopChannelboxSel in channelboxSel] #key selected attributes in the channelbox for n, loopObjAttr in enumerate(channelboxSelObjs): prevKey = cmds.findKeyframe(loopObjAttr, time=(time,time), which="previous") tangentType = cmds.keyTangent(loopObjAttr, query=True, outTangentType=True, time=(prevKey,prevKey)) if not tangentType: #if there is no key tangentType = cmds.keyTangent(query=True, g=True, outTangentType=True) inTangentType = tangentType[0].replace("fixed", "auto").replace("step", "auto") outTangentType = tangentType[0].replace("fixed", "auto") cmds.setKeyframe(loopObjAttr, time=time, insert=False, shape=False, inTangentType=inTangentType, outTangentType=outTangentType) continue inTangentType = tangentType[0].replace("fixed", "auto").replace("step", "auto") outTangentType = tangentType[0].replace("fixed", "auto") cmds.setKeyframe(loopObjAttr, time=time, insert=insert, shape=False, inTangentType=inTangentType, outTangentType=outTangentType) else: #allChannels = animMod.getAllChannels(objects) #objAttrs = ["%s.%s"%(objects[n], loopAttr) for n, loopObj in enumerate(allChannels) for loopAttr in loopObj] prevKeys = [cmds.findKeyframe(obj, time=(time,time), which="previous") for obj in objects] tangentTypes = [cmds.keyTangent(obj, query=True, outTangentType=True, time=(prevKeys[n],prevKeys[n])) for n, obj in enumerate(objects)] #prevKeys = [cmds.findKeyframe(obj, time=(time,time), which="previous") for obj in objAttrs] #tangentTypes = [cmds.keyTangent(obj, query=True, outTangentType=True, time=(prevKeys[n],prevKeys[n])) for n, obj in enumerate(objAttrs)] #key all atributes cmds.setKeyframe(objects, time=time, insert=insert, shape=False) #cmds.setKeyframe(objAttrs, time=time, insert=insert, shape=False) if insert: #will force create key if there is no key for n, loopTangent in enumerate(tangentTypes): if not loopTangent: cmds.setKeyframe(objects[n], time=time, insert=False, shape=False)
def setTween(self, percent, *args): #utilMod.timer("s") G.TM_lastTweenCommand = "self.setTween(%s)" % percent getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves: status = "aTools - Tween Machine..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None cmds.waitCursor(state=True) cmds.refresh(suspend=True) keysSel = animMod.getTarget("keysSel", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves) timelineTime = None #keysSelMerged = utilMod.mergeLists(keysSel) # reverse order to get ease in and out smoothly if 0 < percent <= 50 or percent == 100: for loopVal in keysSel: loopVal.reverse() #utilMod.timer() """ if len(keysSelMerged) == 0: if not timelineTime: timelineTime = [animMod.getTimelineTime()] cmds.setKeyframe(animCurves, time=timelineTime[0]) elif len(keysSelMerged) == 1: cmds.setKeyframe(animCurves, time=keysSelMerged[0]) """ for thisStep, loopCurve in enumerate(animCurves): if cmds.progressBar(G.progBar, query=True, isCancelled=True): utilMod.setProgressBar(endProgress=True) break startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) if not keysSel[thisStep]: if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime else: time = [(loopTime, loopTime) for loopTime in keysSel[thisStep]] # if all keys selected, use timeline time instead if len(time) == len(keyTimes[thisStep]): if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime for loopTime in time: prevKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="previous") nextKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="next") if prevKeyTime == nextKeyTime and prevKeyTime != loopTime[ 0] and percent != "linear_next" and percent != "linear_prev": # if there is no previous or next key and at least one key cmds.setKeyframe(loopCurve, time=loopTime) elif prevKeyTime != time[0]: if percent == "linear_prev": prevKeyTime = nextKeyTime nextKeyTime = cmds.findKeyframe(loopCurve, time=(prevKeyTime, prevKeyTime), which="next") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) elif percent == "linear_next": nextKeyTime = prevKeyTime prevKeyTime = cmds.findKeyframe(loopCurve, time=(nextKeyTime, nextKeyTime), which="previous") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) else: animMod.eulerFilterCurve([loopCurve]) prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] #print "prevKeyVal", prevKeyVal, nextKeyVal #if prevKeyVal == nextKeyVal: #if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) #continue if percent == "linear": value = prevKeyVal + ( (nextKeyVal - prevKeyVal) / (nextKeyTime - prevKeyTime) * (loopTime[0] - prevKeyTime)) else: value = ((nextKeyVal - prevKeyVal) / 100. * percent) + prevKeyVal tangentType = cmds.keyTangent(loopCurve, query=True, outTangentType=True, time=(prevKeyTime, prevKeyTime))[0] inTangentType = tangentType.replace("fixed", "auto").replace( "step", "auto") outTangentType = tangentType.replace("fixed", "auto") if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) cmds.keyframe(loopCurve, edit=True, time=loopTime, valueChange=value) cmds.keyTangent(loopCurve, edit=True, time=loopTime, inTangentType=inTangentType, outTangentType=outTangentType) #keycolor if 1 <= percent <= 99 or percent == "linear": cmds.keyframe( loopCurve, edit=True, time=loopTime, tickDrawSpecial=self.getColoredKeys()) if getFrom == "graphEditor": #curvesToSelect.append([loopCurve, loopTime]) cmds.selectKey(loopCurve, addTo=True, time=loopTime) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #utilMod.timer() """ #APPLY if len(curvesToKey) > 0: cmds.setKeyframe(curvesToKey) for loopVar in curvesToValue: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], valueChange=loopVar[2]) cmds.keyTangent(loopVar[0], edit=True, time=loopVar[1], inTangentType=loopVar[3], outTangentType=loopVar[4]) for loopVar in curvesToColor: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], tickDrawSpecial=self.getColoredKeys()) for loopVar in curvesToSelect: cmds.selectKey(loopVar[0], addTo=True, time=loopVar[1]) """ cmds.refresh(suspend=False) cmds.waitCursor(state=False) utilMod.setProgressBar(endProgress=True)
def setSmartKey(time=None, animCurves=None, select=True, insert=True, replace=True, addTo=False): if not time: time = animMod.getTimelineTime() getFrom = "timeline" if not animCurves: getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves and getFrom != "timeline": cmds.setKeyframe(animCurves, time=time, insert=insert) if select: cmds.selectKey(animCurves, replace=replace, addTo=addTo, time=time) else: objects = animMod.getObjsSel() if objects: channelboxSelObjs = animMod.channelBoxSel() if channelboxSelObjs: #objsAttrs = ["%s.%s"%(loopObj, loopChannelboxSel) for loopObj in objects for loopChannelboxSel in channelboxSel] #key selected attributes in the channelbox for n, loopObjAttr in enumerate(channelboxSelObjs): prevKey = cmds.findKeyframe(loopObjAttr, time=(time, time), which="previous") tangentType = cmds.keyTangent(loopObjAttr, query=True, outTangentType=True, time=(prevKey, prevKey)) if not tangentType: #if there is no key tangentType = cmds.keyTangent(query=True, g=True, outTangentType=True) inTangentType = tangentType[0].replace( "fixed", "auto").replace("step", "auto") outTangentType = tangentType[0].replace( "fixed", "auto") cmds.setKeyframe(loopObjAttr, time=time, insert=False, shape=False, inTangentType=inTangentType, outTangentType=outTangentType) continue inTangentType = tangentType[0].replace("fixed", "auto").replace( "step", "auto") outTangentType = tangentType[0].replace("fixed", "auto") cmds.setKeyframe(loopObjAttr, time=time, insert=insert, shape=False, inTangentType=inTangentType, outTangentType=outTangentType) else: #allChannels = animMod.getAllChannels(objects) #objAttrs = ["%s.%s"%(objects[n], loopAttr) for n, loopObj in enumerate(allChannels) for loopAttr in loopObj] prevKeys = [ cmds.findKeyframe(obj, time=(time, time), which="previous") for obj in objects ] tangentTypes = [ cmds.keyTangent(obj, query=True, outTangentType=True, time=(prevKeys[n], prevKeys[n])) for n, obj in enumerate(objects) ] #prevKeys = [cmds.findKeyframe(obj, time=(time,time), which="previous") for obj in objAttrs] #tangentTypes = [cmds.keyTangent(obj, query=True, outTangentType=True, time=(prevKeys[n],prevKeys[n])) for n, obj in enumerate(objAttrs)] #key all atributes cmds.setKeyframe(objects, time=time, insert=insert, shape=False) #cmds.setKeyframe(objAttrs, time=time, insert=insert, shape=False) if insert: #will force create key if there is no key for n, loopTangent in enumerate(tangentTypes): if not loopTangent: cmds.setKeyframe(objects[n], time=time, insert=False, shape=False)
def setTween(self, percent, *args): #utilMod.timer("s") G.TM_lastTweenCommand = "self.setTween(%s)"%percent getCurves = animMod.getAnimCurves() animCurves = getCurves[0] getFrom = getCurves[1] if animCurves: status = "aTools - Tween Machine..." utilMod.startProgressBar(status) totalSteps = len(animCurves) firstStep = 0 thisStep = 0 estimatedTime = None startChrono = None cmds.waitCursor(state=True) cmds.refresh(suspend=True) keysSel = animMod.getTarget("keysSel", animCurves, getFrom) keyTimes = animMod.getTarget("keyTimes", animCurves) timelineTime = None #keysSelMerged = utilMod.mergeLists(keysSel) # reverse order to get ease in and out smoothly if 0 < percent <= 50 or percent == 100: for loopVal in keysSel: loopVal.reverse() #utilMod.timer() """ if len(keysSelMerged) == 0: if not timelineTime: timelineTime = [animMod.getTimelineTime()] cmds.setKeyframe(animCurves, time=timelineTime[0]) elif len(keysSelMerged) == 1: cmds.setKeyframe(animCurves, time=keysSelMerged[0]) """ for thisStep, loopCurve in enumerate(animCurves): if cmds.progressBar(G.progBar, query=True, isCancelled=True ): utilMod.setProgressBar(endProgress=True) break startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) if not keysSel[thisStep]: if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime else: time = [(loopTime,loopTime) for loopTime in keysSel[thisStep]] # if all keys selected, use timeline time instead if len(time) == len(keyTimes[thisStep]): if not timelineTime: timelineTime = [animMod.getTimelineTime()] time = timelineTime for loopTime in time: prevKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="previous") nextKeyTime = cmds.findKeyframe(loopCurve, time=loopTime, which="next") if prevKeyTime == nextKeyTime and prevKeyTime != loopTime[0] and percent != "linear_next" and percent != "linear_prev": # if there is no previous or next key and at least one key cmds.setKeyframe(loopCurve, time=loopTime) elif prevKeyTime != time[0]: if percent == "linear_prev": prevKeyTime = nextKeyTime nextKeyTime = cmds.findKeyframe(loopCurve, time=(prevKeyTime,prevKeyTime), which="next") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) elif percent == "linear_next": nextKeyTime = prevKeyTime prevKeyTime = cmds.findKeyframe(loopCurve, time=(nextKeyTime,nextKeyTime), which="previous") prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] if nextKeyTime == prevKeyTime: value = prevKeyVal else: value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) else: animMod.eulerFilterCurve([loopCurve]) prevKeyVal = cmds.keyframe(loopCurve, query=True, time=(prevKeyTime, prevKeyTime), valueChange=True)[0] nextKeyVal = cmds.keyframe(loopCurve, query=True, time=(nextKeyTime, nextKeyTime), valueChange=True)[0] #print "prevKeyVal", prevKeyVal, nextKeyVal #if prevKeyVal == nextKeyVal: #if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) #continue if percent == "linear": value = prevKeyVal + ((nextKeyVal - prevKeyVal)/(nextKeyTime - prevKeyTime)*(loopTime[0] - prevKeyTime)) else: value = ((nextKeyVal-prevKeyVal)/100.*percent)+prevKeyVal tangentType = cmds.keyTangent(loopCurve, query=True, outTangentType=True, time=(prevKeyTime,prevKeyTime))[0] inTangentType = tangentType.replace("fixed", "auto").replace("step", "auto") outTangentType = tangentType.replace("fixed", "auto") if not time[0] in keysSel[thisStep]: cmds.setKeyframe(loopCurve, time=loopTime) cmds.keyframe(loopCurve, edit=True, time=loopTime, valueChange=value) cmds.keyTangent(loopCurve, edit=True, time=loopTime, inTangentType=inTangentType, outTangentType=outTangentType) #keycolor if 1 <= percent <= 99 or percent == "linear": cmds.keyframe(loopCurve ,edit=True,time=loopTime, tickDrawSpecial=self.getColoredKeys()) if getFrom == "graphEditor": #curvesToSelect.append([loopCurve, loopTime]) cmds.selectKey(loopCurve, addTo=True, time=loopTime) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #utilMod.timer() """ #APPLY if len(curvesToKey) > 0: cmds.setKeyframe(curvesToKey) for loopVar in curvesToValue: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], valueChange=loopVar[2]) cmds.keyTangent(loopVar[0], edit=True, time=loopVar[1], inTangentType=loopVar[3], outTangentType=loopVar[4]) for loopVar in curvesToColor: cmds.keyframe(loopVar[0], edit=True, time=loopVar[1], tickDrawSpecial=self.getColoredKeys()) for loopVar in curvesToSelect: cmds.selectKey(loopVar[0], addTo=True, time=loopVar[1]) """ cmds.refresh(suspend=False) cmds.waitCursor(state=False) utilMod.setProgressBar(endProgress=True)