100 lines
2.7 KiB
Python
100 lines
2.7 KiB
Python
import maya.api.OpenMaya as om
|
|
import maya.api.OpenMayaAnim as omani
|
|
import maya.cmds as cmds
|
|
|
|
import maya.mel as mel
|
|
|
|
import mocaphelperutility
|
|
|
|
refobjsShortFlagName = "-ref"
|
|
refobjsLongFlagName = "-refobjs"
|
|
|
|
|
|
|
|
def syntaxCreator():
|
|
|
|
syntax = om.MSyntax()
|
|
|
|
syntax.addFlag( refobjsShortFlagName, refobjsLongFlagName, om.MSyntax.kString )
|
|
|
|
|
|
return syntax
|
|
|
|
class FrameAlign(om.MPxCommand):
|
|
kPluginCmdName = "moCapHelper_frameAlign"
|
|
|
|
ref = ""
|
|
animcruvechanage = None
|
|
|
|
def __init__(self):
|
|
om.MPxCommand.__init__(self)
|
|
|
|
@staticmethod
|
|
def cmdCreator():
|
|
return FrameAlign()
|
|
|
|
|
|
def parseArguments(self,args):
|
|
|
|
argdata = om.MArgParser(self.syntax(),args)
|
|
|
|
if argdata.isFlagSet( refobjsShortFlagName ):
|
|
self.ref = argdata.flagArgumentString(refobjsShortFlagName,0)
|
|
else:
|
|
raise Exception("No refence argument!")
|
|
|
|
def isUndoable(self):
|
|
return True
|
|
|
|
|
|
def doIt(self,args):
|
|
self.animcruvechanage = omani.MAnimCurveChange()
|
|
self.parseArguments(args)
|
|
# start = cmds.playbackOptions( q=True,min=True )
|
|
# end = cmds.playbackOptions( q=True,max=True )
|
|
if mocaphelperutility.objExist(self.ref) == False:
|
|
raise Exception("ref obj does not exist!")
|
|
selectedobjs = mocaphelperutility.getSelectedNodes()
|
|
print(self.ref)
|
|
if cmds.keyframe(self.ref,q = True) == None :
|
|
raise Exception("ref has no keys!")
|
|
else:
|
|
framelist = set(cmds.keyframe(self.ref,q = True))
|
|
for frame in framelist:
|
|
cmds.setKeyframe(selectedobjs,t = (frame,frame),rk= True,hierarchy = "none",i = True,itt = "auto")
|
|
|
|
for obj in selectedobjs:
|
|
objframelist = set(cmds.keyframe(obj,q = True))
|
|
for objframe in objframelist:
|
|
if objframe in framelist:
|
|
continue
|
|
else:
|
|
mocaphelperutility.cutKey(obj,objframe,objframe)
|
|
|
|
|
|
def undoIt(self):
|
|
if self.animcruvechanage != None :
|
|
self.animcruvechanage.undoIt()
|
|
print("undo success")
|
|
else:
|
|
print("undo failed:self.animcruvechanage == None")
|
|
|
|
def redoIt(self):
|
|
if self.animcruvechanage != None :
|
|
self.animcruvechanage.redoIt()
|
|
print("redo success")
|
|
else:
|
|
print("redo failed:self.animcruvechanage == None")
|
|
|
|
|
|
|
|
|
|
# def cutlist(sourcelist,splitlist):
|
|
# backindex = 0
|
|
# forwardindex = 0
|
|
# for i in len(sourcelist):
|
|
# if sourcelist[i] in splitlist:
|
|
|
|
# def fastRecord(obj):
|
|
# pos = mocaphelperutility.getWorldPos(obj)
|
|
# loc = mocaphelperarbcore.createLoc("mocaphelper_fa_temp_loc") |