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 unselectMirrorObjs(self, side): objects = animMod.getObjsSel() if side == "center": objs = animMod.getMirrorObjs(objects, side="left") objects.extend(objs) objs.extend(animMod.getMirrorObjs(objects, side="right")) objects.extend(objs) objs.extend(animMod.getMirrorObjs(objects, side="left")) centerObjs = [ loopObj for loopObj in objects if loopObj not in objs and loopObj and cmds.objExists(loopObj) ] if len(centerObjs) > 0: cmds.select(centerObjs, deselect=True) else: if side == "left": side = "right" elif side == "right": side = "left" objs = animMod.getMirrorObjs(objects, side=side) objs = [ loopObj for loopObj in objs if loopObj and cmds.objExists(loopObj) ] if len(objs) > 0: cmds.select(objs, deselect=True)
def getDataFromFiles(self, animAttr, folder, infoFiles, fileModTime, ext, progressInfo, onlySelectedNodes): currSel = animMod.getObjsSel() data = {"data":[], "modTime":None} infoFileModTimeList = [] startChrono, firstStep, thisStep, totalSteps, estimatedTime, status = progressInfo initialStep = thisStep for n, loopFile in enumerate(infoFiles): if cmds.progressBar(G.progBar, query=True, isCancelled=True ): utilMod.setProgressBar(endProgress=True) return thisStep = n+initialStep startChrono = utilMod.chronoStart(startChrono, firstStep, thisStep, totalSteps, estimatedTime, status) infoFileStr = loopFile.replace(":", "_aTools_")[0:-(len(ext)+1)] infoFilePath = aToolsMod.getSaveFilePath("%s%s%s"%(folder, os.sep, infoFileStr), ext=ext) infoFileModTimeList.append(os.path.getmtime(infoFilePath)) if infoFileModTimeList[-1] > fileModTime: #load only what is newer object = loopFile.replace("_aTools_", ":")[0:-(len(ext)+1)] value = aToolsMod.loadFileWithUser(folder, infoFileStr, ext=ext) if onlySelectedNodes: if animAttr == "anim": obj = value["objects"][0] else: obj = object.split(".")[0] if obj not in currSel: continue data["data"].append({"_modTime":infoFileModTimeList[-1],"object":object, "value":value}) estimatedTime = utilMod.chronoEnd(startChrono, firstStep, thisStep, totalSteps) #file mod date data["data"].sort() #sort newer files last if len(infoFileModTimeList) > 0: data["modTime"] = max(infoFileModTimeList) progressInfo = [startChrono, firstStep, thisStep, totalSteps, estimatedTime, status] #blend animation data================= return [data, progressInfo]
def selectMirrorObjs(self, add, lastObj=None): objects = animMod.getObjsSel() mirrorObjs = animMod.getMirrorObjs(objects) sel = [] if mirrorObjs: for n, loopObj in enumerate(mirrorObjs): if loopObj: if cmds.objExists(loopObj): sel.append(loopObj) else: #central controller sel.append(objects[n]) if len(sel) > 0: if lastObj: cmds.select(sel, addFirst=add) else: cmds.select(sel, add=add)
def selectMirrorObjs(self, add, lastObj=None): objects = animMod.getObjsSel() mirrorObjs = animMod.getMirrorObjs(objects) sel = [] if mirrorObjs: for n, loopObj in enumerate(mirrorObjs): if loopObj: if cmds.objExists(loopObj): sel.append(loopObj) else: #central controller sel.append(objects[n]) if len(sel) >0: if lastObj: cmds.select(sel, addFirst=add) else: cmds.select(sel, add=add)
def unselectMirrorObjs(self, side): objects = animMod.getObjsSel() if side == "center": objs = animMod.getMirrorObjs(objects, side="left") objects.extend(objs) objs.extend(animMod.getMirrorObjs(objects, side="right")) objects.extend(objs) objs.extend(animMod.getMirrorObjs(objects, side="left")) centerObjs = [loopObj for loopObj in objects if loopObj not in objs and loopObj and cmds.objExists(loopObj)] if len(centerObjs) >0: cmds.select(centerObjs, deselect=True) else: if side == "left": side = "right" elif side == "right": side = "left" objs = animMod.getMirrorObjs(objects, side=side) objs = [loopObj for loopObj in objs if loopObj and cmds.objExists(loopObj)] if len(objs) > 0: cmds.select(objs, deselect=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)