Example #1
0
def getNodesOfType(nodeType, namespaceFromNodes=None):
    
    allNodes = list()
    
    #if something is selected, get it from within that namespace.    
    if not namespaceFromNodes:
        namespaceFromNodes = mc.ls(sl=True)
    namespaces = list()    
    if namespaceFromNodes:
        for each in namespaceFromNodes:
            namespaces.append(utl.getNamespace(each))
    else:
        namespaces = ['*:','']
        
    for ns in list(set(namespaces)):
        if nodeType == 'control' or nodeType == 'element' or nodeType == 'puppet':
            #special case for commonly queried nodes, for speed
            #get with and without namespaces
            allNodes.extend(mc.ls(ns+'*.'+PUP_ID_PREFIX+nodeType, o=True))
        else:
            pass
            #allNodes = getAllPupNodes()
            #if not allNodes:
            #    return
            #allTypeNodes = list()
            #for each in allNodes:
            #    if mc.getAttr(each+'.'+PUP_ID_PREFIX+'nodeType') == nodeType:
            #        allTypeNodes.append(each)
            #return allTypeNodes
    return allNodes        
Example #2
0
def getNodesOfType(nodeType, namespaceFromNodes=None):
    
    allNodes = list()
    
    #if something is selected, get it from within that namespace.    
    if not namespaceFromNodes:
        namespaceFromNodes = mc.ls(sl=True)
    namespaces = list()    
    if namespaceFromNodes:
        for each in namespaceFromNodes:
            namespaces.append(utl.getNamespace(each))
    else:
        namespaces = ['*:','']
        
    for ns in list(set(namespaces)):
        if nodeType == 'control' or nodeType == 'element' or nodeType == 'puppet':
            #special case for commonly queried nodes, for speed
            #get with and without namespaces
            allNodes.extend(mc.ls(ns+'*.'+PUP_ID_PREFIX+nodeType, o=True))
        else:
            pass
            #allNodes = getAllPupNodes()
            #if not allNodes:
            #    return
            #allTypeNodes = list()
            #for each in allNodes:
            #    if mc.getAttr(each+'.'+PUP_ID_PREFIX+'nodeType') == nodeType:
            #        allTypeNodes.append(each)
            #return allTypeNodes
    return allNodes        
Example #3
0
def getNodesOfType(nodeType, namespaceFromNodes=None):

    allNodes = []

    #if something is selected, get it from within that namespace.
    if not namespaceFromNodes:
        namespaceFromNodes = mc.ls(sl=True)
    namespaces = []
    if namespaceFromNodes:
        for each in namespaceFromNodes:
            namespaces.append(utl.getNamespace(each))
    else:
        namespaces = ['*:','']

    for ns in list(set(namespaces)):
        if nodeType == 'control' or nodeType == 'element' or nodeType == 'puppet':
            #special case for commonly queried nodes, for speed
            #get with and without namespaces
            allNodes.extend(mc.ls(ns+'*.'+PUP_ID_PREFIX+nodeType, o=True))
    return allNodes
