def keyObjectsFromContainer(containerHandle, componentName):
    """

    :param containerHandle: `MObjectHandle`
    :param componentName: `str` mandatory now, used to compose full name of some exepcted items/paths
    :return: `dict` k,v pairs for interesting objects and their handle, None if unavailable
    """

    mfn_cont = om2.MFnContainerNode(containerHandle.object())
    mobaMembers = mfn_cont.getMembers()

    keyObsDict = {
        'control': None,
        'guide': None,
        'deform': None,
        '{}_toolParameters'.format(componentName): None,
    }

    for eachMob in mobaMembers:
        if not eachMob.hasFn(om2.MFn.kDagNode):
            continue

        mfn_dag = om2.MFnDagNode(eachMob)

        objectName = mfn_dag.name()

        if objectName in keyObsDict:
            keyObsDict[objectName] = om2.MObjectHandle(eachMob)

    return keyObsDict
Example #2
0
def getObjectsContainers(mQueryObject = []):
    """
    Return a list of containers that the passed in objects reside in.

    @param [] mQueryObject: list of objects you are wanting to know, in which container they exists.
    @return: key = container name, value = container MObject.
    @rtype: {}
    """
    containerDict = {}
    nodeFn = om2.MFnContainerNode()
    selNodeFn = om2.MFnDependencyNode()
    containerObjs = getAllDagContainers()

    for selObj in mQueryObject:
        for obj in containerObjs:
            nodeFn.setObject(obj)
            if selObj in nodeFn.getMembers():
                selNodeFn.setObject(selObj)
                containerName = str(nodeFn.name())

                # Adds the object to a dictionary, using the container as the key
                if containerDict.has_key(nodeFn.name()):
                    containerDict[containerName].append(selNodeFn.object())
                else:
                    containerDict[containerName] = [selNodeFn.object()]

    return containerDict
Example #3
0
def openContainer(mobj):
    """
    open the container passed in
    @param mobj: The container object, you wich to open
    @type mobj: om.MObject
    """
    _mfnCont = om2.MFnContainerNode(mobj)
    bbPlug = _mfnCont.findPlug("blackBox", True)
    bbPlug.setInt(0)
Example #4
0
 def createContainer(self):
     # TODO: Add name input dialog
     containerObj = container.createContainer()
     containerMfn = om2.MFnContainerNode(containerObj)
     containerName = containerMfn.name()
     # Add to dictionary, for easy interaction
     self.containerDictionary[containerName] = containerObj
     # Add container to ui
     self.containerList.addItems([containerName])
     self.containerList.sortItems()
Example #5
0
def isContainerClosed(mobj):
    """
    returns true is the container is closed

    @param mobj: Container object
    @type mobj: MObject
    @return: True is container is cloased, False if open
    @rtype: Boolean
    """
    _mfnCont = om2.MFnContainerNode(mobj)
    bbPlug = _mfnCont.findPlug("blackBox", True)
    return bbPlug.asInt() == 1
Example #6
0
def createContainer(name="unnamedContainer"):
    """
    Creates and names the container
    @param string name: The name of the container, that will be created
    @return: The newly created container
    @rtype: MObject
    """
    dgMod = om2.MDGModifier()
    containerObj = dgMod.createNode("container")
    dgMod.doIt()
    containerMfn = om2.MFnContainerNode(containerObj)
    containerMfn.setName(name)
    return containerObj
Example #7
0
    def refreshContainerList(self):
        self.containerList.clear()
        self.containerDictionary = {}
        containerFn = om2.MFnContainerNode()
        containerList = container.getAllDagContainers()
        containerNames = [str(containerFn.setObject(a).name()) for a in containerList]

        for containerObject in containerList:
            containerFn.setObject(containerObject)
            self.containerDictionary[containerFn.name()] = containerObject

        self.containerList.addItems(containerNames)
        self.containerList.sortItems()
Example #8
0
def getContainerStacksUsingMayaAPI():
    def _getPolyCountInContainer(containerNodeFn):
        containerData = _createtContainerNode()
        meshNodeFn = om.MFnMesh()
        containerData['container'] = containerNodeFn.name()
        for _ in (node for node in containerNodeFn.getMembers()
                  if node.hasFn(om.MFn.kMesh)):
            meshNodeFn.setObject(_)
            if not meshNodeFn.isIntermediateObject:
                containerData['Verts'] += meshNodeFn.numVertices
                containerData['Edges'] += meshNodeFn.numEdges
                containerData['Faces'] += meshNodeFn.numPolygons
                containerData['UVs'] += meshNodeFn.numUVs()
                containerData['Tris'] += sum(meshNodeFn.getTriangles()[0])

        return containerData

    def _getDagContainers(containerNodeFn):
        dagNodeFn = om.MFnDagNode()
        dagContainers = deque()
        dagContainers.append(containerNodeFn.name())
        for _ in (node for node in containerNodeFn.getMembers()
                  if node.hasFn(om.MFn.kDagContainer)):
            dagNodeFn.setObject(_)
            dagContainers.append(dagNodeFn.name())

        return dagContainers

    containerNodeIterator = om.MItDependencyNodes(om.MFn.kContainer)
    containerNodeFn = om.MFnContainerNode()
    meshNodeFn = om.MFnMesh()
    containerStacks = []
    dagContainersInContainers = []
    while not containerNodeIterator.isDone():
        stack = deque()
        containerNodeFn.setObject(containerNodeIterator.thisNode())
        dagContainersInContainers.append(_getDagContainers(containerNodeFn))
        stack.append(_getPolyCountInContainer(containerNodeFn))
        parent = containerNodeFn.getParentContainer()
        while not parent.isNull():
            containerNodeFn.setObject(parent)
            stack.append(_getPolyCountInContainer(containerNodeFn))
            parent = containerNodeFn.getParentContainer()

        containerStacks.append(stack)
        containerNodeIterator.next()

    return containerStacks, dagContainersInContainers
Example #9
0
def keyObjectsFromContainer(componentName, containerHandle):
    """
    This takes a component name for some filtering and a container handle and isolates
      the key objects related to it that represent our component interesting items.
    :param componentName: `str` mandatory now, used to compose full name of some exepcted items/paths
    :param containerHandle: `MObjectHandle`
    :return: `dict` k,v pairs for interesting objects and their handle, None if unavailable
    """

    mfn_cont = om2.MFnContainerNode(containerHandle.object())
    mobaMembers = mfn_cont.getMembers()

    keyObsDict = {
        'componentName': componentName,
        'control': None,
        'guide': None,
        'deform': None,
        'toolParameters': None,
    }

    for eachMob in mobaMembers:
        if not eachMob.hasFn(om2.MFn.kDagNode):
            continue

        mfn_dag = om2.MFnDagNode(eachMob)

        objectName = mfn_dag.name()

        if objectName == 'control':
            keyObsDict['control'] = om2.MObjectHandle(eachMob)
        elif objectName == 'guide':
            keyObsDict['guide'] = om2.MObjectHandle(eachMob)
        elif objectName == 'deform':
            keyObsDict['deform'] = om2.MObjectHandle(eachMob)
        elif objectName == '{}_toolParameters'.format(componentName):
            # todo: the above string composition running every loop is an abomination
            keyObsDict['toolParameters'] = om2.MObjectHandle(eachMob)

    return keyObsDict