def create_dummy(object, type="mesh"): scale_multi = 1.5 obj_namespace, obj_name = namespace_breaker(object) if not type=="nurbsCurve": dummy_conrtol = dummy_from_bb(object, obj_name, scale_multi) elif type == "error": temp_copy = cmds.duplicate(object, rc=True) if len(temp_copy)>1: cmds.delete(temp_copy[1::]) loc = cmds.spaceLocator(n="dummy_locator_0#")[0] cmds.parentConstraint(loc, temp_copy[0], mo=False) cmds.delete(loc) refine_attrs(temp_copy[0]) try: surface = cmds.Planar(temp_copy[0]) except: surface = cmds.revolve(temp_copy[0]) dummy_conrtol = dummy_from_bb(surface, obj_name, scale_multi) cmds.delete(surface) else: name = obj_name+"_dummy_control_00" copy_obj = cmds.duplicate(object, rc=True) if len(copy_obj)>1: cmds.delete(copy_obj[1::]) loc = cmds.spaceLocator(n="dummy_locator_0#")[0] cmds.parentConstraint(loc, copy_obj[0], mo=False) cmds.delete(loc) refine_attrs(copy_obj[0]) cmds.scale(scale_multi,scale_multi,scale_multi, copy_obj[0]) cmds.makeIdentity(copy_obj[0], apply=True, t=True, r=True, s=True) name = cmds.rename(copy_obj[0], name) dummy_conrtol = name cmds.refresh() return dummy_conrtol
def create(piv=[0, 0, 0], axis=[0, 0, -1], rad=1, dilate_ctrl='', prefix='eyeball'): # ------------------------ # Generate Profile Curve # sphere eye_sphere = cmds.sphere(p=piv, ax=axis, r=rad, n=prefix + '_history') # curve from sphere eye_crv = cmds.duplicateCurve(eye_sphere[0] + '.v[0]') eye_crv[0] = cmds.rename(eye_crv[0], prefix + '_pfl01_crv') # rebuild curve 0-1 cmds.rebuildCurve(eye_crv[0], rpo=1, end=1, kcp=1, kr=0, d=3, tol=0.01) # ------------------------ # Extract Curve Segments # detach curve eye_crv_detach = cmds.detachCurve(eye_crv[0] + '.u[0.125]', eye_crv[0] + '.u[0.25]', rpo=0, ch=1) eye_crv_detach[0] = cmds.rename(eye_crv_detach[0], prefix + '_pl01_crv') eye_crv_detach[1] = cmds.rename(eye_crv_detach[1], prefix + '_ir01_crv') eye_crv_detach[2] = cmds.rename(eye_crv_detach[2], prefix + '_sc01_crv') eye_crv_detach[3] = cmds.rename(eye_crv_detach[3], prefix + '_cr01_dtc') # rebuild curve segments pupil_rebuild = cmds.rebuildCurve(eye_crv_detach[0], rpo=1, end=1, kep=1, kt=1, kr=0, s=2, d=3, tol=0.01) iris_rebuild = cmds.rebuildCurve(eye_crv_detach[1], rpo=1, end=1, kep=1, kt=1, kr=0, s=2, d=3, tol=0.01) sclera_rebuild = cmds.rebuildCurve(eye_crv_detach[2], rpo=1, end=1, kep=1, kt=1, kr=0, s=4, d=3, tol=0.01) pupil_rebuild[1] = cmds.rename(pupil_rebuild[1], prefix + '_pl01_rbc') iris_rebuild[1] = cmds.rename(iris_rebuild[1], prefix + '_ir01_rbc') sclera_rebuild[1] = cmds.rename(sclera_rebuild[1], prefix + '_sc01_rbc') # ------------------------ # Generate Eye Surfaces # revolve pupil_revolve = cmds.revolve(eye_crv_detach[0], po=0, rn=0, ut=0, tol=0.01, degree=3, s=8, ulp=1, ax=[0, 0, 1]) iris_revolve = cmds.revolve(eye_crv_detach[1], po=0, rn=0, ut=0, tol=0.01, degree=3, s=8, ulp=1, ax=[0, 0, 1]) sclera_revolve = cmds.revolve(eye_crv_detach[2], po=0, rn=0, ut=0, tol=0.01, degree=3, s=8, ulp=1, ax=[0, 0, 1]) # rename surfaces pupil_revolve[0] = cmds.rename(pupil_revolve[0], prefix + '_pl01_srf') pupil_revolve[1] = cmds.rename(pupil_revolve[1], prefix + '_pl01_rvl') iris_revolve[0] = cmds.rename(iris_revolve[0], prefix + '_ir01_srf') iris_revolve[1] = cmds.rename(iris_revolve[1], prefix + '_ir01_rvl') sclera_revolve[0] = cmds.rename(sclera_revolve[0], prefix + '_sc01_srf') sclera_revolve[1] = cmds.rename(sclera_revolve[1], prefix + '_sc01_rvl') # Connect Revolve Pivot cmds.connectAttr(eye_sphere[0] + '.t', pupil_revolve[1] + '.pivot', f=1) cmds.connectAttr(eye_sphere[0] + '.t', iris_revolve[1] + '.pivot', f=1) cmds.connectAttr(eye_sphere[0] + '.t', sclera_revolve[1] + '.pivot', f=1) # ------------------------ # Connect Dilate Control if len(dilate_ctrl): # Verify Control if not cmds.objExists(dilate_ctrl): raise UserInputError('Object ' + dilate_ctrl + ' does not exist!') # Check Attributes Exist if not cmds.objExists(dilate_ctrl + '.iris'): cmds.addAttr(dilate_ctrl, ln='iris', min=0, max=4, dv=1) cmds.setAttr(dilate_ctrl + '.iris', k=1) if not cmds.objExists(dilate_ctrl + '.pupil'): cmds.addAttr(dilate_ctrl, ln='pupil', min=0, max=1, dv=0.5) cmds.setAttr(dilate_ctrl + '.pupil', k=1) # Connect Attributes iris_md = cmds.createNode('multDoubleLinear', n=prefix + '_irs01_mdl') pupil_md = cmds.createNode('multDoubleLinear', n=prefix + '_ppl01_mdl') cmds.connectAttr(dilate_ctrl + '.iris', iris_md + '.input1') cmds.setAttr(iris_md + '.input2', 0.25) cmds.connectAttr(iris_md + '.output', eye_crv_detach[3] + '.parameter[1]') cmds.connectAttr(dilate_ctrl + '.pupil', pupil_md + '.input1') cmds.connectAttr(iris_md + '.output', pupil_md + '.input2') cmds.connectAttr(pupil_md + '.output', eye_crv_detach[3] + '.parameter[0]')
def revolve(*args, **kwargs): res = cmds.revolve(*args, **kwargs) if not kwargs.get('query', kwargs.get('q', False)): res = _factories.maybeConvert(res, _general.PyNode) return res
def createDomeGrid(): import maya.cmds as cmds import maya.mel as mel #--------------------------------------------------------------------------- # Variables #--------------------------------------------------------------------------- #Reference Grid Meshes #domeGridSurface = 'domeGridSurface' domeGridSurface = 'domeGridSurface' domeGridlineSurface = 'domeGridlineSurface' #Set the diameter of the dome shape startingDomeDiameter = 360 #--------------------------------------------------------------------------- # Remove any existing domeGrid elements #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- #Remove old geometry and paint effects nodes #--------------------------------------------------------------------------- if cmds.objExists('domeGrid'): print('Removing existing Domemaster3D object: domeGrid') cmds.select( 'domeGrid', replace=True) cmds.delete() if cmds.objExists('MeshGroup'): print('Removing existing Domemaster3D object: MeshGroup') cmds.select( 'MeshGroup', replace=True) cmds.delete() if cmds.objExists(domeGridSurface): print('Removing existing Domemaster3D object: ' + domeGridSurface) cmds.select( domeGridSurface, replace=True) cmds.delete() if cmds.objExists('domeGridToon'): print('Removing existing Domemaster3D object: domeGridToon') cmds.select( 'domeGridToon', replace=True) cmds.delete() if cmds.objExists('domeGrid_displayModeExpr'): print('Removing existing Domemaster3D object: domeGrid_displayModeExpr') cmds.select( 'domeGrid_displayModeExpr', replace=True) cmds.delete() #-------------------------------------------------------------------------- #Remove old dome Grid surface materials #--------------------------------------------------------------------------- if cmds.objExists('domeGridLinesSurfaceShader'): print('Removing existing Domemaster3D object: domeGridLinesSurfaceShader') cmds.select( 'domeGridLinesSurfaceShader', replace=True) cmds.delete() if cmds.objExists('domeGridLinesSurfaceShaderSG'): print('Removing existing Domemaster3D object: domeGridLinesSurfaceShaderSG') cmds.select( 'domeGridLinesSurfaceShaderSG', replace=True) cmds.delete() if cmds.objExists('domeGridSurfaceShaderSG'): print('Removing existing Domemaster3D object: domeGridSurfaceShaderSG') cmds.select( 'domeGridSurfaceShaderSG', replace=True) cmds.delete() if cmds.objExists('domeGridSurfaceShader'): print('Removing existing Domemaster3D object: domeGridSurfaceShader') cmds.select( 'domeGridSurfaceShader', replace=True) cmds.delete() #-------------------------------------------------------------------------- #Protect any existing surface shaders from the paint effects node #--------------------------------------------------------------------------- if cmds.objExists('surfaceShader1SG'): print('Renaming existing object: surfaceShader1SG') cmds.rename( 'surfaceShader1SG', 'aSurfaceShader1SG' ) if cmds.objExists('surfaceShader1'): print('Renaming existing object: surfaceShader1') cmds.rename( 'surfaceShader1', 'aSurfaceShader1' ) #-------------------------------------------------------------------------- # Make the dome mesh #-------------------------------------------------------------------------- #----------------------------------------------------------------------------- #Create a hybrid NURBS/Polygon Paint effects Toon Surface #----------------------------------------------------------------------------- startingCurveRadius = 1.0 #startingToonThickness = 0.1 #Create the base curve with a 90 degree arc domeRadiusCurveName = cmds.circle(name='domeGridSurfaceCurve', c=(0, 0, 0), nr=(0, 0, 1), sw=90, r=startingCurveRadius, d=3, ut=0, tol=0.01, s=10, ch=1) #Get the curve's shape node name domeCurveShape = getObjectShapeNode(domeRadiusCurveName[0]) #Setup the NURBS to Poly conversion prefs #nurbsToPolygonsPref -q -f; cmds.nurbsToPolygonsPref(format=3, uType=3, uNumber=1, vType=3, vNumber=1) """ #MEL Code to debug NURBS to polygon conversion: int $f = `nurbsToPolygonsPref -q -f`; int $ut = `nurbsToPolygonsPref -q -ut`; int $un = `nurbsToPolygonsPref -q -un`; int $vt = `nurbsToPolygonsPref -q -vt`; int $vn = `nurbsToPolygonsPref -q -vn`; print ($f + " " + $ut + " " + $un+ " " + $vt+ " " + $vn); """ #Revolve the base 90 degree arc curve into a NURBS dome shape domeRadiusSurfaceName = cmds.revolve(domeCurveShape, name='domeGridSurface', ch=1, po=0, rn=0, ssw=0, esw=360, ut=0, tol=0.01, degree=3, s=40, ulp=1, ax=(0, 1, 0), polygon=1) domeSurfaceShape = getObjectShapeNode(domeRadiusSurfaceName[0]); print "\nDome Preview elements:" print domeRadiusSurfaceName print "Dome Preview shape node:" print domeSurfaceShape print "\n" #Find out the preview curve's makeNurbCircle node name makeCurveShapeName = domeCurveShape makeCurveObject = cmds.listConnections( makeCurveShapeName[0]+'.create', type='makeNurbCircle') makeCurveNodeName = makeCurveObject[0] print("The NURBS circle creation node is: ") print(makeCurveNodeName) #----------------------------------------------------------------------------- #Make the NURBS Curve able to be moved without effecting the revolves #----------------------------------------------------------------------------- #Find out the name of the "makeNurbCircle" node that is used to create the domeGridPreviewCurve shape makeRevolveObjects= cmds.listConnections( makeCurveShapeName[0]+'.worldSpace', type='revolve') makeRevolveNodeName = makeRevolveObjects[0]; print("The circle creation node is: ") print(makeRevolveNodeName) #Reconnect the curve to the revolve node using local space #This replaces the curve's previous .worldSpace connection that inhibited the #ability to move the curve without effecting the revolve cmds.connectAttr( makeCurveShapeName[0]+".local", makeRevolveNodeName+".inputCurve", f=True); #Put the domeSurface "PreviewShape" inside the domeGrid group #Have the revolved shape aligned relative to the domeGrid #cmds.parent(domeRadiusSurfaceName[0], domeRadiusTransform) #Parent the NURBS revolve curve to the domeGrid #cmds.parent(domeRadiusCurveName[0], domeRadiusTransform) #Create the base sphere with a 1 unit scale #domeGridName = cmds.polySphere( name=domeGridSurface, radius = 1, subdivisionsX=36, subdivisionsY=20, axis=(0, 1, 0), createUVs=2, constructionHistory=True ) #Chop the polysphere into a hemispherical dome #domeGridTransform = domeGridName[0] #domeGridShape = getObjectShapeNode( domeGridName[0] ) #cmds.select( domeGridTransform+'.f[0:323]', domeGridTransform+'.f[648:683]', replace=True ) #cmds.delete() domeGridTransform = domeRadiusSurfaceName[0]; #Make the curve an intermediate shape cmds.setAttr(domeCurveShape[0]+'.intermediateObject', 1) #Tell the domeGridSurface to move with the domeGrid group node cmds.setAttr(domeGridTransform+'.inheritsTransform', 1) # --------------------------------------------------------------------------- # Create the PaintFX Toon stroke outlines # -------------------------------------------------------------------------- cmds.select( domeGridTransform, replace=True ) #Assign the paint effects toon outlines mel.eval('assignNewPfxToon;') #rename the toon shader domeToonShader = 'domeGridToon' domeToonShaderShape = 'domeGridToonShape' cmds.rename( 'pfxToon1', domeToonShader ) #Define the new toon shader controls cmds.setAttr( domeToonShaderShape+'.profileLines', 0 ) cmds.setAttr( domeToonShaderShape+'.borderLines', 0 ) cmds.setAttr( domeToonShaderShape+'.creaseLineWidth', 15 ) cmds.setAttr( domeToonShaderShape+'.creaseColor', 1, 1, 0, type='double3' ) cmds.setAttr( domeToonShaderShape+'.hardCreasesOnly', 0 ) cmds.setAttr( domeToonShaderShape+'.creaseBreakAngle', 0 ) cmds.setAttr( domeToonShaderShape+'.creaseAngleMin', 0 ) cmds.setAttr( domeToonShaderShape+'.creaseAngleMax', 0 ) cmds.setAttr( domeToonShaderShape+'.meshVertexColorMode', 1 ) cmds.setAttr( domeToonShaderShape+'.meshQuadOutput', 1 ) cmds.setAttr( domeToonShaderShape+'.meshHardEdges', 1 ) #Create a polygon paint effects stroke output cmds.select( domeToonShader, replace=True ); mel.eval('doPaintEffectsToPoly( 1,1,1,1,100000);') #Make a local space mesh connection to fix the grouped node double translation issue #connectAttr -f domeGridToonShape.outMainMesh MainShape.inMesh; #Result: Connected domeGridToonShape.outMainMesh to MainShape.inMesh. // cmds.connectAttr( domeToonShaderShape+'.outMainMesh', 'MainShape.inMesh', force=True) if cmds.objExists('MeshGroup'): print('Unlinking the Toon shader\'s inheritsTransform attribute') cmds.setAttr( 'MeshGroup.inheritsTransform', 0) # -------------------------------------------------------------------------- #Adjust the grid lines shader #--------------------------------------------------------------------------- #domeGridlineShadingGroup = cmds.sets( renderable=True, noSurfaceShader=True, empty=True, name='domeGridLinesSurfaceShaderSG' ) domeGridlineMaterial = 'domeGridLinesSurfaceShader' domeGridlineShadingGroup = 'domeGridLinesSurfaceShaderSG' #Rename the default gridlines shader cmds.rename( 'surfaceShader1', domeGridlineMaterial ) cmds.rename( 'surfaceShader1SG', domeGridlineShadingGroup ) #Standard Yellow Color #cmds.setAttr( 'surfaceShader1.outColor', 1, 1, 0, type='double3') #Super Bright Yellow Color for Physical Sky Compatibility #cmds.setAttr(domeGridlineMaterial+'.outColor', 15, 15, 0, type='double3') cmds.setAttr(domeGridlineMaterial+'.outColor', 1, 1, 0, type='double3') #--------------------------------------------------------------------------- #Adjust the grid surface shader #--------------------------------------------------------------------------- #Create the dome Grid surface shader + shading group domeGridShadingGroup = cmds.sets( renderable=True, noSurfaceShader=True, empty=True, name='domeSurfaceShaderSG' ) domeGridMaterial = cmds.shadingNode( 'surfaceShader', name='domeGridSurfaceShader', asShader=True) #Make the surface shader black cmds.setAttr( domeGridMaterial+'.outColor', 0, 0, 0, type='double3') #Set the polygon surface to be transparent cmds.setAttr( domeGridMaterial+'.outTransparency', 1, 1, 1, type='double3') #Connect the surface shader to the shading group and the polygon surface cmds.connectAttr(domeGridMaterial+'.outColor', domeGridShadingGroup+'.surfaceShader') cmds.select(domeGridSurface) cmds.hyperShade(assign=domeGridShadingGroup) #--------------------------------------------------------------------------- #Group the domeGrid surfaces under a node called "domeGrid" #--------------------------------------------------------------------------- #cmds.group( 'domeGridSurface', 'domeGridToon', 'MeshGroup', name='domeGrid' ) cmds.group( domeRadiusCurveName[0], domeRadiusSurfaceName[0], 'domeGridToon', 'MeshGroup', name='domeGrid' ) #--------------------------------------------------------------------------- # Add Extra Attrs to the domeGrid shape #--------------------------------------------------------------------------- baseNodeName = 'domeGrid' #--------------------------------------------------------------------------- #Add a Field of View control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'fieldOfView' #Check if the attribute exists on the domeGrid node #if(mel.attributeExists(attrName, baseNodeName) == 0): # 180 degree default = 180 # 360 degree default = 360 cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", min=0.1, max=360, defaultValue=360 , keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #--------------------------------------------------------------------------- #Add a Field of View expression #--------------------------------------------------------------------------- #Connect the domeGrid dome radius control to the sphere's makeNurbCircle radius attribute expressionBuilderString = makeCurveNodeName + ".sweep = " + (baseNodeName+'.'+attrName) + "/2;" gridFOVRadiusExpressionName = 'domeGrid_FOVExpr' print "DomeGrid FOV Extra Attribute Expressions:" print expressionBuilderString cmds.expression( name=gridFOVRadiusExpressionName, string=expressionBuilderString, object=baseNodeName, alwaysEvaluate=True, unitConversion=all) #Connect the domeGrid dome radius control to the sphere's makeNurbCircle radius attribute: #cmds.connectAttr( (baseNodeName+'.'+attrName), makeCurveObject[0]+'.sweep', force=True) #--------------------------------------------------------------------------- #Add a dome Radius control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'Dome_Radius' #Check if the attribute exists on the domeGrid node #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", min=0.1, max=1000000, hasSoftMaxValue=True, softMaxValue=360, defaultValue=startingDomeDiameter , keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the domeGrid dome radius control to the sphere's makeNurbCircle radius attribute: cmds.connectAttr( (baseNodeName+'.'+attrName), makeCurveObject[0]+'.radius', force=True) #--------------------------------------------------------------------------- #Add a Dome Height Spans control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'Dome_Spans' #Check if the attribute exists on the domeGrid node #if(mel.attributeExists(attrName, baseNodeName) == 0): # 180 degree dome default value = 12 # 360 degree dome default value = 24 cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", min=4, max=120, hasSoftMaxValue=True, softMaxValue=40, defaultValue=24 , keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the domeGrid dome radius control to the sphere's makeNurbCircle sections attribute: cmds.connectAttr( (baseNodeName+'.'+attrName), makeCurveObject[0]+'.sections', force=True) #--------------------------------------------------------------------------- #Add a Dome Width Sections control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'Dome_Sections' #Check if the attribute exists on the domeGrid node #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", min=4, max=240, hasSoftMaxValue=True, softMaxValue=120, defaultValue=42 , keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the domeGrid dome radius control to the sphere's revolve sections attribute: cmds.connectAttr( (baseNodeName+'.'+attrName), makeRevolveNodeName+'.sections', force=True) #--------------------------------------------------------------------------- #Add a Display Mode control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'displayMode' #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="enum", en="Off:Wireframe:Shaded:Wireframe on Shaded", defaultValue=2, keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #--------------------------------------------------------------------------- #Add a Double Sided Rendering control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'doubleSidedShading' #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="enum", en="Double Sided:Show Frontfaces:Show Backfaces", defaultValue=2, min=0, keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #--------------------------------------------------------------------------- #Add a Grid Line Thickness control to the domeGrid's transform node #--------------------------------------------------------------------------- attrName = 'gridLineThickness' #This is the default starting value for the grid line strokes initialGridLineThickness = 0.05 #previous setting 0.035 #Check if the attribute exists on the domeGrid node #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", min=0.001, max=50, hasSoftMaxValue=True, softMaxValue=2, defaultValue=initialGridLineThickness, keyable=True) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the domeGrid Grid Line Thickness to the toon shader line width attribute: cmds.connectAttr( (baseNodeName+'.'+attrName), domeToonShaderShape+'.lineWidth', force=True) #--------------------------------------------------------------------------- #Add a Grid Line Color control to the domeGrid's transform node - Default color 1,1,0 = Yellow #--------------------------------------------------------------------------- attrName = 'gridLineColor' attrRName = "gridLineColorR"; attrGName = "gridLineColorG"; attrBName = "gridLineColorB"; #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="float3", usedAsColor=True, keyable=True) # Super Bright Yellow Color # cmds.addAttr(baseNodeName, parent=attrName, longName=attrRName, attributeType="float", keyable=True, defaultValue=15) # cmds.addAttr(baseNodeName, parent=attrName, longName=attrGName, attributeType="float", keyable=True, defaultValue=15) # cmds.addAttr(baseNodeName, parent=attrName, longName=attrBName, attributeType="float", keyable=True, defaultValue=0) #Normal Yellow Color cmds.addAttr(baseNodeName, parent=attrName, longName=attrRName, attributeType="float", keyable=True, defaultValue=1) cmds.addAttr(baseNodeName, parent=attrName, longName=attrGName, attributeType="float", keyable=True, defaultValue=1) cmds.addAttr(baseNodeName, parent=attrName, longName=attrBName, attributeType="float", keyable=True, defaultValue=0) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the Grid Line Color swatch to the surface shader cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridlineMaterial+'.outColor', force=True) #--------------------------------------------------------------------------- #Add a Grid Line Transparency control to the domeGrid's transform node - Default value 0.25 #--------------------------------------------------------------------------- attrName = 'gridLineTransparency' cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", keyable=True, defaultValue=0.0, min=0, max=1) #Connect the Grid Line transparency swatch to the surface shader cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridlineMaterial+'.outTransparencyR', force=True) cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridlineMaterial+'.outTransparencyG', force=True) cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridlineMaterial+'.outTransparencyB', force=True) #--------------------------------------------------------------------------- #Add a Grid Surface Color control to the domeGrid's transform node - Default color 0,0,0 = Black #--------------------------------------------------------------------------- attrName = 'gridSurfaceColor' attrRName = "gridSurfaceColorR"; attrGName = "gridSurfaceColorG"; attrBName = "gridSurfaceColorB"; #if(mel.attributeExists(attrName, baseNodeName) == 0): cmds.addAttr(baseNodeName, longName=attrName, attributeType="float3", usedAsColor=True, keyable=True) cmds.addAttr(baseNodeName, parent=attrName, longName=attrRName, attributeType="float", keyable=True, defaultValue=0) cmds.addAttr(baseNodeName, parent=attrName, longName=attrGName, attributeType="float", keyable=True, defaultValue=0) cmds.addAttr(baseNodeName, parent=attrName, longName=attrBName, attributeType="float", keyable=True, defaultValue=0) print('Adding custom Attributes ' + baseNodeName + '.' + attrName) #Connect the Grid Surface Color swatch to the surface shader cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridMaterial+'.outColor', force=True) #--------------------------------------------------------------------------- #Add a Grid Surface Transparency control to the domeGrid's transform node - Default value 0.25 #--------------------------------------------------------------------------- attrName = 'gridSurfaceTransparency' cmds.addAttr(baseNodeName, longName=attrName, attributeType="double", keyable=True, defaultValue=.5, min=0, max=1) #Connect the Grid Surface transparency swatch to the surface shader cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridMaterial+'.outTransparencyR', force=True) cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridMaterial+'.outTransparencyG', force=True) cmds.connectAttr( (baseNodeName+'.'+attrName), domeGridMaterial+'.outTransparencyB', force=True) #--------------------------------------------------------------------------- #Add a display mode expression to the domeGrid's transform node #--------------------------------------------------------------------------- domeRadiusTransform = "domeGrid" domeSurfaceShape = "domeGridSurface" domeSurfaceShapeNode = getObjectShapeNode(domeSurfaceShape) exprName = "" previewAttrName = "displayMode" #The expression name is domeGrid_displayModeExpr exprName = domeRadiusTransform + "_" + previewAttrName + "Expr" PreviewShapeExpr = "" PreviewShapeExpr += "// Custom " + previewAttrName + " Preview Shape Expressions\n\n" PreviewShapeExpr += "if ( " + domeRadiusTransform + "." + previewAttrName + " == 0){\n" PreviewShapeExpr += " //Off Mode\n" PreviewShapeExpr += " " + domeSurfaceShape + ".overrideDisplayType = 2;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideEnabled = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideShading = 0;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".visibility = 0;\n" PreviewShapeExpr += " MeshGroup.visibility = 0;\n" PreviewShapeExpr += "} else if (" + domeRadiusTransform + "." + previewAttrName + " == 1 ){\n" PreviewShapeExpr += " //Wireframe Mode\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideEnabled = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideShading = 0;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".visibility = 1;\n" PreviewShapeExpr += " MeshGroup.visibility = 0;\n" PreviewShapeExpr += "} else if (" + domeRadiusTransform + "." + previewAttrName + " == 2 ){\n" PreviewShapeExpr += " //Shaded Mode\n" PreviewShapeExpr += " string $currentPanel = \"modelPanel4\";\n" PreviewShapeExpr += " if ( `modelEditor -exists currentPanel` )\n" PreviewShapeExpr += " modelEditor -edit -wireframeOnShaded 0 currentPanel;\n" PreviewShapeExpr += " string $currentPanel = \"StereoPanel\";\n" PreviewShapeExpr += " if ( `modelEditor -exists currentPanel` )\n" PreviewShapeExpr += " modelEditor -edit -wireframeOnShaded 0 currentPanel;\n" PreviewShapeExpr += " " + domeSurfaceShape + ".overrideDisplayType = 2;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideEnabled = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideShading = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".visibility = 1;\n" PreviewShapeExpr += " MeshGroup.visibility = 1;\n" PreviewShapeExpr += "} else if (" + domeRadiusTransform + "." + previewAttrName + " == 3 ){\n" PreviewShapeExpr += " //Wireframe on Shaded Mode\n" PreviewShapeExpr += " string $currentPanel = \"modelPanel4\";\n" PreviewShapeExpr += " if ( `modelEditor -exists currentPanel` )\n" PreviewShapeExpr += " modelEditor -edit -wireframeOnShaded 1 currentPanel;\n" PreviewShapeExpr += " string $currentPanel = \"StereoPanel\";\n" PreviewShapeExpr += " if ( `modelEditor -exists currentPanel` )\n" PreviewShapeExpr += " modelEditor -edit -wireframeOnShaded 1 currentPanel;\n" PreviewShapeExpr += " " + domeSurfaceShape + ".overrideDisplayType = 2;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideEnabled = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".overrideShading = 1;\n" PreviewShapeExpr += " " + domeRadiusTransform + ".visibility = 1;\n" PreviewShapeExpr += " MeshGroup.visibility = 1;\n" PreviewShapeExpr += "}\n" PreviewShapeExpr += "\n" PreviewShapeExpr += "\n" #--------------------------------------------------------------------------- #Add a Double Sided Shading expression to the domeGrid's transform node #--------------------------------------------------------------------------- previewAttrName = "doubleSidedShading"; PreviewShapeExpr += "// Custom Double Sided Shading Expressions\n\n" PreviewShapeExpr += "if (" + previewAttrName + " == 0 ){\n" PreviewShapeExpr += " print(\"Double Sided Shading Enabled\\n\");\n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".doubleSided\" 1; \n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".opposite\" 0; \n" PreviewShapeExpr += "} else if (" + previewAttrName + " == 1 ){\n" PreviewShapeExpr += " print(\"Backface Shading Enabled\\n\");\n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".doubleSided\" 0; \n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".opposite\" 0; \n" PreviewShapeExpr += "} else if (" + previewAttrName + " == 2 ){\n" PreviewShapeExpr += " print(\"Frontface Shading Enabled\\n\");\n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".doubleSided\" 0; \n" PreviewShapeExpr += " setAttr \"" + domeSurfaceShape + ".opposite\" 1; \n" PreviewShapeExpr += "}\n" print "DomeGrid Extra Attribute Expressions:" print PreviewShapeExpr cmds.expression( name=exprName, string=PreviewShapeExpr, object='domeGrid', alwaysEvaluate=True, unitConversion=all) #Force a first value into the double sided shading attribute cmds.setAttr( (domeRadiusTransform+".doubleSidedShading"), 0) #--------------------------------------------------------------------------- # Select the domeGrid node in the Attribute Editor #--------------------------------------------------------------------------- mel.eval ( ' showEditorExact("' + domeRadiusTransform + '") ' )
def create(piv=[0,0,0],axis=[0,0,-1],rad=1,dilate_ctrl='',prefix='eyeball'): #------------------------ # Generate Profile Curve # sphere eye_sphere = mc.sphere(p=piv,ax=axis,r=rad,n=prefix+'_history') # curve from sphere eye_crv = mc.duplicateCurve(eye_sphere[0]+'.v[0]') eye_crv[0] = mc.rename(eye_crv[0],prefix+'_pfl01_crv') # rebuild curve 0-1 mc.rebuildCurve(eye_crv[0],rpo=1,end=1,kcp=1,kr=0,d=3,tol=0.01) #------------------------ # Extract Curve Segments # detach curve eye_crv_detach = mc.detachCurve(eye_crv[0]+'.u[0.125]',eye_crv[0]+'.u[0.25]',rpo=0,ch=1) eye_crv_detach[0] = mc.rename(eye_crv_detach[0],prefix+'_pl01_crv') eye_crv_detach[1] = mc.rename(eye_crv_detach[1],prefix+'_ir01_crv') eye_crv_detach[2] = mc.rename(eye_crv_detach[2],prefix+'_sc01_crv') eye_crv_detach[3] = mc.rename(eye_crv_detach[3],prefix+'_cr01_dtc') # rebuild curve segments pupil_rebuild = mc.rebuildCurve(eye_crv_detach[0],rpo=1,end=1,kep=1,kt=1,kr=0,s=2,d=3,tol=0.01) iris_rebuild = mc.rebuildCurve(eye_crv_detach[1],rpo=1,end=1,kep=1,kt=1,kr=0,s=2,d=3,tol=0.01) sclera_rebuild = mc.rebuildCurve(eye_crv_detach[2],rpo=1,end=1,kep=1,kt=1,kr=0,s=4,d=3,tol=0.01) pupil_rebuild[1] = mc.rename(pupil_rebuild[1],prefix+'_pl01_rbc') iris_rebuild[1] = mc.rename(iris_rebuild[1],prefix+'_ir01_rbc') sclera_rebuild[1] = mc.rename(sclera_rebuild[1],prefix+'_sc01_rbc') #------------------------ # Generate Eye Surfaces # revolve pupil_revolve = mc.revolve(eye_crv_detach[0],po=0,rn=0,ut=0,tol=0.01,degree=3,s=8,ulp=1,ax=[0,0,1]) iris_revolve = mc.revolve(eye_crv_detach[1],po=0,rn=0,ut=0,tol=0.01,degree=3,s=8,ulp=1,ax=[0,0,1]) sclera_revolve = mc.revolve(eye_crv_detach[2],po=0,rn=0,ut=0,tol=0.01,degree=3,s=8,ulp=1,ax=[0,0,1]) # rename surfaces pupil_revolve[0] = mc.rename(pupil_revolve[0],prefix+'_pl01_srf') pupil_revolve[1] = mc.rename(pupil_revolve[1],prefix+'_pl01_rvl') iris_revolve[0] = mc.rename(iris_revolve[0],prefix+'_ir01_srf') iris_revolve[1] = mc.rename(iris_revolve[1],prefix+'_ir01_rvl') sclera_revolve[0] = mc.rename(sclera_revolve[0],prefix+'_sc01_srf') sclera_revolve[1] = mc.rename(sclera_revolve[1],prefix+'_sc01_rvl') # Connect Revolve Pivot mc.connectAttr(eye_sphere[0]+'.t',pupil_revolve[1]+'.pivot',f=1) mc.connectAttr(eye_sphere[0]+'.t',iris_revolve[1]+'.pivot',f=1) mc.connectAttr(eye_sphere[0]+'.t',sclera_revolve[1]+'.pivot',f=1) #------------------------ # Connect Dilate Control if len(dilate_ctrl): # Verify Control if not mc.objExists(dilate_ctrl): raise UserInputError('Object ' + dilate_ctrl + ' does not exist!') # Check Attributes Exist if not mc.objExists(dilate_ctrl+'.iris'): mc.addAttr(dilate_ctrl,ln='iris',min=0,max=4,dv=1) mc.setAttr(dilate_ctrl+'.iris',k=1) if not mc.objExists(dilate_ctrl+'.pupil'): mc.addAttr(dilate_ctrl,ln='pupil',min=0,max=1,dv=0.5) mc.setAttr(dilate_ctrl+'.pupil',k=1) # Connect Attributes iris_md = mc.createNode('multDoubleLinear',n=prefix+'_irs01_mdl') pupil_md = mc.createNode('multDoubleLinear',n=prefix+'_ppl01_mdl') mc.connectAttr(dilate_ctrl+'.iris',iris_md+'.input1') mc.setAttr(iris_md+'.input2',0.25) mc.connectAttr(iris_md+'.output',eye_crv_detach[3]+'.parameter[1]') mc.connectAttr(dilate_ctrl+'.pupil',pupil_md+'.input1') mc.connectAttr(iris_md+'.output',pupil_md+'.input2') mc.connectAttr(pupil_md+'.output',eye_crv_detach[3]+'.parameter[0]')
def nurbs_ring(): print "Hello world" ring_diameter = 19 ring_height = 3 ring_thickness = 1 divit_diameter = 1.5 divit_depth = .5 cmds.nurbsSquare( d=2, nr=(1, 0, 0), c=(0, 0, ring_diameter/2 + ring_thickness), sl1=ring_thickness, sl2=ring_height, name='ring', constructionHistory=0 ) cmds.revolve( 'topring', ax=(0, 1, 0), p=(0, 0, 0) ) cmds.revolve( 'bottomring', ax=(0, 1, 0), p=(0, 0, 0) ) cmds.revolve( 'rightring', ax=(0, 1, 0), p=(0, 0, 0) ) cmds.revolve( 'leftring', ax=(0, 1, 0), p=(0, 0, 0) ) cmds.nurbsSquare( d=2, nr=(1, 0, 0), c=(0, 0, 0), sl2=divit_diameter/2, sl1=divit_depth, name='bit', constructionHistory=0 ) cmds.revolve( 'topbit', ax=(0, 0, 1), p=(0, 0, 0) ) cmds.revolve( 'bottombit', ax=(0, 0, 1), p=(0, 0, 0) ) cmds.revolve( 'rightbit', ax=(0, 0, 1), p=(0, 0, 0) ) cmds.revolve( 'leftbit', ax=(0, 0, 1), p=(0, 0, 0) )
def revolve(): #revolve the first (hopefully only) curve made cmds.revolve('curve1', ax=(1, 0, 0), p=(0, 0, 0))