Advertisement
ylSiew

Untitled

Jun 12th, 2014
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.43 KB | None | 0 0
  1.  def createCurveRig( self, selCurve, nameOfRig, align):
  2.         “”“
  3.         This method takes a curve and generates a rig from it
  4.         :param selCurve:
  5.         :return:
  6.         “”“
  7.  
  8.         print(‘Name of rig is: ‘+nameOfRig)
  9.  
  10.  
  11.         # delete all construction history on curve to account for existing clusters
  12.         mc.delete( selCurve, ch=True )
  13.  
  14.         # get position of all points in curve
  15.         curveEPpos = mc.getAttr( selCurve+’.ep[*])
  16.  
  17.         # get number of CPs and EPs in curve
  18.         curveEPindex = len(curveEPpos)
  19.         curveCVindex = mc.getAttr( selCurve+’.cp, size=True )
  20.  
  21.         #curveEPindex = sum(curveEPindex)
  22.  
  23.         print(‘Curve EP positions are at: ‘+ str(curveEPpos)+’\n’ )
  24.         print(‘size of EP array is: ‘+str(curveEPindex) )
  25.  
  26.  
  27.         # make lists for organization
  28.         clsList=[]
  29.         locAnchorList=[]
  30.         jntDefList=[]
  31.         ctrlMicroList=[]
  32.         ctrlMacroList=[]
  33.  
  34.  
  35.         counter=0
  36.         for ep in range(curveEPindex):
  37.  
  38.             print(‘Current EP is: ‘+ str(ep) )
  39.             #posIndex = 1 / (ep+1)
  40.  
  41.             # create point on curve info node
  42.             poci=mc.shadingNode(‘pointOnCurveInfo’, n=’poci_’+nameOfRig+str(counter), asUtility=True )
  43.  
  44.             # create anchor locator
  45.             locCrvAnchor = mc.spaceLocator( n=’loc_crvAnchor_’+nameOfRig+str(counter) )[0]
  46.             # hide locator shape
  47.             mc.setAttr( locCrvAnchor+’Shape.visibility, 0 )
  48.             locAnchorList.append(locCrvAnchor)
  49.  
  50.             # define value to place along curve
  51.             paramU=ep
  52.  
  53.             # connect poci nodes
  54.             mc.connectAttr( selCurve+’.worldSpace, poci+’.inputCurve, force=True )
  55.             mc.connectAttr( poci+’.position, locCrvAnchor+’.translate, force=True )
  56.             mc.setAttr( poci+’.parameter, paramU )
  57.  
  58.             # check for align
  59.             if align == True:
  60.                 mc.tangentConstraint( selCurve, locCrvAnchor, weight=1, aimVector=(1,0,0),
  61.                                       upVector=(0,1,0), worldUpType=’vector’, worldUpVector=(0,1,0) )
  62.  
  63.  
  64.             # now create offset empty groups for attaching joints to
  65.  
  66.             #pos = mc.xform( locCrvAnchor, q=True, t=True, ws=True )
  67.             #rot = mc.xform( locCrvAnchor, q=True, ro=True, ws=True )
  68.  
  69.             grpOffset = mc.group( n=’grpFrzLoc_’+nameOfRig+str(counter), em=True )
  70.  
  71.             # create intermediate group for SDK driver possibilities
  72.             grpSDKOffset = mc.group( n=’grpSDKLoc_’+nameOfRig+str(counter), em=True )
  73.  
  74.             # parent offset under anchor locator
  75.             mc.parent( grpOffset, locCrvAnchor, r=True )
  76.  
  77.             # parent SDK offset under grpOffset
  78.             mc.parent( grpSDKOffset, grpOffset, r=True )
  79.  
  80.             # now create micro control for each joint
  81.             ctrlMicro = mc.circle(n=’ctrl_micro_’+nameOfRig+str(counter), d=3, r=2, ch=False )
  82.             mc.setAttr( ctrlMicro[0]+’Shape.overrideEnabled, 1 )
  83.             mc.setAttr( ctrlMicro[0]+’Shape.overrideColor, 18 )
  84.  
  85.             mc.parent( ctrlMicro, grpSDKOffset, r=True )
  86.             ctrlMicroList.append(ctrlMicro)
  87.  
  88.  
  89.             # now create joints to parent under ctrl
  90.             jntDef = mc.joint( n=’jntDef_’+nameOfRig+str(counter) )
  91.             jntDefList.append(jntDef)
  92.             #mc.parent( jntDef, grpSDKOffset, r=True )
  93.  
  94.                 # set control rig joints to be larger and invisible
  95.                 mc.setAttr( jntDef+’.radius, 3 )
  96.                 mc.setAttr( jntDef+’.drawStyle, 2 )
  97.  
  98.             counter+=1
  99.  
  100.  
  101.         counter=0
  102.         for cv in range(curveCVindex):
  103.  
  104.             # create cluster curve
  105.             cls = mc.cluster({0}.cv[{1}]’.format( selCurve, cv ), rel=True,
  106.                               n=’cls_’+nameOfRig+str(counter) )
  107.             # append shape node of cls instead of transform handle
  108.             clsList.append(cls[1])
  109.  
  110.             # get cls position
  111.             posMacro = mc.xform(cls[1], q=True, rp=True, ws=True)
  112.  
  113.             # now create Macro ctrl for every other cluster and skip first cluster
  114.             if (counter !=0) and (counter % 2 == 0):
  115.  
  116.                 # create empty intermediate grp for macro ctrl
  117.                 grpOffsetMacro=mc.group( n=’grpFrzMacroCtrl_’+nameOfRig+str(counter), em=True )
  118.                 mc.xform( grpOffsetMacro, t=posMacro, ws=True )
  119.  
  120.                 # check for align
  121.                 if align==True:
  122.                     print(‘Aligning controls to curve!!! \n’)
  123.  
  124.                     tmpTc=mc.tangentConstraint( selCurve, grpOffsetMacro, weight=1, aimVector=(1,0,0),
  125.                                                 upVector=(0,1,0), worldUpType=’vector’, worldUpVector=(0,1,0) )
  126.  
  127.                     mc.delete(tmpTc)
  128.  
  129.  
  130.                 # create macro ctrl shape
  131.                 ctrlMacro = mc.circle( n=’ctrl_macro_’+nameOfRig+str(counter), d=3, r=5, ch=False )
  132.                 mc.setAttr( ctrlMacro[0]+’Shape.overrideEnabled, 1 )
  133.                 mc.setAttr( ctrlMacro[0]+’Shape.overrideColor, 13 )
  134.  
  135.                 mc.parent( ctrlMacro, grpOffsetMacro, r=True )
  136.                 # mc.xform( ctrlMacro, t=posMacro, ws=True )
  137.                 ctrlMacroList.append(grpOffsetMacro)
  138.  
  139.                 # constrain cluster to macro control
  140.                 mc.parentConstraint( ctrlMacro, cls[1], mo=True )
  141.  
  142.  
  143.             counter+=1
  144.  
  145.  
  146.         print(‘Cluster Curve created for: ‘+str(selCurve) +’\n’ )
  147.  
  148.         # set curve display to template
  149.         selCurveShape = mc.listRelatives( selCurve, ad=True, s=True )[0]
  150.         mc.setAttr( selCurveShape+’.template, 1 )
  151.         mc.setAttr( selCurveShape+’.visibility, 0 )
  152.  
  153.  
  154.         # make organizational groups and set visibility of unneeded groups
  155.         grpCls=mc.group( clsList, n=’grpCls_’+nameOfRig )
  156.         mc.setAttr( grpCls+’.visibility, 0 )
  157.  
  158.         grpLoc=mc.group( locAnchorList, n=’grpCtrlMicro_’+nameOfRig )
  159.  
  160.  
  161.         grpMacroCtrls = mc.group( ctrlMacroList, n=’grpCtrlMacro_’+nameOfRig )
  162.  
  163.         # put everything in one big group
  164.         finalGrp = [ grpCls, grpLoc, grpMacroCtrls, selCurve ]
  165.         mc.group( finalGrp, n=’grpRig_’+nameOfRig )
  166.         # mc.parent( selCurve, finalGrp, r=True )
  167.  
  168.         # rename original curve
  169.         mc.rename( selCurve, ‘crvShaper_’+selCurve )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement