Exemplo n.º 1
0
    def eyeCtlSet(self):
        self.eyeLCtl = rigbase.Controler(n='EyeAim_L_CTL')
        self.eyeRCtl = rigbase.Controler(n='EyeAim_R_CTL')
        self.eyeCtl = rigbase.Controler(n='Eye_CTL')
        self.eyeLCtl.setShape(normal=[0, 0, 1], radius=.2)
        self.eyeRCtl.setShape(normal=[0, 0, 1], radius=.2)
        self.eyeCtl.setShape(normal=[0, 0, 1], radius=1)

        self.eyeLCtl.setParent(self.eyeCtl)
        self.eyeRCtl.setParent(self.eyeCtl)
        self.eyeCtl.setParent(self.headCtl)

        self.eyeLCtl.setColor(13)
        self.eyeRCtl.setColor(6)
        self.eyeCtl.setColor(23)

        attrEdit = rigbase.AttrEdit(self.eyeLCtl.name, self.eyeRCtl.name)
        attrEdit.lockAndHideAttrs('rx', 'ry', 'rz', 'sx', 'sy', 'sz', 'v')

        attrEdit = rigbase.AttrEdit(self.eyeCtl.name)
        attrEdit.lockAndHideAttrs('sx', 'sy', 'sz', 'v')
        rigbase.addHelpTx(self.eyeCtl.name, 'Follow')
        attrEdit.addAttr(ln='chestFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='rootFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='flyFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='moveFollow', min=0, max=10)
Exemplo n.º 2
0
 def eyeCtlSet(self):
     self.eyeLCtl = rigbase.Controler( n='EyeAim_L_CTL' )
     self.eyeRCtl = rigbase.Controler( n='EyeAim_R_CTL' )
     self.eyeCtl  = rigbase.Controler( n='Eye_CTL' )
     self.eyeLCtl.setShape( normal=[0,0,1], radius =.2 )
     self.eyeRCtl.setShape( normal=[0,0,1], radius =.2 )
     self.eyeCtl.setShape(  normal=[0,0,1], radius = 1 )
     
     self.eyeLCtl.setParent( self.eyeCtl )
     self.eyeRCtl.setParent( self.eyeCtl )
     self.eyeCtl.setParent( self.headCtl )
     
     self.eyeLCtl.setColor( 13 )
     self.eyeRCtl.setColor( 6 )
     self.eyeCtl.setColor( 23 )
     
     attrEdit = rigbase.AttrEdit( self.eyeLCtl.name, self.eyeRCtl.name )
     attrEdit.lockAndHideAttrs( 'rx','ry','rz','sx','sy','sz','v' )
     
     attrEdit = rigbase.AttrEdit( self.eyeCtl.name )
     attrEdit.lockAndHideAttrs( 'sx','sy','sz','v' )
     rigbase.addHelpTx( self.eyeCtl.name, 'Follow' )
     attrEdit.addAttr( ln='chestFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='rootFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='flyFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='moveFollow', min=0, max=10 )
Exemplo n.º 3
0
 def twistAttrSet(self, side ):
     if side == 'L':
         targetCtl = self.shoulderLCtl
     elif side == 'R':
         targetCtl = self.shoulderRCtl
     
     rigbase.addHelpTx( targetCtl, 'Twist' )
     attrEdit = rigbase.AttrEdit( targetCtl )
     attrEdit.addAttr( ln='twistCollar', k=1 )
     attrEdit.addAttr( ln='twistShoulder', k=1 )
Exemplo n.º 4
0
 def headCtlSet(self):
     self.headCtl = rigbase.Controler( n='Head_CTL' )
     self.headCtl.setShape( normal=[0,0,1], radius=1.2, center = [0,.8,0] )
     self.headCtl.setColor( 30 )
     
     attrEdit = rigbase.AttrEdit( self.headCtl.name )
     rigbase.addHelpTx( self.headCtl.name, 'Follow' )
     attrEdit.lockAndHideAttrs( 'sx','sy','sz','v' )
     attrEdit.addAttr( ln='neckFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='chestFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='rootFollow', min=0, max=10 )
     attrEdit.addAttr( ln='flyFollow', min=0, max=10, k=1 )
     attrEdit.addAttr( ln='moveFollow', min=0, max=10 )
     rigbase.addHelpTx( self.headCtl.name, 'MiddleNeckVis' )
     attrEdit.addAttr( ln='middleNeckVis', min=0, max=1, at='long', cb=1 )
Exemplo n.º 5
0
    def headCtlSet(self):
        self.headCtl = rigbase.Controler(n='Head_CTL')
        self.headCtl.setShape(normal=[0, 0, 1], radius=1.2, center=[0, .8, 0])
        self.headCtl.setColor(30)

        attrEdit = rigbase.AttrEdit(self.headCtl.name)
        rigbase.addHelpTx(self.headCtl.name, 'Follow')
        attrEdit.lockAndHideAttrs('sx', 'sy', 'sz', 'v')
        attrEdit.addAttr(ln='neckFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='chestFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='rootFollow', min=0, max=10)
        attrEdit.addAttr(ln='flyFollow', min=0, max=10, k=1)
        attrEdit.addAttr(ln='moveFollow', min=0, max=10)
        rigbase.addHelpTx(self.headCtl.name, 'MiddleNeckVis')
        attrEdit.addAttr(ln='middleNeckVis', min=0, max=1, at='long', cb=1)
Exemplo n.º 6
0
 def splineSquashSet(self):
     crvInfo = cmds.createNode( 'curveInfo', n=self.epBindNode_after+'_info' )
     initCrvInfo = cmds.createNode( 'curveInfo', n=self.epBindNode_before+'_info' )
     
     cmds.connectAttr( self.epBindNode_after+'.outputCurve', crvInfo+'.inputCurve' )
     cmds.connectAttr( self.epBindNode_before+'.outputCurve', initCrvInfo+'.inputCurve' )
     
     squashNode = cmds.createNode( 'squash', n='Torso_squash' )
     cmds.connectAttr( initCrvInfo+'.arcLength', squashNode+'.lengthOriginal' )
     cmds.connectAttr( crvInfo+'.arcLength', squashNode+'.lengthModify' )
     
     rigbase.addHelpTx( self.chestCtl, 'Squash' )
     attrEdit = rigbase.AttrEdit( self.chestCtl )
     attrEdit.addAttr( ln='squash', min=-1, max=1, k=1 )
     attrEdit.addAttr( ln='forceScale', k=1 )
     
     cmds.connectAttr( self.chestCtl+'.squash', squashNode+'.squashRate' )
     cmds.connectAttr( self.chestCtl+'.forceScale', squashNode+'.forceValue' )
     
     for splineJnt in self.splineJnts[1:-1]:
         cmds.connectAttr( squashNode+'.output', splineJnt+'.sx' )
         cmds.connectAttr( squashNode+'.output', splineJnt+'.sy' )
         cmds.connectAttr( squashNode+'.output', splineJnt+'.sz' )
Exemplo n.º 7
0
 def hipConstSet(self):
     hipLConst_inFly = cmds.createNode( 'transform', n='Hip_L_Const_inFly' )
     hipRConst_inFly = cmds.createNode( 'transform', n='Hip_R_Const_inFly' )
     hipLConst_inRoot = cmds.createNode( 'transform', n='Hip_L_Const_inRoot' )
     hipRConst_inRoot = cmds.createNode( 'transform', n='Hip_R_Const_inRoot' )
     hipLConst_inHip = cmds.createNode( 'transform', n='Hip_L_Const_inHip' )
     hipRConst_inHip = cmds.createNode( 'transform', n='Hip_R_Const_inHip' )
     hipLConst = cmds.createNode( 'transform', n='Hip_L_Const' )
     hipRConst = cmds.createNode( 'transform', n='Hip_R_Const' )
     
     cmds.parent( hipLConst_inFly, hipRConst_inFly, self.rootCtlGrp )
     cmds.parent( hipLConst_inRoot, hipRConst_inRoot, self.rootGrp )
     cmds.parent( hipLConst, hipRConst, hipLConst_inHip, hipRConst_inHip, self.hipCtl )
     
     rigbase.connectSameAttr( self.hipLInit, hipLConst_inFly ).doIt( 't','r' )
     rigbase.connectSameAttr( self.hipRInit, hipRConst_inFly ).doIt( 't','r' )
     
     rigbase.connectSameAttr( self.hipLInit, hipLConst_inRoot ).doIt( 't' )
     rigbase.connectSameAttr( self.hipRInit, hipRConst_inRoot ).doIt( 't' )
     
     rigbase.constraint( hipLConst_inFly, hipLConst_inRoot, t=0 )
     rigbase.constraint( hipRConst_inFly, hipRConst_inRoot, t=0 )
     
     rigbase.connectSameAttr( self.hipLInit, hipLConst_inHip ).doIt( 't','r' )
     rigbase.connectSameAttr( self.hipRInit, hipRConst_inHip ).doIt( 't','r' )
     
     #cmds.setAttr( hipLConst_inHip+'.rz', -90 )
     #cmds.setAttr( hipLConst_inRoot+'.rz', -90 )
     
     #cmds.setAttr( hipRConst_inHip+'.rx', 180 )
     #cmds.setAttr( hipRConst_inHip+'.rz', 90 )
     #cmds.setAttr( hipRConst_inRoot+'.rx', 180 )
     #cmds.setAttr( hipRConst_inRoot+'.rz', 90 )
     
     blendMtxL = cmds.createNode( 'blendTwoMatrix', n='Hip_L_Const_blendMtx' )
     blendMtxR = cmds.createNode( 'blendTwoMatrix', n='Hip_R_Const_blendMtx' )
     
     multMtxDcmpL = cmds.createNode( 'multMatrixDecompose', n='Hip_L_Const_MtxDcmp' )
     multMtxDcmpR = cmds.createNode( 'multMatrixDecompose', n='Hip_R_Const_MtxDcmp' )
     
     cmds.connectAttr( hipLConst_inRoot+'.wm', blendMtxL+'.inMatrix1' )
     cmds.connectAttr( hipRConst_inRoot+'.wm', blendMtxR+'.inMatrix1' )
     cmds.connectAttr( hipLConst_inHip+'.wm', blendMtxL+'.inMatrix2' )
     cmds.connectAttr( hipRConst_inHip+'.wm', blendMtxR+'.inMatrix2' )
     
     cmds.connectAttr( blendMtxL+'.outMatrix', multMtxDcmpL+'.i[0]' )
     cmds.connectAttr( blendMtxR+'.outMatrix', multMtxDcmpR+'.i[0]' )
     
     cmds.connectAttr( hipLConst+'.pim', multMtxDcmpL+'.i[1]' )
     cmds.connectAttr( hipRConst+'.pim', multMtxDcmpR+'.i[1]' )
     
     cmds.connectAttr( hipLConst_inHip+'.t', hipLConst+'.t' )
     cmds.connectAttr( hipRConst_inHip+'.t', hipRConst+'.t' )
     cmds.connectAttr( multMtxDcmpL+'.or', hipLConst+'.r' )
     cmds.connectAttr( multMtxDcmpR+'.or', hipRConst+'.r' )
     
     rigbase.addHelpTx( self.hipCtl, 'Options' )
     attrEdit = rigbase.AttrEdit( self.hipCtl )
     attrEdit.addAttr( ln='legFollowL', min=0, max=1, k=1 )
     attrEdit.addAttr( ln='legFollowR', min=0, max=1, k=1 )
     
     cmds.connectAttr( self.hipCtl+'.legFollowL', blendMtxL+'.attributeBlender' )
     cmds.connectAttr( self.hipCtl+'.legFollowR', blendMtxR+'.attributeBlender' )
     
     self.rigInstance.hipLConst_inRoot = hipLConst_inRoot
     self.rigInstance.hipRConst_inRoot = hipRConst_inRoot
     self.rigInstance.hipLConst_inHip = hipLConst_inHip
     self.rigInstance.hipRConst_inHip = hipRConst_inHip
     self.rigInstance.hipLConstInFly = hipLConst_inFly
     self.rigInstance.hipRConstInFly = hipRConst_inFly
     self.hipLConst = hipLConst
     self.hipRConst = hipRConst
Exemplo n.º 8
0
 def collarConstSet(self, side ):
     si = 0
     if side == 'R':
         si = 1
     
     shoulderInitList = [self.shoulderLInit, self.shoulderRInit ]
     shoulderCtlList = [self.shoulderLCtl,self.shoulderRCtl]
     collarCtlList = [self.collarLCtl, self.collarRCtl]
     
     const    = cmds.createNode( 'transform', n='Shoulder_%s_Const'          % side )
     inCollar = cmds.createNode( 'transform', n='Shoulder_%s_Const_inCollar' % side )
     inChest  = cmds.createNode( 'transform', n='Shoulder_%s_Const_inChest'  % side )
     inRoot   = cmds.createNode( 'transform', n='Shoulder_%s_Const_inRoot'   % side )
     inFly    = cmds.createNode( 'transform', n='Shoulder_%s_Const_inFly'    % side )
     inMove    = cmds.createNode( 'transform', n='Shoulder_%s_Const_inMove'   % side )
     
     cmds.parent( const   , shoulderCtlList[si] )
     cmds.parent( inCollar, collarCtlList[si]   )
     cmds.parent( inChest , self.chestCtl.replace( 'Chest', 'ChestMove' ) )
     cmds.parent( inRoot  , self.rootGrp  )
     cmds.parent( inFly   , self.rootCtlGrp )
     cmds.parent( inMove  , self.rigInstance.moveCtl )
     
     rigbase.transformDefault( const )#; cmds.setAttr( const+'.dla', 1 )
     rigbase.connectSameAttr( shoulderInitList[si], inCollar ).doIt( 't', 'r' )
     chestDcmp = rigbase.getChildMtxDcmp( shoulderInitList[si], self.chestInit )
     cmds.connectAttr( chestDcmp+'.ot', inChest+'.t' )
     cmds.connectAttr( chestDcmp+'.or', inChest+'.r' )
     rootDcmp = rigbase.getChildMtxDcmp( shoulderInitList[si], self.rootInit )
     cmds.connectAttr( rootDcmp+'.ot', inRoot+'.t' )
     cmds.connectAttr( rootDcmp+'.or', inRoot+'.r' )
     cmds.connectAttr( rootDcmp+'.ot', inFly+'.t' )
     cmds.connectAttr( rootDcmp+'.or', inFly+'.r' )
     cmds.connectAttr( rootDcmp+'.ot', inMove+'.t' )
     cmds.connectAttr( rootDcmp+'.or', inMove+'.r' )
     
     followMtx = cmds.createNode( 'followMatrix', n='Shoulder_%s_ConstFollow' % side )
     mtxDcmp   = cmds.createNode( 'multMatrixDecompose', n='Shoulder_%s_ConstMtxDcmp' % side )
     
     cmds.connectAttr( inCollar+'.wm', followMtx+'.originalMatrix' )
     cmds.connectAttr( inChest +'.wm', followMtx+'.inputMatrix[0]' )
     cmds.connectAttr( inRoot  +'.wm', followMtx+'.inputMatrix[1]' )
     cmds.connectAttr( inFly   +'.wm', followMtx+'.inputMatrix[2]' )
     cmds.connectAttr( inMove  +'.wm', followMtx+'.inputMatrix[3]' )
     
     cmds.connectAttr( followMtx+'.outputMatrix', mtxDcmp+'.i[0]' )
     cmds.connectAttr( const +'.pim', mtxDcmp+'.i[1]' )
     cmds.connectAttr( mtxDcmp+'.or', const+'.r' )
     
     rigbase.addHelpTx( collarCtlList[si], 'Follow' )
     attrEdit = rigbase.AttrEdit( collarCtlList[si] )
     attrEdit.addAttr( ln='chestFollow', min=0, max=10 )
     attrEdit.addAttr( ln='rootFollow' , min=0, max=10 )
     attrEdit.addAttr( ln='flyFollow'  , min=0, max=10, k=1 )
     attrEdit.addAttr( ln='moveFollow'  , min=0, max=10 )
     
     cmds.connectAttr( collarCtlList[si]+'.chestFollow', followMtx+'.inputWeight[0]' )
     cmds.connectAttr( collarCtlList[si]+'.rootFollow' , followMtx+'.inputWeight[1]' )
     cmds.connectAttr( collarCtlList[si]+'.flyFollow'  , followMtx+'.inputWeight[2]' )
     cmds.connectAttr( collarCtlList[si]+'.moveFollow' , followMtx+'.inputWeight[3]' )
     
     if side == 'L':
         self.shoulderLConst = const
         self.rigInstance.ikGroupLConst = inChest
     else:
         self.shoulderRConst = const
         self.rigInstance.ikGroupRConst = inChest
Exemplo n.º 9
0
 def splineJointSet( self, splineNumber ):
     self.splineJnts = []
     cmds.select( d=1 )
     
     self._splineJointUpObjectSet()
                                     
     spci = cmds.createNode( 'splineCurveInfo', n= self.initCrv+'_Spci'  )
     cmds.connectAttr( self.initCrvShape+'.local', spci+'.inputCurve' )
     #cmds.connectAttr( self.startUp+'.wm', spci+'.startTransform' )
     #cmds.connectAttr( self.endUp  +'.wm', spci+'.endTransform'   )
     
     cmds.setAttr( spci+'.startUpAxis', 2 )
     cmds.setAttr( spci+'.endUpAxis', 2 )
     cmds.setAttr( spci+'.targetAimAxis', 1 )
     cmds.setAttr( spci+'.targetUpAxis', 2 )
     
     for i in range( splineNumber ):
         self.splineJnts.append( cmds.joint( n='Spline%d_RJT' % i, radius=1.5 ) )
     
     pointObjs = []
     for i in range( 0, splineNumber ):
         pr = float(i)/(splineNumber-1)
         
         pointObj = cmds.createNode( 'transform', n='Spline%d_SplinePoint' % i )
         pointObjs.append( pointObj )
         
         cmds.addAttr( self.splineJnts[i], ln='parameter', min=0, max=1, dv=pr )
         cmds.setAttr( self.splineJnts[i]+'.parameter', e=1, k=1 )
         
         cmds.connectAttr( self.splineJnts[i]+'.parameter', spci+'.pr[%d]' % i )
         cmds.connectAttr( spci+'.o[%d].p' % i, pointObj+'.t' )
         cmds.connectAttr( spci+'.o[%d].r' % i, pointObj+'.r' )
         cmds.parent( pointObj, self.initCrv )
         
         rigbase.constraint( pointObj, self.splineJnts[i] )
         
     pointHObjs = []
     cmds.select( self.torsoCtl )
     for i in range( 0, splineNumber ):
         pointHObjs.append( cmds.joint( n=pointObjs[i].replace( 'SplinePoint', 'SplineHJnt' ) ) )
         mtxDcmp = rigbase.constraint( pointObjs[i], pointHObjs[i], r=0 )
         cmds.connectAttr( mtxDcmp+'.or', pointHObjs[i]+'.jo' )
         if i == 0:
             cmds.connectAttr( self.rootGrp+'.wim', mtxDcmp+'.i[1]', f=1 )
         else:
             cmds.connectAttr( pointObjs[i-1]+'.wim', mtxDcmp+'.i[1]', f=1 )
         cmds.select( pointHObjs[i] )
     cmds.setAttr( pointHObjs[0]+'.v', 0 )
     rigbase.constraint( pointHObjs[-1], self.chestCtlGrp, r=0 )
         
     epBindNode = cmds.createNode( 'epBindNode', n='Torso_epBindNode' )
     initEpBindNode = cmds.createNode( 'epBindNode', n='TorsoInit_epBindNode' )
     chestOrPointer = cmds.createNode( 'transform', n='Chest_OrPointer' )
     hipCuPointer = cmds.createNode( 'transform', n='Hip_CuPointer' )
     
     cmds.parent( chestOrPointer, self.chestCtlGrp )
     cmds.parent( hipCuPointer, self.hipCtlGrp )
     
     rigbase.transformDefault( chestOrPointer )
     
     cmds.connectAttr( self.chestCtl+'.r', chestOrPointer+'.r' )
     cmds.connectAttr( self.hipCtl+'.t', hipCuPointer+'.t' )
     
     cmds.connectAttr( self.hipCtlGrp+'.wm', epBindNode+'.om[0]' )
     cmds.connectAttr( chestOrPointer+'.wm', epBindNode+'.om[1]')
     cmds.connectAttr( hipCuPointer+'.wm', epBindNode+'.m[0]' )
     cmds.connectAttr( self.chestCtl+'.wm', epBindNode+'.m[1]' )
     
     for i in range( splineNumber ):
         dcmp = cmds.createNode( 'decomposeMatrix' , n=pointHObjs[i]+'_dcmp' )
         cmds.connectAttr( pointHObjs[i]+'.wm', dcmp+'.imat' )
         cmds.connectAttr( dcmp+'.ot', epBindNode+'.ip[%d]' % i )
         cmds.connectAttr( dcmp+'.ot', initEpBindNode+'.ip[%d]' % i )
     
     smOri = cmds.createNode( 'smartOrient', n='Torso_Spline_SmOri' )
     cmds.connectAttr( self.chestCtl+'.m', smOri+'.inputMatrix' )
     cmds.setAttr( smOri+'.aimAxis', 1 )
     for i in range( 1, splineNumber-1 ):
         cmds.addAttr( self.chestCtl, ln='rotRate%d' % i, min=0, max=1, dv=.333 )
         splineOrientMult = cmds.createNode( 'multiplyDivide', n='Torso_Spline_OrientMult%d' % i )
         cmds.connectAttr( smOri+'.outAngle', splineOrientMult+'.input1' )
         cmds.connectAttr( self.chestCtl+'.rotRate%d' % i, splineOrientMult+'.input2X' )
         cmds.connectAttr( self.chestCtl+'.rotRate%d' % i, splineOrientMult+'.input2Y' )
         cmds.connectAttr( self.chestCtl+'.rotRate%d' % i, splineOrientMult+'.input2Z' ) 
         cmds.connectAttr( splineOrientMult+'.output',  pointHObjs[i]+'.r' )
     
     '''
     firstCrv = cmds.circle( ch=0, n='Torso_FristCrv' )[0]
     firstCrvShape = cmds.listRelatives( firstCrv, s=1 )[0]
     cmds.connectAttr( epBindNode+'.outputCurve', firstCrvShape+'.create' )
     cmds.parent( firstCrv, self.rootGrp )
     firstCrv_dcmp = cmds.createNode( 'decomposeMatrix', n='Torso_firstCrv_invDcmp' )
     cmds.connectAttr( firstCrv+'.pim', firstCrv_dcmp+'.imat' )
     cmds.connectAttr( firstCrv_dcmp+'.ot', firstCrv+'.t' )
     cmds.connectAttr( firstCrv_dcmp+'.or', firstCrv+'.r' )
     cmds.connectAttr( firstCrv_dcmp+'.os', firstCrv+'.s' )
     cmds.connectAttr( firstCrv_dcmp+'.osh', firstCrv+'.sh' )'''
     
     def curveBasedCtlGrp( outputCurveAttr, ctlGrp, prRate=0.5 ):
         posInfo = cmds.createNode( 'pointOnCurveInfo', n='Waist_Ct;PoseInfo' )
         fbf = cmds.createNode( 'fourByFourMatrix', n='Waist_CtlFBF' )
         smOri = cmds.createNode( 'smartOrient', n='Waist_CtlSmOri' )
         compose = cmds.createNode( 'composeMatrix', n='Waist_CtlComp' )
         mtxDcmp = cmds.createNode( 'multMatrixDecompose', n='Waist_CtlMtxDcmp' )
         
         cmds.setAttr( posInfo+'.top', 1 )
         cmds.setAttr( posInfo+'.parameter', prRate )
         cmds.setAttr( smOri+'.aimAxis', 1 )
         
         cmds.connectAttr( outputCurveAttr, posInfo+'.inputCurve' )
         cmds.connectAttr( posInfo+'.tangentX', fbf+'.in10' )
         cmds.connectAttr( posInfo+'.tangentY', fbf+'.in11' )
         cmds.connectAttr( posInfo+'.tangentZ', fbf+'.in12' )
         cmds.connectAttr( fbf+'.output', smOri+'.inputMatrix' )
         cmds.connectAttr( posInfo+'.position', compose+'.it' )
         cmds.connectAttr( smOri+'.outAngle', compose+'.ir')
         cmds.connectAttr( compose+'.outputMatrix', mtxDcmp+'.i[0]' )
         cmds.connectAttr( ctlGrp+'.pim', mtxDcmp+'.i[1]' )
         cmds.connectAttr( mtxDcmp+'.ot', ctlGrp+'.t' )
         cmds.connectAttr( mtxDcmp+'.or', ctlGrp+'.r' )
     
     curveBasedCtlGrp( epBindNode+'.outputCurve', self.waistCtlGrp, prRate=0.5 )
     
     chestCuPointer = cmds.createNode( 'transform', n='ChestCuPointer' )
     cmds.parent( chestCuPointer, self.chestMoveCtlGrp )
     
     cmds.connectAttr( self.chestMoveCtl+'.t', chestCuPointer+'.t' )
     rigbase.transformDefault( chestCuPointer )
     
     epBindNode2 = cmds.createNode( 'epBindNode', n='Torso_epBindNode2' )
     
     for i in range( splineNumber ):
         cmds.connectAttr( epBindNode+'.op[%d]' % i, epBindNode2+'.ip[%d]' % i )
         
     waistOrientObj = cmds.createNode( 'transform', n='WaistOrient_OBJ' )
     cmds.parent( waistOrientObj, self.waistCtlGrp )
     rigbase.transformDefault( waistOrientObj )
     waistSmOrient = cmds.createNode( 'smartOrient', n='WaistOrient_ObjSmOrient' )
     cmds.connectAttr( self.waistCtl+'.m', waistSmOrient+'.inputMatrix' )
     cmds.setAttr( waistSmOrient+'.aimAxis', 1 )
     cmds.connectAttr( waistSmOrient+'.outAngle', waistOrientObj+'.r' )
     cmds.connectAttr( self.waistCtl+'.t', waistOrientObj+'.t' )
     
     cmds.connectAttr( hipCuPointer+'.wm', epBindNode2+'.m[0]' )
     cmds.connectAttr( hipCuPointer+'.wm', epBindNode2+'.om[0]' )
     cmds.connectAttr( waistOrientObj+'.wm', epBindNode2+'.m[1]' )
     cmds.connectAttr( self.waistCtlGrp+'.wm', epBindNode2+'.om[1]' )
     cmds.connectAttr( chestCuPointer+'.wm', epBindNode2+'.m[2]' )
     cmds.connectAttr( self.chestMoveCtlGrp+'.wm', epBindNode2+'.om[2]' )
     
     cuSpInfo = cmds.createNode( 'splineCurveInfo' , n='Torso_CurrentSplineInfo' )
     
     cmds.setAttr( cuSpInfo+'.paramFromLength', 0 )
     cmds.setAttr( cuSpInfo+'.startUpAxis', 2 )
     cmds.setAttr( cuSpInfo+'.endUpAxis', 2 )
     cmds.setAttr( cuSpInfo+'.targetAimAxis', 1 )
     cmds.setAttr( cuSpInfo+'.targetUpAxis', 2 )
     
     putCtls = []
     
     rigbase.addHelpTx( self.waistCtl, 'Itp CTL Vis' )
     rigbase.AttrEdit( self.waistCtl ).addAttr( ln='show', cb=1, min=0, max=1, at='long' )
     
     for i in range( 1, splineNumber-1 ):
         putCtl, putCtlGrp = rigbase.putControler( self.waistCtl, n='WaistItp%d_CTL' % i, normal=[0,1,0] )
         rigbase.AttrEdit( putCtl ).lockAndHideAttrs( 'sx', 'sy', 'sz' ,'v' )
         curveBasedCtlGrp( epBindNode2+'.outputCurve', putCtlGrp, i/( splineNumber-1.0 ) )
         cmds.connectAttr( self.waistCtl+'.show', putCtlGrp+'.v' )
         putCtls.append( [putCtl, putCtlGrp] )
         cmds.parent( putCtlGrp, self.rootGrp )
         
     epBindNode3 = cmds.createNode( 'epBindNode', n='Torso_epBindNode3' )
     
     for i in range( splineNumber ):
         cmds.connectAttr( epBindNode2+'.op[%d]' % i, epBindNode3+'.ip[%d]' % i )
         
     cmds.connectAttr( hipCuPointer+'.wm', epBindNode3+'.m[0]' )
     cmds.connectAttr( hipCuPointer+'.wm', epBindNode3+'.om[0]' )
     for i in range( 1, splineNumber-1 ):
         cmds.connectAttr( putCtls[i-1][0]+'.wm', epBindNode3+'.m[%d]' % i )
         cmds.connectAttr( putCtls[i-1][1]+'.wm', epBindNode3+'.om[%d]' % i )
     cmds.connectAttr( chestCuPointer+'.wm', epBindNode3+'.m[%d]' % (splineNumber-1) )
     cmds.connectAttr( self.chestMoveCtlGrp+'.wm', epBindNode3+'.om[%d]' % (splineNumber-1) )
     
     cuSpInfo = cmds.createNode( 'splineCurveInfo' , n='Torso_CurrentSplineInfo' )
     
     cmds.setAttr( cuSpInfo+'.paramFromLength', 0 )
     cmds.setAttr( cuSpInfo+'.startUpAxis', 2 )
     cmds.setAttr( cuSpInfo+'.endUpAxis', 2 )
     cmds.setAttr( cuSpInfo+'.targetAimAxis', 1 )
     cmds.setAttr( cuSpInfo+'.targetUpAxis', 2 )
     
     cmds.connectAttr( epBindNode3+'.outputCurve', cuSpInfo+'.inputCurve' )
     cmds.connectAttr( self.startUp+'.wm', cuSpInfo+'.startTransform' )
     cmds.connectAttr( self.endUp+'.wm', cuSpInfo+'.endTransform' )
     
     cuSpGrp = cmds.createNode( 'transform', n='Torso_Spline_GRP' )
     splinePtrs = []
     for i in range( splineNumber ):
         splineInfoPtr = cmds.createNode( 'transform', n='Torso%d_SplinePoint' % i )
         splinePtrs.append( splineInfoPtr )
         cmds.setAttr( cuSpInfo+'.parameter[%d]' % i, i/( splineNumber-1.0 )+0.001 )
         cmds.connectAttr( cuSpInfo+'.output[%d].position' % i, splineInfoPtr+'.t' )
         cmds.connectAttr( cuSpInfo+'.output[%d].rotate' % i, splineInfoPtr+'.r' )    
     
     cmds.parent( splinePtrs, cuSpGrp )
     
     cmds.parent( cuSpGrp, self.rootCtlGrp )
     splinePtrsInvDcmp = cmds.createNode( 'decomposeMatrix', n='Torso_SplinePtrsInvDcmp' )
     cmds.connectAttr( self.rootCtlGrp+'.wim', splinePtrsInvDcmp+'.imat' )
     cmds.connectAttr( splinePtrsInvDcmp+'.ot', cuSpGrp+'.t' )
     cmds.connectAttr( splinePtrsInvDcmp+'.or', cuSpGrp+'.r' )
     cmds.connectAttr( splinePtrsInvDcmp+'.os', cuSpGrp+'.s' )
     cmds.connectAttr( splinePtrsInvDcmp+'.osh', cuSpGrp+'.sh' )
     
     allWristAngle = cmds.createNode( 'wristAngle', n='Torso_TwistAllAngle' )
     cmds.setAttr( allWristAngle+'.axis', 1 )
     cmds.connectAttr( self.waistCtl+'.wm', allWristAngle+'.inputMatrix' )
     for i in range( 1, splineNumber-1 ):
         
         floatValue = i/(splineNumber-1.0)
         weightValue = 1-math.fabs( 0.5-floatValue )/.5
         
         cmds.addAttr( self.waistCtl, ln='multWeight%d' % i, min=0, max=1, dv=weightValue )
         
         cuSplinePtr = cmds.createNode( 'transform', n='Torso_cuSplinePtr%d' % i )
         cmds.parent( cuSplinePtr, splinePtrs[i] )
         rigbase.transformDefault( cuSplinePtr )
         rigbase.constraint( cuSplinePtr, self.splineJnts[i] )
         
         twistMultNode = cmds.createNode( 'multDoubleLinear', n='Torso_TwistMult%d' % i )
         addTwist = cmds.createNode( 'addDoubleLinear', n='Torso_TwistAdd%d' % i )
         wristAngle = cmds.createNode( 'wristAngle', n='Torso_TwistAngle%d' % i )
         cmds.setAttr( wristAngle+'.axis', 1 )
         
         cmds.connectAttr( putCtls[i-1][0]+'.m', wristAngle+'.inputMatrix' )
         cmds.connectAttr( wristAngle+'.outAngle', addTwist+'.input1' )
         
         cmds.connectAttr( allWristAngle+'.outAngle', twistMultNode+'.input1' )
         cmds.connectAttr( self.waistCtl+'.multWeight%d' % i, twistMultNode+'.input2' )
         
         cmds.connectAttr( twistMultNode+'.output', addTwist+'.input2' )
         
         cmds.connectAttr( addTwist+'.output', cuSplinePtr+'.ry' )
         
     rigbase.constraint( self.hipCtl, self.splineJnts[0] )
     rigbase.constraint( self.chestMoveCtl, self.splineJnts[-1] )
     
     cmds.parent( self.splineJnts[0], self.rootGrp )
     
     self.epBindNode_before = initEpBindNode
     self.epBindNode_after = epBindNode3