def deleteSelectedModule(self,*args):
		selectedModule = cmds.textScrollList(self.UIElements['animationModule_textScroll'],q=True,selectItem=True)[0]
		
		selectedModuleNamespace = self.selectedBlueprintModule + ':' + selectedModule
		
		moduleNameInfo = utils.findAllModuleNames('/Modules/Animation')
		modules = moduleNameInfo[0]
		moduleNames = moduleNameInfo[1]
		
		selectedModuleName = selectedModule.rpartition('_')[0]
		
		if selectedModuleName in moduleNames:
			moduleIndex = moduleNames.index(selectedModuleName)
			module = modules[moduleIndex]
			
			mod = __import__('Animation.'+module,{},{}, [module])
			reload(mod)
			
			moduleClass = getattr(mod,mod.CLASS_NAME)
			
			moduleInst = moduleClass(selectedModuleNamespace)
			
			moduleInst.uninstall()
			
			self.refreshAnimationModuleList()
예제 #2
0
 def setupModuleSpecificControls(self):
     currentlySelectedModuleInfo = cmds.textScrollList(self.UIElements["animationModule_textScroll"], q=True, selectItem=True)
     currentlySelectedModuleNamespace = None
     if currentlySelectedModuleInfo != None:
         currentlySelectedModuleNamespace = currentlySelectedModuleInfo[0]
         
         if currentlySelectedModuleNamespace == self.previousAnimationModule and self.selectedBlueprintModule == self.previousBlueprintModule:
             return
         
     existingControls = cmds.columnLayout(self.UIElements["moduleSpecificControlsColumn"], q=True, childArray=True)
     if existingControls != None:
         cmds.deleteUI(existingControls)
         
     cmds.button(self.UIElements["matchingButton"], edit=True, enable=False)
     
     cmds.setParent(self.UIElements["moduleSpecificControlsColumn"])
     
     moduleNameInfo = utils.findAllModuleNames("/Modules/Animation")
     modules = moduleNameInfo[0]
     moduleNames = moduleNameInfo[1]
     
     if currentlySelectedModuleInfo != None:
         currentlySelectedModule = currentlySelectedModuleNamespace.rpartition("_")[0]
         
         if currentlySelectedModule in moduleNames:
             # Matching button enabled?
             # Should that actually be _weight?
             moduleWeightValue = cmds.getAttr(self.selectedBlueprintModule+":SETTINGS."+currentlySelectedModuleNamespace+"_weight")
             matchButtonEnable = moduleWeightValue == 0.0
             
             moduleIndex = moduleNames.index(currentlySelectedModule)
             module = modules[moduleIndex]
             
             cmds.attrControlGrp(attribute=self.selectedBlueprintModule+":"+currentlySelectedModuleNamespace+":module_grp.lod", label="Module_LOD")
             
             mod = __import__("Animation."+module, {}, {}, [module])                
             reload(mod)
             
             moduleClass = getattr(mod, mod.CLASS_NAME)
             
             moduleInst = moduleClass(self.selectedBlueprintModule+":"+currentlySelectedModuleNamespace)
             
             moduleInst.UI(self.UIElements["moduleSpecificControlsColumn"])
             
             # Set parent back to module specific controls layout
             self.UIElements["moduleSpecificControls_preferencesFrame"] = cmds.frameLayout(borderVisible=True, label="preferences", collapsable=True)
             self.UIElements["moduleSpecificControls_preferencesColumn"] = cmds.columnLayout(columnAttach=["both", 5], adj=True)
             
             cmds.attrControlGrp(attribute=self.selectedBlueprintModule+":"+currentlySelectedModuleNamespace+":module_grp.iconScale", label="Icon Scale")
             
             value = cmds.getAttr(self.selectedBlueprintModule+":"+currentlySelectedModuleNamespace+":module_grp.overrideColor")
             self.UIElements["iconColor"] = cmds.colorIndexSliderGrp(label="Icon Color", maxValue=32, v=value, cc=partial(self.iconColor_callback, currentlySelectedModuleNamespace))
             
             moduleInst.UI_preferences(self.UIElements["moduleSpecificControls_preferencesColumn"])
             
             cmds.button(self.UIElements["matchingButton"], edit=True, enable=matchButtonEnable, c=moduleInst.match)
             
         self.previousBlueprintModule = self.selectedBlueprintModule
         self.previousAnimationModule = currentlySelectedModuleNamespace
	def setupModuleSpecificControls(self):
		currentlySelectedModuleInfo = cmds.textScrollList(self.UIElements['animationModule_textScroll'],q=True, selectItem=True)
		currentlySelectedModuleNamespace = None
		if currentlySelectedModuleInfo != None:
			currentlySelectedModuleNamespace = currentlySelectedModuleInfo[0]
			
			if currentlySelectedModuleNamespace == self.previousAnimationModule and self.selectedBlueprintModule == self.previousBlueprintModule:
				return
				
		existingControls = cmds.columnLayout(self.UIElements['moduleSpecificControlsColumn'], q=True, childArray=True)
		if existingControls != None:
			cmds.deleteUI(existingControls)
			
		cmds.button(self.UIElements['matchingButton'],edit=True, enable=False)
		
		cmds.setParent(self.UIElements['moduleSpecificControlsColumn'])
		
		moduleNameInfo = utils.findAllModuleNames('/Modules/Animation')
		modules = moduleNameInfo[0]
		moduleNames = moduleNameInfo[1]
		
		if currentlySelectedModuleInfo != None:
			currentlySelectedModule = currentlySelectedModuleNamespace.rpartition('_')[0]
			
			if currentlySelectedModule in moduleNames:
				moduleWeightValue = cmds.getAttr(self.selectedBlueprintModule + ':SETTINGS.' + currentlySelectedModuleNamespace + '_weight')
				matchButtonEnable = moduleWeightValue == 0.0
				
				moduleIndex = moduleNames.index(currentlySelectedModule)
				module = modules[moduleIndex]
				
				cmds.attrControlGrp(attribute=self.selectedBlueprintModule + ':' + currentlySelectedModuleNamespace + ':module_grp.lod', label='Module LOD')
				
				mod = __import__('Animation.' + module, {},{},[module])
				reload(mod)
				
				moduleClass = getattr(mod,mod.CLASS_NAME)
				
				moduleInst = moduleClass(self.selectedBlueprintModule + ':' + currentlySelectedModuleNamespace)
				
				moduleInst.UI(self.UIElements['moduleSpecificControlsColumn'])
				
				cmds.setParent(self.UIElements['moduleSpecificControlsColumn'])
				
				self.UIElements['moduleSpecificControls_preferencesFrame'] = cmds.frameLayout(borderVisible=True, label='prefrences',collapsable=True)
				self.UIElements['moduleSpecificControls_preferencesColumn'] = cmds.columnLayout(columnAttach=['both', 5], adj=True)
				
				cmds.attrControlGrp(attribute=self.selectedBlueprintModule + ':' + currentlySelectedModuleNamespace + ':module_grp.iconScale', label='Icon Scale')
				
				value = cmds.getAttr(self.selectedBlueprintModule + ':' + currentlySelectedModuleNamespace + ':module_grp.overrideColor') + 1
				self.UIElements['iconColor'] = cmds.colorIndexSliderGrp(label='Icon Colour', maxValue=32, v=value, cc=partial(self.iconColour_callback, currentlySelectedModuleNamespace))
				
				moduleInst.UI_preferences(self.UIElements['moduleSpecificControls_preferencesColumn'])
				
				cmds.button(self.UIElements['matchingButton'], edit=True, enable=matchButtonEnable, c=moduleInst.match)
				
			self.previousBlueprintModule = self.selectedBlueprintModule
			self.previousAnimationModule = currentlySelectedModuleNamespace