Example #4
0
def copyHierarchy(sourceTop=None,
                  destinationTop=None,
                  pasteMethod='replace',
                  offset=0,
                  addToLayer=False,
                  layerName=None,
                  rotateOrder=True):
    '''
    Copy animation from a source hierarchy and paste it to a destination hierarchy.
    '''
    start, end = _getStartAndEnd()

    if not sourceTop and not destinationTop:
        sel = mc.ls(sl=True)

        if len(sel) != 2:
            OpenMaya.MGlobal.displayWarning('Please select exactly 2 objects.')
            return

        sourceTop = sel[0]
        destinationTop = sel[1]

    #get keyed objects below source
    nodes = mc.listRelatives(sourceTop, pa=True, ad=True) or []
    nodes.append(sourceTop)
    keyed = []

    for node in nodes:
        # this will only return time based keyframes, not driven keys
        if mc.keyframe(node, time=(':', ), query=True, keyframeCount=True):
            keyed.append(node)

    if not keyed:
        return

    #get a list of all nodes under the destination
    allDestNodes = mc.listRelatives(destinationTop, ad=True, pa=True) or []
    allDestNodes.append(destinationTop)

    destNodeMap = {}
    duplicate = []
    for each in allDestNodes:
        name = each.rsplit('|')[-1].rsplit(':')[-1]
        if name in duplicate:
            continue
        if name in destNodeMap.keys():
            duplicate.append(name)
            continue
        destNodeMap[name] = each

    destNS = utl.getNamespace(destinationTop)

    layer = None
    if addToLayer:
        if not layerName:
            layerName = 'copyHierarchy'
        layer = utl.createAnimLayer(name=layerName)

    for node in keyed:
        #strip name
        nodeName = node.rsplit('|')[-1].rsplit(':')[-1]

        if nodeName in duplicate:
            print 'Two or more destination nodes have the same name: ' + destNS + nodeName
            continue
        if nodeName not in destNodeMap.keys():
            print 'Cannot find destination node: ' + destNS + nodeName
            continue

        copyAnimation(source=node,
                      destination=destNodeMap[nodeName],
                      pasteMethod=pasteMethod,
                      offset=offset,
                      start=start,
                      end=end,
                      layer=layer,
                      rotateOrder=rotateOrder)
Example #5
0
def copyHierarchy(sourceTop=None, destinationTop=None, pasteMethod='replace', offset=0, addToLayer=False, layerName=None, rotateOrder=True):
    '''
    Copy animation from a source hierarchy and paste it to a destination hierarchy.
    '''
    start, end = _getStartAndEnd()

    if not sourceTop and not destinationTop:
        sel = mc.ls(sl=True)

        if len(sel) != 2:
            OpenMaya.MGlobal.displayWarning('Please select exactly 2 objects.')
            return

        sourceTop = sel[0]
        destinationTop = sel[1]

    #get keyed objects below source
    nodes = mc.listRelatives(sourceTop, pa=True, ad=True) or []
    nodes.append(sourceTop)
    keyed = []

    for node in nodes:
        # this will only return time based keyframes, not driven keys
        if mc.keyframe(node, time=(':',), query=True, keyframeCount=True):
            keyed.append(node)

    if not keyed:
        return

    #get a list of all nodes under the destination
    allDestNodes = mc.listRelatives(destinationTop, ad=True, pa=True) or []
    allDestNodes.append(destinationTop)

    destNodeMap = {}
    duplicate = []
    for each in allDestNodes:
        name = each.rsplit('|')[-1].rsplit(':')[-1]
        if name in duplicate:
            continue
        if name in destNodeMap.keys():
            duplicate.append(name)
            continue
        destNodeMap[name] = each

    destNS = utl.getNamespace(destinationTop)

    layer = None
    if addToLayer:
        if not layerName:
            layerName = 'copyHierarchy'
        layer = utl.createAnimLayer(name=layerName)

    for node in keyed:
        #strip name
        nodeName = node.rsplit('|')[-1].rsplit(':')[-1]

        if nodeName in duplicate:
            print 'Two or more destination nodes have the same name: '+destNS+nodeName
            continue
        if nodeName not in destNodeMap.keys():
            print 'Cannot find destination node: '+destNS+nodeName
            continue

        copyAnimation(source=node, destination=destNodeMap[nodeName], pasteMethod=pasteMethod, offset=offset, start=start, end=end, layer=layer, rotateOrder=rotateOrder)
