def neckMiddleCtlSet(self): self.neckMiddleCtl = rigbase.Controler(n='NeckMiddle_CTL') self.neckMiddleCtl.setShape(normal=[0, 1, 0], radius=.5) self.neckMiddleCtl.setColor(29) self.middlePoint1 = rigbase.Transform(n='NeckMiddle_spline_Point1') self.middlePoint2 = rigbase.Transform(n='NeckMiddle_spline_Point2') self.middlePoint1.setParent(self.neckMiddleCtl) self.middlePoint2.setParent(self.neckMiddleCtl) rigbase.transformDefault(self.middlePoint1, self.middlePoint2) midPnt1Dist = cmds.createNode('distanceBetween', n='NeckMiddle_spPnt1_dist') midPnt2Dist = cmds.createNode('distanceBetween', n='NeckMiddle_spPnt2_dist') midMult1Dist = cmds.createNode('multDoubleLinear', n='NeckMiddle_md1') midMult2Dist = cmds.createNode('multDoubleLinear', n='NeckMiddle_md2') cmds.setAttr(midMult1Dist + '.input2', -.4) cmds.setAttr(midMult2Dist + '.input2', .4) cmds.connectAttr(self.neckMiddleInit + '.m', midPnt1Dist + '.inMatrix1') cmds.connectAttr(self.headInit + '.m', midPnt2Dist + '.inMatrix2') cmds.connectAttr(midPnt1Dist + '.distance', midMult1Dist + '.input1') cmds.connectAttr(midPnt2Dist + '.distance', midMult2Dist + '.input1') cmds.connectAttr(midMult1Dist + '.output', self.middlePoint1 + '.ty') cmds.connectAttr(midMult2Dist + '.output', self.middlePoint2 + '.ty') attrEdit = rigbase.AttrEdit(self.neckMiddleCtl.name) attrEdit.lockAndHideAttrs('sx', 'sy', 'sz', 'v') self.rigInstance.neckMiddleCtl = self.neckMiddleCtl.name
def annotation(self, side): if side == 'L': eyeCtl = self.rigInstance.eyeLCtl eyeJnt = self.rigInstance.eyeLJnt else: eyeCtl = self.rigInstance.eyeRCtl eyeJnt = self.rigInstance.eyeRJnt loc = cmds.spaceLocator(n='Eye_%s_AnnotatLoc' % side)[0] locShape = cmds.listRelatives(loc, s=1)[0] annotateShape = cmds.createNode('annotationShape', n='Eye_%s_AnnotateShape' % side) annotate = cmds.listRelatives(annotateShape, p=1)[0] cmds.rename(annotate, 'Eye_%s_Annotate' % side) cmds.parent(annotate, eyeCtl) rigbase.constraint(eyeJnt, annotate, r=0) cmds.connectAttr(locShape + '.wm', annotateShape + '.dagObjectMatrix[0]') cmds.parent(loc, eyeCtl) rigbase.transformDefault(loc) cmds.setAttr(loc + '.v', 0) cmds.setAttr(annotate + '.overrideEnabled', True) cmds.setAttr(annotate + '.overrideDisplayType', 2)
def neckMiddleCtlSet(self): self.neckMiddleCtl = rigbase.Controler( n='NeckMiddle_CTL' ) self.neckMiddleCtl.setShape( normal=[0,1,0], radius = .5 ) self.neckMiddleCtl.setColor( 29 ) self.middlePoint1 = rigbase.Transform( n='NeckMiddle_spline_Point1' ) self.middlePoint2 = rigbase.Transform( n='NeckMiddle_spline_Point2' ) self.middlePoint1.setParent( self.neckMiddleCtl ) self.middlePoint2.setParent( self.neckMiddleCtl ) rigbase.transformDefault( self.middlePoint1, self.middlePoint2 ) midPnt1Dist= cmds.createNode( 'distanceBetween', n='NeckMiddle_spPnt1_dist' ) midPnt2Dist = cmds.createNode( 'distanceBetween', n='NeckMiddle_spPnt2_dist' ) midMult1Dist = cmds.createNode( 'multDoubleLinear', n='NeckMiddle_md1' ) midMult2Dist = cmds.createNode( 'multDoubleLinear', n='NeckMiddle_md2' ) cmds.setAttr( midMult1Dist+'.input2', -.4 ) cmds.setAttr( midMult2Dist+'.input2', .4 ) cmds.connectAttr( self.neckMiddleInit+'.m', midPnt1Dist+'.inMatrix1' ) cmds.connectAttr( self.headInit+'.m', midPnt2Dist+'.inMatrix2' ) cmds.connectAttr( midPnt1Dist+'.distance', midMult1Dist+'.input1' ) cmds.connectAttr( midPnt2Dist+'.distance', midMult2Dist+'.input1' ) cmds.connectAttr( midMult1Dist+'.output', self.middlePoint1+'.ty' ) cmds.connectAttr( midMult2Dist+'.output', self.middlePoint2+'.ty' ) attrEdit = rigbase.AttrEdit( self.neckMiddleCtl.name ) attrEdit.lockAndHideAttrs( 'sx','sy','sz','v' ) self.rigInstance.neckMiddleCtl = self.neckMiddleCtl.name
def setDefaultTransform( self, targets, *args ): for target in targets: targetClass = getProperClassInMenuModule( target, ctlModules, allCtls.AllCtls ) if 'transformAttrs' in dir( targetClass ): if targetClass.transformAttrs == 'All': targetAttrs = cmds.listAttr( target, k=1 ) else: targetAttrs = targetClass.transformAttrs for attr in targetAttrs: rigbase.trySetAttr( target+'.'+attr, 0 ) rigbase.transformDefault( target )
def pinFollow(self, target, *args ): ns = self.getNamespace(target) targetOriginName = target.replace( ns, '' ) pinCtl = ns+targetOriginName.replace( 'Switch_CTL', 'IK_Pin_CTL' ) ikCtl = ns+targetOriginName.replace( 'Switch_CTL', 'IK_CTL' ) poleVCtl = ns+targetOriginName.replace( 'Switch_CTL', 'PoleV_CTL' ) mtxList = cmds.getAttr( ikCtl+'.wm' ) poleVmtxList = cmds.getAttr( poleVCtl+'.wm' ) cmds.xform( pinCtl, ws=1, matrix=mtxList ) self.__setNoneFollow( target ) cmds.setAttr( target+'.pinFollow', 10 ) rigbase.transformDefault( ikCtl ) cmds.xform( poleVCtl, ws=1, matrix = poleVmtxList )
def pinFollow(self, target, *args): ns = self.getNamespace(target) targetOriginName = target.replace(ns, '') pinCtl = ns + targetOriginName.replace('Switch_CTL', 'IK_Pin_CTL') ikCtl = ns + targetOriginName.replace('Switch_CTL', 'IK_CTL') poleVCtl = ns + targetOriginName.replace('Switch_CTL', 'PoleV_CTL') mtxList = cmds.getAttr(ikCtl + '.wm') poleVmtxList = cmds.getAttr(poleVCtl + '.wm') cmds.xform(pinCtl, ws=1, matrix=mtxList) self.__setNoneFollow(target) cmds.setAttr(target + '.pinFollow', 10) rigbase.transformDefault(ikCtl) cmds.xform(poleVCtl, ws=1, matrix=poleVmtxList)
def setStartUpObj(self): self.startUpObj = rigbase.Transform( n='Neck_SplineStartUp' ) self.startUpObj.setParent( self.neckCtl ) rigbase.transformDefault( self.startUpObj ) mtxDcmp = cmds.createNode( 'multMatrixDecompose', n='Neck_SplineStartUp_mtxDcmp' ) ffmMtx = cmds.createNode( 'fourByFourMatrix', n='Neck_SplineStartUp_ffm' ) smOri = cmds.createNode( 'smartOrient', n='Neck_SplineStartUp_SmOri' ) cmds.setAttr( smOri+'.aimAxis', 1 ) cmds.connectAttr( self.headCtl+'.wm' ,mtxDcmp+'.i[0]' ) cmds.connectAttr( self.neckCtl+'.wim' ,mtxDcmp+'.i[1]' ) cmds.connectAttr( mtxDcmp+'.otx' ,ffmMtx+'.i10' ) cmds.connectAttr( mtxDcmp+'.oty' ,ffmMtx+'.i11' ) cmds.connectAttr( mtxDcmp+'.otz' ,ffmMtx+'.i12' ) cmds.connectAttr( ffmMtx+'.output',smOri+'.inputMatrix' ) cmds.connectAttr( smOri+'.outAngle' ,self.startUpObj+'.r' )
def setStartUpObj(self): self.startUpObj = rigbase.Transform(n='Neck_SplineStartUp') self.startUpObj.setParent(self.neckCtl) rigbase.transformDefault(self.startUpObj) mtxDcmp = cmds.createNode('multMatrixDecompose', n='Neck_SplineStartUp_mtxDcmp') ffmMtx = cmds.createNode('fourByFourMatrix', n='Neck_SplineStartUp_ffm') smOri = cmds.createNode('smartOrient', n='Neck_SplineStartUp_SmOri') cmds.setAttr(smOri + '.aimAxis', 1) cmds.connectAttr(self.headCtl + '.wm', mtxDcmp + '.i[0]') cmds.connectAttr(self.neckCtl + '.wim', mtxDcmp + '.i[1]') cmds.connectAttr(mtxDcmp + '.otx', ffmMtx + '.i10') cmds.connectAttr(mtxDcmp + '.oty', ffmMtx + '.i11') cmds.connectAttr(mtxDcmp + '.otz', ffmMtx + '.i12') cmds.connectAttr(ffmMtx + '.output', smOri + '.inputMatrix') cmds.connectAttr(smOri + '.outAngle', self.startUpObj + '.r')
def annotation(self, side ): if side == 'L': eyeCtl = self.rigInstance.eyeLCtl eyeJnt = self.rigInstance.eyeLJnt else: eyeCtl = self.rigInstance.eyeRCtl eyeJnt = self.rigInstance.eyeRJnt loc = cmds.spaceLocator( n='Eye_%s_AnnotatLoc' % side )[0] locShape = cmds.listRelatives( loc, s=1 )[0] annotateShape = cmds.createNode( 'annotationShape', n='Eye_%s_AnnotateShape' % side ) annotate = cmds.listRelatives( annotateShape, p=1 )[0] cmds.rename( annotate, 'Eye_%s_Annotate' % side ) cmds.parent( annotate, eyeCtl ) rigbase.constraint( eyeJnt, annotate, r=0 ) cmds.connectAttr( locShape+'.wm', annotateShape+'.dagObjectMatrix[0]' ) cmds.parent( loc, eyeCtl ) rigbase.transformDefault( loc ) cmds.setAttr( loc+'.v', 0 ) cmds.setAttr( annotate+'.overrideEnabled', True ) cmds.setAttr( annotate+'.overrideDisplayType', 2 )
def originalOrientSet(self): shoulderLOr = rigbase.Transform( n='Shoulder_L_OriginalOrient' ) shoulderROr = rigbase.Transform( n='Shoulder_R_OriginalOrient' ) shoulderLOr.setParent( self.shoulderLCtl ) shoulderROr.setParent( self.shoulderRCtl ) rigbase.transformDefault( shoulderLOr, shoulderROr ) cmds.setAttr( shoulderLOr+'.t', 0,0,0 ) cmds.setAttr( shoulderLOr+'.r', 0,0,-45 ) cmds.setAttr( shoulderROr+'.t', 0,0,0 ) cmds.setAttr( shoulderROr+'.r', 0,0,-45 ) hipLOr = rigbase.Transform( n='Hip_L_OriginalOrient' ) hipROr = rigbase.Transform( n='Hip_R_OriginalOrient' ) hipLOr.setParent( self.hipCtl ) hipROr.setParent( self.hipCtl ) cmds.connectAttr( self.hipLInit+'.t', hipLOr+'.t' ) cmds.connectAttr( self.hipRInit+'.t', hipROr+'.t' ) cmds.setAttr( hipLOr+'.r', 0,0,-90 ) cmds.setAttr( hipROr+'.r', -180,0, 90 ) self.rigInstance.shoulderLOr = shoulderLOr self.rigInstance.shoulderROr = shoulderROr self.rigInstance.hipLOr = hipLOr self.rigInstance.hipROr = hipROr
def legPartJointSet(self): legLObjs = self.legPart.outputTransformL legLObjs += self.legPart.outputAddTrL self.legLInitJnts = [] self.legLInits = [] legRObjs = self.legPart.outputTransformR legRObjs += self.legPart.outputAddTrR self.legRInitJnts = [] self.legRInits = [] cmds.select(self.torsoInitJnts[0]) for legLObj in legLObjs: index = legLObjs.index(legLObj) if index in [3, 11]: cmds.select(self.legLInitJnts[0]) if index == 4: cmds.select(self.legLInitJnts[2]) if index == 6: cmds.select(self.legLInitJnts[2]) if index == 12: cmds.select(self.legLInitJnts[1]) splitName = legLObj.split('_')[:-1] jntName = '_'.join(splitName) + '_InitJnt' legLJnt = cmds.joint(n=jntName) if index == 3: rigbase.transformDefault(legLJnt) rigbase.constraint(legLObj, legLJnt, r=0) elif index in [11, 12]: legLObjP = cmds.listRelatives(legLObj, p=1)[0] cmds.setAttr(legLObjP + '.dh', 0) rigbase.constraint(legLObjP, legLJnt) cmds.select(legLJnt) cmds.rename(legLJnt, legLJnt.replace('_InitJnt', '_InitJnt_GRP')) legLJnt = cmds.joint(n=legLJnt.replace('_GRP', '')) rigbase.constraint(legLObj, legLJnt) else: rigbase.constraint(legLObj, legLJnt) self.legLInitJnts.append(legLJnt) self.legLInits.append(legLJnt.replace('InitJnt', 'Init')) cmds.select(legLJnt) cmds.select(self.torsoInitJnts[0]) for legRObj in legRObjs: index = legRObjs.index(legRObj) if index in [3, 11]: cmds.select(self.legRInitJnts[0]) if index == 4: cmds.select(self.legRInitJnts[2]) if index == 6: cmds.select(self.legRInitJnts[2]) if index == 12: cmds.select(self.legRInitJnts[1]) splitName = legRObj.split('_')[:-1] jntName = '_'.join(splitName) + '_InitJnt' legRJnt = cmds.joint(n=jntName) if index == 3: rigbase.transformDefault(legRJnt) rigbase.constraint(legRObj, legRJnt, r=0) elif index in [11, 12]: legRObjP = cmds.listRelatives(legRObj, p=1)[0] cmds.setAttr(legRObjP + '.dh', 0) rigbase.constraint(legRObjP, legRJnt) cmds.select(legRJnt) cmds.rename(legRJnt, legRJnt.replace('_InitJnt', '_InitJnt_GRP')) legRJnt = cmds.joint(n=legRJnt.replace('_GRP', '')) rigbase.constraint(legRObj, legRJnt) else: rigbase.constraint(legRObj, legRJnt) self.legRInitJnts.append(legRJnt) self.legRInits.append(legRJnt.replace('InitJnt', 'Init')) cmds.select(legRJnt)
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
def curveSet(self): #self.crv = cmds.curve( n='Torso_Spline_CRV', d=3, p=[[0,0,0],[0,0,0],[0,0,0],[0,0,0]] ) self.initCrv = cmds.curve( n='Torso_SplineInit_CRV', d=3, p=[[0,0,0],[0,0,0],[0,0,0],[0,0,0]] ) #cmds.setAttr( self.crv+'.v', 0 ) cmds.setAttr( self.initCrv+'.v', 0 ) #self.crvShape = cmds.listRelatives( self.crv, s=1 )[0] self.initCrvShape = cmds.listRelatives( self.initCrv, s=1 )[0] self.crvPoint0Obj = self.hipCtl self.crvPoint1Obj = cmds.createNode( 'transform', n= 'Torso_Spline_point1' ) self.crvPoint2Obj = cmds.createNode( 'transform', n= 'Torso_Spline_point2' ) self.crvPoint3Obj = self.chestCtl self.crvOrigPoint0Obj = self.torsoCtl self.crvOrigWaistObj = cmds.createNode( 'transform', n= 'Waist_CTL_SqPos' ) self.crvOrigPoint1Obj = cmds.createNode( 'transform', n= 'Torso_Spline_SquPoint1' ) self.crvOrigPoint2Obj = cmds.createNode( 'transform', n= 'Torso_Spline_SquPoint2' ) self.crvOrigPoint3Obj = cmds.createNode( 'transform', n= 'Chest_CTL_SquPos' ) rigbase.AttrEdit( self.crvPoint1Obj, self.crvPoint2Obj ).lockAndHideAttrs( 'tx', 'tz', 'rx', 'ry','rz', 'sx', 'sy','sz', 'v' ) cmds.parent( self.crvPoint1Obj, self.crvPoint2Obj, self.waistCtl ) cmds.parent( self.crvOrigWaistObj, self.crvOrigPoint3Obj, self.rootGrp ) cmds.parent( self.crvOrigPoint1Obj, self.crvOrigPoint2Obj, self.crvOrigWaistObj ) self.crvOrigSqPointGrp = cmds.group( self.crvOrigPoint1Obj, self.crvOrigPoint2Obj, n='Waist_CTL_SqSqPointGrp' ) cmds.xform( self.crvOrigSqPointGrp, piv=[0,0,0], os=1 ) rigbase.pInvRotConst( self.crvOrigSqPointGrp ) rigbase.connectSameAttr( self.waistInit, self.crvOrigWaistObj ).doIt( 't','r' ) chMtxDcmp = rigbase.getChildMtxDcmp( self.chestInit, self.rootInit ) cmds.connectAttr( chMtxDcmp+'.ot', self.crvOrigPoint3Obj+'.t' ) cmds.connectAttr( chMtxDcmp+'.or', self.crvOrigPoint3Obj+'.r' ) #rigbase.connectSameAttr( self.chestCtlGrp, self.crvOrigPoint3Obj ).doIt( 't', 'r' ) #rigbase.connectSameAttr( self.crvPoint1Obj, self.crvOrigPoint1Obj ).doIt( 't','r' ) #rigbase.connectSameAttr( self.crvPoint2Obj, self.crvOrigPoint2Obj ).doIt( 't','r' ) multPoint1Node = cmds.createNode( 'multDoubleLinear', n='Torso_Spline_point1_mult' ) multPoint2Node = cmds.createNode( 'multDoubleLinear', n='Torso_Spline_point2_mult' ) distPoint1Node = cmds.createNode( 'distanceBetween', n='Torso_spline_point1_dist' ) distPoint2Node = cmds.createNode( 'distanceBetween', n='Torso_spline_point2_dist' ) cmds.connectAttr( self.waistInit+'.t', distPoint1Node+'.point1' ) cmds.connectAttr( self.chestInit+'.t', distPoint2Node+'.point2' ) cmds.connectAttr( distPoint1Node+'.distance', multPoint1Node+'.input1' ) cmds.connectAttr( distPoint2Node+'.distance', multPoint2Node+'.input1' ) #cmds.connectAttr( multPoint1Node+'.output', self.crvPoint1Obj+'.ty' ) #cmds.connectAttr( multPoint2Node+'.output', self.crvPoint2Obj+'.ty' ) cmds.connectAttr( multPoint1Node+'.output', self.crvOrigPoint1Obj+'.ty' ) cmds.connectAttr( multPoint2Node+'.output', self.crvOrigPoint2Obj+'.ty' ) cmds.setAttr( multPoint1Node+'.input2', -.4 ) cmds.setAttr( multPoint2Node+'.input2', .4 ) ''' for i in range( 4 ): dcmp = cmds.createNode( 'decomposeMatrix', n= self.crv+'_point%d_dcmp' % i ) exec( 'cmds.connectAttr( self.crvPoint%dObj+".wm", dcmp+".imat" )' % i ) cmds.connectAttr( dcmp+".ot", self.crvShape+'.controlPoints[%d]' %i )''' for i in range( 4 ): dcmp = cmds.createNode( 'multMatrixDecompose', n= self.initCrv+'_origPoint%d_dcmp' % i ) exec( 'cmds.connectAttr( self.crvOrigPoint%dObj+".wm", dcmp+".i[0]" )' % i ) cmds.connectAttr( self.initCrv+".wim", dcmp+".i[1]" ) cmds.connectAttr( dcmp+".ot", self.initCrvShape+'.controlPoints[%d]' %i ) rigbase.transformDefault( self.initCrv ) #rigbase.connectSameAttr( self.crv, self.initCrv ).doIt( 't', 'r', 's', 'sh' ) cmds.parent( self.initCrv, self.rootGrp )
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
def armPartJointSet(self): armLObjs = self.armPart.outputTransformL armLObjs += self.armPart.outputAddTrL self.armLInitJnts = [] self.armLInits = [] armRObjs = self.armPart.outputTransformR armRObjs += self.armPart.outputAddTrR self.armRInitJnts = [] self.armRInits = [] cmds.select(self.torsoInitJnts[-2]) for armLObj in armLObjs: index = armLObjs.index(armLObj) if index in [3, 4]: cmds.select(self.armLInitJnts[0]) if index == 5: cmds.select(self.armLInitJnts[1]) splitName = armLObj.split('_')[:-1] jntName = '_'.join(splitName) + '_InitJnt' armLJnt = cmds.joint(n=jntName) if index == 3: rigbase.transformDefault(armLJnt) rigbase.constraint(armLObj, armLJnt, r=0) elif index in [4, 5]: armLObjP = cmds.listRelatives(armLObj, p=1)[0] cmds.setAttr(armLObjP + '.dh', 0) rigbase.constraint(armLObjP, armLJnt) cmds.select(armLJnt) cmds.rename(armLJnt, armLJnt.replace('_InitJnt', '_InitJnt_GRP')) armLJnt = cmds.joint(n=armLJnt.replace('_GRP', '')) rigbase.constraint(armLObj, armLJnt) else: rigbase.constraint(armLObj, armLJnt) self.armLInitJnts.append(armLJnt) self.armLInits.append(armLJnt.replace('InitJnt', 'Init')) cmds.select(armLJnt) cmds.select(self.torsoInitJnts[-1]) for armRObj in armRObjs: index = armRObjs.index(armRObj) if index in [3, 4]: cmds.select(self.armRInitJnts[0]) if index == 5: cmds.select(self.armRInitJnts[1]) splitName = armRObj.split('_')[:-1] jntName = '_'.join(splitName) + '_InitJnt' armRJnt = cmds.joint(n=jntName) if index == 3: rigbase.transformDefault(armRJnt) rigbase.constraint(armRObj, armRJnt, r=0) elif index in [4, 5]: armRObjP = cmds.listRelatives(armRObj, p=1)[0] cmds.setAttr(armRObjP + '.dh', 0) rigbase.constraint(armRObjP, armRJnt) cmds.select(armRJnt) cmds.rename(armRJnt, armRJnt.replace('_InitJnt', '_InitJnt_GRP')) armRJnt = cmds.joint(n=armRJnt.replace('_GRP', '')) rigbase.constraint(armRObj, armRJnt) else: rigbase.constraint(armRObj, armRJnt) self.armRInitJnts.append(armRJnt) self.armRInits.append(armRJnt.replace('InitJnt', 'Init')) cmds.select(armRJnt)
def legPartJointSet(self): legLObjs = self.legPart.outputTransformL legLObjs += self.legPart.outputAddTrL self.legLInitJnts = [] self.legLInits = [] legRObjs = self.legPart.outputTransformR legRObjs += self.legPart.outputAddTrR self.legRInitJnts = [] self.legRInits = [] cmds.select( self.torsoInitJnts[0] ) for legLObj in legLObjs: index = legLObjs.index( legLObj ) if index in [3,11]: cmds.select( self.legLInitJnts[0] ) if index == 4: cmds.select( self.legLInitJnts[2] ) if index == 6: cmds.select( self.legLInitJnts[2] ) if index == 12: cmds.select( self.legLInitJnts[1] ) splitName = legLObj.split( '_' )[:-1] jntName = '_'.join( splitName )+'_InitJnt' legLJnt = cmds.joint( n=jntName ) if index == 3: rigbase.transformDefault( legLJnt ) rigbase.constraint( legLObj, legLJnt, r=0 ) elif index in [11,12]: legLObjP = cmds.listRelatives( legLObj, p=1 )[0] cmds.setAttr( legLObjP+'.dh', 0 ) rigbase.constraint( legLObjP, legLJnt ) cmds.select( legLJnt ) cmds.rename( legLJnt, legLJnt.replace( '_InitJnt', '_InitJnt_GRP' )) legLJnt = cmds.joint( n=legLJnt.replace( '_GRP', '' ) ) rigbase.constraint( legLObj, legLJnt ) else: rigbase.constraint( legLObj, legLJnt ) self.legLInitJnts.append( legLJnt ) self.legLInits.append( legLJnt.replace( 'InitJnt', 'Init' ) ) cmds.select( legLJnt ) cmds.select( self.torsoInitJnts[0] ) for legRObj in legRObjs: index = legRObjs.index( legRObj ) if index in [3,11]: cmds.select( self.legRInitJnts[0] ) if index == 4: cmds.select( self.legRInitJnts[2] ) if index == 6: cmds.select( self.legRInitJnts[2] ) if index == 12: cmds.select( self.legRInitJnts[1] ) splitName = legRObj.split( '_' )[:-1] jntName = '_'.join( splitName )+'_InitJnt' legRJnt = cmds.joint( n=jntName ) if index == 3: rigbase.transformDefault( legRJnt ) rigbase.constraint( legRObj, legRJnt, r=0 ) elif index in [11,12]: legRObjP = cmds.listRelatives( legRObj, p=1 )[0] cmds.setAttr( legRObjP+'.dh', 0 ) rigbase.constraint( legRObjP, legRJnt ) cmds.select( legRJnt ) cmds.rename( legRJnt, legRJnt.replace( '_InitJnt', '_InitJnt_GRP' )) legRJnt = cmds.joint( n=legRJnt.replace( '_GRP', '' ) ) rigbase.constraint( legRObj, legRJnt ) else: rigbase.constraint( legRObj, legRJnt ) self.legRInitJnts.append( legRJnt ) self.legRInits.append( legRJnt.replace( 'InitJnt', 'Init' ) ) cmds.select( legRJnt )
def armPartJointSet(self): armLObjs = self.armPart.outputTransformL armLObjs += self.armPart.outputAddTrL self.armLInitJnts = [] self.armLInits = [] armRObjs = self.armPart.outputTransformR armRObjs += self.armPart.outputAddTrR self.armRInitJnts = [] self.armRInits = [] cmds.select( self.torsoInitJnts[-2] ) for armLObj in armLObjs: index = armLObjs.index( armLObj ) if index in [3,4]: cmds.select( self.armLInitJnts[0] ) if index == 5: cmds.select( self.armLInitJnts[1] ) splitName = armLObj.split( '_' )[:-1] jntName = '_'.join( splitName )+'_InitJnt' armLJnt = cmds.joint( n=jntName ) if index == 3: rigbase.transformDefault( armLJnt ) rigbase.constraint( armLObj, armLJnt, r=0 ) elif index in [4,5]: armLObjP = cmds.listRelatives( armLObj, p=1 )[0] cmds.setAttr( armLObjP+'.dh', 0 ) rigbase.constraint( armLObjP, armLJnt ) cmds.select( armLJnt ) cmds.rename( armLJnt, armLJnt.replace( '_InitJnt', '_InitJnt_GRP' )) armLJnt = cmds.joint( n=armLJnt.replace( '_GRP', '' ) ) rigbase.constraint( armLObj, armLJnt ) else: rigbase.constraint( armLObj, armLJnt ) self.armLInitJnts.append( armLJnt ) self.armLInits.append( armLJnt.replace( 'InitJnt', 'Init' ) ) cmds.select( armLJnt ) cmds.select( self.torsoInitJnts[-1] ) for armRObj in armRObjs: index = armRObjs.index( armRObj ) if index in [3,4]: cmds.select( self.armRInitJnts[0] ) if index == 5: cmds.select( self.armRInitJnts[1] ) splitName = armRObj.split( '_' )[:-1] jntName = '_'.join( splitName )+'_InitJnt' armRJnt = cmds.joint( n=jntName ) if index == 3: rigbase.transformDefault( armRJnt ) rigbase.constraint( armRObj, armRJnt, r=0 ) elif index in [4,5]: armRObjP = cmds.listRelatives( armRObj, p=1 )[0] cmds.setAttr( armRObjP+'.dh', 0 ) rigbase.constraint( armRObjP, armRJnt ) cmds.select( armRJnt ) cmds.rename( armRJnt, armRJnt.replace( '_InitJnt', '_InitJnt_GRP' )) armRJnt = cmds.joint( n=armRJnt.replace( '_GRP', '' ) ) rigbase.constraint( armRObj, armRJnt ) else: rigbase.constraint( armRObj, armRJnt ) self.armRInitJnts.append( armRJnt ) self.armRInits.append( armRJnt.replace( 'InitJnt', 'Init' ) ) cmds.select( armRJnt )