예제 #4
0
    def lock(self, *args):
        result = pm.confirmDialog(
            messageAlign='center',
            title='Lock Blueprints',
            message=
            'Locking will convert modules to joints. This action can not bet undone. \n Modification to blueprint system can not be done after this.',
            button=['Accept', 'Cancel'],
            defaultButton='Accept',
            cancelButton='Cancel')
        if result != 'Accept':
            return

        moduleInfo = []  #store (module, userSpecifiedName) pairs

        #find all modules in scene and store them in moduleInfo list [moduleName, userSpecifiedName]
        pm.namespace(setNamespace=":")
        namespace = pm.namespaceInfo(listOnlyNamespaces=True)
        moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
        validModules = moduleNameInfo[0]
        validModuleNames = moduleNameInfo[1]

        for n in namespace:
            splitString = n.partition("__")

            if splitString[1] != "":
                module = splitString[0]
                userSpecifiedName = splitString[2]

                if module in validModuleNames:
                    index = validModuleNames.index(module)
                    moduleInfo.append([validModules[index], userSpecifiedName])
        if len(moduleInfo) == 0:
            pm.confirmDialog(messageAlign='center',
                             title='Lock Blueprints',
                             message='No Blueprint Modules in scene',
                             button=['Accept'],
                             defaultButton='Accept')
            return
        print moduleInfo
        moduleInstances = []

        #lock phase 1 - gather tranform/rotation info of joints
        for module in moduleInfo:
            mod = __import__('Blueprint.' + module[0], {}, {}, [module[0]])
            reload(mod)
            moduleClass = getattr(mod, mod.CLASS_NAME)
            moduleInst = moduleClass(userSpecifiedName=module[1])
            moduleInfo = moduleInst.lock_phase1()
            moduleInstances.append((moduleInst, moduleInfo))
            print moduleInfo

        #lock phase 2
        for module in moduleInstances:
            module[0].lock_phase2(module[1])
	def duplicateSelectedModule(self,*args):
		self.deleteScriptJob()
		
		
		
		result = cmds.confirmDialog(messageAlign='center',title='Duplicate Control Module',message='Duplicate animation as well as controls?',button=['Yes','No','Cancel'],defaultButton='Yes',cancelButton='Cancel',dismissString='Cancel')
		
		if result == 'Cancel':
			self.setupScriptJob()
			return
			
		duplicateWithAnimation = False
		if result == 'Yes':
			duplicateWithAnimation = True
			
		selectedModule = cmds.textScrollList(self.UIElements['animationModule_textScroll'],q=True,selectItem=True)[0]
		
		selectedModuleNamespace = self.selectedBlueprintModule + ':' + selectedModule
		
		moduleNameInfo = utils.findAllModuleNames('/Modules/Animation')
		modules = moduleNameInfo[0]
		moduleNames = moduleNameInfo[1]
		
		selectedModuleName = selectedModule.rpartition('_')[0]
		
		if selectedModuleName in moduleNames:
			moduleIndex = moduleNames.index(selectedModuleName)
			module = modules[moduleIndex]
			
			mod = __import__('Animation.'+module,{},{}, [module])
			reload(mod)
			
			moduleClass = getattr(mod,mod.CLASS_NAME)
			
			moduleInst = moduleClass(selectedModuleNamespace)
			
			selectedIndex = cmds.textScrollList(self.UIElements['animationModule_textScroll'],q=True, selectIndexedItem=True)[0]
			previousSelection = cmds.ls(selection=True)
			
			moduleInst.duplicateControlModule(withAnimation=duplicateWithAnimation)
			
			utils.forceSceneUpdate()
			
			if len(previousSelection) != 0:
				cmds.select(previousSelection, replace=True)
			else:
				cmds.select(clear=True)
			
			self.refreshAnimationModuleList(index= selectedIndex)
			
		self.setupScriptJob()