Example #6
0
def copyHierarchy(sourceTop=None, destinationTop=None, pasteMethod='replace', offset=0, addToLayer=False, layerName=None):
    '''
    Copy animation from a source hierarchy and paste it to a destination hierarchy.
    '''
    start, end = _getStartAndEnd()
    
    if not sourceTop and not destinationTop:
        sel = mc.ls(sl=True)
        
        if len(sel) != 2:
            OpenMaya.MGlobal.displayWarning('Please select exactly 2 objects.')
            return
            
        sourceTop = sel[0]
        destinationTop = sel[1]
    
    #get keyed objects below source
    nodes = mc.listRelatives(sourceTop, pa=True, ad=True)
    if not nodes:
        nodes = list()
    nodes.append(sourceTop)
    keyed = list()
    
    for node in nodes:
        # this will only return time based keyframes, not driven keys
        if mc.keyframe(node, time=(':',), query=True, keyframeCount=True):
            keyed.append(node)

    if not keyed:
        return
    
    #get a list of all nodes under the destination
    destNodes = mc.listRelatives(destinationTop, ad=True)
    if not destNodes:
        destNodes = list()
    destNodes.append(destinationTop)
    
    destNS = utl.getNamespace(destinationTop)
    destNames = [x.rpartition(':')[-1] for x in destNodes]
    
    layer = None
    if addToLayer:
        if not layerName:
            layerName = 'copyHierarchy'
        layer = utl.createAnimLayer(name=layerName)
        
    for node in keyed:
        nodeName = mc.ls(node, shortNames=True)[0]
        
        #strip namespace
        if ':' in nodeName:
            nodeName = nodeName.rpartition(':')[-1]
        
        if nodeName in destNames:
            destNode = mc.ls(destNS+nodeName)
            if not destNode:
                print 'Cannot find destination node: '+destNS+':'+nodeName
                continue
            if len(destNode) > 1:
                print 'Two or more destination nodes have the same name: '+destNS+':'+nodeName
                continue
            
            copyAnimation(source=node, destination=destNode[0], pasteMethod=pasteMethod, offset=offset, start=start, end=end, layer=layer)
Example #7
0
def copyHierarchy(sourceTop=None,
                  destinationTop=None,
                  pasteMethod='replace',
                  offset=0,
                  addToLayer=False,
                  layerName=None):
    '''
    Copy animation from a source hierarchy and paste it to a destination hierarchy.
    '''
    start, end = _getStartAndEnd()

    if not sourceTop and not destinationTop:
        sel = mc.ls(sl=True)

        if len(sel) != 2:
            OpenMaya.MGlobal.displayWarning('Please select exactly 2 objects.')
            return

        sourceTop = sel[0]
        destinationTop = sel[1]

    #get keyed objects below source
    nodes = mc.listRelatives(sourceTop, pa=True, ad=True)
    if not nodes:
        nodes = list()
    nodes.append(sourceTop)
    keyed = list()

    for node in nodes:
        # this will only return time based keyframes, not driven keys
        if mc.keyframe(node, time=(':', ), query=True, keyframeCount=True):
            keyed.append(node)

    if not keyed:
        return

    #get a list of all nodes under the destination
    destNodes = mc.listRelatives(destinationTop, ad=True)
    if not destNodes:
        destNodes = list()
    destNodes.append(destinationTop)

    destNS = utl.getNamespace(destinationTop)
    destNames = [x.rpartition(':')[-1] for x in destNodes]

    layer = None
    if addToLayer:
        if not layerName:
            layerName = 'copyHierarchy'
        layer = utl.createAnimLayer(name=layerName)

    for node in keyed:
        nodeName = mc.ls(node, shortNames=True)[0]

        #strip namespace
        if ':' in nodeName:
            nodeName = nodeName.rpartition(':')[-1]

        if nodeName in destNames:
            destNode = mc.ls(destNS + nodeName)
            if not destNode:
                print 'Cannot find destination node: ' + destNS + ':' + nodeName
                continue
            if len(destNode) > 1:
                print 'Two or more destination nodes have the same name: ' + destNS + ':' + nodeName
                continue

            copyAnimation(source=node,
                          destination=destNode[0],
                          pasteMethod=pasteMethod,
                          offset=offset,
                          start=start,
                          end=end,
                          layer=layer)