I was animating a dog walk cycle in Maya and i wanted a way to reuse a pose from an earlier frame. But after i copied the pose to the new frame i actually wanted the hands to be opposite to where they were. So i wrote this script that given two selected animator controls it puts all the translates, rotates user values of one onto the other. the result is a quick way to help start blocking a mirrored pose. It does require to set a keyframe after running this tool. It also needs both animator controls to have a mirrored type of behavior (if they don't i assume can go in and put a minus sign in translates that need it).
Hope its helpful.
#na_switchKey.py # #@author Nathaniel Anozie # ## #modify at own risk #last updated: 05/08/2014-05/08/2014 -- initial release #how to use #select two objects want to switch keys between example left and right hand control. #na_switchKey() import maya.cmds as cmds import sys def na_switchKey(): """switch keys between first selected and second selected (keys not set automatically so need to key them)""" #assumption names of attributes are identical for both firstObj = '' secondObj = '' firstAttr = [] firstVal = [] secondAttr = [] secondVal = [] sel = cmds.ls(sl = True) if len(sel) != 2: sys.exit("Requires two objects selected!!") firstObj = sel[0] secondObj = sel[1] #get current keyframe info for both selected before we do the switch #ex: {u'translateX': 2.7141762512786562, u'translateY': 0.0, u'translateZ': 0.0} firstAttr = cmds.listAttr(firstObj, keyable = True) firstLockedAttr = cmds.listAttr(firstObj, locked = True) if firstLockedAttr is not None: for locked in firstLockedAttr: try: firstAttr.remove(locked) #remove locked attributes except ValueError: pass firstVal = [ cmds.getAttr( firstObj + "." + at ) for at in firstAttr ] firstData = {} attr = '' val = 0.0 for i in xrange( len(firstAttr) ): attr = firstAttr[i] val = firstVal[i] firstData[attr] = val # secondAttr = cmds.listAttr(secondObj, keyable = True) secondLockedAttr = cmds.listAttr(secondObj, locked = True) if secondLockedAttr is not None: for locked in secondLockedAttr: try: secondAttr.remove(locked) #remove locked attributes except ValueError: pass secondVal = [ cmds.getAttr( secondObj + "." + at ) for at in secondAttr ] secondData = {} attr = '' val = 0.0 for i in xrange( len(secondAttr) ): attr = secondAttr[i] val = secondVal[i] secondData[attr] = val #switch keyframe info #print firstData #{u'translateX': 2.7141762512786562, u'translateY': 0.0, u'translateZ': 0.0, u'scaleX': 1.0, u'scaleY': 1.0, u'visibility': 1, u'rotateX': 0.0, u'rotateY': 0.0, u'scaleZ': 1.0, u'toe': 0.0} for a, v in firstData.items(): cmds.setAttr( (secondObj+"."+a),v ) for a, v in secondData.items(): cmds.setAttr( (firstObj+"."+a),v ) #now pose is set but if you move in timeline we will lose info so set a key to save it
cheers,
-Nate