예제 #6
0
 def duplicateSelectedModule(self, *args):
     self.deleteScriptJob()
     
     result = cmds.confirmDialog(messageAlign="center", title="Duplicate Control Module", message="Duplicate animation as well as controls?", button=["Yes", "No", "Cancel"], defaultButton="Yes", cancelButton="Cancel", dismissString="Cancel")
     
     if result == "Cancel":
         self.setupScriptJob()
         return
     
     duplicateWithAnimation = False
     if result == "Yes":
         duplicateWithAnimation = True
         
         
     selectedModule = cmds.textScrollList(self.UIElements["animationModule_textScroll"], q=True, selectItem=True)[0]
     selectedModuleNamespace = self.selectedBlueprintModule + ":" + selectedModule
     
     moduleNameInfo = utils.findAllModuleNames("/Modules/Animation")
     modules = moduleNameInfo[0]
     moduleNames = moduleNameInfo[1]
     
     selectedModuleName = selectedModule.rpartition("_")[0]
     
     if selectedModuleName in moduleNames:
         moduleIndex = moduleNames.index(selectedModuleName)
         module = modules[moduleIndex]
         
         mod = __import__("Animation."+module, {}, {}, [module])
         reload(mod)
         
         moduleClass = getattr(mod, mod.CLASS_NAME)
         
         moduleInst = moduleClass(selectedModuleNamespace)
         
         selectedIndex = cmds.textScrollList(self.UIElements["animationModule_textScroll"], q=True, selectIndexedItem=True)
         previousSelection = cmds.ls(sl=True)
         
         moduleInst.duplicateControlModule(withAnimation=duplicateWithAnimation)
         # Refresh animation module list
         utils.forceSceneUpdate()
         
         if len(previousSelection) != 0:
             cmds.select(previousSelection, replace=True)
         else:
             cmds.select(clear=True)
                    
         self.refreshAnimationModuleList(index = selectedIndex)
         
     self.setupScriptJob()
예제 #7
0
    def canModuleBeMirrored(self, module):
        moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
        validModules = moduleNameInfo[0]
        validModuleNames = moduleNameInfo[1]
        moduleName = module.partition("__")[0]
        if not moduleName in validModuleNames:
            return False

        index = validModuleNames.index(moduleName)
        mod = __import__("Blueprint." + validModules[index], {}, {},
                         validModules[index])
        reload(mod)
        moduleClass = getattr(mod, mod.CLASS_NAME)
        moduleInst = moduleClass("null", None)

        return moduleInst.canModuleBeMirrored()
예제 #8
0
 def deleteSelectedModule(self, *args):
     selectedModule = cmds.textScrollList(self.UIElements["animationModule_textScroll"], q=True, selectItem=True)[0]
     selectedModuleNamespace = self.selectedBlueprintModule + ":" + selectedModule
     
     moduleNameInfo = utils.findAllModuleNames("/Modules/Animation")
     modules = moduleNameInfo[0]
     moduleNames = moduleNameInfo[1]
     
     selectedModuleName = selectedModule.rpartition("_")[0]
     
     if selectedModuleName in moduleNames:
         moduleIndex = moduleNames.index(selectedModuleName)
         module = modules[moduleIndex]
         
         mod = __import__("Animation."+module, {}, {}, [module])
         reload(mod)
         
         moduleClass = getattr(mod, mod.CLASS_NAME)
         
         moduleInst = moduleClass(selectedModuleNamespace)
         
         moduleInst.uninstall()
         
         self.refreshAnimationModuleList()
