def setupElbowTwist(self): # Create joints cmds.select(d=1) joint1 = cmds.joint(n="%s_midTwist_JNT" %(self.m_name))#, s=[0.1, 0.1, 0.1]) cmds.setAttr("%s.radius" %(joint1), 0.15) rc.orientControl(joint1, self.m_joints.m_elbow1) joint2 = cmds.joint(n="%s_midTwistEnd_JNT" %(self.m_name))#, s=[0.1, 0.1, 0.1]) cmds.setAttr("%s.radius" %(joint2), 0.15) rc.orientControl(joint2, self.m_joints.m_elbow2) cmds.parent(joint1, self.m_group) self.m_elbowTwistJoints = [joint1, joint2] rc.addToLayer(self.m_sceneData, "ref", self.m_elbowTwistJoints) rc.addToSet(self.m_sceneData, "bind", self.m_elbowTwistJoints[0]) # sort out joint orientations tmpLocator = cmds.spaceLocator()[0] cmds.parent(tmpLocator, self.m_joints.m_elbow1, r=1) cmds.setAttr("%s.t%s" %(tmpLocator, self.m_twistAxis), 1) rc.reorientJoints(self.m_elbowTwistJoints, tmpLocator) cmds.delete(tmpLocator) # Create control self.m_elbowTwist = cmds.spaceLocator(n="%s_midTwist_CTRL" %(self.m_name))[0] rc.orientControl(self.m_elbowTwist, self.m_elbowTwistJoints[0]) cmds.parent(self.m_elbowTwist, self.m_group) groups = rg.add3Groups(self.m_elbowTwist, ["_SDK", "_CONST", "_0"]) # Create aim locator self.m_elbowTwistAimLoc = cmds.spaceLocator(n="%s_midTwistAim_LOC" %(self.m_name))[0] cmds.parent(self.m_elbowTwistAimLoc, self.m_elbowTwist, r=1) aimOffset = 1 if(self.m_isMirrored): aimOffset *=1 cmds.setAttr("%s.tx" %(self.m_elbowTwistAimLoc), aimOffset) rc.addToLayer(self.m_sceneData, "hidden", self.m_elbowTwistAimLoc) # Connect up joint cmds.pointConstraint(self.m_elbowTwist, self.m_elbowTwistJoints[0]) cmds.parentConstraint(self.m_joints.m_elbow1, groups[1]) self.m_twistAimConstraint = cmds.aimConstraint( self.m_elbowTwistAimLoc, self.m_elbowTwistJoints[0], mo=1 )
def createJoints(self): if not self.m_userJoints: self.m_bindJoints = [] startPos = cmds.xform(self.m_parent1, q=1, t=1, ws=1) endPos = cmds.xform(self.m_parent2, q=1, t=1, ws=1) stepVec = vec.divide( vec.subtract(endPos, startPos), self.m_numJoints - 1 ) currentPos = startPos for i in range(self.m_numJoints): newJoint = self.m_name+"_"+str(i)+"_BIND_JNT" newJoint = cmds.joint(n=newJoint, p=currentPos) cmds.setAttr("%s.radius" %(newJoint), 0.1) self.m_bindJoints.append(newJoint) currentPos = vec.add(currentPos, stepVec) #fix orientations cmds.joint( self.m_bindJoints[0], e=1, oj="xyz", sao = "yup", ch=1, zso=1 ) else: # Duplicate joints and rename newJoints = cmds.duplicate(self.m_userJoints[0], rc=1) for i in range(len(newJoints)): newJoint = "%s_%d_BIND_JNT" %(self.m_name, i) newJoints[i] = cmds.rename(newJoints[i], newJoint) self.m_bindJoints = newJoints #Put it in the right group cmds.parent(self.m_bindJoints[0], self.m_group) rc.addToLayer(self.m_sceneData, "ref", self.m_bindJoints[0]) #Strip sets for joint in self.m_bindJoints: rc.stripSets(joint) #Add all except first and last to bind set for joint in self.m_bindJoints[:-1]: rc.addToSet(self.m_sceneData, "bind", joint)
def generate(self): # Create IK self.m_ikJoints = self.duplicateJoints(self.m_topJoint, "IK") rc.addToLayer(self.m_sceneData, "ref", self.m_ikJoints[0]) self.m_ikFoot = IKFoot.IKFootRig( self.m_sceneData, "%s_IK" %(self.m_name), self.m_baseName, self.m_ikJoints, self.m_footToePivot, self.m_footHeelPivot, self.m_footInsidePivot, self.m_footOutsidePivot, self.m_footMain, self.m_ankleIK ) self.m_ikFoot.generate() cmds.parent(self.m_ikFoot.getGroup(), self.m_group) # Create FK self.m_fkJoints = self.duplicateJoints(self.m_topJoint, "FK") rc.addToLayer(self.m_sceneData, "ref", self.m_fkJoints[0]) self.m_fkFoot = FKFoot.FKFootRig( self.m_sceneData, "%s_FK" %(self.m_name), self.m_baseName, self.m_fkJoints, self.m_footMain, self.m_parentFK ) self.m_fkFoot.generate() cmds.parent(self.m_fkFoot.getGroup(), self.m_group) # Create BIND self.m_bindJoints = self.duplicateJoints( self.m_topJoint, "BIND" ) rc.addToLayer(self.m_sceneData, "ref", self.m_bindJoints[0]) bindGroups = rg.add3Groups( self.m_bindJoints[0], ["_SDK", "_CONST", "_0"] ) cmds.parent(bindGroups[-1], self.m_group) self.connectBind() # connect to parent cmds.parentConstraint(self.m_parentBIND, bindGroups[-1], mo=1) # connect to parent twist # Strip constraint targetList = cmds.parentConstraint(self.m_parentTwist, q=1, tl=1) try: cmds.parentConstraint(targetList, self.m_parentTwist, e=True, rm=True) except: print "Warning couldn't remove constraint when creating foot attachment" # Add new constraint cmds.parentConstraint(self.m_bindJoints[0], self.m_parentTwist, mo=1) # Add to sets rc.addToSet(self.m_sceneData, "bind", self.m_bindJoints) # Add to controls rc.addDictToControlDict(self.m_allControls, self.m_ikFoot.getAllControls()) rc.addDictToControlDict(self.m_allControls, self.m_fkFoot.getAllControls())