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
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
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)
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()
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
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
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()
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
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