예제 #9
0
    def mirrorModules(self):
        # Make a progress bar to inform the user how long the mirror process is taking.
        mirrorModulesProgress_UI = cmds.progressWindow(
            title="Mirror Module(s)",
            status="This may take a few minutes...",
            isInterruptable=False)
        mirrorModulesProgress = 0

        mirrorModulesProgress_stage1_proportion = 15
        mirrorModulesProgress_stage2_proportion = 70
        mirrorModulesProgress_stage3_proportion = 10

        moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
        validModules = moduleNameInfo[0]
        validModuleNames = moduleNameInfo[1]

        for module in self.moduleInfo:
            moduleName = module[0].partition("__")[0]

            if moduleName in validModuleNames:
                index = validModuleNames.index(moduleName)
                module.append(validModules[index])
        #077
        mirrorModulesProgress_progressIncrement = mirrorModulesProgress_stage1_proportion / len(
            self.moduleInfo)
        for module in self.moduleInfo:
            userSpecifiedName = module[0].partition("__")[2]
            mod = __import__("Blueprint." + module[5], {}, {}, [module[5]])
            reload(mod)

            moduleClass = getattr(mod, mod.CLASS_NAME)
            moduleInst = moduleClass(userSpecifiedName, None)

            hookObject = moduleInst.findHookObject()

            newHookObject = None

            hookModule = utils.stripLeadingNamespace(hookObject)[0]

            hookFound = False
            for m in self.moduleInfo:
                if hookModule == m[0]:
                    hookFound = True

                    if m == module:
                        continue

                    hookObjectName = utils.stripLeadingNamespace(hookObject)[1]
                    newHookObject = m[1] + ":" + hookObjectName

            if not hookFound:
                newHookObject = hookObject

            module.append(newHookObject)

            hookConstrained = moduleInst.isRootConstrained()
            module.append(hookConstrained)

            mirrorModulesProgress += mirrorModulesProgress_progressIncrement
            cmds.progressWindow(mirrorModulesProgress_UI,
                                edit=True,
                                pr=mirrorModulesProgress)
        #078
        mirrorModulesProgress_progressIncrement = mirrorModulesProgress_stage2_proportion / len(
            self.moduleInfo)
        for module in self.moduleInfo:
            newUserSpecifiedName = module[1].partition("__")[2]

            mod = __import__("Blueprint." + module[5], {}, {}, [module[5]])
            reload(mod)
            # Create all the modules the re-hook
            moduleClass = getattr(mod, mod.CLASS_NAME)
            moduleInst = moduleClass(newUserSpecifiedName, None)

            moduleInst.mirror(module[0], module[2], module[3], module[4])

            mirrorModulesProgress += mirrorModulesProgress_progressIncrement
            cmds.progressWindow(mirrorModulesProgress_UI,
                                edit=True,
                                pr=mirrorModulesProgress)
        # 083
        # Mirror hooking
        mirrorModulesProgress_progressIncrement = mirrorModulesProgress_stage3_proportion / len(
            self.moduleInfo)
        for module in self.moduleInfo:
            newUserSpecifiedName = module[1].partition("__")[2]

            mod = __import__("Blueprint." + module[5], {}, {}, [module[5]])
            reload(mod)

            moduleClass = getattr(mod, mod.CLASS_NAME)
            moduleInst = moduleClass(newUserSpecifiedName, None)

            moduleInst.rehook(module[6])

            hookConstrained = module[7]
            if hookConstrained:
                moduleInst.constrainRootToHook()

            mirrorModulesProgress += mirrorModulesProgress_progressIncrement
            cmds.progressWindow(mirrorModulesProgress_UI,
                                edit=True,
                                pr=mirrorModulesProgress)
        #084
        # Mirror Groups
        if self.group != None:
            cmds.lockNode("Group_container", lock=False, lockUnpublished=False)

            groupParent = cmds.listRelatives(self.group, parent=True)

            if groupParent != None:
                groupParent = groupParent[0]
            # Recursive method
            self.processGroup(self.group, groupParent)

            cmds.lockNode("Group_container", lock=True, lockUnpublished=True)

            cmds.select(clear=True)

        cmds.progressWindow(mirrorModulesProgress_UI,
                            edit=True,
                            endProgress=True)

        utils.forceSceneUpdate()
	def modifySelected(self,*args):
		if cmds.checkBox(self.UIElements['symmetryMoveCheckBox'],q=True,value=True):
			self.deleteSymmetryMoveExpressions()
			self.setupSymmetryMoveExpressions()
		#video 45
		selectedNodes = cmds.ls(selection=True)
		
		if len(selectedNodes) <= 1:
			self.moduleInstance = None
			selectedModuleNamespace = None
			currentModuleFile = None
			
			cmds.button(self.UIElements['ungroupBtn'], edit=True, enable=False)
			cmds.button(self.UIElements['mirrorModuleBtn'], edit=True, enable=False)
			
			if len(selectedNodes) == 1:
				lastSelected = selectedNodes[0]
				
				if lastSelected.find('Group__') == 0:
					cmds.button(self.UIElements['ungroupBtn'], edit=True, enable=True)
					cmds.button(self.UIElements['mirrorModuleBtn'], edit=True, enable=True, label='Mirror Group')
				
				namespaceAndNode = utils.stripLeadingNamespace(lastSelected)
				if namespaceAndNode != None:
					namespace = namespaceAndNode[0]
					
					moduleNameInfo = utils.findAllModuleNames('/Modules/Blueprint')
					validModules = moduleNameInfo[0]
					validModuleNames = moduleNameInfo[1]
					
					index = 0
					for moduleName in validModuleNames:
						moduleNameIncSuffix = moduleName + '__'
						if namespace.find(moduleNameIncSuffix) == 0:
							currentModuleFile = validModules[index]
							selectedModuleNamespace = namespace
							break
						
						index += 1
						
			controlEnable = False
			userSpecifiedName = ''
			constrainCommand = self.constrainRootToHook
			constrainLabel = 'Constrain Root> Hook'
			
			
			if selectedModuleNamespace != None:
				controlEnable = True
				userSpecifiedName = selectedModuleNamespace.partition('__')[2]
				
				mod = __import__('Blueprint.' + currentModuleFile, {},{},[currentModuleFile])
				reload(mod)
				
				moduleClass = getattr(mod,mod.CLASS_NAME)
				self.moduleInstance = moduleClass(userSpecifiedName, None)
				
				cmds.button(self.UIElements['mirrorModuleBtn'], edit=True, enable=True, label='Mirror Module')
				
				if self.moduleInstance.isRootConstrained():
					constrainCommand = self.unconstrainRootFromHook
					constrainLabel = 'Unconstrain Root'
				
			
			cmds.button(self.UIElements['rehookBtn'],edit=True, enable=controlEnable)
			cmds.button(self.UIElements['snapRootBtn'],edit=True, enable=controlEnable)
			cmds.button(self.UIElements['constrainRootBtn'],edit=True, enable=controlEnable, label=constrainLabel, c=constrainCommand)
			
			cmds.button(self.UIElements['deleteModuleBtn'],edit=True, enable=controlEnable, c=self.deleteModule)
			
			cmds.textField(self.UIElements['moduleName'],edit=True, enable=controlEnable, text=userSpecifiedName)
			
			self.createModuleSpecificControls()
			
			
		
		
		self.createScriptJob()
	def lock(self, *args):
		if not self.isRootTransformInstalled():
			result = cmds.confirmDialog(messageAlign='center', title='Lock Character',message='we have detected that you dont have a root transform(global control) instance. \n would you like to go back and edit your blueprint setup?\n (it is recommanded that all rigs have at least one global control module).',button=['Yes','No'],defaultButton='Yes',dismissString='Yes')
			if result == 'Yes':
				return
		

		result = cmds.confirmDialog(messageAlign='center', title='Lock Blueprints',message='The action of locking a character will convert the current blueprint module to joints. \nThis action can not be undone. \nModification to the blueprint system can not be made after this point. \n Do you want to continue?', button=['Accept','Cancel'] ,defaultButton='Accept',cancelButton='Cancel', dismissString='Cancel')
		
		
		
		
		
		
		if result != 'Accept':
			return
			
			
		self.deleteSymmetryMoveExpressions()
		cmds.checkBox(self.UIElements['symmetryMoveCheckBox'], edit=True, value=False)
		
			
		self.deleteScriptJob()
			
		moduleInfo = [] #store(module,userSpecifiedName) pairs
		
		cmds.namespace(setNamespace=':')
		namespaces = cmds.namespaceInfo(listOnlyNamespaces=True)
		
		moduleNameInfo = utils.findAllModuleNames('/Modules/Blueprint')
		validModules = moduleNameInfo[0]
		validModuleNames = moduleNameInfo[1]
		
		for n in namespaces:
			splitString = n.partition('__')
			
			if splitString[1] != '':
				module = splitString[0]
				userSpecifiedName = splitString[2]
				
				if module in validModuleNames:
					index = validModuleNames.index(module)
					moduleInfo.append([validModules[index], userSpecifiedName])
					
		if len(moduleInfo) == 0:
			cmds.confirmDialog(messageAlign='center', title='Lock Blueprints', message='There appear to be no blueprint module \ninstances in the current scene. \nAborting lock.',button=['Accept'],defaultButton='Accept')
			return
			
		moduleInstances =[]
		for module in moduleInfo:
			mod=__import__('Blueprint.'+module[0],{},{},[module[0]])
			reload(mod)
			
			moduleClass = getattr(mod, mod.CLASS_NAME)
			moduleInst = moduleClass(module[1], None)
			
			moduleInfo = moduleInst.lock_phase1()
			
			moduleInstances.append((moduleInst,moduleInfo))
			
		for module in moduleInstances:
			module[0].lock_phase2(module[1])
			
		groupContainer = 'Group_container'
		if cmds.objExists(groupContainer):
			cmds.lockNode(groupContainer, lock=False, lockUnpublished=False)
			cmds.delete(groupContainer)
			
		for module in moduleInstances:
			hookObject = module[1][4]
			module[0].lock_phase3(hookObject)
			
			
		sceneLockedlocator = cmds.spaceLocator(n='Scene_Locked')[0]
		cmds.setAttr(sceneLockedlocator+'.visibility',0)
		cmds.lockNode(sceneLockedlocator,lock=True, lockUnpublished=True)
		
		cmds.select(clear=True)
		self.modifySelected()
		
		cmds.tabLayout(self.UIElements['tabs'], edit=True, enable=False)
		cmds.button(self.UIElements['lockBtn'], edit=True, enable=False)
		cmds.button(self.UIElements['publishBtn'], edit=True, enable=True)
	def publish(self,*args):
		result = cmds.confirmDialog(messageAlign='center', title='Publish Character', message='The action of publishing cannot be undone. Are you sure you wish to continue?',button=['Accept','Cancel'], defaultButton='Accept',cancelButton='Cancel',dismissString='Cancel')
		
		if result != 'Accept':
			return
			
		result = cmds.promptDialog(title='Publish Character',message='Please specify a character name ([a-z][A-Z][0-9] and _ only):',button=['Accept','Cancel'],defaultButton='Accept',cancelButton='Cancel',dismissString='Cancel')
		if result == 'Accept':
			characterName = cmds.promptDialog(q=True, text=True)
			
			characterFileName = os.environ['RIGGING_TOOL_ROOT'] + '/Characters/' + characterName + '.ma'
			
			if os.path.exists(characterFileName):
				cmds.confirmDialo(title='Publish Character', message='Character already exists with that name.Aborting publish', button=['Accept'],defaultButton='Accept')
				return
				
			cmds.lockNode('Scene_Locked',lock=False,lockUnpublished=False)
			cmds.delete('Scene_Locked')
			
			cmds.namespace(setNamespace=':')
			namespaces = cmds.namespaceInfo(listOnlyNamespaces=True)
			
			moduleNameInfo = utils.findAllModuleNames('/Modules/Blueprint')
			validModules = moduleNameInfo[0]
			validModuleNames = moduleNameInfo[1]
			
			foundModuleInstances = []
			for n in namespaces:
				splitString = n.partition('__')
				if splitString[1] != '':
					module = splitString[0]
					if module in validModuleNames:
						foundModuleInstances.append(n)
						
			moduleGroups = []
			moduleContainers = []
			
			for moduleInstance in foundModuleInstances:
				moduleGroups.append(moduleInstance + ':module_grp')
				moduleContainers.append(moduleInstance + ':module_container')
				
			for container in moduleContainers:
				cmds.lockNode(container,lock=False,lockUnpublished=False)
				
			characterGroup = cmds.group(empty=True, name='character_grp')
			for group in moduleGroups:
				cmds.parent(group,characterGroup, absolute=True)
				
			cmds.select(characterGroup, replace=True)
			cmds.addAttr(at='bool', defaultValue=0,keyable=False,longName='moduleMaintenanceVisibility')
			cmds.addAttr(at='bool', defaultValue=1,keyable=True,longName='animationControlVisibility')
			
			invertModuleMaintenanceVisibility = cmds.shadingNode('reverse',n='reverse_moduleMaintenanceVisibility',asUtility=True)
			cmds.connectAttr(characterGroup+'.moduleMaintenanceVisibility',invertModuleMaintenanceVisibility+'.inputX',force=True)
			
			moduleVisibilityMultiply = cmds.shadingNode('multiplyDivide',n='moduleVisibilityMultiply',asUtility=True)
			cmds.connectAttr(invertModuleMaintenanceVisibility+'.outputX',moduleVisibilityMultiply+'.input1X')
			cmds.connectAttr(characterGroup+'.animationControlVisibility',moduleVisibilityMultiply+'.input2X')
			
			characterNodes = list(moduleContainers)
			characterNodes.append(characterGroup)
			characterNodes.append(invertModuleMaintenanceVisibility)
			characterNodes.append(moduleVisibilityMultiply)
			
			characterContainer = cmds.container(name='character_container')
			utils.addNodeToContainer(characterContainer, characterNodes)
			
			cmds.container(characterContainer,edit=True,publishAndBind=[characterGroup+'.animationControlVisibility','animControlVis'])
			
			for container in moduleContainers:
				moduleNamespace = utils.stripLeadingNamespace(container)[0]
				blueprintJointsGrp = moduleNamespace+':blueprint_joints_grp'
				
				cmds.connectAttr(characterGroup+'.moduleMaintenanceVisibility', blueprintJointsGrp+'.visibility')
				cmds.setAttr(blueprintJointsGrp+'.overrideEnabled',1)
				
				publishedNames = cmds.container(container,q=True, publishName=True)
				userSpecifiedName = moduleNamespace.partition('__')[2]
				
				for name in publishedNames:
					cmds.container(characterContainer,edit=True,publishAndBind=[container+'.'+name, userSpecifiedName+'_'+name])
					
			characterContainers = list(moduleContainers)
			characterContainers.append(characterContainer)
			
			cmds.select(all=True)
			topLevelTransforms = cmds.ls(sl=True, transforms=True)
			cmds.select(clear=True)
			
			topLevelTransforms.remove(characterGroup)
			
			if len(topLevelTransforms) != 0:
				nonBlueprintGroup = cmds.group(topLevelTransforms, absolute=True, parent=characterGroup,name='non_blueprint_grp')
				cmds.setAttr(nonBlueprintGroup+'.overrideEnabled',1)
				cmds.setAttr(nonBlueprintGroup+'.overrideDisplayType',2)#Reference display type
				
				cmds.select(nonBlueprintGroup,replace=True)
				cmds.addAttr(at='bool',defaultValue=1, longName='display',k=True)
				
				visibilityMultiply = cmds.shadingNode('multiplyDivide', n='non_blueprint_visibilityMultiply',asUtility=True)
				cmds.connectAttr(invertModuleMaintenanceVisibility+'.outputX',visibilityMultiply+'.input1X',force=True)
				cmds.connectAttr(nonBlueprintGroup+'.display',visibilityMultiply+'.input2X',force=True)
				cmds.connectAttr(visibilityMultiply+'.outputX',nonBlueprintGroup+'.visibility',force=True)
				
				nonBlueprintContainer = cmds.container(addNode=nonBlueprintGroup, ihb=True, includeNetwork=True, includeShapes=True, name='non_blueprint_container')
				utils.addNodeToContainer(characterContainer,nonBlueprintContainer)
				characterContainers.append(nonBlueprintContainer)
				
				publishedName = 'displayNonBlueprintNodes'
				cmds.container(nonBlueprintContainer, edit=True, publishAndBind=[nonBlueprintGroup+'.display',publishedName])
				cmds.container(characterContainer, edit=True, publishAndBind=[nonBlueprintContainer+'.'+publishedName,publishedName])
				
			for container in characterContainers:
				cmds.lockNode(container, lock=True,lockUnpublished=True)
				
			cmds.select(characterContainer)
			cmds.file(characterFileName,exportSelected=True, type='mayaAscii')
			
			scenePublished = cmds.spaceLocator(n='Scene_Published')[0]
			cmds.setAttr(scenePublished+'.visibility',0)
			cmds.lockNode(scenePublished,lock=True,lockUnpublished=True)
			
			cmds.select(clear=True)
			
			cmds.button(self.UIElements['publishBtn'],edit=True,enable=False)
	def delete(self):
		cmds.lockNode(self.containerName, lock=False, lockUnpublished=False)
		
		validModuleInfo = utils.findAllModuleNames('/Modules/Blueprint')
		validModules = validModuleInfo[0]
		validModuleNames = validModuleInfo[1]
		
		hookedModules= set()
		for jointInf in self.jointInfo:
			joint = jointInf[0]
			translationControl = self.getTranslationControl(self.moduleNamespace + ':' + joint)
			
			connections = cmds.listConnections(translationControl)
			
			for connection in connections:
				moduleInstance = utils.stripLeadingNamespace(connection)
				
				if moduleInstance != None:
					splitString = moduleInstance[0].partition('__')
					if moduleInstance[0] != self.moduleNamespace and splitString[0] in validModuleNames:
						index = validModuleNames.index(splitString[0])
						hookedModules.add((validModules[index],splitString[2]))
						
		for module in hookedModules:
			mod = __import__('Blueprint.' + module[0], {},{},[module[0]])
			moduleClass = getattr(mod, mod.CLASS_NAME)
			moduleInst = moduleClass(module[1],None)
			moduleInst.rehook(None)
			
			
		if cmds.attributeQuery('mirrorLinks', node=self.moduleNamespace + ':module_grp', exists=True):
			mirrorLinks = cmds.getAttr(self.moduleNamespace + ':module_grp.mirrorLinks')
			
			linkedBlueprint = mirrorLinks.rpartition('__')[0]
			cmds.lockNode(linkedBlueprint + ':module_container',lock=False, lockUnpublished=False)
			cmds.deleteAttr(linkedBlueprint + ':module_grp.mirrorLinks')
			
			cmds.lockNode(linkedBlueprint + ':module_container',lock=True, lockUnpublished=True)
			
			
			
		moduleTransform = (self.moduleNamespace + ':module_transform')
		moduleTransformParent = cmds.listRelatives(moduleTransform, parent=True)
			
		
		cmds.delete(self.containerName)
		
		cmds.namespace(setNamespace = ':')
		cmds.namespace(removeNamespace = self.moduleNamespace)
		
		if moduleTransformParent != None:
			parentGroup = moduleTransformParent[0]
			
			children = cmds.listRelatives(parentGroup, children=True)
			children = cmds.ls(children,transforms=True)
			
			if len(children) == 0:
				cmds.select(parentGroup, replace=True)
				import System.groupSelected as groupSelected
				reload(groupSelected)
				
				groupSelected.UngroupSelected()
