def mirrorModule(): # Mirrors a module. selList = cmds.ls( selection=True, long=True ) if len( selList ) == 1: # Prompt for axis. mirrorAxis = int( cmds.layoutDialog( ui=mirrorObjectPrompt ) ) inBitObj = selList[0] # Check if selected bit is the root. if NodeUtility.attributeCheck( inBitObj, 'frameRoot' ): # This is the root bit of the module. From here we know we can get the # meta node by accessing the frameRoot attribute. metaNode = NodeUtility.getNodeAttrDestination( inBitObj, 'frameRoot' )[0] else: # The selected bit is not the root. Run through each custom attribute # to find one connected to the meta node. attrList = cmds.listAttr( inBitObj, userDefined=True ) for attr in attrList: connection = NodeUtility.getNodeAttrDestination( inBitObj, attr ) if NodeUtility.attributeCheck( connection[0], 'metaType' ): metaNode = connection[0] break # Now that we have the meta node, we need the XML file name and it's location. metaClassPlug = NodeUtility.getPlug( metaNode, 'metaClass' ) metaClassValue = NodeUtility.getPlugValue( metaClassPlug ) metaBuildFolderPlug = NodeUtility.getPlug( metaNode, 'buildFolder' ) metaBuildFolderValue = NodeUtility.getPlugValue( metaBuildFolderPlug ) # Create the target module. ''' NEED TO FIX THIS! targetRootBit = buildFrameModule( metaBuildFolderValue, metaClassValue ) ''' # Loop through each object in the source module. metaRootBit = NodeUtility.getNodeAttrSource( metaNode, 'rootBit' )[0] sourceChildBits = NodeUtility.getFrameRootAllChildren( metaRootBit ) targetChildBits = NodeUtility.getFrameRootAllChildren( targetRootBit ) sourceBits = [] targetBits = [] for i,bit in enumerate( sourceChildBits ): sourceBits.append( bit ) sourceBits.insert( 0, metaRootBit ) for i, bit in enumerate( targetChildBits ): targetBits.append( bit ) targetBits.insert( 0, targetRootBit ) for bit in xrange( len(sourceBits) ): # Mirror the source onto the target. mirrorObject( inSourceObj=sourceBits[bit], inTargetObj=targetBits[bit], inMirrorAxis=mirrorAxis )
def getComponents( inObj ): ''' Creates the components GUI. ''' if inObj is not None: components_list = NodeUtility.getFrameBitSettings( inObj ) else: components_list = None # If the newly selected bit has components then update the UI to show them. # Check to see if any of the components are connected to a meta node. # We do this check so that we don't create a bunch of UI elements # unnecessarily. if components_list is not None and metaNodeCheck( inObj, components_list ): # Loop through each component on the bit. components_class_list = {} for node_name in components_list: # Check to see if the component is connected to a meta node. metaNode = NodeUtility.getNodeAttrDestination( inObj, node_name ) if metaNode: # It has a meta node. # Get the meta node properties. This returns a dict. meta_properties = NodeUtility.getFrameBitSettings( metaNode[0] ) component_class = meta_properties[ 'classType' ] # test hack!!! components_class_list[ node_name ] = component_class return components_class_list else: return None
def deleteBitChild(): # Disconnected the child from it's parent. selList = cmds.ls( selection=True, long=True ) for i in selList: connections = NodeUtility.getNodeAttrDestination( i, 'matrix' ) parent = '{0}.{1}'.format( connections[0], connections[1] ) for plug in connections: if plug.find( 'targetWorldMatrix' ) is not -1: cmds.removeMultiInstance( parent, b=True ) cmds.parent( i, world=True )
def metaNodeCheck( inObj, inComponents ): ''' Checks if the component plug of an object has a meta node connected. @param inObj: String. Name of the selected object. @param inComponents: List of connected components to the selected object. ''' for comName in inComponents: metaNode = NodeUtility.getNodeAttrDestination( inObj, comName ) if metaNode: return True return False
def componentsGUI( self, inBit=None ): ''' Creates the components GUI. ''' if inBit is None: components = None else: # Get the components of the selected bit. components = FrameUtility.getFrameBitSettings( inBit ) # Clean up the compArea layout prior to adding new children by # removing the previously selected bit's information from the UI. mainChildren = cmds.columnLayout( self.fillArea, query=True, childArray=True ) if mainChildren is not None: for child in mainChildren: cmds.deleteUI( child ) col = cmds.columnLayout( adjustableColumn=True, columnAttach=('both', 5), parent=self.fillArea ) # HIGHLIGHTED cmds.separator( style='none', height=4, width=413 ) self.selName = cmds.text( label=str.upper( 'nothing selected' ), height=20, font='boldLabelFont', backgroundColor=[0.2,0.2,0.2] ) cmds.separator( style='none', height=10 ) # If the newly selected bit has components then update the UI to show them. # Check to see if any of the components are connected to a meta node. # We do this check so that we don't create a bunch of UI elements # unnecessarily. if components is not None and self.metaNodeCheck( inBit, components ): # Create the scroll layout. mainScroll = cmds.scrollLayout( parent=col ) # Loop through each component on the bit. for comName in components: # Check to see if the component is connected to a meta node. metaNode = NodeUtility.getNodeAttrDestination( inBit, comName ) if metaNode: # It has a meta node. # Get the meta node parameters. metaParameters = FrameUtility.getFrameBitSettings( metaNode[0] ) # Make the component UI elements. frameOne = cmds.frameLayout( parent=mainScroll, borderStyle='out', label=comName, collapsable=True ) cmds.popupMenu() #bit name, component name, meta node name cmds.menuItem( label='Delete Component', command=lambda b, a1=inBit, a2=comName, a3=metaNode[0]:self.deleteComponent(a1, a2, a3) ) cmds.menuItem( label='Build Component', command=lambda b, a1=metaNode[0]:self.buildComponent(a1) ) compColumn = cmds.rowColumnLayout( numberOfColumns=1 ) # Loop through the parameters and add them to the component UI. for param in metaParameters: #print isinstance(param, unicode) if not( param == u'parentName' or param == u'classType' ): propRow = cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[(1,100),(2,100),(3,40),(4,40)], columnSpacing=[(1,10),(2,10),(3,10),(4,2)] ) cmds.text( label=param, align='left' ) cmds.textField( text=metaParameters[param], enterCommand=lambda b, a1=metaNode[0], a2=param:self.updateComponentParameter(a1, a2, b) ) cmds.setParent( '..' )#propRow cmds.setParent( '..' )#compColumn cmds.setParent( '..' )#frameOne cmds.setParent( '..' )#mainScroll cmds.setParent( '..' )#col # Selection script job self.selJob = cmds.scriptJob( event=[ 'SelectionChanged', self.onSelectionChange ], parent=col, protected=True )