def reloadModule(self,module): """ Gets data from container and rerigs python object """ moduleType = Util.getString(module, "type") command = ("module = " + str(moduleType) + "." + str(moduleType) + "('"+ Util.removeSuffix(module) +"')") exec command return module
def renameModule(self, module, name): """ Renames module """ # Rename container and all module components moduleContainer = self.Modules[module].container moduleList = cmds.container( (moduleContainer), query= True, nodeList= True ) # Rename module instance and dictionary keys for obj in moduleList: if cmds.objExists(obj): newName = obj.replace(module, name ) cmds.rename(obj, newName) newName = moduleContainer.replace(module, name ) cmds.rename(moduleContainer, newName) # Change dict entry in Rig instance self.Modules[Util.removeSuffix(newName)] = copy.deepcopy(self.Modules[module]) self.Modules[Util.removeSuffix(newName)].container = newName del self.Modules[module]
def rig(self,**kwargs): # Variables clusterCtls = [] # create registries self.createRegistry("regRigTransform") self.createRegistry("regRigShape") # Check for module container rootGrp = cmds.group( n = (self.name + "Rig_GRP"), em = True ) jointGrp = cmds.group( n = (self.name + "Joint_GRP"), em = True, p= rootGrp) setupGrp = cmds.group( n = (self.name + "Setup_GRP"), em = True, p= rootGrp) controlGrp = cmds.group( n = (self.name + "Control_GRP"), em = True, p= rootGrp) # Get blueprinter joints blueprinters = self.getBlueprinterJoints() for joint in blueprinters: if cmds.objExists(joint) == False: cmds.error(joint + " not found!") # Duplicate joints joints = Util.duplicateChain( self.name , blueprinters) cmds.parent(joints[0],jointGrp) # Hide blueprinters joints cmds.setAttr((self.name + "Blueprint_GRP" + ".v"), 0) #cmds.ikHandle() handleData = Util.createSplineIk(self.name, joints, sol= "ikSplineSolver") clusterList = Util.clusterizeCurve( handleData["CRV"] ) cmds.parent(handleData["IK"], setupGrp) #create controls for cluster in clusterList: clusterName = Util.removeSuffix( cluster[0] ) clusterCtl = Util.createControl( clusterName, {"match":cluster[0]} ) cmds.parent(cluster[1], clusterCtl[0] ) cmds.parent(clusterCtl[1], controlGrp ) clusterCtls.append(clusterCtl) # parent controls for x in range(1, len(clusterCtls) ): cmds.parent( clusterCtls[x][1], clusterCtls[x-1][0] ) cmds.parent(rootGrp, self.rootGrp) # store outputs self.storeOutput(clusterCtls[3][0],"endControl")
def populateConnectPopupMenu(self, popupKey, connetionType = "Input"): """ Finds modules in scene and lists them in popup menu """ kwargs = {} # get module list moduleList = self.rigInstance.getModuleContainers() for module in moduleList: moduleName = Util.removeSuffix(module) key = (moduleName + connetionType + "MenuItem") kwargs["command"] = ("NWRig.UI.setConnectionModule(\"" + moduleName + "\",\"" + connetionType + "\")") # clear popup menu if self.elementExists(key): self.removeElement(key) moduleMenuItem = self.menuItem({'key':key,'label':module,'parent':popupKey}, **kwargs)
def getContainerChildren(self,cont): """ Finds all children containers of passed container """ containers = {} if cmds.objExists(cont): # populate module list contents = cmds.container(cont, query= True, nodeList= True) if contents == None: return containers for item in contents: if cmds.objectType(item) == "container": containers[Util.removeSuffix(item)] = self.reloadModule(item) # combine and overwrite lists containers = dict(containers.items() + (self.getContainerChildren(item)).items()) return containers else: cmds.error("Root containter not found for refresh")
def rigModules(self,args): """ Get selected modules and rig them recersively """ moduleList= [] if self.elementExists("rigList") == False: cmds.warning("No modules found in scene") return None selectedModule = Util.getFirst(self.queryInput("rigList")) selectedModule = selectedModule.strip() moduleList = self.recursiveGetModules(selectedModule) for module in moduleList: moduleName = Util.removeSuffix(module) moduleName = moduleName.strip() self.rigInstance.rigModule({"name": moduleName}) # Load rig data self.rigInstance.loadRigData()