예제 #14
0
	def modifySelected(self, *args):
			
			if cmds.checkBox(self.UIElements["symmetryMoveCheckBox"], q=True, value=True):
				self.deleteSymmetryMoveExpressions()
				self.setupSymmetryMoveExpressions()
			
			selectedNodes = cmds.ls(selection=True)
 			
			if len(selectedNodes) <= 1:
				self.moduleInstance = None
				selectedModuleNamespace = None
				currentModuleFile = None
				
				cmds.button(self.UIElements["ungroupBtn"], edit=True, enable=False)
				cmds.button(self.UIElements["mirrorModuleBtn"], edit=True, enable=False)
 				
				if len(selectedNodes) == 1:
					lastSelected = selectedNodes[0]
					
					if lastSelected.find("Group__") == 0:
						cmds.button(self.UIElements["ungroupBtn"], edit=True, enable=True)
						cmds.button(self.UIElements["mirrorModuleBtn"], edit=True, enable=True, label="Mirror Group")
 					
					namespaceAndNode = utils.stripLeadingNamespace(lastSelected)
					if namespaceAndNode != None:
						namespace = namespaceAndNode[0]
 						
						moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
						validModules = moduleNameInfo[0]
						validModuleNames = moduleNameInfo[1]
 						
						index = 0
						for moduleName in validModuleNames:
							moduleNameIncSuffix = moduleName + "__"
							if namespace.find(moduleNameIncSuffix) == 0:
								currentModuleFile = validModules[index]
								selectedModuleNamespace = namespace
								break
 							
							index += 1
 							 
				controlEnable = False
				userSpecifiedName = ""
				constrainCommand = self.constrainRootToHook 
				constrainLabel = "Constrain Root > Hook"
 				
				if selectedModuleNamespace != None:
					controlEnable = True
					userSpecifiedName = selectedModuleNamespace.partition("__")[2]
 					
					mod = __import__("Blueprint."+currentModuleFile, {},{}, [currentModuleFile])
					reload(mod)
					
					moduleClass = getattr(mod, mod.CLASS_NAME)
					self.moduleInstance = moduleClass(userSpecifiedName, None)
					
					cmds.button(self.UIElements["mirrorModuleBtn"], edit=True, enable=True, label="Mirror Module")
					
					
					if self.moduleInstance.isRootConstrained():
						constrainCommand = self.unconstrainRootFromHook
						constrainLabel = "Unconstrain Root"
					
				#cmds.button(self.UIElements["mirrorModuleBtn"], edit=True, enable=controlEnable)
				cmds.button(self.UIElements["rehookBtn"], edit=True, enable=controlEnable)
				cmds.button(self.UIElements["snapRootBtn"], edit=True, enable=controlEnable)
				cmds.button(self.UIElements["constrainRootBtn"], edit=True, enable=controlEnable, label=constrainLabel, c=constrainCommand )
				
				cmds.button(self.UIElements["deleteModuleBtn"], edit=True, enable=controlEnable, c=self.deleteModule)
				
				cmds.textField(self.UIElements["moduleName"], edit=True, enable=controlEnable, text=userSpecifiedName)
				
				self.createModuleSpecificControls()
			
			self.createScriptJob()
