示例#1
0
def addComponentToObject( inClassType, **kwargs ):    
    if kwargs.has_key('inObject'):
        targetObj = kwargs['inObject']
        print 'targetObj: {0}'.format( targetObj )
        del kwargs['inObject']
        prevSel = None
    else:
        selList = cmds.ls( selection=True, long=True )
        if len( selList ) is 1:
            targetObj = selList[0]
            prevSel = selList[0]
    
    if targetObj is not None:
        component_class = str_to_class( inClassType )
        newNode = component_class.createCompNode( inClassType, **kwargs )
        
        # Add the component attribute to the object.
        NodeUtility.addPlug( targetObj, newNode.name(), 'attributeType', 'message' )
        nodePlug = '{0}.parentName'.format( newNode.name() )
        objectPlug = '{0}.{1}'.format( targetObj, newNode.name() )
        NodeUtility.connectPlugs( objectPlug, nodePlug )
        if prevSel is not None:
            cmds.select( prevSel )
            
        return newNode
示例#2
0
 def requiredAttributes( self, *args, **kwargs ):
     NodeUtility.addPlug( self.newNode, 'parentName', 'attributeType', 'message' )
     #cmds.addAttr( newNode, longName='parentName', attributeType='message', storable=True )
     #self.setAttribute( cls(), 'parentName', self.newNode, inNodeName=self.newNode )
     self.setAttribute( 'parentName', self.newNode, self.newNode )
     
     NodeUtility.addPlug( self.newNode, 'classType', 'dataType', 'string' )
     #cls( self.newNode ).classType = [ self.newNode, self.nodeType, True ]
     self.classType = [ self.newNode, self.nodeType, True ]
示例#3
0
 def requiredAttributes( self ):
     super( CharacterRootComponent, self ).requiredAttributes()
     NodeUtility.addPlug( self.newNode, 'characterName', 'dataType', 'string' )
     self.setAttribute( 'characterName', 'joe', self.newNode )
             
     NodeUtility.addPlug( self.newNode, 'skeletonGroupName', 'dataType', 'string' )
     self.setAttribute( 'skeletonGroupName', 'skeleton', self.newNode )
     
     NodeUtility.addPlug( self.newNode, 'rigGroupName', 'dataType', 'string' )
     self.setAttribute( 'rigGroupName', 'rig', self.newNode )
     
     NodeUtility.addPlug( self.newNode, 'modules', 'attributeType', 'message' )
示例#4
0
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'] )
示例#5
0
 def requiredAttributes( self, *args, **kwargs ):
     '''
     kwargs
     curveType: Type of curve control to make. Square, triangle, arrow, plus, pyramid, circle, ringDirection.
     '''
     super( CurveControlComponent, self ).requiredAttributes()
     NodeUtility.addPlug( self.newNode, 'controlName', 'dataType', 'string' )
     NodeUtility.addPlug( self.newNode, 'curveType', 'dataType', 'string' )
     self.setAttribute( 'curveType', kwargs['curveType'], self.newNode )
     
     # Add attribute for control color.
     NodeUtility.addPlug( self.newNode, 'controlColor', 'attributeType', 'byte' )
     self.setAttribute( 'controlColor', 1, self.newNode )
     
     # Control transform relative to the parent.
     NodeUtility.addPlug( self.newNode, 'controlPosition', 'attributeType', 'float3' )
     NodeUtility.addPlug( self.newNode, 'controlRotation', 'attributeType', 'float3' )
     NodeUtility.addPlug( self.newNode, 'controlScale', 'attributeType', 'float3' )
     
     # Add attributes for the curve CVs.
     tempCurve = self.createCurveControl( '{0}TempCurve'.format( self.newNode ), kwargs['curveType'] )
     tempCurveName = OpenMaya.MDagPath.getAPathTo( tempCurve ).fullPathName()
     tempCurvePoints = NurbsCurveUtility.getCurveCvs( tempCurveName )
     NurbsCurveUtility.addCurveValues( self.newNode, tempCurvePoints )
     
     # Update curve transform values.
     storeControlTransforms( tempCurveName, self.newNode )
     
     # Clean up.
     cmds.delete( tempCurveName )
示例#6
0
 def requiredAttributes( self ):
     super( ModuleRootComponent, self ).requiredAttributes()
     NodeUtility.addPlug( self.newNode, 'moduleName', 'dataType', 'string' )
     NodeUtility.addPlug( self.newNode, 'buildPriority', 'attributeType', 'byte' )
     NodeUtility.addPlug( self.newNode, 'characterRoot', 'attributeType', 'message' )
示例#7
0
 def requiredAttributes( self ):
     super( GLBoxControlComponent, self ).requiredAttributes()
     NodeUtility.addPlug( self.newNode, 'controlName', 'dataType', 'string' )
     
     # Add the GLBox attributes.
     #kLongName = '-name' SKIPPING
     #kLongPosition = '-position'
     NodeUtility.addPlug( self.newNode, 'position', 'attributeType', '' )
     #kLongLineWidth = '-lineWidth'
     NodeUtility.addPlug( self.newNode, 'lineWidth', 'attributeType', 'float' )
     #kLongRotate = '-rotate'
     NodeUtility.addPlug( self.newNode, 'rotate', '', '' )
     #kLongTransparency = '-alpha'
     NodeUtility.addPlug( self.newNode, 'alpha', 'attributeType', 'float' )
     #kLongBackAlpha = '-backAlpha'
     NodeUtility.addPlug( self.newNode, 'backAlpha', 'attributeType', 'float' )
     #kLongColor = '-color'
     NodeUtility.addPlug( self.newNode, 'color', '', '' )
     #kLongDrawType = '-drawType'
     NodeUtility.addPlug( self.newNode, 'drawType', '', '' )
     #kLongWidth = '-width'
     NodeUtility.addPlug( self.newNode, 'width', 'attributeType', 'float' )
     #kLongHeight = '-height'
     NodeUtility.addPlug( self.newNode, 'height', 'attributeType', 'float' )
     #kLongDepth = '-depth'
     NodeUtility.addPlug( self.newNode, 'depth', 'attributeType', 'float' )
     #kLongTopFrontRight = '-topFrontRight'
     NodeUtility.addPlug( self.newNode, 'topFrontRight', '', '' )
     #kLongTopFrontLeft = '-topFrontLeft'
     NodeUtility.addPlug( self.newNode, 'topFrontLeft', '', '' )
     #kLongTopBackRight = '-topBackRight'
     NodeUtility.addPlug( self.newNode, 'topBackRight', '', '' )
     #kLongTopBackLeft = '-topBackLeft'
     NodeUtility.addPlug( self.newNode, 'topBackLeft', '', '' )
     #kLongBotFrontRight = '-botFrontRight'
     NodeUtility.addPlug( self.newNode, 'botFrontRight', '', '' )
     #kLongBotFrontLeft = '-botFrontLeft'
     NodeUtility.addPlug( self.newNode, 'botFrontLeft', '', '' )
     #kLongBotBackRight = '-botBackRight'
     NodeUtility.addPlug( self.newNode, 'botBackRight', '', '' )
     #kLongBotBackLeft = '-botBackLeft'
     NodeUtility.addPlug( self.newNode, 'botBackLeft', '', '' )
示例#8
0
 def requiredAttributes( self ):
     super( BasicJointComponent, self ).requiredAttributes()
     NodeUtility.addPlug( self.newNode, 'jointName', 'dataType', 'string' )