def generate(self): self.m_fingers = [] names = ["indexFing", "middleFing", "ringFing", "pinkyFing", "thumb"] for i in range(len(names)): thumb = False if i == (len(names) - 1): thumb = True newFinger = fing.FingerRig( "%s_%s" %(self.m_name, names[i]), self.m_handJoints.getFinger(i), thumb ) newFinger.generate() cmds.parent(newFinger.getGroup(), self.m_group) self.m_fingers.append(newFinger) #create control self.m_control = cmds.spaceLocator(n="%s_CTRL" %(self.m_name))[0] rc.orientControl(self.m_control, self.m_fingers[3].getKnuckle()) group = rg.addGroup(self.m_control, "%s_0" %(self.m_control)) rc.lockAttrs(self.m_control, ["tx", "rotate", "scale"], True, False) cmds.parent(group, self.m_group) cmds.expression(n="%s_EXP" %(self.m_name), s=self.createExp())
def rigBlendControl(self, _parent): # Move and parent blend control rc.orientControl(self.m_blendControl, _parent) group = rg.addGroup(self.m_blendControl, "%s_0" %(self.m_blendControl)) moveValue = -2 if self.m_isMirrored: moveValue *= -1 cmds.setAttr("%s.t%s" %(self.m_blendControl, self.m_twistAxis), moveValue) cmds.parentConstraint(_parent, group, mo=1) rc.lockAttrs( self.m_blendControl, [ "tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz", "visibility" ], True, True )
def rigElbow(self): #Check that shoulder has been done if not self.m_isShoulder: self.rigShoulder() #Rig for stretch self.m_stretchCtrl = rc.changeExt( self.m_joints.m_elbow1, "_stretch_CTRL" ) self.m_stretchCtrl = cmds.spaceLocator( n = self.m_stretchCtrl )[0] rc.orientControl(self.m_stretchCtrl, self.m_joints.m_shoulder) elbowDisplace = cmds.getAttr("%s.tx" %(self.m_joints.m_elbow1)) groups = rg.add3Groups(self.m_stretchCtrl, ["_SDK", "_CONST", "_0"]) cmds.parent(groups[2], self.m_shoulderGBLCtrl) cmds.setAttr("%s.tx" %(groups[2]), elbowDisplace) cmds.pointConstraint(self.m_stretchCtrl, self.m_joints.m_elbow1) # --- Elbow --- # self.m_elbowCtrl = rc.makeCTRL( self.m_joints.m_elbow1, False, True, ["_SDK", "_CONST", "_0"] ) cmds.parent(self.m_elbowCtrl+"_0", self.m_stretchCtrl) #Connect up double rotations try: cmds.connectAttr( self.m_joints.m_elbow1+".rotate", self.m_joints.m_elbow2+".rotate", f=1 ) except: print "Warning, double joint rotations seem to already be connected" #- lock and hide unused attributes -# rc.lockAttrs( self.m_stretchCtrl, ["ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"] ) rc.lockAttrs( self.m_elbowCtrl, ["tx", "ty", "tz", "sx", "sy", "sz"] ) rc.addToLayer(self.m_sceneData, "mainCtrl", [self.m_stretchCtrl, self.m_elbowCtrl]) #Add to controls rc.addToControlDict(self.m_allControls, "%s_FKElbowStretch" %(self.m_baseName), self.m_stretchCtrl) rc.addToControlDict(self.m_allControls, "%s_FKElbow" %(self.m_baseName), self.m_elbowCtrl) self.m_isElbow = True
def setupPoleVec(self): middleName = rg.stripMiddle(self.m_joints.m_shoulder, 0, 3) desiredName = self.m_name+"PoleVec_LOC" self.m_poleVec = cmds.spaceLocator(n = desiredName)[0] # Add to controls rc.addToControlDict(self.m_allControls, "%s_IKPoleVec" %(self.m_baseName), self.m_poleVec) rc.addToLayer(self.m_sceneData, "mainCtrl", self.m_poleVec) cmds.addAttr( self.m_poleVec, ln=self.m_poleVecPinAttr, min=0, max=1, k=True, dv=0 ) cmds.addAttr( self.m_poleVec, ln=self.m_maxStretchAttr, at = "float", min=0, dv=10, k=1 ) self.m_maxStretch = "%s.%s" %(self.m_poleVec, self.m_maxStretchAttr) rc.orientControl(self.m_poleVec, self.m_joints.m_elbow1) groups = rg.add3Groups(self.m_poleVec, ["_SDK", "_CONST", "_0"]) cmds.poleVectorConstraint(self.m_poleVec, self.m_ikHandle) cmds.parent(groups[-1], self.m_group, r=1) # Lock unused attributes rc.lockAttrs( self.m_poleVec, ["scale", "rotate"], True, False ) axis , offset = self.getPoleVecAxis(2) if axis != "": cmds.setAttr("%s.t%s" %(groups[1], axis), offset) #Create line midGroup = cmds.group(em=1, n=self.m_name+"PoleVec_GRP") cmds.parent(midGroup, self.m_group) cmds.pointConstraint(self.m_joints.m_elbow1, midGroup) cmds.pointConstraint(self.m_joints.m_elbow2, midGroup) lineNodes = rc.createLine([self.m_poleVec, midGroup], self.m_sceneData, "mainCtrl") cmds.parent(lineNodes[0], self.m_group)
def rigShoulder(self): try: # --- Shoulder --- # #Create shoulder controls gimbalCtrls = rc.makeGimbalCTRL( self.m_joints.m_shoulder, False, True ) self.m_shoulderGBLCtrl = gimbalCtrls[0] self.m_shoulderCtrl = gimbalCtrls[1] # Add to controls rc.addToControlDict(self.m_allControls, "%s_FKShoulder" %(self.m_baseName), self.m_shoulderCtrl) rc.addToControlDict( self.m_allControls, "%s_FKShoulderGBL" %(self.m_baseName), self.m_shoulderGBLCtrl ) rc.addToLayer(self.m_sceneData, "mainCtrl", gimbalCtrls) self.m_isShoulder = True cmds.parent(self.m_shoulderCtrl+"_0", self.m_group, r=1) cmds.pointConstraint( self.m_shoulderGBLCtrl, self.m_joints.m_shoulder ) #Sort out scaling cmds.scaleConstraint( self.m_shoulderGBLCtrl, self.m_joints.m_shoulder ) #Lock unused attributes rc.lockAttrs( self.m_shoulderCtrl, ["translate", "scale"], True, False ) rc.lockAttrs( self.m_shoulderGBLCtrl, ["translate", "scale"], True, False ) except: print "WARNING: FK Shoulder setup was unsuccessful!" self.m_isShoulder = False
def createToe(self): if not self.m_ankleGenerated: self.createAnkle() self.m_toeCtrl = cmds.circle( n="%s_toe_CTRL" %(self.m_name), nr=(1, 0, 0) )[0] rc.addToControlDict(self.m_allControls, "%s_FKToe" %(self.m_baseName), self.m_toeCtrl) rc.addToLayer(self.m_sceneData, "mainCtrl", self.m_toeCtrl) rc.orientControl(self.m_toeCtrl, self.m_joints[1]) groups = rg.add3Groups(self.m_toeCtrl, ["_SDK", "_CONST", "_0"]) cmds.parentConstraint(self.m_toeCtrl, self.m_joints[1]) cmds.parent(groups[-1], self.m_ankleCtrl) self.m_toeGenerated = True #Lock unused attributes rc.lockAttrs(self.m_toeCtrl, ["translate", "scale"], True, False)
def rigWrist(self): #Check that shoulder has been done if not self.m_isElbow: self.rigElbow() # --- Wrist --- # self.m_wristCtrl = rc.makeCTRL( self.m_joints.m_wrist, False, False, ["_SDK", "_CONST", "_0"] ) # Sort orientation rc.orientControl(self.m_wristCtrl+"_0", self.m_joints.m_elbow2) rc.copyTranslation(self.m_wristCtrl+"_0", self.m_joints.m_wrist) #Parent for neatness cmds.parent(self.m_wristCtrl+"_0", self.m_elbowCtrl) #Connect up to previous joint cmds.parentConstraint( self.m_joints.m_elbow2, self.m_wristCtrl+"_CONST", mo=1 ) cmds.pointConstraint( self.m_wristCtrl, self.m_joints.m_wrist, skip=["y", "z"] ) rc.lockAttrs( self.m_wristCtrl, ["ty", "tz", "rotate", "scale"], True, False ) # Add to controls rc.addToControlDict(self.m_allControls, "%s_FKWrist" %(self.m_baseName), self.m_wristCtrl) rc.addToLayer(self.m_sceneData, "mainCtrl", self.m_wristCtrl) self.m_isWrist = True
def generate(self): if self.m_isThumb: names = ["metacarpal", "knuckle", "tip", "tipEND"] else: names = ["metacarpal", "knuckle", "mid", "tip", "tipEND"] i = 0 parentControl = False self.m_controls = [] self.m_stretchControls = [] for joint in self.m_joints: # Create control newStretch = False if joint != self.m_joints[0]: #Create stretch control stretchName = "%s_%s_stretch_CTRL" %(self.m_name, names[i]) newStretch = cmds.spaceLocator(n=stretchName)[0] rc.setMultiAttrs( newStretch, ["localScaleX", "localScaleY", "localScaleZ"], 0.15 ) rc.orientControl(newStretch, cmds.listRelatives(joint, p=1)[0]) rc.copyTranslation(newStretch, joint) if parentControl: cmds.parent(newStretch, parentControl) else: cmds.parent(newStretch, self.m_group) rg.add3Groups( newStretch, ["_SDK", "_CONST", "_0"] ) # lock unused attrs rc.lockAttrs( newStretch, ["ty", "tz", "rotate", "scale"], True, False ) parentControl = newStretch if joint != self.m_joints[-1]: controlName = "%s_%s_CTRL" %(self.m_name, names[i]) newControl = cmds.circle( n=controlName, nr=(1, 0, 0), r=0.1 )[0] rc.orientControl(newControl, joint) if parentControl: cmds.parent(newControl, parentControl) else: cmds.parent(newControl, self.m_group) self.m_controls.append(newControl) groups = rg.add3Groups(newControl, ["_SDK", "_CONST", "_0"]) if newStretch: # Attach to stretch cmds.parentConstraint(newStretch, groups[1], mo=1) # Attach to joint cmds.parentConstraint(newControl, joint, mo=1) rc.lockAttrs( newControl, ["translate", "scale"], True, False ) parentControl = newControl i += 1 else: cmds.parentConstraint(newStretch, joint, mo=1) # Rig metacarpals if not self.m_isThumb: pass self.m_isGenerated = True
def createTwist(self): numJoints = len(self.m_bindJoints) if numJoints == 0: raise Exception, "No joints, cannot create twist setup" #Create twist controls # Twist 1 self.m_twistControl1 = cmds.spaceLocator( n="%s_upperTwist_CTRL" %(self.m_name) )[0] #cmds.parent(self.m_twistControl1, self.m_parent1, r=1) # Twist 2 self.m_twistControl2 = cmds.spaceLocator( n="%s_lowerTwist_CTRL" %(self.m_name) )[0] #cmds.parent(self.m_twistControl2, self.m_parent2, r=1) for control, parent in map( None, [self.m_twistControl1, self.m_twistControl2], [self.m_parent1, self.m_parent2] ): rc.orientControl(control, parent) groups = rg.add3Groups(control, ["_SDK", "_CONST", "_0"]) if self.m_isMirrored: cmds.setAttr( "%s.t%s" %(groups[0], self.m_twistAxis), 1 ) else: cmds.setAttr( "%s.t%s" %(groups[0], self.m_twistAxis), -1 ) if self.m_isParentTwist: cmds.parentConstraint(parent, groups[1], mo=1) cmds.parent(groups[2], self.m_group) rc.lockAttrs( control, ["rotate", "scale", "visibility"], True, False ) cmds.setAttr("%s.dTwistControlEnable" %(self.m_ikHandle), 1) cmds.setAttr("%s.dWorldUpType" %(self.m_ikHandle), 2) cmds.setAttr("%s.dTwistValueType" %(self.m_ikHandle), 1) if self.m_twistAxis == "y": if self.m_isMirrored: cmds.setAttr("%s.dWorldUpAxis" %(self.m_ikHandle), 0) else: cmds.setAttr("%s.dWorldUpAxis" %(self.m_ikHandle), 1) else: if self.m_isMirrored: cmds.setAttr("%s.dWorldUpAxis" %(self.m_ikHandle), 3) else: cmds.setAttr("%s.dWorldUpAxis" %(self.m_ikHandle), 4) cmds.connectAttr( "%s.worldMatrix[0]" %(self.m_twistControl1), "%s.dWorldUpMatrix" %(self.m_ikHandle), f = True ) cmds.connectAttr( "%s.worldMatrix[0]" %(self.m_twistControl2), "%s.dWorldUpMatrixEnd" %(self.m_ikHandle), f = True ) rc.addToLayer(self.m_sceneData, "detailCtrl", [self.m_twistControl1, self.m_twistControl2]) #Add to controls rc.addToControlDict(self.m_allControls, "%s_topTwist" %(self.m_baseName), self.m_twistControl1) rc.addToControlDict(self.m_allControls, "%s_lowTwist" %(self.m_baseName), self.m_twistControl2)