예제 #15
0
	def lock(self, *args):
		if not self.isRootTransformInstalled():
			result = cmds.confirmDialog(messageAlign="center", title="Lock Character", message="We have detected that you dont have a root transform (global control) instance.\nWould you like to go back and edit your blueprint setup?\n (It is recommended that all rigs have at least one global control module).", button=["Yes", "No"], defaultButton="Yes", dismissString="Yes")
			if result == "Yes":
				return
			
		result = cmds.confirmDialog(messageAlign="center", title="Lock Blueprints", message="The action of locking a character will convert the current blueprint modules to joints. \nThis action cannot be undone. \nModifications to the blueprint system cannot be made after this point. \n Do you want to continue?", button=["Accept", "Cancel"], defaultButton="Accept", cancelButton="Cancel", dismissString="Cancel")
		
		if result != "Accept":
			return
			
		self.deleteSymmetryMoveExpressions()
		cmds.checkBox(self.UIElements["symmetryMoveCheckBox"], edit=True, value=False)
			
		self.deleteScriptJob()
		
		moduleInfo = [] #store [module, userSpecifiedName] pairs
		
		cmds.namespace(setNamespace=":")
		namespaces = cmds.namespaceInfo(listOnlyNamespaces=True)
		
		moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
		validModules = moduleNameInfo[0]
		validModuleNames = moduleNameInfo[1]
		
		for n in namespaces:
			splitString = n.partition("__")
			
			if splitString[1] != "":
				module = splitString[0]
				userSpecifiedName = splitString[2]
			
				if module in validModuleNames:
					index = validModuleNames.index(module)
					moduleInfo.append([validModules[index], userSpecifiedName])
				
		if len(moduleInfo) ==  0:
			cmds.confirmDialog(messageAlign="center", title="Lock Blueprints", message="There appear to be no blueprint module \ninstances in the current scene. \nAborting lock", button=["Accept"], defaultButton="Accept")
			return
		
		moduleInstances = []
		for module in moduleInfo:
			mod = __import__("Blueprint."+module[0], {},{},module[0])
			reload(mod)
			
			moduleClass = getattr(mod, mod.CLASS_NAME)
			moduleInst = moduleClass(module[1], None)
			
			moduleInfo = moduleInst.lock_phase1()
			
			moduleInstances.append((moduleInst, moduleInfo))
			
		for module in moduleInstances:
			module[0].lock_phase2(module[1])
			
			
		groupContainer = "Group_container"
		if cmds.objExists(groupContainer):
			cmds.lockNode(groupContainer, lock=False, lockUnpublished=False)
			cmds.delete(groupContainer)
			
			
		for module in moduleInstances:
			hookObject = module[1][4]
			module[0].lock_phase3(hookObject)
			
			
		sceneLockedLocator = cmds.spaceLocator(n="Scene_Locked")[0]
		cmds.setAttr(sceneLockedLocator+".visibility", 0)
		cmds.lockNode(sceneLockedLocator, lock=True, lockUnpublished=True)
		
		cmds.select(clear=True)
		self.modifySelected()
		
		cmds.tabLayout(self.UIElements["tabs"], edit=True, enable=False)
		cmds.button(self.UIElements["lockBtn"], edit=True, enable=False)
		cmds.button(self.UIElements["publishBtn"], edit=True, enable=True)
