def preset_buttons( self, inPresetType ): ''' Creates a module or character root, complete with appropriate meta nodes. @param inPresetType: Int. 1 is a module root. 2 is a character root. ''' if inPresetType == 1: # Create module root. # Create the root bit. rootBit = cmds.makeGLBit( objecttype='glTorus', name='moduleRoot', color=(1.0,0.1,0.1), torSides=3, torRings=8, torOtRad=1.1, torInRad=1, drawPlace=0 ) # Create the meta node. # Connect the node to the bit. pass elif inPresetType == 2: # Create character root. # Create the root bit. rootBit = cmds.makeGLBit( objecttype='glTorus', name='characterRoot', color=(1.0,0.1,0.1), torSides=3, torRings=8, torOtRad=3.1, torInRad=3, drawPlace=1 ) # Create the meta node. # Connect the node to the bit. pass
def bitsGUI( self ): col = cmds.columnLayout( adjustableColumn=True, columnAttach=('both', 5), parent=self.fillArea ) cmds.separator( style='none', height=4, width=413 ) # Primitives section. cmds.text( label='BIT PRIMITIVES', height=20, font='boldLabelFont', backgroundColor=[0.2,0.2,0.2] ) cmds.separator( style='none', height=5 ) cmds.gridLayout( numberOfColumns=5, cellWidthHeight=( 50, 50 ) ) cmds.button( label='Sphere', command=lambda b, a1='glSphere': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Box', command=lambda b, a1='glBox': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Cylinder', command=lambda b, a1='glCylinder': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Cone', command=lambda b, a1='glCone': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Torus', command=lambda b, a1='glTorus': cmds.makeGLBit( objecttype=a1 ) ) cmds.setParent( '..' )#gridLayout cmds.separator( style='none', height=10 ) # Transform section. cmds.text( label='TRANSFORM TOOLS', height=20, font='boldLabelFont', backgroundColor=[0.2,0.2,0.2] ) cmds.separator( style='none', height=5 ) cmds.gridLayout( numberOfColumns=3, cellWidthHeight=( 50, 50 ) ) cmds.iconTextButton( annotation='match translation', style='iconOnly', image1='icon_match_translation.png', command=lambda a1='tran': TransformUtility.matchTransforms(a1) ) cmds.iconTextButton( annotation='match rotation', style='iconOnly', image1='icon_match_rotation.png', label='match rotation', command=lambda a1='rot': TransformUtility.matchTransforms(a1) ) cmds.iconTextButton( annotation='match all', style='iconOnly', image1='icon_match_all.png', label='match all', command=lambda a1='all': TransformUtility.matchTransforms(a1) ) cmds.setParent( '..' )#gridLayout cmds.separator( style='none', height=10 ) cmds.setParent( '..' )#col
def buildFrameModule( inDir=None, inXMLFile=None ): from marigold.meta.metaNode import MetaNode # Get the XML settings for the frame module. dirPath = XMLUtility.getPresetPath( XMLUtility.FRAME_PRESETS_PATH+inDir ) fullPath = dirPath+'/'+inXMLFile+'.xml' xmlDict = readFrameModuleXML( fullPath ) # Get the metanode. metanode = xmlDict['metanode'] meta = metanode['name'] metaPlugs = metanode['plugs'] metaType = metanode['metaType'] metaClass = metanode['metaClass'] metanode = MetaNode( inNodeName=meta, inNodeMetaType=metaType ) metanode = cmds.ls( selection=True )[0] metaPlugs = xmlDict['metanode']['plugs'] for plug in metaPlugs: if not NodeUtility.attributeCheck( metanode, plug['name'] ): addPlug( metanode, plug['name'], plug['attrType'], plug['attrDataType'] ) if plug['connected'] == 'False': setPlug( metanode, plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) # Get the bits. bits = xmlDict['bits'] # Make a group for the module. for bit in bits: if bit['name'] == 'frame_root': for plug in bit['plugs']: if plug['name'] == 'prefix': modulePrefix = plug['value'] break moduleGroup = '|{0}'.format( cmds.group( em=True, name=modulePrefix+'_'+metaClass ) ) # Make each bit. tick = 0 storeBitConnections = [] while tick < len(bits): bitName = bits[0]['name'] if bits[0]['parent'] == 'None': # This is the root bit. The | is there to represent this. We don't need it now. # Plus it causes problems with the full path name stuff (double ||). So we # remove it. bitParent = moduleGroup else: bitParent = moduleGroup+bits[0]['parent'] bitPlugs = bits[0]['plugs'] bitShape = bits[0]['shape'] # Make the bit. if cmds.objExists( bitParent ): newBit = cmds.makeGLBit( name=bitName, objecttype=bits[0]['shapeType'] ) cmds.parent( newBit, bitParent ) # From this point we use the long name for the bit. This avoids any # name clashes. fullBitName = '{0}{1}'.format( bitParent, newBit ) # Get the frame_root for the module. We want to return this at the very end. if bitName == 'frame_root': rootFullName = fullBitName # Setup plugs for transform and custom attributes. for plug in bitPlugs: if not NodeUtility.attributeCheck( fullBitName, plug['name'] ): addPlug( fullBitName, plug['name'], plug['attrType'], plug['attrDataType'] ) if plug['value'] is not None: setPlug( fullBitName, plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) else: # Setup position and rotation. setPlug( fullBitName, plug['name'], plug['value'] ) # Connect plug to meta node. for mplug in metaPlugs: if '{0}.{1}'.format(bitName, plug['name']) == mplug['value']: inSourcePlug = fullBitName+'.'+plug['name'] inDestinationPlug = metanode+'.'+mplug['name'] NodeUtility.connectPlugs( inSourcePlug, inDestinationPlug ) # Setup plugs for shape attributes. shapeName = cmds.listRelatives( fullBitName, shapes=True ) fullShapeName = '{0}|{1}'.format( fullBitName, shapeName[0] ) for plug in bitShape: if plug['attrDataType'] == 'TdataCompound': # We skip compound nodes at this stage. They are for the child arrow drawing and must be # hooked up after all the objects are created. connectionChild = '{0}{1}'.format( moduleGroup, plug['value'] ) storeBitConnections.append( { 'parent':fullBitName, 'child':connectionChild } ) else: setPlug( fullShapeName, plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) bits.remove( bits[0] ) else: tick = tick+1 pass # Now do the hook ups for the child arrows. for i in storeBitConnections: setBitChild( i['parent'], i['child'] ) return rootFullName
def loadModule( inFolder, inFileName ): ''' Loads a module into the scene. @param inFolder: String. Name for the sub-folder the module XML is located. @param inFileName: String. Name of the module XML. ''' dirPath = getPresetPath( FRAME_PRESETS_PATH+inFolder ) fullPath = dirPath+'/'+inFileName+'.xml' xmlFile = readModuleXML( fullPath ) # Create a temp group to put the module inside while creating. moduleGroup = '|{0}'.format( cmds.group( em=True, name='TEMP' ) ) # Grab all the bits. bits = xmlFile['bits'] # Make each bit. tick = 0 storeBitConnections = [] while tick < len(bits): if bits[0]['parent'] == 'None': bitParent = moduleGroup else: bitParent = moduleGroup+bits[0]['parent'] bitName = bits[0]['name'] bitPlugs = bits[0]['plugs'] shapePlugs = bits[0]['shape'] bitComponents = bits[0]['components'] # Make the bit. if cmds.objExists( bitParent ): newBit = cmds.makeGLBit( name=bitName, objecttype=bits[0]['shapeType'] ) cmds.parent( newBit, bitParent ) # From this point we use the long name for the bit. This avoids any # name clashes. fullBitName = '{0}{1}'.format( bitParent, newBit ) # Setup plugs for transform and custom attributes. for plug in bitPlugs: if not NodeUtility.attributeCheck( fullBitName, plug['name'] ): NodeUtility.addPlug( fullBitName, plug['name'], plug['attrType'], plug['attrDataType'] ) if plug['value'] is not None: NodeUtility.setPlug( fullBitName, plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) else: # Setup position and rotation. NodeUtility.setPlug( fullBitName, plug['name'], plug['value'] ) # Setup plugs for shape attributes. shapeName = cmds.listRelatives( fullBitName, shapes=True ) fullShapeName = '{0}|{1}'.format( fullBitName, shapeName[0] ) for plug in shapePlugs: if plug['attrDataType'] == 'TdataCompound' or plug['attrDataType'] == 'matrix': # We skip compound nodes at this stage. They are for the child arrow drawing and must be # hooked up after all the objects are created. connectionChild = '{0}{1}'.format( moduleGroup, plug['value'] ) storeBitConnections.append( { 'parent':fullBitName, 'child':connectionChild } ) elif plug['attrDataType'] == 'message': print 'MESSAGE' else: NodeUtility.setPlug( fullShapeName, plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) # Setup bit components. for comp in bitComponents: compType = comp['name'] # We have to special case components that have additional kwargs. if compType == 'CurveControlComponent': # Handle curve control component type. for plug in comp['plugs']: if plug['name'] == 'curveType': curveType = plug['value'] newComp = components.addComponentToObject( compType, inObject=fullBitName, curveType=curveType ) else: # Handle basic component. newComp = components.addComponentToObject( compType, inObject=fullBitName ) for plug in comp['plugs']: # Bit of a hack with the parentName attribute. This attr is setup when the component is created. # So there is no need to apply the stored plug value from the XML. if plug['attrDataType'] == 'message': if plug['name'] != 'parentName': if plug['value'] != 'None': sourcePlug = plug['value'].split('.') NodeUtility.connectNodes( sourcePlug[0], sourcePlug[1], newComp.name(), plug['name'] ) else: NodeUtility.setPlug( newComp.name(), plug['name'], plug['value'], inAttrDataType=plug['attrDataType'] ) # Remove the bit from the list bits.remove( bits[0] ) #tick = tick+1 # Now do the hook ups for the child arrows. for i in storeBitConnections: NodeUtility.setBitChild( i['parent'], i['child'] )
def doIt( self, *args ): # Window settings. self.winWidth = 206 self.winHeight = 400 self.iconWidth = 32 self.iconHeight = 32 # Window colors self.rowColors = [[0.4,0.4,0.4],[0.5,0.5,0.5]] # Clean up old uis before opening a new one. try: cmds.deleteUI( self.winName ) except: pass # Setup the form layout. self.mainWindow = cmds.window( self.winName, title=self.winTitle, sizeable=False, resizeToFitChildren=False ) self.form = cmds.formLayout() self.tabs = cmds.tabLayout( innerMarginWidth=5, innerMarginHeight=5 ) # Attach the tabs layout to the form layout. cmds.formLayout( self.form, edit=True, attachForm=( (self.tabs, 'top', 0), (self.tabs, 'left', 0), (self.tabs, 'bottom', 0), (self.tabs, 'right', 0) ) ) # Create each of the tabs. # TAB: META NODES: START self.tabMeta = cmds.rowColumnLayout( numberOfRows=2, width=self.winWidth ) self.colMeta = cmds.rowColumnLayout( numberOfColumns=1, height=self.winHeight/2 ) cmds.text( label='Meta Nodes', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.gridMeta = cmds.gridLayout( numberOfColumns=4, cellWidthHeight=( 50, 50 ) ) cmds.button( label='Basic', command=lambda b, a1='frameModule': metaNode.MetaNode( inNodeMetaType=a1 ) ) cmds.button( label='Character', command=lambda b, a1=False: metaNode.MetaCharacter( doModel=a1 ) ) cmds.setParent( '..' )#self.gridMeta cmds.setParent( '..' )#self.colMeta self.colMetaTools = cmds.rowColumnLayout( numberOfColumns=1 ) cmds.text( label='Tools', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.rowMetaTools = cmds.rowColumnLayout( numberOfRows=1 ) cmds.button( label='Meta Node List', annotation='meta node list', command=lambda b: SelectMetaUI.selectMetaUI() ) cmds.setParent( '..' )#self.rowMetaTools cmds.setParent( '..' )#self.colMetaTools cmds.setParent( '..' )#self.tabMeta # TAB: META NODES: END # TAB: BITS, START self.tabBits = cmds.rowColumnLayout( numberOfRows=3, width=self.winWidth ) self.bitsCol = cmds.rowColumnLayout( numberOfColumns=1, height=self.winHeight/3 ) cmds.text( label='Bit Primitives', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.bitsGrid = cmds.gridLayout( numberOfColumns=4, cellWidthHeight=( 50, 50 ) ) cmds.button( label='Sphere', command=lambda b, a1='glSphere': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Box', command=lambda b, a1='glBox': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Cylinder', command=lambda b, a1='glCylinder': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Cone', command=lambda b, a1='glCone': cmds.makeGLBit( objecttype=a1 ) ) cmds.button( label='Torus', command=lambda b, a1='glTorus': cmds.makeGLBit( objecttype=a1 ) ) cmds.setParent( '..' )#self.bitsGrid cmds.setParent( '..' )#self.bitsCol self.toolsCol = cmds.rowColumnLayout( numberOfColumns=1 ) cmds.text( label='Transform Tools', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.toolRow = cmds.rowColumnLayout( numberOfRows=1 ) cmds.iconTextButton( annotation='match translation', style='iconOnly', width=self.winWidth/3, image1='icon_match_translation.png', command=lambda a1='tran': TransformUtility.matchTransforms(a1) ) cmds.iconTextButton( annotation='match rotation', style='iconOnly', width=self.winWidth/3, image1='icon_match_rotation.png', label='match rotation', command=lambda a1='rot': TransformUtility.matchTransforms(a1) ) cmds.iconTextButton( annotation='match all', style='iconOnly', width=self.winWidth/3, image1='icon_match_all.png', label='match all', command=lambda a1='all': TransformUtility.matchTransforms(a1) ) cmds.setParent( '..' )#self.toolRow cmds.setParent( '..' )#self.toolsCol self.childCol = cmds.rowColumnLayout( numberOfColumns=1 ) cmds.text( label='General Tools', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.childRow = cmds.rowColumnLayout( numberOfColumns=2 ) cmds.button( label='Add Child', command=lambda b: NodeUtility.setBitChild() ) cmds.button( label='Remove Child', command=lambda b: NodeUtility.deleteBitChild() ) cmds.button( label='Copy Settings', command=lambda b: NodeUtility.copyBitSettings() ) cmds.setParent( '..' )#self.childRow cmds.setParent( '..' )#self.childCol cmds.setParent( '..' )#self.tabBits # TAB: BITS, END # TAB: ATTRIBUTES, START self.tabAttrs = cmds.rowColumnLayout( numberOfRows=2 ) # Top self.attrTop = cmds.rowColumnLayout( numberOfColumns=1 ) cmds.text( label='Attribute List', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) # Top rows. self.attrList = cmds.scrollLayout( horizontalScrollBarThickness=16, verticalScrollBarThickness=16, height=150 ) self.fillAttrList() cmds.setParent( '..' )#attrList # Bottom buttons cmds.rowColumnLayout( numberOfColumns=2 ) #cmds.button( label='Add Custom Attribute' ) cmds.button( label='Delete Attributes', command=lambda b: deleteAttrUI.createDeleteAttrUI() ) cmds.button( label='Add Selected', command=lambda b: self.addAttrsFromList() ) cmds.separator( style='none', height=10 ) cmds.setParent( '..' )#button columns cmds.setParent( '..' )#self.attrTop self.attrPresets = cmds.rowColumnLayout( numberOfColumns=1 ) cmds.text( label='Attribute Presets', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) self.presets = cmds.gridLayout( numberOfColumns=4, cellWidthHeight=( 50, 50 ) ) self.fillAttrPresets() cmds.setParent( '..' )#self.presets cmds.setParent( '..' )#self.attrPresets cmds.setParent( '..' )#self.tabAttrs # TAB: ATTRIBUTES, END # TAB: XML: START self.tabXML = cmds.rowColumnLayout( numberOfRows=2, width=self.winWidth ) self.colXML = cmds.rowColumnLayout( numberOfColumns=1, height=self.winHeight/2 ) cmds.text( label='XML Tools', width=self.winWidth, wordWrap=True, align='center', font='boldLabelFont', backgroundColor=(0.15,0.15,0.15) ) cmds.separator( style='none', height=4 ) cmds.button( label='Save Frame Module XML', command=lambda b: FrameUtility.createFrameModuleXML() ) cmds.setParent( '..' )#self.colXML cmds.setParent( '..' )#self.tabXML # TAB: XML: END # Added the tabs to the tab layout. cmds.tabLayout( self.tabs, edit=True, tabLabel=( (self.tabMeta, 'Metas'), (self.tabBits, 'Bits'), (self.tabAttrs, 'Attributes'), (self.tabXML, 'XML') ) ) # Show the window. cmds.showWindow( self.winName )
def primitive_buttons( self ): sender = self.sender() bit_name = 'gl{0}'.format( sender.text() ) cmds.makeGLBit( objecttype=bit_name )