120 lines
5.2 KiB
Python
120 lines
5.2 KiB
Python
|
'''
|
||
|
========================================================================================================================
|
||
|
Author: Alan Camilo
|
||
|
www.alancamilo.com
|
||
|
|
||
|
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 uiMod
|
||
|
from aTools.commonMods import utilMod
|
||
|
from aTools.commonMods import animMod
|
||
|
from aTools.commonMods import aToolsMod
|
||
|
|
||
|
|
||
|
|
||
|
class AnimationCopier(object):
|
||
|
|
||
|
def popupMenu(self):
|
||
|
cmds.popupMenu()
|
||
|
cmds.menuItem( label="Copy All Animation", command=lambda *args: self.copyAnimation(range="all"))
|
||
|
cmds.menuItem( divider=True )
|
||
|
cmds.menuItem("onlySelectedNodesMenu", label="Paste To Selected", checkBox=False)
|
||
|
cmds.menuItem( label="Paste Animation in Place", command=lambda *args: self.pasteAnimation(pasteInPlace=True))
|
||
|
cmds.menuItem( label="Paste Original Animation", command=lambda *args: self.pasteAnimation(pasteInPlace=False))
|
||
|
cmds.menuItem( divider=True )
|
||
|
cmds.menuItem( label="Paste To Another Character", command=self.remapNamespaces)
|
||
|
|
||
|
|
||
|
def copyAnimation(self, range="selected", *args):
|
||
|
cmds.waitCursor(state=True)
|
||
|
|
||
|
if range == "all":
|
||
|
|
||
|
getCurves = animMod.getAnimCurves()
|
||
|
animCurves = getCurves[0]
|
||
|
animData = animMod.getAnimData(animCurves, showProgress=True)
|
||
|
else:
|
||
|
animData = animMod.getAnimData(showProgress=True)
|
||
|
|
||
|
aToolsMod.saveInfoWithUser("copyPasteAnim", "animData", animData)
|
||
|
|
||
|
if cmds.window("remapNamespacesWindow", query=True, exists=True): self.remapNamespaces()
|
||
|
|
||
|
cmds.waitCursor(state=False)
|
||
|
|
||
|
def pasteAnimation(self, animData=None, pasteInPlace=True, onlySelectedNodes=None, *args):
|
||
|
cmds.waitCursor(state=True)
|
||
|
|
||
|
if not onlySelectedNodes: onlySelectedNodes = cmds.menuItem("onlySelectedNodesMenu", query=True, checkBox=True)
|
||
|
if not animData: animData = aToolsMod.loadInfoWithUser("copyPasteAnim", "animData")
|
||
|
animMod.applyAnimData(animData, pasteInPlace, onlySelectedNodes, showProgress=True)
|
||
|
|
||
|
cmds.waitCursor(state=False)
|
||
|
|
||
|
def remapNamespaces(self, *args):
|
||
|
winName = "remapNamespacesWindow"
|
||
|
if cmds.window(winName, query=True, exists=True): cmds.deleteUI(winName)
|
||
|
window = cmds.window( winName, title = "Remap Namespaces")
|
||
|
|
||
|
cmds.columnLayout(adjustableColumn=True)
|
||
|
cmds.rowColumnLayout( numberOfColumns=3)
|
||
|
|
||
|
animData = aToolsMod.loadInfoWithUser("copyPasteAnim", "animData")
|
||
|
inputNameSpaces = list(set(utilMod.getNameSpace(animData["objects"])[0]))
|
||
|
outputNameSpaces = utilMod.listAllNamespaces()
|
||
|
|
||
|
for loopNameSpace in inputNameSpaces:
|
||
|
|
||
|
nameSpace = loopNameSpace[:-1]
|
||
|
|
||
|
eval("cmds.text('input%s', align='right', w=150, h=26, label='%s: ')"%(nameSpace, nameSpace))
|
||
|
eval("cmds.textField('output%s', w=150, h=26, text='%s')"%(nameSpace, nameSpace))
|
||
|
eval("cmds.button('output%s', w=26, h=26, label='...')"%(nameSpace))
|
||
|
if outputNameSpaces:
|
||
|
cmds.popupMenu(button=1)
|
||
|
for loopOutput in outputNameSpaces:
|
||
|
cmds.menuItem ("menu%s"%loopOutput, label=str(loopOutput), command=lambda x, loopOutput=loopOutput, nameSpace=nameSpace, *args: self.setOutputValue(loopOutput, nameSpace))
|
||
|
|
||
|
cmds.setParent( '..' )
|
||
|
|
||
|
|
||
|
cmds.button(label="Paste Animation in Place", command=lambda *args: self.remapAndPasteAnimation(animData, inputNameSpaces, pasteInPlace=True))
|
||
|
cmds.button(label="Paste Original Animation", command=lambda *args: self.remapAndPasteAnimation(animData, inputNameSpaces, pasteInPlace=False))
|
||
|
|
||
|
cmds.showWindow( window )
|
||
|
|
||
|
def setOutputValue(self, output, nameSpace):
|
||
|
cmds.textField('output%s'%nameSpace, edit=True, text=str(output))
|
||
|
|
||
|
def remapAndPasteAnimation(self, animData, nameSpaces, pasteInPlace):
|
||
|
|
||
|
|
||
|
separator = ":"
|
||
|
|
||
|
for loopNameSpace in nameSpaces:
|
||
|
|
||
|
nameSpace = loopNameSpace[:-1]
|
||
|
|
||
|
input = nameSpace
|
||
|
output = cmds.textField('output%s'%nameSpace, query=True, text=True)
|
||
|
|
||
|
animStr = str(animData)
|
||
|
animData = eval(animStr.replace("%s%s"%(input, separator), "%s%s"%(output, separator)))
|
||
|
|
||
|
self.pasteAnimation(animData, pasteInPlace)
|
||
|
|
||
|
|
||
|
|
||
|
|