예제 #16
0
	def publish(self, *args):
		result = cmds.confirmDialog(messageAlign="center", title="Publish Character", message="The action of publishing cannot be undone.\nAre you sure you wish to continue?",button=["Accept","Cancel"], defaultButton="Accept", cancelButton="Cancel", dismissString="Cancel")
		
		if result != "Accept":
			return
		
		result = cmds.promptDialog(title="Publish Character", message="Please specify a character name [a-z] [A-Z] and _ only: ", button=["Accept","Cancel"],defaultButton="Accept", cancelButton="Cancel", dismissString="Cancel")
		if result == "Accept":
			characterName = cmds.promptDialog(q=True, text=True)
			
			characterFileName = os.environ["RIGGING_TOOL_ROOT"]+"/Characters/"+characterName+".ma"
			
			if os.path.exists(characterFileName):
				cmds.confirmDialog(title="Publish Character", message="Character already exists with that name. Aborting Publish.", button=["Accept"], defaultButton="Accept")
				return
			
			cmds.lockNode("Scene_Locked", lock=False, lockUnpublished=False)
			cmds.delete("Scene_Locked")
			
			cmds.namespace(setNamespace=":")
			namespaces = cmds.namespaceInfo(listOnlyNamespaces=True)
			
			moduleNameInfo = utils.findAllModuleNames("/Modules/Blueprint")
			validModules = moduleNameInfo[0]
			validModuleNames = moduleNameInfo[1]
			
			foundModuleInstances = []
			for n in namespaces:
				splitString = n.partition("__")
				if splitString[1] != "":
					module = splitString[0]
					if module in validModuleNames:
						foundModuleInstances.append(n)
						
			moduleGroups = []
			moduleContainers = []
			
			for moduleInstance in foundModuleInstances:
				moduleGroups.append(moduleInstance+":module_grp")
				moduleContainers.append(moduleInstance+":module_container")
				
			for container in moduleContainers:
				cmds.lockNode(container, lock=False, lockUnpublished=False)
				
			characterGroup = cmds.group(empty=True, name="character_grp")
			for group in moduleGroups:
				cmds.parent(group, characterGroup, absolute=True)
			
			cmds.select(characterGroup, replace=True)
			cmds.addAttr(at="bool", defaultValue=0, keyable=False, longName="moduleMaintenanceVisibility")
			cmds.addAttr(at="bool", defaultValue=1, keyable=True, longName="animationControlVisibility")
			
			invertModuleMaintenanceVisibility = cmds.shadingNode("reverse", n="reverse_moduleMaintenanceVisibility", asUtility=True)
			cmds.connectAttr(characterGroup+".moduleMaintenanceVisibility", invertModuleMaintenanceVisibility+".inputX",force=True)
			
			moduleVisibilityMultiply = cmds.shadingNode("multiplyDivide", n="moduleVisibilityMultiply", asUtility=True)
			cmds.connectAttr(invertModuleMaintenanceVisibility+".outputX", moduleVisibilityMultiply+".input1X")
			cmds.connectAttr(characterGroup+".animationControlVisibility", moduleVisibilityMultiply+".input2X")
			
			characterNodes = list(moduleContainers)
			characterNodes.append(characterGroup)
			characterNodes.append(invertModuleMaintenanceVisibility)
			characterNodes.append(moduleVisibilityMultiply)
			
			characterContainer = cmds.container(name="character_container")
			utils.addNodeToContainer(characterContainer, characterNodes)
			
			cmds.container(characterContainer, edit=True, publishAndBind=[characterGroup+".animationControlVisibility", "animControlVis"])
			
			for container in moduleContainers:
				moduleNamespace = utils.stripLeadingNamespace(container)[0]
				blueprintJointsGrp = moduleNamespace+":blueprint_joints_grp"
				
				cmds.connectAttr(characterGroup+".moduleMaintenanceVisibility", blueprintJointsGrp+".visibility")
				cmds.setAttr(blueprintJointsGrp+".overrideEnabled", 1)
				
				publishedNames = cmds.container(container, q=True, publishName=True)
				userSpecifiedName = moduleNamespace.partition("__")[2]
				
				for name in publishedNames:
					cmds.container(characterContainer, edit=True, publishAndBind=[container+"."+name, userSpecifiedName+"_"+name])
			characterContainers = list(moduleContainers)
			characterContainers.append(characterContainer)
			
			cmds.select(all=True)
			topLevelTransforms = cmds.ls(sl=True, transforms=True)
			cmds.select(clear=True)
			
			topLevelTransforms.remove(characterGroup)
			
			if len(topLevelTransforms) != 0:
				nonBlueprintGroup = cmds.group(topLevelTransforms, absolute=True, parent=characterGroup, name="non_blueprint_grp")
				cmds.setAttr(nonBlueprintGroup+".overrideEnabled", 1)
				cmds.setAttr(nonBlueprintGroup+".overrideDisplayType", 2) #Reference display type
				
				cmds.select(nonBlueprintGroup, replace=True)
				cmds.addAttr(at="bool", defaultValue=1, longName="display", k=True)
				
				visibilityMultiply = cmds.shadingNode("multiplyDivide", n="non_blueprint_visibilityMultiply", asUtility=True)
				cmds.connectAttr(invertModuleMaintenanceVisibility+".outputX", visibilityMultiply+".input1X", force=True)
				cmds.connectAttr(nonBlueprintGroup+".display", visibilityMultiply+".input2X", force=True)
				cmds.connectAttr(visibilityMultiply+".outputX", nonBlueprintGroup+".visibility", force=True)
				
				nonBlueprintContainer = cmds.container(addNode=nonBlueprintGroup, ihb=True, includeNetwork=True, includeShapes=True, name="non_blueprint_container")
				utils.addNodeToContainer(characterContainer, nonBlueprintContainer)
				characterContainers.append(nonBlueprintContainer)
				
				publishedName = "displayNonBlueprintNodes"
				cmds.container(nonBlueprintContainer, edit=True, publishAndBind=[nonBlueprintGroup+".display", publishedName])
				cmds.container(characterContainer, edit=True, publishAndBind=[nonBlueprintContainer+"."+publishedName, publishedName])
			
			for container in characterContainers:
				cmds.lockNode(container, lock=True, lockUnpublished=True)
				
			cmds.select(characterContainer)
			cmds.file(characterFileName, exportSelected=True, type="mayaAscii")
			
			scenePublished = cmds.spaceLocator(n="Scene_Published")[0]
			cmds.setAttr(scenePublished+".visibility", 0)
			cmds.lockNode(scenePublished, lock=True, lockUnpublished=True)
			
			cmds.select(clear=True)
			
			cmds.button(self.UIElements["publishBtn"], edit=True, enable=False)