def lsThroughFilter(*args, **kwargs): """ Modifications: - returns an empty list when the result is None - returns wrapped classes """ return map(_general.PyNode, _util.listForNone(cmds.lsThroughFilter(*args, **kwargs)))
def updateTextures(txPath, txObjLs=None, updateMaya=True, copy=True): """ Handles copying and updating texture file node paths for incoming txObjLs :param txPath: The directory of the new texture file path. :param txObjLs: A list of objects. :param updateMaya: Updated the file paths in the current scene. :param copy: Makes a copy of the textures to the directory txPath :return: If updateMaya=True: A dictionary of all modified texture file nodes{texture File Node: file path before modification} If updateMaya=False: None """ # txFullPath, txRelPath = txPaths currentPaths = {} if not txObjLs: fileNode = mc.itemFilter(byType='file') fileNodeLs = mc.lsThroughFilter(fileNode) else: txObjLsHist = mc.listHistory(txObjLs, f=True) txObjLsHist = list(set(txObjLsHist)) txObjLsShd = mc.listHistory(txObjLsHist) txObjLsShd = list(set(txObjLsShd)) fileNodeLs = mc.ls(txObjLsShd, type='file') fileNodeLs = list(set(fileNodeLs)) if fileNodeLs: fileNodeLs = list(set(fileNodeLs)) for fileNode in fileNodeLs: if not mc.getAttr('%s.useFrameExtension' % fileNode): filePath = mc.getAttr(fileNode + '.fileTextureName') #getting full path from mayaAttributes oldFilePath = filePath filePath = os.path.expandvars(filePath) if os.path.isfile(filePath): fileName = filePath.split('/')[-1] if copy: shutil.copy(filePath, txPath) if updateMaya: currentPaths[fileNode] = oldFilePath #vray does not support relative path env vars in texures. Until this changes full path is written #mc.setAttr(fileNode + '.fileTextureName', os.path.join(txRelPath, fileName), type='string') mc.setAttr(fileNode + '.fileTextureName', os.path.join(txPath, fileName), type='string') if updateMaya: return currentPaths else: return
def getRenderNodes(): """ List all valid render nodes in scene """ # Get Node Types renderTypes = cmds.listNodeTypes('texture') renderTypes.extend(cmds.listNodeTypes('utility')) renderTypes.extend(cmds.listNodeTypes('imageplane')) renderTypes.extend(cmds.listNodeTypes('shader')) # Get Nodes by Type renderNodes = cmds.ls(long=True, type=renderTypes) if not renderNodes: renderNodes = [] mrRenderNodes = cmds.lsThroughFilter('DefaultMrNodesFilter') if not mrRenderNodes: mrRenderNodes = [] renderNodes.extend(mrRenderNodes) # Remove Duplicates renderNodes = list(set(renderNodes)) # Return Result return renderNodes
def getTypeNode(nodeType, nodeList): """ Return all the nodes of a specific type from a list of node """ filterName = cmds.itemFilter(byType=nodeType, uniqueNodeNames=True) result = cmds.lsThroughFilter(nodeList, item=filterName) return result