def mirror_chain(self, side = None): #create one temporary joint at the origin tmp_jnt = cmds.joint(position = [0, 0, 0]) #parent the chain to that joint cmds.parent(self.ik_joint_names[0], tmp_jnt) #mirror the chain and rename the mirrored side if side == 'L': self.mirrored_ik_joint_names = cmds.mirrorJoint(self.ik_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'R')) elif side == 'l': self.mirrored_ik_joint_names = cmds.mirrorJoint(self.ik_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'r')) elif side == 'R': self.mirrored_ik_joint_names = cmds.mirrorJoint(self.ik_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'L')) elif side == 'r': self.mirrored_ik_joint_names = cmds.mirrorJoint(self.ik_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'l')) else: self.mirrored_ik_joint_names = cmds.mirrorJoint(self.ik_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1) #unparent the chain and delete the temporary joint cmds.parent(self.ik_joint_names[0], self.mirrored_ik_joint_names[0], world = 1) cmds.delete(tmp_jnt) cmds.select(clear = 1) #rename the side of the mirrored effector correctly and store the ik and effector in a list mirrored_ik = self.mirrored_ik_joint_names[0][0] + self.ik_handle_names[-1][1:] mirrored_eff = cmds.rename(self.mirrored_ik_joint_names[-1], self.mirrored_ik_joint_names[0][0] + self.ik_handle_names[-1][1:]) self.mirrored_ik_handle_names = [mirrored_ik, mirrored_eff] self.mirrored_ik_joint_names.pop(-1)
def __mirror_chain(self): """ Mirror the created jointChain create one temporary joint at the origin """ if not self._mirror: return tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if self._side == 'L': self.mirrored_joint_names = cmds.mirrorJoint( self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'R')) elif self._side == 'R': self.mirrored_joint_names = cmds.mirrorJoint( self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'L')) else: self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True) #--- unparent the chain and delete the temporary joint cmds.parent(self.joint_names[0], self.mirrored_joint_names[0], world=True) cmds.delete(tmp_jnt) cmds.select(clear=True)
def JointsBtn(*args): cmds.rename("L_Clavicule_LOC", "locator1") cmds.rename("L_Shoulder_LOC", "locator2") cmds.rename("L_Elbow_LOC", "locator3") cmds.rename("L_Wrist_LOC", "locator4") cmds.select(cl=True) for X in range(1, jointsNum + 1): cmds.joint(n="L_arm_" + str(X)) cmds.pointConstraint("locator" + str(X), "L_arm_" + str(X)) cmds.delete("L_arm_" + str(X) + "_pointConstraint1") cmds.delete("locator" + str(X)) cmds.setAttr("L_arm_" + str(X) + ".displayLocalAxis", 1) cmds.joint() cmds.select("L_arm_1", "L_arm_2", "L_arm_3", "L_arm_4") cmds.joint(e=True, zso=True, oj="xzy", sao="zdown") cmds.delete('joint1') cmds.select("L_arm_1") cmds.mirrorJoint(mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) cmds.select("R_arm_4") cmds.joint() cmds.select("R_arm_1", "R_arm_2", "R_arm_3", "R_arm_4") cmds.joint(e=True, zso=True, oj="xzy", sao="zup") cmds.delete('joint1') cmds.select(clear=True)
def leg(self): cmds.select(cl=True) tmp = cmds.joint(n='L_template_leg', p=(1, 11, 0)) leg = setUniqueName(tmp, 'JNT') tmp = cmds.joint(n='L_template_lowLeg', p=(1, 6, 0)) lowLeg = setUniqueName(tmp, 'JNT') cmds.joint(leg, e=True, zso=True, oj='xyz', sao='yup') tmp = cmds.joint(n='L_template_foot', p=(1, 1, 0)) foot = setUniqueName(tmp, 'JNT') cmds.joint(lowLeg, e=True, zso=True, oj='xyz', sao='yup') tmp = cmds.joint(n='L_template_ball', p=(1, 0, 1)) ball = setUniqueName(tmp, 'JNT') cmds.joint(foot, e=True, zso=True, oj='xyz', sao='yup') tmp = cmds.joint(n='L_template_toe', p=(1, 0, 2)) toe = setUniqueName(tmp, 'JNT') cmds.joint(ball, e=True, zso=True, oj='xyz', sao='yup') cmds.setAttr(leg + '.rx', -10) cmds.setAttr(lowLeg + '.rx', 20) cmds.setAttr(foot + '.rx', -10) cmds.mirrorJoint(leg, mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) return
def mirrorJoints(self, topJoint = '', prefix = ['l_', 'r_']): """ mirroring joint, top node needs to contain 'l_' as prefix """ lPrefix = prefix[0] rPrefix = prefix[1] cmds.select(cl = True) cmds.joint(n = 'temp_jnt') cmds.select(topJoint, r = True) cmds.select('temp_jnt', tgl = True) self.toggleSelect(topJoint, 'temp_jnt') cmds.parent() cmds.select(topJoint, r = True) cmds.mirrorJoint(mirrorYZ = True, mirrorBehavior = True, myz = True, searchReplace = prefix) rJoint = rPrefix + topJoint.split(lPrefix)[-1] cmds.select(topJoint, rJoint) cmds.parent(w = True) cmds.delete('temp_jnt') return rJoint
def MirrorJoints(): charName = cmds.textFieldGrp(NameInput, q=True, text=True) cmds.mirrorJoint(charName + '_L' + '_hip' + '_Jnt_01', mirrorYZ=True, mirrorBehavior=True, searchReplace=('_L_', '_R_')) cmds.joint(charName + '_R' + '_hip_Jnt_01', e=True, oj='xyz', ch=True, zso=True, sao='xup') cmds.mirrorJoint(charName + '_L' + '_shoulder' + '_Jnt_01', mirrorYZ=True, mirrorBehavior=True, searchReplace=('_L_', '_R_')) cmds.joint(charName + '_R' + '_shoulder_Jnt_01', e=True, oj='xyz', ch=True, zso=True, sao='yup') cmds.joint(charName + '_R' + '_wrist' + '_Jnt_01', e=True, oj='none', ch=True, zso=True) cmds.joint(charName + '_R' + '_toe' + '_Jnt_01', e=True, oj='none', ch=True, zso=True) cmds.select(d=True)
def mirror_chain(self, side = None): #create one temporary joint at the origin tmp_jnt = cmds.joint(position = [0, 0, 0]) #parent the chain to that joint cmds.parent(self.fk_joint_names[0], tmp_jnt) #mirror the chain and rename the mirrored side if side == 'L': self.mirrored_fk_joint_names = cmds.mirrorJoint(self.fk_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'R')) elif side == 'l': self.mirrored_fk_joint_names = cmds.mirrorJoint(self.fk_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'r')) elif side == 'R': self.mirrored_fk_joint_names = cmds.mirrorJoint(self.fk_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'L')) elif side == 'r': self.mirrored_fk_joint_names = cmds.mirrorJoint(self.fk_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1, searchReplace = (side, 'l')) else: self.mirrored_fk_joint_names = cmds.mirrorJoint(self.fk_joint_names[0], mirrorYZ = 1, mirrorBehavior = 1) #unparent the chain and delete the temporary joint cmds.parent(self.fk_joint_names[0], self.mirrored_fk_joint_names[0], world = 1) cmds.delete(tmp_jnt) cmds.select(clear = 1) return self.mirrored_fk_joint_names
def __mirror_chain(self): """ Mirror the created jointChain create one temporary joint at the origin """ if not self._mirror: return tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if self._side == 'L': self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'R')) elif self._side == 'R': self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'L')) else: self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True) #--- unparent the chain and delete the temporary joint cmds.parent(self.joint_names[0], self.mirrored_joint_names[0], world=True) cmds.delete(tmp_jnt) cmds.select(clear=True)
def mirror_joint_chain(topJoint, oldSidePrefix=None, newSidePrefix=None, axis="yz"): """axis is mirror plane (xy, xz, yz)""" mirrored_chain = [] if axis == "xy": mirrored_chain = cmds.mirrorJoint( topJoint, mirrorXY=True, searchReplace=[oldSidePrefix, newSidePrefix], mirrorBehavior=True) if axis == "xz": mirrored_chain = cmds.mirrorJoint( topJoint, mirrorXZ=True, searchReplace=[oldSidePrefix, newSidePrefix], mirrorBehavior=True) if axis == "yz": mirrored_chain = cmds.mirrorJoint( topJoint, mirrorYZ=True, searchReplace=[oldSidePrefix, newSidePrefix], mirrorBehavior=True) return (mirrored_chain)
def mirror_joints( joints=(), axis='YZ', behaviour=False, search_replace=('l_', 'r_')): """ mirrors an array of joints :param joints: <list>, <tuple> array of joints. :param axis: <str> mirrors by this axis. :param behaviour: <bool> mirrors behaviour. :param search_replace: <tuple> (0,) find this string and replace it (1,) :return: <tuple> array of mirrored joints. """ if not joints: joints = get_joints_from_selection() # get only the joint objects in our selection jnt_array = filter(object_utils.is_joint, joints) mirror_array = () for jnt in jnt_array: if axis == 'XY': mirror_array += tuple( cmds.mirrorJoint(jnt, mirrorXY=True, mirrorBehavior=behaviour, searchReplace=search_replace)) if axis == 'YZ': mirror_array += tuple( cmds.mirrorJoint(jnt, mirrorYZ=True, mirrorBehavior=behaviour, searchReplace=search_replace)) if axis == 'XZ': mirror_array += tuple( cmds.mirrorJoint(jnt, mirrorXZ=True, mirrorBehavior=behaviour, searchReplace=search_replace)) return mirror_array
def _mirrorJoint(mirrorPlane, behavior, replace): if mirrorPlane == 1: return cmds.mirrorJoint(mirrorXY=1, mirrorBehavior=behavior, searchReplace=replace) elif mirrorPlane == 2: return cmds.mirrorJoint(mirrorYZ=1, mirrorBehavior=behavior, searchReplace=replace) elif mirrorPlane == 3: return cmds.mirrorJoint(mirrorXZ=1, mirrorBehavior=behavior, searchReplace=replace)
def MirrorJoints(self,*args): mc.select('A_Front_Hip_Jt'); self.MirrorEachJoint = mc.mirrorJoint('L_Front_Shoulder_Jt',mirrorXY=True,mirrorBehavior=True,searchReplace=('L_','R_')) mc.select('B_Back_Hip_Jt') self.MirrorEachJoint = mc.mirrorJoint('L_Back_Pelvic_Jt',mirrorXY=True,mirrorBehavior=True,searchReplace=('L_', 'R_')) mc.select("Head_Jt") self.MirrorEachJoint = mc.mirrorJoint("L_Ear_Jt", mirrorXY=True, mirrorBehavior=True, searchReplace=("L_","R_"))
def _createSkeleton(self): # root: root = ['root'] rootJoint = j.create_chain(root) # spine: spine_locators = ['spine_root', 'spine_waist', 'spine_mid', 'spine_chest', 'spine_end'] self.spineJoints = j.create_chain(spine_locators, m_sao='zup', radius=0.6) # legs: leg_locators = ['hip', 'knee', 'ankle', 'ball', 'toe'] l_legJoints = j.create_chain(leg_locators, side=1, m_sao='xup', radius=0.7) r_legJoints = cmd.mirrorJoint(l_legJoints[0], mirrorBehavior=1, mirrorYZ=1, searchReplace=['L_', 'R_']) # arms: arm_locators = ['shoulder', 'elbow', 'wrist'] l_armJoints = j.create_chain(arm_locators, side=1) r_armJoints = cmd.mirrorJoint(l_armJoints[0], mirrorBehavior=1, mirrorYZ=1, searchReplace=['L_', 'R_']) # fingers: fingers = ['index', 'mid', 'ring', 'pinky'] for finger in fingers: finger_locators = [finger + '_1', finger + '_2', finger + '_3', finger + '_end'] l_fingerJoints = j.create_chain(finger_locators, side=1, radius=0.2) r_fingerJoints = cmd.mirrorJoint(l_fingerJoints[0], mirrorBehavior=1, mirrorYZ=1, searchReplace=['L_', 'R_'])
def autoRig(self,meshName): height = self.getSizeY(meshName) minPosY = height[1] height = height[0] width = self.getSizeX(meshName) minPosX = width[1] width = width[0] bassinPoint = (minPosX + width * 0.0,minPosY + height * 0.48,self.getZ(minPosX + width * 0.0,minPosY + height * 0.48,meshName)) couPoint = (minPosX + width * 0.0,minPosY + height * 0.870,self.getZ(minPosX + width * 0.0,minPosY + height * 0.870,meshName)) epaulePoint = (minPosX + width * 0.129,minPosY + height * 0.825,self.getZ(minPosX + width * 0.129,minPosY + height * 0.825,meshName)) coudePoint = (minPosX + width * 0.315,minPosY + height * 0.825,self.getZ(minPosX + width * 0.315,minPosY + height * 0.825,meshName)) poignetPoint = (minPosX + width * 0.461,minPosY + height * 0.825,self.getZ(minPosX + width * 0.461,minPosY + height * 0.825,meshName)) jambePoint = (minPosX + width * 0.0955,minPosY + height * 0.4,self.getZ(minPosX + width * 0.0955,minPosY + height * 0.4,meshName)) genouPoint = (minPosX + width * 0.1,minPosY + height * 0.285,self.getZ(minPosX + width * 0.1,minPosY + height * 0.285,meshName)) piedPoint = (minPosX + width * 0.12,minPosY + height * 0.039 ,self.getZ(minPosX + width * 0.12,minPosY + height * 0.039,meshName)) cmds.select(clear=True) cmds.joint(p=bassinPoint,name="bassinBase") cmds.select("bassinBase") rigList = [couPoint,epaulePoint,coudePoint,poignetPoint] self.createListRig(rigList,"rigTop","bassinBase") cmds.select("bassinBase") rigList2 = [jambePoint,genouPoint,piedPoint] self.createListRig(rigList2,"rigBot","bassinBase") cmds.select("rigTop1") cmds.mirrorJoint(mirrorYZ=True) cmds.select("rigBot0") cmds.mirrorJoint(mirrorYZ=True) cmds.select("bassinBase") cmds.select(meshName,tgl=True) cmds.bindSkin()
def j_BodyFix(): # Get The Goal Joint position position = dict() dupJnt = ['ShoulderPart2_L','Elbow_L','ElbowPart1_L','HipPart2_L','Knee_L','KneePart1_L'] for jnt in dupJnt: position[jnt] =mc.xform(jnt,ws=1,t=1,q=1) # Create Joint And Ikhandle From position newJnt = [] na =1; for j in dupJnt: if mc.objExists(('Fix'+j)): mc.select(('Fix'+j),r=1) break; newJnt.append(mc.joint(n=('Fix'+j),p=position[j],radius=1.75)) if na%3==0: # Create IKHandle With ikRPsolver , Then Mirror With IkHandle mc.joint(newJnt[0],e=1,zso=1,oj='xyz',sao='yup') mc.joint(newJnt[1],e=1,zso=1,oj='xyz',sao='yup') mc.setAttr('%s.jointOrient'%newJnt[2],0,0,0) ikhand = mc.ikHandle(name=('rpik_'+newJnt[1]+'01'),sj=newJnt[0],ee=newJnt[2],sol = 'ikSCsolver') mc.setAttr('%s.v'%ikhand[0],0) # mirrorJoint -mirrorYZ -mirrorBehavior -searchReplace "_L" "_R"; mc.mirrorJoint(newJnt[0],mirrorYZ =1,mirrorBehavior =1,searchReplace=('_L','_R')) mc.parent(ikhand[0],j) mc.parent((re.sub('_L',"_R",ikhand[0])),(re.sub('_L','_R',j))) mc.parent(newJnt[0],dupJnt[na-3]) mc.parent((re.sub("_L","_R",newJnt[0])),(re.sub('_L','_R',dupJnt[na-3]))) newJnt = [] mc.select(clear=1) na=na+1;
def mmMirrorJoint( *args ): sels= cmds.ls( sl=1 ) for sel in sels: srcStr = '' trgStr = '' if sel.find( '_L_' ) != -1: other = sel.replace( '_L_', '_R_' ) srcStr = '_L_' trgStr = '_R_' elif sel.find( '_R_' ) != -1: other = sel.replace( '_R_', '_L_' ) srcStr = '_R_' trgStr = '_L_' else: continue if not cmds.objExists( other ): cmds.mirrorJoint( sel, mirrorYZ=1, mirrorBehavior=1, searchReplace=["_L_", "_R_"] ) else: mtxTop = cmds.getAttr( sel+'.wm' ) mtxTop[1] *= -1; mtxTop[ 2] *= -1 mtxTop[5] *= -1; mtxTop[ 6] *= -1 mtxTop[9] *= -1; mtxTop[10] *= -1 mtxTop[12] *= -1 cmds.xform( other, ws=1, matrix=mtxTop ) children = cmds.listRelatives( sel, c=1, ad=1 ) for child in children: mtx = cmds.getAttr( child+'.m' ) mtx[12] *= -1; mtx[13] *= -1; mtx[14] *= -1 otherChild = child.replace( srcStr, trgStr ) cmds.xform( otherChild, matrix=mtx )
def buildLegs(): leg_List = encodeList(cmds.listRelatives('leg_Ls')) for item in leg_List: if item != 'L_heel': createJoint(item) elif item == 'L_hip': cmds.joint( 'waist', e=True, o=(0,0,0)) cmds.mirrorJoint('L_hip',searchReplace=('L_', 'R_'))
def buildLegs(): leg_List = encodeList(cmds.listRelatives("leg_Ls")) for item in leg_List: if item != "L_heel": createJoint(item) elif item == "L_hip": cmds.joint("waist", e=True, o=(0, 0, 0)) cmds.mirrorJoint("L_hip", searchReplace=("L_", "R_"))
def buildLegs(): leg_List = encodeList(cmds.listRelatives('leg_Ls')) for item in leg_List: if item != 'L_heel': createJoint(item) elif item == 'L_hip': cmds.joint('waist', e=True, o=(0, 0, 0)) cmds.mirrorJoint('L_hip', searchReplace=('L_', 'R_'))
def buildArms(): arm_List = encodeList(cmds.listRelatives("arm_Ls")) for item in arm_List: createJoint(item) cmds.parent("L_pinky01", "L_wrist") cmds.parent("L_index01", "L_wrist") cmds.parent("L_pointer01", "L_wrist") cmds.parent("L_thumb01", "L_wrist") cmds.mirrorJoint("L_clavicle", searchReplace=("L_", "R_"))
def buildArms(): arm_List = encodeList(cmds.listRelatives('arm_Ls')) for item in arm_List: createJoint(item) cmds.parent('L_pinky01', 'L_wrist') cmds.parent('L_index01', 'L_wrist') cmds.parent('L_pointer01', 'L_wrist') cmds.parent('L_thumb01', 'L_wrist') cmds.mirrorJoint('L_clavicle',searchReplace=('L_', 'R_'))
def MirrorLegChains(self, prefix, mirrorPrefix): cmds.mirrorJoint(self.hipJnt, mirrorBehavior=True, myz=True, searchReplace=[prefix, mirrorPrefix]) cmds.mirrorJoint(self.revCBankJnt, mirrorBehavior=True, myz=True, searchReplace=[prefix, mirrorPrefix])
def buildArms(): arm_List = encodeList(cmds.listRelatives('arm_Ls')) for item in arm_List: createJoint(item) cmds.parent('L_pinky01', 'L_wrist') cmds.parent('L_index01', 'L_wrist') cmds.parent('L_pointer01', 'L_wrist') cmds.parent('L_thumb01', 'L_wrist') cmds.mirrorJoint('L_clavicle', searchReplace=('L_', 'R_'))
def joint_left_add(): #メッセージ cmds.inViewMessage(amg='<hl>「足のIK設置」</hl>を押してください。', pos='midCenter', fade=True, fit=1, fst=4000, fts=20) cmds.mirrorJoint('Hip_R', myz=True, mb=True, sr=('_R', '_L')) cmds.mirrorJoint('Scapula_R', myz=True, mb=True, sr=('_R', '_L'))
def shoulder(self): cmds.select(cl=True) tmp = cmds.joint(n='L_template_shoulder', p=(1, 13, 0)) shoulder = setUniqueName(tmp, 'JNT') cmds.mirrorJoint(shoulder, mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) return
def __mirror_chain(self, side=None): #--- this method mirrors the jointChain and the ikHandle #--- create one temporary joint at the origin tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.ik_joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if side == 'L': self.mirrored_ik_joint_names = cmds.mirrorJoint( self.ik_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'R')) elif side == 'l': self.mirrored_ik_joint_names = cmds.mirrorJoint( self.ik_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'r')) elif side == 'R': self.mirrored_ik_joint_names = cmds.mirrorJoint( self.ik_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'L')) elif side == 'r': self.mirrored_ik_joint_names = cmds.mirrorJoint( self.ik_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'l')) else: self.mirrored_ik_joint_names = cmds.mirrorJoint( self.ik_joint_names[0], mirrorYZ=1, mirrorBehavior=1) #--- unparent the chain and delete the temporary joint cmds.parent(self.ik_joint_names[0], self.mirrored_ik_joint_names[0], world=1) cmds.delete(tmp_jnt) cmds.select(clear=1) #--- rename the side of the mirrored effector correctly and store the ik #--- and effector in a list mirrored_ik = self.mirrored_ik_joint_names[0][ 0] + self.ik_handle_names[0][1:] mirrored_eff = cmds.rename( self.mirrored_ik_joint_names[-1], self.mirrored_ik_joint_names[0][0] + self.ik_handle_names[-1][1:]) self.mirrored_ik_handle_names = [mirrored_ik, mirrored_eff] self.mirrored_ik_joint_names.pop(-1)
def L_rig_leg_mirror(): #easy mirror tool #should make it more correct, so you would not mirror it but set the orientation correct in case you dont have the r_leg_sel = cmds.ls(selection=True) cmds.mirrorJoint('R_Rig_femur_jnt', mirrorYZ=True, mirrorBehavior=True, searchReplace=("R_", "L_"))
def tgpCreateMirrorToes(self, jntMasterToes, leftRightReplace, leftRightReplaceMirror): # return if the toe mirror alread exists checkReplace = jntMasterToes.replace(leftRightReplace, leftRightReplaceMirror) if mc.objExists(checkReplace): return checkReplace # just reflects it parentOfJnt = None parentOfJntMirror = None try: # in case the joint is already parented parentOfJnt = mc.listRelatives(jntMasterToes, p=True)[0] parentOfJntMirror = parentOfJnt.replace(leftRightReplace, leftRightReplaceMirror) except: mc.warning("Master Toes joint already at world") if parentOfJnt is not None: # if there is a parent, place at world mc.parent(jntMasterToes, w=True) jntMasterToesMirrorWork = mc.mirrorJoint( jntMasterToes, mirrorYZ=True, mirrorBehavior=True, searchReplace=[leftRightReplace, leftRightReplaceMirror]) jntMasterToesMirrorTop = jntMasterToesMirrorWork[0] if parentOfJnt is not None: # return to the top mc.parent(jntMasterToes, parentOfJnt) mc.parent(jntMasterToesMirrorTop, parentOfJntMirror) return jntMasterToesMirrorTop
def mirror_transform(path): """Mirror transform of node at `path` across the YZ axis Arguments: path (str): Path to transform to be mirrored Returns: Path to mirrored transform """ temp_joint = cmds.createNode('joint') temp_ctl = cmds.duplicate(path, inputConnections=True, returnRootsOnly=True) cmds.parent(temp_joint, path) cmds.parent(temp_joint, world=True) cmds.parent(temp_ctl, temp_joint) mirrored = cmds.mirrorJoint(temp_joint, mirrorBehavior=True, mirrorYZ=True) mirrored_joint = mirrored.pop(0) mirrored_transform = mirrored.pop(0) cmds.parent(mirrored_transform, world=True) cmds.delete([temp_joint, temp_joint, mirrored_joint]) return mirrored_transform
def createTemplate(self , eyeMesh): # create eye jnt eyeJnt=[] if 'L_' in str(eyeMesh): helpClu = mc.cluster(eyeMesh)[0] LeyeJnt = mc.joint(p=(0,0,0),name=eyeMesh+'_skin_jnt') self.fromAtoB(eyeJnt,helpClu,1) ReyeJnt = mc.mirrorJoint(mirrorYZ=True,mirrorBehavior=False,searchReplace=('L_', 'R_') eyeJnt.append(LeyeJnt) eyeJnt.append(ReyeJnt) else: self.mayaError('Please select the left eye.') return eyeJnt def createEyeRig(self): if mc.objExists(self.eyeGlobalCtrl) == False: EyesGlobalCtrl = mc.curve(d=1,p=[(-1.069806, 1.027703, 0),(-1.651954,1.89895,0),(-2.523201,2.481098,0),(-3.550904,2.68552,0),(-4.578607,2.481098,0),(-5.449854,1.89895,0),(-6.032002,1.027703,0),(-6.236424,0,0),(-6.032002,-1.027703,0),(-5.449854 ,-1.89895, 0),(-4.578607,-2.481098,0), (-3.550904,-2.68552,0),(-2.523201, -2.481098, 0),(-1.651954,-1.89895,0),(-1.069806,-1.027703,0),(1.058138,-1.032345,0),(1.642915, -1.907527,0),(2.518098,-2.492305,0),( 3.550443,-2.69765,0),(4.582788,-2.492305,0),(5.45797,-1.907527,0),( 6.042748,-1.032345,0),(6.248093,0,0),(6.042748,1.032345,0),( 5.45797,1.907527,0 ),(4.582788,2.492305,0),( 3.550443,2.69765,0),(2.518098,2.492305,0 ),(1.642915,1.907527,0),(1.058138,1.032345,0),( -1.069806,1.027703,0)],k=[0,1,2,3,4,5,6,7,8,9,10,11,12 ,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],n=self.eyeGlobalCtrl) L_EyeAimCtrl = mc.curve(d=1,p=[(3.653116 ,0.946994,0), (3.653116 ,0 ,0),( 2.706122, 0, 0) , (3.653116 ,0, 0),(4.600109, 0 ,0) , (3.653116 ,0, 0) , (3.653116 ,-0.946994, 0) ],k=[0, 1, 2 ,3 ,4 ,5 , 6 ],n='L_'+self.eyeAimCtrl) R_EyeAimCtrl = mc.curve(d=1,p=[(3.653116 ,0.946994,0), (3.653116 ,0 ,0),( 2.706122, 0, 0) , (3.653116 ,0, 0),(4.600109, 0 ,0) , (3.653116 ,0, 0) , (3.653116 ,-0.946994, 0) ],k=[0, 1, 2 ,3 ,4 ,5 , 6 ],n='R_'+self.eyeAimCtrl) mc.parent(L_EyeAimCtrl , EyesGlobalCtrl) mc.parent(R_EyeAimCtrl , EyesGlobalCtrl) self.fastGrp('On' , ['zero','con','sdk'],L_EyeAimCtrl) self.fastGrp'On' , ['zero','con','sdk'],R_EyeAimCtrl) zeroGrp = self.fastGrp('On' , ['zero','con','sdk'],EyesGlobalCtrl)[2]
def optionJointLine(self): if optionUIClass.cb_value : optionJointClass.optionShiJointLine() else: if optionUIClass.Mirror_value: newJoint = option_mirrorJoint(obj = [self.aimObj,]) if newJoint != []: allJnt_r = [] for a in self.allJoint: jnt = cmds.mirrorJoint(a,mirrorYZ=1,mirrorBehavior=1,searchReplace =("Left","Right")) jnt1 = cmds.listRelatives(a,c=1)[0] Mir1 = a + "_Mirror1" Mir2 = a + "_Mirror2" cmds.rename(jnt[1],Mir2) cmds.rename(jnt[0],Mir1) allJnt_r.append(Mir1) optionJointClass.optionJointYiLine(aim=newJoint[0],allJnt=allJnt_r) optionJointClass.optionJointYiLine(aim=self.aimObj,allJnt=self.allJoint) print ("////Add OptionJoint ok -----"+"\n"),
def mirror(rootList=[], locList=[], leftToRight=True): ''' Mirror rig template components @param rootList: List of template root joints to mirror. @type rootList: list @param locList: List of template locators to mirror. @type locList: list @param leftToRight: Mirror from left to right if True. Mirror from right to left if False. @type leftToRight: bool ''' # ============== # - Check Side - # ============== src = 'lf_' dst = 'rt_' if not leftToRight: src = 'rt_' dst = 'lf_' # ======================================== # - Removed Existing Desitination Joints - # ======================================== for root in rootList: if root.startswith(dst): mc.delete(root) # ====================== # - Mirror Root Joints - # ====================== # Mirror Joints for root in rootList: # Check Side if root.startswith(src): # Mirror Joint mirrorJoint = mc.mirrorJoint(root, mirrorYZ=True, mirrorBehavior=True, searchReplace=[src, dst]) # Colour Hierarchy glTools.utils.colorize.colourHierarchy(root) glTools.utils.colorize.colourHierarchy(mirrorJoint[0]) # =================== # - Mirror Locators - # =================== # Mirror Locator using Match() for loc in locList: # Check Side if loc.startswith(src): # Mirror Locator glTools.tools.match.Match().twin(loc)
def mirrorJoint(joint, *args, **kwargs): if nodeType(joint) != 'joint': raise TypeError('Must Provide a joint.') # Query Joint Name source = None destination = None data = { 'left': 'right', 'Left': 'Right', '_l_': '_r_', '_L_': '_R_', } for x in data: if x in joint: source = x destination = data[x] break elif data[x] in joint: source = data[x] destination = x break # Run Mirror Function if source and destination: mirrored = cmds.mirrorJoint(joint, mirrorYZ=True, mirrorBehavior=True, searchReplace=[source, destination]) else: mirrored = cmds.mirrorJoint(joint, mirrorYZ=True, mirrorBehavior=True) # Get and Set Side Joint Label sourceSide = getJointLabelSide(joint).lower() destinationSide = None if sourceSide == 'left': destinationSide = JointLabelSide.right elif sourceSide == 'right': destinationSide = JointLabelSide.left if destinationSide: for item in mirrored: setJointLabelSide(item, destinationSide) return mirrored
def finger(self): #thumb cmds.select(cl=True) tmp = cmds.joint(n='L_template_thumb1', p=(0.1, 0, 0)) thumb1 = setUniqueName(tmp, 'JNT') tmp = cmds.joint(n='L_template_thumb2', p=(0.45, 0, 0)) thumb2 = setUniqueName(tmp, 'JNT') cmds.joint(thumb1, e=True, zso=True, oj='xyz', sao='yup') tmp = cmds.joint(n='L_template_thumb3', p=(0.75, 0, 0)) thumb3 = setUniqueName(tmp, 'JNT') cmds.joint(thumb2, e=True, zso=True, oj='xyz', sao='yup') tmp = cmds.joint(n='L_template_thumb4', p=(1.05, 0, 0)) thumb4 = setUniqueName(tmp, 'JNT') cmds.joint(thumb3, e=True, zso=True, oj='xyz', sao='yup') cmds.setAttr(thumb1 + '.t', 10, 10, 0.5) cmds.setAttr(thumb1 + '.jointOrient', 80, -10, -30) cmds.mirrorJoint(thumb1, mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) #index~pinky name = ['index', 'middle', 'ring', 'pinky'] num = ['Palm', '1', '2', '3', '4'] buffer = [] cmds.select(cl=True) for i in range(len(name)): for n in range(len(num)): tmp = cmds.joint(n='L_template_' + name[i] + num[n], p=(0.35, 0, 0), r=True) fin = setUniqueName(tmp, 'JNT') buffer.append(fin) cmds.setAttr(buffer[0] + '.t', 10, 10, i * -0.2) cmds.mirrorJoint(buffer[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) cmds.select(cl=True) buffer = [] return
def createRig(): mc.delete(textList) mc.parent('L_Hip_BIND', 'C_Pelvis_BIND') mc.parent('L_Knee_BIND', 'L_Hip_BIND') mc.parent('L_Ankle_BIND', 'L_Knee_BIND') mc.parent('L_Ball_BIND', 'L_Ankle_BIND') mc.parent('L_Toes_BIND', 'L_Ball_BIND') mc.parent('C_lowerSpine_BIND', 'C_Pelvis_BIND') mc.parent('C_lowerChest_BIND', 'C_lowerSpine_BIND') mc.parent('C_Chest_BIND', 'C_lowerChest_BIND') mc.parent('L_Clavicle_BIND', 'C_Chest_BIND') mc.parent('L_Shoulder_BIND', 'L_Clavicle_BIND') mc.parent('L_Elbow_BIND', 'L_Shoulder_BIND') mc.parent('L_Wrist_BIND', 'L_Elbow_BIND') mc.parent('L_Palm_BIND', 'L_Wrist_BIND') mc.parent('L_ThumbA_BIND', 'L_PinkieA_BIND', 'L_IndexA_BIND', 'L_MiddleA_BIND', 'L_RingA_BIND', 'L_Palm_BIND') mc.parent('L_ThumbC_BIND', 'L_ThumbB_BIND', 'L_ThumbA_BIND') mc.parent('L_PinkieC_BIND', 'L_PinkieB_BIND', 'L_PinkieA_BIND') mc.parent('L_MiddleC_BIND', 'L_MiddleB_BIND', 'L_MiddleA_BIND') mc.parent('L_RingC_BIND', 'L_RingB_BIND', 'L_RingA_BIND') mc.parent('L_IndexC_BIND', 'L_IndexB_BIND', 'L_IndexA_BIND') mc.parent('L_ThumbC_BIND', 'L_ThumbB_BIND') mc.parent('L_PinkieC_BIND', 'L_PinkieB_BIND') mc.parent('L_MiddleC_BIND', 'L_MiddleB_BIND') mc.parent('L_RingC_BIND', 'L_RingB_BIND') mc.parent('L_IndexC_BIND', 'L_IndexB_BIND') mc.parent('C_upperSpine_BIND', 'C_Chest_BIND') mc.parent('C_lowerNeck_BIND', 'C_upperSpine_BIND') mc.parent('C_upperNeck_BIND', 'C_lowerNeck_BIND') mc.parent('C_Head_BIND', 'C_upperNeck_BIND') #mirror joints mc.mirrorJoint('L_Hip_BIND', mirrorYZ=True, mirrorBehavior=True, sr=['L', 'R']) mc.mirrorJoint('L_Clavicle_BIND', mirrorYZ=True, mirrorBehavior=True, sr=['L', 'R']) createRigControl()
def install_custom(self, joints): cmds.select(clear=True) ikJoints=[] if not self.mirrored: index=0 for joint in self.jointInfo: ikJoints.append(cmds.joint(n=self.moduleNamespace+":IK_"+joint[0], p=joint[1], absolute=True)) cmds.setAttr(ikJoints[index]+".visibility",0) if index!=0: cmds.joint(ikJoints[index-1],edit=True, oj="xyz", sao="yup") index+=1 else: rootJointName=self.jointInfo[0][0] tempDuplicateNodes=cmds.duplicate(self.originalModule+":IK_"+rootJointName, renameChildren=True) cmds.delete(tempDuplicateNodes.pop()) mirrorXY=False mirrorYZ=False mirrorXZ=False if self.mirrorPlane=="XY": mirrorXY=True elif self.mirrorPlane=="YZ": mirrorYZ=True elif self.mirrorPlane=="XZ": mirrorXZ=True mirrorBehavior=False if self.rotationFunction=="behaviour": mirrorBehaviour=True mirrorJoints=cmds.mirrorJoint(tempDuplicateNodes[0], mirrorXY=mirrorXY, mirrorYZ=mirrorYZ, mirrorXZ=mirrorXZ, mirrorBehavior=mirrorBehavior) cmds.delete(tempDuplicateNodes) cmds.xform(mirrorJoints[0], worldSpace=True, absolute=True, translation=cmds.xform(self.moduleNamespace+":"+rootJointName, q=True, worldSpace=True, translation=True)) for i in range(3): jointName=self.jointInfo[i][0] newName=cmds.rename(mirrorJoints[i], self.moduleNamespace+":IK_"+jointName) ikJoints.append(newName) utils.addNodeToContainer(self.containerName, ikJoints) for joint in ikJoints: jointName=utils.stripAllNamespaces(joint)[1] cmds.container(self.containerName, edit=True, publishAndBind=[joint+".rotate", jointName+"_R"]) cmds.setAttr(ikJoints[0]+".preferredAngleY", -50.0) cmds.setAttr(ikJoints[1]+".preferredAngleY", 50.0) ikNodes=utils.RP_2segment_stretchy_IK(ikJoints[0], ikJoints[1], ikJoints[2], self.containerName) locators=(ikNodes[0], ikNodes[1], ikNodes[2]) distanceNodes=ikNodes[3] constraints=[] for i in range(3): constraints.append(cmds.pointConstraint(self.getTranslationControl(joints[i]), locators[i], maintainOffset=False)[0]) cmds.parent(locators[i],self.moduleNamespace+":module_grp", absolute=True) cmds.setAttr(locators[i]+".visibility",0) utils.addNodeToContainer(self.containerName, constraints) scaleTarget=self.getTranslationControl(joints[1]) paRepresentation=self.createPreferredAngleRepresentation(ikJoints[1], scaleTarget) cmds.setAttr(paRepresentation+".axis",lock=True) #107
def mirror_and_rename(self): """ Gets the list of all the selected objects of type 'joint' and their hierarchy. Mirrors each joint (and child) on the YX axes and renames each joint substituting '_L_' with '_R_". """ objects_selected = cmds.ls(sl=True, l=True) or [] if objects_selected: if cmds.objectType(objects_selected[0]) == 'joint': cmds.mirrorJoint(objects_selected, myz=True, mb=True, sr=('_L_', '_R_')) else: cmds.warning("You must select an object")
def generate(self, params): print("OK !! " + str(params)) cmds.select(clear=True) cmds.joint(p=params["hip"]["point"],name="bassinBase") cmds.select("bassinBase") rigList = [params["neck"]["point"],params["shoulder_left"]["point"],params["elbow_left"]["point"],params["wrist_left"]["point"]] self.createListRig(rigList,"rigTop","bassinBase") cmds.select("bassinBase") rigList2 = [params["leg_left"]["point"],params["knee_left"]["point"],params["foot_left"]["point"]] self.createListRig(rigList2,"rigBot","bassinBase") cmds.select("rigTop1") cmds.mirrorJoint(mirrorYZ=True) cmds.select("rigBot0") cmds.mirrorJoint(mirrorYZ=True) cmds.select("bassinBase") cmds.select(params["mesh_name"],tgl=True) cmds.bindSkin()
def MirrorParent(): obj=cmds.ls(sl=True) #mirror leg chain cmds.mirrorJoint('L_hip_jnt',mirrorYZ=True,mirrorBehavior=True,searchReplace=('L_', 'R_') ) #mirror Arm chain cmds.mirrorJoint('L_collarBone_jnt',mirrorYZ=True,mirrorBehavior=True,searchReplace=('L_', 'R_') ) #parent collarbone to chest cmds.parent('L_collarBone_jnt','chest_jnt', r=False) cmds.parent('R_collarBone_jnt','chest_jnt', r=False) #parent hips to root #parent collarbone to chest cmds.parent('L_hip_jnt','root_jnt', r=False) cmds.parent('R_hip_jnt','root_jnt', r=False)
def mirror(rootList=[],locList=[],leftToRight=True): ''' Mirror rig template components @param rootList: List of template root joints to mirror. @type rootList: list @param locList: List of template locators to mirror. @type locList: list @param leftToRight: Mirror from left to right if True. Mirror from right to left if False. @type leftToRight: bool ''' # ============== # - Check Side - # ============== src = 'lf_' dst = 'rt_' if not leftToRight: src = 'rt_' dst = 'lf_' # ======================================== # - Removed Existing Desitination Joints - # ======================================== for root in rootList: if root.startswith(dst): mc.delete(root) # ====================== # - Mirror Root Joints - # ====================== # Mirror Joints for root in rootList: # Check Side if root.startswith(src): # Mirror Joint mirrorJoint = mc.mirrorJoint(root,mirrorYZ=True,mirrorBehavior=True,searchReplace=[src,dst]) # Colour Hierarchy glTools.utils.colorize.colourHierarchy(root) glTools.utils.colorize.colourHierarchy(mirrorJoint[0]) # =================== # - Mirror Locators - # =================== # Mirror Locator using Match() for loc in locList: # Check Side if loc.startswith(src): # Mirror Locator glTools.tools.match.Match().twin(loc)
def mirror_chain(self, side=None): #--- create one temporary joint at the origin tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.fk_joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if side == 'L': self.mirrored_fk_joint_names = cmds.mirrorJoint( self.fk_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'R')) elif side == 'l': self.mirrored_fk_joint_names = cmds.mirrorJoint( self.fk_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'r')) elif side == 'R': self.mirrored_fk_joint_names = cmds.mirrorJoint( self.fk_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'L')) elif side == 'r': self.mirrored_fk_joint_names = cmds.mirrorJoint( self.fk_joint_names[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=(side, 'l')) else: self.mirrored_fk_joint_names = cmds.mirrorJoint( self.fk_joint_names[0], mirrorYZ=1, mirrorBehavior=1) #unparent the chain and delete the temporary joint cmds.parent(self.fk_joint_names[0], self.mirrored_fk_joint_names[0], world=1) cmds.delete(tmp_jnt) cmds.select(clear=1) return self.mirrored_fk_joint_names
def mmMirrorJoint(*args): sels = cmds.ls(sl=1) for sel in sels: srcStr = '' trgStr = '' if sel.find('_L_') != -1: other = sel.replace('_L_', '_R_') srcStr = '_L_' trgStr = '_R_' elif sel.find('_R_') != -1: other = sel.replace('_R_', '_L_') srcStr = '_R_' trgStr = '_L_' else: continue if not cmds.objExists(other): cmds.mirrorJoint(sel, mirrorYZ=1, mirrorBehavior=1, searchReplace=["_L_", "_R_"]) else: mtxTop = cmds.getAttr(sel + '.wm') mtxTop[1] *= -1 mtxTop[2] *= -1 mtxTop[5] *= -1 mtxTop[6] *= -1 mtxTop[9] *= -1 mtxTop[10] *= -1 mtxTop[12] *= -1 cmds.xform(other, ws=1, matrix=mtxTop) children = cmds.listRelatives(sel, c=1, ad=1) for child in children: mtx = cmds.getAttr(child + '.m') mtx[12] *= -1 mtx[13] *= -1 mtx[14] *= -1 otherChild = child.replace(srcStr, trgStr) cmds.xform(otherChild, matrix=mtx)
def __mirror_chain(self): """ Mirror the created jointChain create one temporary joint at the origin """ if not self._mirror: return tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if self._side == 'L': self.mirrored_joint_names = cmds.mirrorJoint( self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'R')) elif self._side == 'R': self.mirrored_joint_names = cmds.mirrorJoint( self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'L')) else: self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True) #--- unparent the chain and delete the temporary joint cmds.parent(self.joint_names[0], self.mirrored_joint_names[0], world=True) cmds.delete(tmp_jnt) cmds.select(clear=True) #--- rename the side of the effector correctly and store the ik, eff in a list mirrored_ik = self.mirrored_joint_names[0][0] + self.ik_handle_names[ 0][1:] mirrored_eff = cmds.rename( self.mirrored_joint_names[-1], self.mirrored_joint_names[0][0] + self.ik_handle_names[-1][1:]) self.mirrored_ik_handle_names = [mirrored_ik, mirrored_eff] self.mirrored_joint_names.pop(-1)
def mirrorJoints(self, topJoint): """ mirroring joint, top node needs to contain 'l_' as prefix """ cmds.select(cl = True) cmds.joint(n = 'temp_jnt') cmds.select(topJoint, r = True) cmds.select('temp_jnt', tgl = True) self.toggleSelect(topJoint, 'temp_jnt') cmds.parent() cmds.select(topJoint, r = True) cmds.mirrorJoint(mirrorYZ = True, mirrorBehavior = True, searchReplace = ['l_', 'r_']) rJoint = 'r_' + topJoint.split('l_')[-1] cmds.select(topJoint, rJoint) cmds.parent(w = True) cmds.delete('temp_jnt')
def j_BodyFix(): # Get The Goal Joint position position = dict() dupJnt = [ 'ShoulderPart2_L', 'Elbow_L', 'ElbowPart1_L', 'HipPart2_L', 'Knee_L', 'KneePart1_L' ] for jnt in dupJnt: position[jnt] = mc.xform(jnt, ws=1, t=1, q=1) # Create Joint And Ikhandle From position newJnt = [] na = 1 for j in dupJnt: if mc.objExists(('Fix' + j)): mc.select(('Fix' + j), r=1) break newJnt.append(mc.joint(n=('Fix' + j), p=position[j], radius=1.75)) if na % 3 == 0: # Create IKHandle With ikRPsolver , Then Mirror With IkHandle mc.joint(newJnt[0], e=1, zso=1, oj='xyz', sao='yup') mc.joint(newJnt[1], e=1, zso=1, oj='xyz', sao='yup') mc.setAttr('%s.jointOrient' % newJnt[2], 0, 0, 0) ikhand = mc.ikHandle(name=('rpik_' + newJnt[1] + '01'), sj=newJnt[0], ee=newJnt[2], sol='ikSCsolver') mc.setAttr('%s.v' % ikhand[0], 0) # mirrorJoint -mirrorYZ -mirrorBehavior -searchReplace "_L" "_R"; mc.mirrorJoint(newJnt[0], mirrorYZ=1, mirrorBehavior=1, searchReplace=('_L', '_R')) mc.parent(ikhand[0], j) mc.parent((re.sub('_L', "_R", ikhand[0])), (re.sub('_L', '_R', j))) mc.parent(newJnt[0], dupJnt[na - 3]) mc.parent((re.sub("_L", "_R", newJnt[0])), (re.sub('_L', '_R', dupJnt[na - 3]))) newJnt = [] mc.select(clear=1) na = na + 1
def createJnts(self, eyeBrowVtxs): """ creating joints on selected vertaxes """ self.eyeBrowVtxs = eyeBrowVtxs sel = eval(self.eyeBrowVtxs) tempVerts = sel verts = self.sortSelected(tempVerts) cmds.select(cl = True) index = 1 for x in verts: vertPos = cmds.xform(x, t = True, q = True, ws = True) if vertPos[0] <= 0.05: baseCntJnt = cmds.joint(n = self.baseCntJntName + str(index).zfill(2) + self.jntSuffix, p = [ 0, self.browRotXCrvPos[1], self.browRotXCrvPos[2]]) ryCntJnt = cmds.joint(n = self.browRotYJntName.replace(self.prefix[0], self.cPrefix) + self.jntSuffix, p = [ 0, self.browRotYCrvPos[1], self.browRotYCrvPos[2]]) parentCntJnt = cmds.joint(n = self.parentCntJntName + str(index).zfill(2) + self.jntSuffix, p = vertPos) cmds.setAttr(baseCntJnt+'.rotateOrder', 2) cmds.joint(n = self.cPrefix + self.jntName + str(index), p = vertPos) cmds.joint(ryCntJnt, e=1, oj= 'zyx', secondaryAxisOrient = 'yup', ch=1, zso=1) cmds.select(cl = True) #- save base joints self.allBaseJnts.append(baseCntJnt) else: baseJnt = cmds.joint(n = self.baseJntName + str(index).zfill(2) + self.jntSuffix, p = self.browRotXCrvPos) ryJnt = cmds.joint(n = self.browRotYJntName + str(index).zfill(2)+ self.jntSuffix, p = self.browRotYCrvPos ) parentJnt = cmds.joint(n = self.parentJntName + str(index).zfill(2) + self.jntSuffix, p = vertPos) cmds.setAttr(baseJnt+'.rotateOrder', 2) cmds.joint(n = self.ljntName + str(index) + self.jntSuffix, p = vertPos) cmds.select(cl = True) cmds.joint(ryJnt, e=1, oj= 'zyx', secondaryAxisOrient = 'yup', ch=1, zso=1) #- miorroring joints #- so far mirroring in Util module does not work with this code #- self.mirrorJoints(baseJnt, prefix = self.prefix) mirrJnt = cmds.mirrorJoint(baseJnt, mirrorYZ= True, searchReplace=(self.prefix[0], self.prefix[1]), mirrorBehavior = 1) cmds.joint(mirrJnt, e=1, oj= 'zyx', secondaryAxisOrient = 'yup', ch=1, zso=1) cmds.select(cl = True) index = index + 1 #- save base joints self.allBaseJnts.append(baseJnt) self.allBaseJnts.append(baseJnt.replace(self.prefix[0], self.prefix[1])) return self.allBaseJnts
def mirrorJoints(): sel = cmds.ls(sl=True) #joint selection for j in sel: #loop through selected joints mj = cmds.mirrorJoint(j, mirrorYZ=True, searchReplace=["_R", "_L"]) #mirror the joint mj = mj[0] #redefine result as string using the first object ry = cmds.getAttr("%s.rotateY" % mj) #get rotate Y rz = cmds.getAttr("%s.rotateZ" % mj) #get rotate Z cmds.setAttr("%s.rotateY" % mj, ry * -1) #correct Y rotation cmds.setAttr("%s.rotateZ" % mj, rz * -1) #correct Z rotation cmds.setAttr("%s.side" % mj, 1) #set joint label side to "Left" cmds.color(mj, ud=6) #change joint colour
def similarPose(self, jnt): tmp = [] parents = [] #called zeroOut class zero = zeroOut() if 'L_' in jnt: tmp = cmds.joint(jnt, n='replace_' + jnt) cmds.parent(tmp, w=1) cmds.mirrorJoint(tmp, mirrorYZ=True, mirrorBehavior=True, searchReplace=('L_', 'R_')) ls = cmds.listRelatives(jnt.replace('L_', 'R_'), c=True) if ls is not None: cmds.parent(ls, w=True) cmds.delete( cmds.parentConstraint(tmp.replace('L_', 'R_'), jnt.replace('L_', 'R_'), w=1)) cmds.parent(ls, jnt.replace('L_', 'R_')) cmds.delete(tmp, tmp.replace('L_', 'R_')) zero.zeroOutJoint(jnt) zero.zeroOutJoint(jnt.replace('L_', 'R_')) else: cmds.delete( cmds.parentConstraint(tmp.replace('L_', 'R_'), jnt.replace('L_', 'R_'), w=1)) cmds.delete(tmp, tmp.replace('L_', 'R_')) zero.zeroOutJoint(jnt) zero.zeroOutJoint(jnt.replace('L_', 'R_')) else: zero.zeroOutJoint(jnt) return
def __mirror_chain(self): """ Mirror the created jointChain create one temporary joint at the origin """ if not self._mirror: return tmp_jnt = cmds.joint(position=[0, 0, 0]) #--- parent the chain to that joint cmds.parent(self.joint_names[0], tmp_jnt) #--- mirror the chain and rename the mirrored side if self._side == 'L': self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'R')) elif self._side == 'R': self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True, searchReplace=(self._side, 'L')) else: self.mirrored_joint_names = cmds.mirrorJoint(self.joint_names[0], mirrorYZ=True, mirrorBehavior=True) #--- unparent the chain and delete the temporary joint cmds.parent(self.joint_names[0], self.mirrored_joint_names[0], world=True) cmds.delete(tmp_jnt) cmds.select(clear=True) #--- rename the side of the effector correctly and store the ik, eff in a list mirrored_ik = self.mirrored_joint_names[0][0] + self.ik_handle_names[0][1:] mirrored_eff = cmds.rename(self.mirrored_joint_names[-1], self.mirrored_joint_names[0][0] + self.ik_handle_names[-1][1:]) self.mirrored_ik_handle_names = [mirrored_ik, mirrored_eff] self.mirrored_joint_names.pop(-1)
def createJoints(self): #create joint list self.baseJoints = [] for i in range(len(self.jointList)): self.baseJoints.append("%s_%s"%(self.jointList[i], self.jointSuffix)) #populate IK list for baseJoint in self.baseJoints: ikName = "%s_IK_%s"%(self.prefix, baseJoint) self.IKJointOrig.append(ikName) #populate FK list for baseJoint in self.baseJoints: fkName = "%s_FK_%s"%(self.prefix, baseJoint) self.FKJointOrig.append(fkName) #populate bind list for baseJoint in self.baseJoints: bindName = "%s_bind_%s"%(self.prefix, baseJoint) self.bindJointOrig.append(bindName) #populate measure list for baseJoint in self.baseJoints: measureName = "%s_measure_%s"%(self.prefix, baseJoint) self.measureJointOrig.append(measureName) #create joints, parent, orient for each of (IK, FK, Bind, Measure) for chain in self.jointChains: for j in range(len(self.locList)): list = "self.%sJointOrig"%chain #get loc position locPos = cmds.xform(self.locList[j], q=True, ws=True, rp=True) cmds.select(cl=True) #create joints on loc cmds.joint(name=(eval("%s[j]"%list)), p=locPos) #parent up the joints to each other from each chain #ik for i in range(len(self.locList)-1, 0, -1): cmds.parent(self.IKJointOrig[i], self.IKJointOrig[i-1]) #fk for i in range(len(self.locList)-1, 0, -1): cmds.parent(self.FKJointOrig[i], self.FKJointOrig[i-1]) #bind for i in range(len(self.locList)-1, 0, -1): cmds.parent(self.bindJointOrig[i], self.bindJointOrig[i-1]) #measure for i in range(len(self.locList)-1, 0, -1): cmds.parent(self.measureJointOrig[i], self.measureJointOrig[i-1]) #orient the joint chains according to settings above #first letter in joint oj=flag. Second letter in xyz would be the secondary axis, this is +/-, which would then go into sao="letter"up/down flag. order = {1:"x", 2:"y", 3:"z"} self.jAxis1 = order[self.mainAxis] self.jAxis2 = order[self.secondaryAxis] ROPart = self.jAxis1 + self.jAxis2 if (ROPart == "xy") or (ROPart == "yx"): self.jointOrientation = ROPart + "z" if (ROPart == "xz") or (ROPart=="zx"): self.jointOrientation = ROPart + "y" if (ROPart=="yz") or (ROPart=="zy"): self.jointOrientation = ROPart + "x" #get positive or negative if self.posNeg == 1: direct = "up" if self.posNeg == 2: direct = "down" #get the up/down secondary axis string minorAxis = self.jAxis2 + direct #orient the joints cmds.joint(self.IKJointOrig[0], e=True, oj = self.jointOrientation, ch=True, sao=minorAxis, zso=True ) cmds.joint(self.FKJointOrig[0], e=True, oj = self.jointOrientation, ch=True, sao=minorAxis, zso=True ) cmds.joint(self.measureJointOrig[0], e=True, oj = self.jointOrientation, ch=True, sao=minorAxis, zso=True ) cmds.joint(self.bindJointOrig[0], e=True, oj = self.jointOrientation, ch=True, sao=minorAxis, zso=True ) #mirroring - from here out prefix is repr by list (prefixList) if self.mirror: if self.prefix == "lf": self.prefixList = ["lf", "rt"] elif self.prefix == "rt": self.prefixList = ["rt", "lf"] else: self.prefixList = [self.prefix, self.mirrorName] else: self.prefixList = [self.prefix] if self.mirror: #get mirror plane, then mirror joint chain if self.mirrorAxis=="xy": self.IKJointMirror = cmds.mirrorJoint(self.IKJointOrig[0], mxy=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.FKJointMirror = cmds.mirrorJoint(self.FKJointOrig[0], mxy=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.measureJointMirror = cmds.mirrorJoint(self.measureJointOrig[0], mxy=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.bindJointMirror = cmds.mirrorJoint(self.bindJointOrig[0], mxy=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) elif self.mirrorAxis == "yz": self.IKJointMirror = cmds.mirrorJoint(self.IKJointOrig[0], myz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.FKJointMirror = cmds.mirrorJoint(self.FKJointOrig[0], myz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.measureJointMirror = cmds.mirrorJoint(self.measureJointOrig[0], myz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.bindJointMirror = cmds.mirrorJoint(self.bindJointOrig[0], myz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) elif self.mirrorAxis == "xz": self.IKJointMirror = cmds.mirrorJoint(self.IKJointOrig[0], mxz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.FKJointMirror = cmds.mirrorJoint(self.FKJointOrig[0], mxz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.measureJointMirror = cmds.mirrorJoint(self.measureJointOrig[0], mxz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) self.bindJointMirror = cmds.mirrorJoint(self.bindJointOrig[0], mxz=True, mb=True, sr=(self.prefixList[0], self.prefixList[1])) #now set up list for each type of chain, gets "orig" version and if mirror from uI, then gets "mirror" version of chain appended to the end self.IKChains.append(self.IKJointOrig) if self.mirror: self.IKChains.append(self.IKJointMirror) self.FKChains.append(self.FKJointOrig) if self.mirror: self.FKChains.append(self.FKJointMirror) self.measureChains.append(self.measureJointOrig) if self.mirror: self.measureChains.append(self.measureJointMirror) self.bindChains.append(self.bindJointOrig) if self.mirror: self.bindChains.append(self.bindJointMirror) #start the measure method - go through this once for each chain for x in range(len(self.prefixList)): self.setupMeasure(self.prefixList, x)
def buildLegs(): leg_List = encodeList(cmds.listRelatives('leg_Ls')) for item in leg_List: if item != 'L_heel': createJoint(item) cmds.mirrorJoint('L_hip',searchReplace=('L_', 'R_'))
def buildArms(): arm_List = encodeList(cmds.listRelatives('arm_Ls')) for item in arm_List: createJoint(item) cmds.mirrorJoint('L_clavicle',searchReplace=('L_', 'R_'))
def install_custom(self, joints): cmds.select(clear=True) ikJoints=[] if not self.mirrored: index = 0 for joint in self.jointInfo: ikJoints.append(cmds.joint(n=self.moduleNamespace+":IK_"+joint[0], p=joint[1], absolute=True, rotationOrder="xyz")) cmds.setAttr(ikJoints[index]+".visibility", 0) if index != 0: cmds.joint(ikJoints[index -1], edit=True, oj="xyz", sao="yup") index += 1 else: rootJointName = self.jointInfo[0][0] tempDuplicateNodes = cmds.duplicate(self.originalModule+":IK_"+rootJointName, renameChildren=True) cmds.delete(tempDuplicateNodes.pop()) mirrorXY = False mirrorYZ = False mirrorXZ = False if self.mirrorPlane == "XY": mirrorXY = True elif self.mirrorPlane == "YZ": mirrorYZ = True elif self.mirrorPlane == "XZ": mirrorXZ = True mirrorBehavior = False if self.rotationFunction == "behavior": mirrorBehavior = True mirrorJoints = cmds.mirrorJoint(tempDuplicateNodes[0], mirrorXY=mirrorXY, mirrorXZ=mirrorXZ, mirrorYZ=mirrorYZ, mirrorBehavior=mirrorBehavior) cmds.delete(tempDuplicateNodes) cmds.xform(mirrorJoints[0], ws=True, a=True, translation=cmds.xform(self.moduleNamespace+":"+rootJointName, q=True, ws=True, t=True)) for i in range(3): jointName = self.jointInfo[i][0] newName = cmds.rename(mirrorJoints[i], self.moduleNamespace+":IK_"+jointName) ikJoints.append(newName) utils.addNodeToContainer(self.containerName, ikJoints) for joint in ikJoints: jointName = utils.stripAllNamespaces(joint)[1] cmds.container(self.containerName, edit=True, publishAndBind=[joint+".rotate", jointName+"_R"]) cmds.setAttr(ikJoints[0]+".preferredAngleY", -50.0) cmds.setAttr(ikJoints[1]+".preferredAngleY", 50.0) # Call on the stretchy ik function from utils ikNodes = utils.RP_2segment_stretchy_IK(ikJoints[0], ikJoints[1], ikJoints[2], self.containerName) locators = (ikNodes[0], ikNodes[1], ikNodes[2]) distanceNodes = ikNodes[3] # Point constraint stretch locators to transform control objects constraints = [] for i in range(3): constraints.append(cmds.pointConstraint(self.getTranslationControl(joints[i]), locators[i], maintainOffset=False)[0]) cmds.parent(locators[i], self.moduleNamespace+":module_grp", absolute=True) cmds.setAttr(locators[i]+".visibility", 0) utils.addNodeToContainer(self.containerName, constraints) scaleTarget = self.getTranslationControl(joints[1]) paRepresentation = self.createPreferredAngleRepresentation(ikJoints[1], scaleTarget) cmds.setAttr(paRepresentation+".axis", lock=True)
def __init__(self): #SKELETON getGuide=cmds.ls("*_guide") legRightFull=("legRight_guide", "leghipRight_guide", "legkneeRight_guide", "foottalusRight_guide") legRight=("leghipRight_guide", "legkneeRight_guide", "foottalusRight_guide") getLimbs=( legRightFull) cmds.select(cl=1) for item in getLimbs: jointSuffix='_jnt' getClass.rigJoints(item, jointSuffix) cmds.select(cl=1) for each in legRight: jointSuffix='FK_jnt' getClass.rigJoints(each, jointSuffix) cmds.select(cl=1) for each in legRight: jointSuffix='IK_jnt' getClass.rigJoints(each, jointSuffix) cmds.select(cl=1) cmds.mirrorJoint("legRight_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("leghipRightIK_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("leghipRightFK_jnt", myz=1, sr=("Right", "Left")) resetOrient=["legLeft_jnt", "legRight_jnt", "leghipRightFK_jnt", "leghipRightIK_jnt", "leghipLeftIK_jnt", "leghipLeftFK_jnt" ] for each in resetOrient: cmds.joint( each, e=1, children=1, zso=1, oj='xyz', sao='yup', spa=1) ######################################################################### ######################################################################### ######################################################################### ######################################################################### #controllers Side=["Right", "Left"] for eachSide in Side: translations=[".tx", ".ty", ".tz"] rotation=[".rx", ".ry", ".rz"] jointGroup=[ "leghip"+eachSide, "legknee"+eachSide, "foottalus"+eachSide, ] cmds.group( em=True, name='IK_grp' ) groupCtrls=[] for eachjoint in jointGroup: scaleWorldMatrix = cmds.xform(eachjoint.split(eachSide)[0]+"Right_guide", q=True, r=1, s=True) scaleWorldMatrix=int(scaleWorldMatrix[0]) eachPiece=eachjoint+"_jnt" name=eachjoint+"_ctrl" grpname=eachjoint+"_grp" if "hip" in eachjoint: size=12*scaleWorldMatrix colour=6 else: size=7*scaleWorldMatrix colour=6 if "talus" in eachjoint: nrx=0 nry=1 nrz=0 else: nrx=1 nry=0 nrz=0 cmds.select(cl=1) getTranslation, getRotation=getClass.locationXForm(eachPiece) getClass.buildCtrl(eachjoint, name, grpname, getTranslation, getRotation, size, colour, nrx, nry, nrz) colour1=18 colour2=colour1 colour3=colour1 if "knee" in eachjoint: pass else: getClass.guideBuild(eachjoint, getTranslation, getRotation, colour1, colour2, colour3 ) getsel=cmds.ls(sl=1) cmds.setAttr(getsel[0]+".overrideColor", colour1) lognm=each.replace("grp", 'nod') cmds.rename(getsel[0], getsel[0]+'_nod') getsel=cmds.ls(sl=1) getClass.buildGrp(getsel[0]) if "knee" in eachjoint: cmds.setAttr(name+".sx" , keyable=0, lock=1) cmds.setAttr(name+".sy" , keyable=0, lock=1) cmds.setAttr(name+".sz", keyable=0, lock=1) cmds.setAttr(name+".rx" , keyable=0, lock=1) cmds.setAttr(name+".ry", keyable=0, lock=1) cmds.setAttr(name+".tx" , keyable=0, lock=1) cmds.setAttr(name+".ty" , keyable=0, lock=1) cmds.setAttr(name+".tz", keyable=0, lock=1) if "hip" in eachjoint or "talus" in eachjoint: cmds.setAttr(name+".sx" , keyable=0, lock=1) cmds.setAttr(name+".sy" , keyable=0, lock=1) cmds.setAttr(name+".sz", keyable=0, lock=1) cmds.setAttr(name+".tx" , keyable=0, lock=1) cmds.setAttr(name+".ty" , keyable=0, lock=1) cmds.setAttr(name+".tz", keyable=0, lock=1) jointGroup=[ "leghip"+eachSide+"", "foottalus"+eachSide+"", ] #ik IKHandlesLimbs=[ "legknee"+eachSide, "foottalus"+eachSide ] for each in IKHandlesLimbs: name=each+"_jnt_ikPole_lctr" grpname=each+"_jnt_ikPole_lctr_grp" num=3*scaleWorldMatrix color=13 getTranslation=cmds.xform(each+"_jnt", q=1, t=1, ws=1) if "knee" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( 0.0, 0.0, +30.0,grpname,r=1, rpr=1) #cmds.spaceLocator(n=each+"_jnt_ikPole_lctr", p=(getTranslation[0], getTranslation[1], getTranslation[2]+30)) elif "talus" in each and "Right" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( -40.0, 0.0, +30.0,grpname,r=1, rpr=1) #cmds.spaceLocator(n=each+"_jnt_ikPole_lctr", p=(getTranslation[0]-40, getTranslation[1], getTranslation[2])) elif "talus" in each and "Left" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( 40.0, 0.0, +30.0,grpname,r=1, rpr=1) #cmds.spaceLocator(n=each+"_jnt_ikPole_lctr", p=(getTranslation[0]+40, getTranslation[1], getTranslation[2])) else: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) #cmds.spaceLocator(n=each+"_jnt_ikPole_lctr", p=(getTranslation[0], getTranslation[1], getTranslation[2])) # cmds.setAttr(each+"_jnt_ikPole_lctr"+"Shape.overrideEnabled", 1) # cmds.setAttr(each+"_jnt_ikPole_lctr"+"Shape.overrideColor", 13) # cmds.setAttr(each+"_jnt_ikPole_lctr"+"Shape.localScaleX", 3) # cmds.setAttr(each+"_jnt_ikPole_lctr"+"Shape.localScaleY", 3) # cmds.setAttr(each+"_jnt_ikPole_lctr"+"Shape.localScaleZ", 3) # cmds.CenterPivot() # cmds.group(n=each+"_jnt_ikPole_lctr"+"_grp") getTranslation=cmds.xform(each+"_jnt", q=1, t=1, ws=1) cmds.move(getTranslation[0], getTranslation[1], getTranslation[2],each+"_jnt_ikPole_lctr"+"_grp"+".rotatePivot", ws=1, rpr=1 ) if 'talus' in each: cmds.setAttr(each+"_jnt_ikPole_lctr.visibility", 0) cmds.ikHandle(n="foottalus"+eachSide+"_ik", sj="leghip"+eachSide+"IK_jnt", ee="foottalus"+eachSide+"IK_jnt", sol="ikRPsolver") cmds.setAttr("foottalus"+eachSide+"_ik.visibility", 0) #connect cmds.addAttr("leghip"+eachSide+"_ctrl", ln=eachSide+"LegFK_IK", min=0, max=1, at="double", en="FK:IK:", k=1, nn=eachSide+"LegFK_IK") cmds.setAttr("leghip"+eachSide+"_ctrl."+eachSide+"LegFK_IK", 1) Controller="leghip"+eachSide+"_ctrl."+eachSide+"LegFK_IK" bodyskel=[ "leghip"+eachSide, "legknee"+eachSide, "foottalus"+eachSide ] for each in bodyskel: getClass.blendColors(each, Controller) ######## #Parenting controllers ######## cmds.parent("legknee"+eachSide+"_grp ", "leghip"+eachSide+"_ctrl") cmds.parent("foottalus"+eachSide+"_grp", "legknee"+eachSide+"_ctrl") ########LEGS #Connect Blender Controls for IK/FK switch ######## #cmds.parent("leghip"+eachSide+"FK_jnt", "leghip"+eachSide+"_ctrl") cmds.connectAttr ("leghip"+eachSide+"_ctrl.rotate","leghip"+eachSide+"FK_jnt.rotate", f=1) cmds.connectAttr ("legknee"+eachSide+"_ctrl.rotate","legknee"+eachSide+"FK_jnt.rotate", f=1) cmds.connectAttr ("foottalus"+eachSide+"_ctrl.rotate","foottalus"+eachSide+"FK_jnt.rotate", f=1) cmds.connectAttr("legknee"+eachSide+"_jnt_ikPole_lctr.translateX", "foottalus"+eachSide+"_jnt_ikPole_lctr_grp.rotateY", f=1) cmds.poleVectorConstraint("legknee"+eachSide+"_jnt_ikPole_lctr", "foottalus"+eachSide+"_ik") #set visibility ChildActivatedValue=1 ChildDeactivatedValue=0 ControllerSecondValue=1 ControllerFirstValue=0 Children=["legknee"+eachSide+"_ctrl.visibility", "foottalus"+eachSide+"_ctrl.visibility", "leghip"+eachSide+"_ctrl.visibility"] Controller="leghip"+eachSide+"_ctrl."+eachSide+"LegFK_IK" defaultSet=0 for eachChild in Children: getClass.controlFirstValueChildOn(Controller, eachChild, defaultSet, ChildActivatedValue, ChildDeactivatedValue, ControllerSecondValue, ControllerFirstValue) ChildActivatedValue=1 ChildDeactivatedValue=0 ControllerSecondValue=1 ControllerFirstValue=0 Child="legknee"+eachSide+"_jnt_ikPole_lctr.visibility" Controller="leghip"+eachSide+"_ctrl."+eachSide+"LegFK_IK" defaultSet=1 getClass.controlSecondValueChildOn(Controller, Child, defaultSet, ChildActivatedValue, ChildDeactivatedValue, ControllerSecondValue, ControllerFirstValue) cmds.parent("foottalus"+eachSide+"_ik", "foottalus"+eachSide+"_nod") cmds.parent("legknee"+eachSide+"_jnt_ikPole_lctr_grp", "foottalus"+eachSide+"_nod") cmds.parent("leg"+eachSide+"_jnt", "leghip"+eachSide+"_nod") cmds.parent("leghip"+eachSide+"_ctrl", "leghip"+eachSide+"_nod") #cmds.parent("leghip"+eachSide+"IK_jnt", "leghip"+eachSide+"_nod") #cmds.parent("leghip"+eachSide+"_jnt", "leghip"+eachSide+"_nod") cmds.parent("leghip"+eachSide+"_grp", "leghip"+eachSide+"_nod") #cmds.pointConstraint("leghip"+eachSide+"FK_jnt", "leghip"+eachSide+"_ctrl") getIKClass.stretch("leghip"+eachSide+"IK_jnt")
def joint_left_add(): # メッセージ cmds.inViewMessage(amg="<hl>「足のIK設置」</hl>を押してください。", pos="midCenter", fade=True, fit=1, fst=4000, fts=20) cmds.mirrorJoint("Hip_R", myz=True, mb=True, sr=("_R", "_L")) cmds.mirrorJoint("Scapula_R", myz=True, mb=True, sr=("_R", "_L"))
def install(self): cmds.namespace(setNamespace = ":") cmds.namespace(add=self.module_namespace) self.joints_grp = cmds.group(empty=True, name=self.module_namespace+":joints_grp") self.hierarchy_grp = cmds.group(empty=True, name=self.module_namespace+":hierarchy_grp") self.ori_ctrl_grp = cmds.group(empty=True, name=self.module_namespace+":orientationControls_grp") self.module_grp = cmds.group([self.joints_grp, self.hierarchy_grp, self.ori_ctrl_grp], name=self.module_namespace+":module_grp") cmds.container(name=self.container_name, addNode=self.module_grp, ihb=True) cmds.select(clear=True) index = 0 joints = [] for joint in self.joint_info: joint_name = joint[0] joint_pos = joint[1] parent_joint = "" if index > 0: parent_joint = self.module_namespace+":"+self.joint_info[index-1][0] cmds.select(parent_joint, replace=True) joint_name_full = cmds.joint(n=self.module_namespace+":"+joint_name, p=joint_pos) joints.append(joint_name_full) cmds.setAttr(joint_name_full+".visibility", 0) utils.add_node_to_container(self.container_name, joint_name_full) cmds.container( self.container_name, edit=True, publishAndBind=[joint_name_full+".rotate", joint_name+"_R"] ) cmds.container( self.container_name, edit=True, publishAndBind=[joint_name_full+".rotateOrder", joint_name+"_rotateOrder"] ) if index > 0: cmds.joint(parent_joint, edit=True, orientJoint="xyz", sao="yup") index += 1 if self.mirrored: mirror_xy = False mirror_yz = False mirror_xz = False if self.mirror_plane == "XY": mirror_xy = True elif self.mirror_plane == "YZ": mirror_yz = True elif self.mirror_plane == "XZ": mirror_xz = True mirror_behavior = False if self.rotation_function == "behavior": mirror_behavior = True mirror_nodes = cmds.mirrorJoint( joints[0], mirrorXY=mirror_xy, mirrorYZ=mirror_yz, mirrorXZ=mirror_xz, mirrorBehavior=mirror_behavior ) cmds.delete(joints) mirrored_joints = [] for node in mirror_nodes: if cmds.objectType(node, isType="joint"): mirrored_joints.append(node) else: cmds.delete(node) index = 0 for joint in mirrored_joints: joint_name = self.joint_info[index][0] new_joint_name = cmds.rename(joint, self.module_namespace+":"+joint_name) self.joint_info[index][1] = cmds.xform(new_joint_name, query=True, worldSpace=True, translation=True) index += 1 cmds.parent(joints[0], self.joints_grp, absolute=True) self.init_module_trans(self.joint_info[0][1]) trans_ctrl = [] for joint in joints: trans_ctrl.append(self.create_trans_ctrl_at_joint(joint)) root_joint_point_con = cmds.pointConstraint( trans_ctrl[0], joints[0], maintainOffset=False, name=joints[0]+"_pointConstraint" ) utils.add_node_to_container(self.container_name, root_joint_point_con) self.initialize_hook(trans_ctrl[0]) # Set up stretchy joint segment for index in range(len(joints)-1): self.setup_stretchy_jnt_segment(joints[index], joints[index+1]) self.install_custom(joints) utils.force_scene_update() cmds.lockNode(self.container_name, lock=True, lockUnpublished=True)
def createLimb(self, controlSize): cmds.select(cl=1) Hooffront=("anklefrontRight_guide","toefrontRight_guide", "toeTipFrontRight_guide") HoofIKfront=("heelfrontRight_guide", "toefrontRight_guide", "anklefrontRight_guide") Hoofrear=("anklerearRight_guide","toerearRight_guide", "toeTipRearRight_guide") HoofIKrear=("heelrearRight_guide", "toerearRight_guide", "anklerearRight_guide") for each in Hoofrear: jointSuffix=each.split("_guide")[0]+"_jnt" getTranslation=cmds.xform(each, q=1, t=1, ws=1) cmds.joint(n=jointSuffix, p=getTranslation) cmds.select(cl=1) for each in HoofIKrear: jointSuffix=each.split("_guide")[0]+"IK_jnt" getTranslation=cmds.xform(each, q=1, t=1, ws=1) cmds.joint(n=jointSuffix, p=getTranslation) cmds.select(cl=1) for each in Hooffront: jointSuffix=each.split("_guide")[0]+"_jnt" getTranslation=cmds.xform(each, q=1, t=1, ws=1) cmds.joint(n=jointSuffix, p=getTranslation) cmds.select(cl=1) for each in HoofIKfront: jointSuffix=each.split("_guide")[0]+"IK_jnt" getTranslation=cmds.xform(each, q=1, t=1, ws=1) cmds.joint(n=jointSuffix, p=getTranslation) cmds.select(cl=1) cmds.mirrorJoint("anklefrontRight_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("heelfrontRightIK_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("anklerearRight_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("heelrearRightIK_jnt", myz=1, sr=("Right", "Left")) ######################################################################### ######################################################################### ######################################################################### ######################################################################### Side=["Right", "Left"] DepthDimension=["front", "rear"] for eachSide in Side: for eachDim in DepthDimension: resetOrient=[ "ankle"+eachDim+eachSide+"_jnt", "heel"+eachDim+eachSide+"IK_jnt", ] for each in resetOrient: cmds.joint( each, e=1, children=1, zso=1, oj='xyz', sao='ydown', spa=1) locsForCleanup=[] #locators legRFL=( "heel"+eachDim+eachSide+"_guide", "toe"+eachDim+eachSide+"_jnt", "ankle"+eachDim+eachSide+"_jnt") for each in legRFL: getName=each.split("_")[0]+'_lctr' transformWorldMatrix, rotateWorldMatrix=getClass.locationXForm(each) RFLitem=cmds.spaceLocator(n=getName, p=(transformWorldMatrix[0],0, transformWorldMatrix[2])) locsForCleanup.append(RFLitem) cmds.CenterPivot() #ik hookup startLegJoint=["ankle"+eachDim+eachSide+"_jnt", ] IKleglist=[ "toe"+eachDim+eachSide, ] for each, item in map(None, IKleglist, startLegJoint): cmds.ikHandle(n=each+"_ik", sj=item, ee=each+"_jnt", sol="ikSCsolver") #cmds.setAttr(each+"_ik.visibility", 0) cmds.parent(each+"_ik", each+"IK_jnt") jointGroup=[ "toe"+eachDim+eachSide, ] for eachjoint in jointGroup: eachName=eachjoint+"_jnt" getTranslation=cmds.xform(eachName, q=1, t=1, ws=1) cmds.spaceLocator(n=str(eachName)+"Pole_lctr", p=(getTranslation)) cmds.CenterPivot() cmds.setAttr(str(eachName)+"Pole_lctr.visibility", 0) #cmds.poleVectorConstraint("toe"+eachDim+eachSide+"_jntPole_lctr", "toe"+eachDim+eachSide+"_ik") cmds.parent("toe"+eachDim+eachSide+"_ik", "heel"+eachDim+eachSide+"IK_jnt") #CONTROLLER name="heel"+eachDim+eachSide+"IK_ctrl" grpname="heel"+eachDim+eachSide+"IK_grp" numlen=controlSize[1] numwid=controlSize[0] colour=13 transformWorldMatrix=cmds.xform("heel"+eachDim+eachSide+"_guide", q=1, t=1, ws=1) #pivtransformWorldMatrix, rotateWorldMatrix=getClass.locationXForm(each)ankleLeft_jnt rotateWorldMatrix=[0,0,0] getClass.rectI(name, grpname, numlen, numwid, transformWorldMatrix, rotateWorldMatrix, colour) cmds.move(0, 0, controlSize[2], name ,r=1, rpr=1, ) cmds.move(0, 0, -controlSize[2], name+".rotatePivot" ,r=1, rpr=1 ) cmds.makeIdentity(name, a=True, t=1, s=1, r=1, n=0) cmds.parentConstraint("heel"+eachDim+eachSide+"IK_ctrl", "heel"+eachDim+eachSide+"IK_jnt", mo=1, w=1) #use only if controller is lacking these attributes cmds.addAttr("heel"+eachDim+eachSide+"IK_ctrl", ln="RaiseHeel", at="long", min=-90, max=90, dv=0, k=1, nn="RaiseHeel") footAttributes=["TipToe", "RaiseToe", "PivotToe", "SwivelHeel"] for each in footAttributes: cmds.addAttr("heel"+eachDim+eachSide+"IK_ctrl", ln=each, at="long", min=-90, max=90, dv=0, k=1, nn=each) cmds.connectAttr ("heel"+eachDim+eachSide+"IK_ctrl.RaiseHeel", "toe"+eachDim+eachSide+"IK_jnt.rotateZ", f=1) cmds.connectAttr ("heel"+eachDim+eachSide+"IK_ctrl.PivotToe", "toe"+eachDim+eachSide+"IK_jnt.rotateY", f=1) cmds.connectAttr ("heel"+eachDim+eachSide+"IK_ctrl.SwivelHeel", "heel"+eachDim+eachSide+"IK_jnt.rotateY", f=1) cmds.orientConstraint("ankle"+eachDim+eachSide+"IK_jnt", "ankle"+eachDim+eachSide+"_jnt", mo=1, w=1) cmds.pointConstraint("toe"+eachDim+eachSide+"IK_jnt", "toe"+eachDim+eachSide+"_ik", mo=1) # for each in locsForCleanup: # cmds.delete(each)
def HandlesCallback(*pArgs): l_armPosition = cmds.joint('leftArmIK', query=True, position=True) armHandle = cmds.circle() #cmds.select('leftShoulder') cmds.move(int((l_armPosition)) def BindCallback(*Args): #cmds.select('root') cmds.bindSkin('root') def MirrorCallback(*pArgs): if cmds.objExists('rightShoulder'): cmds.delete('rightShoulder') #cmds.delete('rightArmIK') else: cmds.mirrorJoint('leftShoulder', myz=True, mxz=True, searchReplace=['left','right']) if cmds.objExists('right_upLeg'): cmds.delete('right_upLeg') #cmds.delete('rightLegIK') else: cmds.mirrorJoint('left_upLeg', myz=True,searchReplace=['left','right']) def SampleCallback(field, *pArgs): centerX = 0 centerY = 15 centerZ = 0 if cmds.objExists('root'): cmds.delete('root') rootJoint = cmds.joint(p=(0,centerY,0), name='root') numSpineJoints = cmds.intField(field, query=True, value=True) #pNumSpine = numSpineJoints for i in range(1,numSpineJoints): cmds.joint(p=(0,(2*i+centerY),0), name='spine#') #cmds.ikHandle(sj='spine1',ee='spine5', name='spineHandleIK') cmds.select('spine'+str(numSpineJoints-1)) cmds.joint(p=(0,2*i+centerY,1), name='collarBone') #left arm cmds.joint(p=(3,2*i+centerY,1),name='leftShoulder') cmds.joint(p=(numSpineJoints+3,2*i+centerY,.75),name='leftElbow') cmds.joint(p=((numSpineJoints+3)*2,2*i+centerY,1),name='leftWrist') cmds.joint(p=((numSpineJoints+3)*2+.5,2*i+centerY,1),name='leftHand') cmds.ikHandle(sj='leftShoulder',ee='leftWrist', name='leftArmIK') cmds.joint(p=(0,centerY-2,centerZ+1), name='pelvis') cmds.parent('pelvis', 'root') # left leg cmds.joint(p=(centerX+3,centerY-2,0), name='left_upLeg') cmds.joint(p=(centerX+3,centerY-7,centerZ+.5), name='left_loLeg') cmds.joint(p=(centerX+3,centerY-12,0), name='left_foot') cmds.joint(p=(centerX+3,centerY-14,1), name='left_ball') cmds.joint(p=(centerX+3,centerY-14,3), name='left_ball_end') cmds.ikHandle(sj='left_upLeg',ee='left_foot', name='leftLegIK') #joint orientation cmds.joint('root', edit = True, orientJoint = 'xyz',sao= 'yup', ch = True, zso= True) createWindow('Auto Rigger', applyCallback)
def createLimb(self, controlSize, controlDist): getGuide=cmds.ls("*_guide") shoulderShrug=("armcollarRight_guide", "armshoulderRight_guide", ) ArmRightList=("armcollarRight_guide", "armshoulderRight_guide", "armelbowRight_guide", "armwristRight_guide") sudoArm=("armshoulderRight_guide", "armelbowRight_guide", "armwristRight_guide") cmds.select(cl=1) getLimbs=(ArmRightList) for item in getLimbs: jointSuffix='_jnt' getClass.rigJoints(item, jointSuffix) cmds.select(cl=1) for item in sudoArm: jointSuffix='FK_jnt' getClass.rigJoints(item, jointSuffix) cmds.select(cl=1) for item in sudoArm: jointSuffix='IK_jnt' getClass.rigJoints(item, jointSuffix) cmds.select(cl=1) for item in shoulderShrug: jointSuffix='SH_jnt' getClass.rigJoints(item, jointSuffix) cmds.select(cl=1) cmds.mirrorJoint("armcollarRightSH_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("armcollarRight_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("armshoulderRightFK_jnt", myz=1, sr=("Right", "Left")) cmds.mirrorJoint("armshoulderRightIK_jnt", myz=1, sr=("Right", "Left")) Side=["Right", "Left"] for eachSide in Side: resetOrient=[ "armcollar"+eachSide+"SH_jnt", "armcollar"+eachSide+"_jnt", "armshoulder"+eachSide+"_jnt", "armshoulder"+eachSide+"FK_jnt", "armshoulder"+eachSide+"IK_jnt" ] for each in resetOrient: cmds.joint( each, e=1, children=1, zso=1, oj='xyz', sao='yup', spa=1) #cmds.setAttr(each+".jo", lock=1) #cmds.setAttr(each+".rotateX", lock=1) #CONTROLS translations=[".tx", ".ty", ".tz"] rotation=[".rx", ".ry", ".rz"] jointGroup=[ "armshoulder"+eachSide, "armelbow"+eachSide, "armwrist"+eachSide, ] controlGroup=["armwrist"+eachSide, "armcollar"+eachSide, ] cmds.group( em=True, name='IK_grp' ) groupCtrls=[] for eachjoint in jointGroup: eachPiece=eachjoint+"_jnt" name=eachjoint+"_ctrl" grpname=eachjoint+"_grp" if "shoulder" in eachjoint: size=controlSize[1] colour=6 if "wrist" in eachjoint: nrx=0 nry=1 nrz=0 else: size=controlSize[2] colour=6 nrx=1 nry=0 nrz=0 getTranslation, getRotation=getClass.locationXForm(eachPiece) getClass.buildCtrl(eachjoint, name, grpname, getTranslation, getRotation, size, colour, nrx, nry, nrz) for eachjoint in controlGroup: eachPiece=eachjoint+"_jnt" name=eachjoint+"IK_ctrl" grpname=eachjoint+"IK_grp" if "collar" in eachjoint: size=controlSize[0] nrx=1 nry=0 nrz=0 else: size=controlSize[0] nrx=0 nry=1 nrz=0 colour=13 getTranslation, getRotation=getClass.locationXForm(eachPiece) getClass.buildCtrl(eachjoint, name, grpname, getTranslation, getRotation, size, colour, nrx, nry, nrz) colour1=18 colour2=colour1 colour3=colour1 getClass.guideBuild(eachjoint, getTranslation, getRotation, colour1, colour2, colour3 ) getsel=cmds.ls(sl=1) cmds.setAttr(getsel[0]+".overrideColor", colour1) lognm=each.replace("grp", 'nod') cmds.rename(getsel[0], getsel[0]+'_nod') getsel=cmds.ls(sl=1) getClass.buildGrp(getsel[0]) eachPiece="armwrist"+eachSide+"_jnt" getTranslation, getRotation=getClass.locationXForm(eachPiece) size=controlSize[4] name="armwrist"+eachSide+"_offset_IK_ctrl" grpname="armwrist"+eachSide+"_offset_IK_grp" colour=23 nrx=0 nry=1 nrz=0 cmds.select(cl=1) getClass.buildCtrl("armwrist"+eachSide, name, grpname, getTranslation, getRotation, size, colour, nrx, nry, nrz) cmds.setAttr("armwrist"+eachSide+"_offset_IK_ctrl.visibility", 0) #create ik pole constraint controllers jointGroup=[ "armshoulder"+eachSide, "armwrist"+eachSide, ] #IK POLE VECTORS IKHandlesLimbs=[ "armelbow"+eachSide, "armwrist"+eachSide ] for each in IKHandlesLimbs: name=each+"_jnt_ikPole_lctr" grpname=each+"_jnt_ikPole_lctr_grp" num=controlSize[3] color=13 getTranslation=cmds.xform(each+"_jnt", q=1, t=1, ws=1) if "elbow" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( 0.0, 0.0, -controlDist[0],grpname,r=1, rpr=1) elif "wrist" in each and "Right" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( controlDist[1], 0.0, -controlDist[0],grpname,r=1, rpr=1) elif "wrist" in each and "Left" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( -controlDist[1], 0.0, -controlDist[0],grpname,r=1, rpr=1) else: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) getTranslation=cmds.xform(each+"_jnt", q=1, t=1, ws=1) cmds.move(getTranslation[0], getTranslation[1], getTranslation[2],each+"_jnt_ikPole_lctr"+"_grp"+".rotatePivot", ws=1, rpr=1 ) if 'wrist' in each: cmds.setAttr(each+"_jnt_ikPole_lctr.visibility", 0) name=each+"FK_target" grpname=each+"FK_target"+"_grp" print grpname num=3 color=22 if "elbow" in each: getClass.JackI(name, grpname, num, getTranslation, (0.0,0.0,0.0), color) cmds.move( 0.0, 0.0, -controlDist[0],grpname,r=1, rpr=1) cmds.parent(grpname,each+"FK_jnt") cmds.setAttr(name+".visibility", 0) cmds.makeIdentity(name, a=True, t=1, s=1, r=1, n=0) cmds.ikHandle(n="armwrist"+eachSide+"_ik", sj="armshoulder"+eachSide+"IK_jnt", ee="armwrist"+eachSide+"IK_jnt", sol="ikRPsolver") cmds.setAttr("armwrist"+eachSide+"_ik.visibility", 0) cmds.connectAttr("armelbow"+eachSide+"_jnt_ikPole_lctr.translateX", "armwrist"+eachSide+"_jnt_ikPole_lctr_grp.rotateY", f=1) cmds.poleVectorConstraint("armelbow"+eachSide+"_jnt_ikPole_lctr", "armwrist"+eachSide+"_ik") ######## #connect ######## cmds.addAttr("armshoulder"+eachSide+"_ctrl", ln=eachSide+"LegFK_IK", min=0, max=1, at="double", en="FK:IK:", k=1, nn=eachSide+"LegFK_IK") cmds.setAttr("armshoulder"+eachSide+"_ctrl."+eachSide+"LegFK_IK", 1) #poleVector Constraints cmds.parent("armwrist"+eachSide+"_jnt_ikPole_lctr_grp", "armwrist"+eachSide+"IK_ctrl" ) #cmds.parent("armelbow"+eachSide+"_jnt_ikPole_lctr_grp", "armshoulder"+eachSide+"IK_jnt") # #IKpole twist # if "Left" in eachSide: # cmds.setAttr("armwrist"+eachSide+"_ik.twist",90) # else: # cmds.setAttr("armwrist"+eachSide+"_ik.twist", -90) ########ARMS #Connect Blender Controls for IK/FK switch ######## cmds.addAttr("armcollar"+eachSide+"IK_ctrl", ln=eachSide+"ArmFK_IK", min=0, max=1, at="double", k=1, nn=""+eachSide+"ArmFK_IK") #cmds.addAttr("armcollar"+eachSide+"IK_ctrl", ln=eachSide+"ArmFK_IK", at="enum",en="FK:IK:", k=1, nn=""+eachSide+"ArmFK_IK") cmds.parent("armshoulder"+eachSide+"_jnt", w=1) Controller="armcollar"+eachSide+"IK_ctrl."+eachSide+"ArmFK_IK" armskel=[ "armshoulder"+eachSide, "armelbow"+eachSide, "armwrist"+eachSide ] for each in armskel: getClass.blendColors(each, Controller) getClass.blendColorsTranslate(each, Controller)#this creates a FK stretch. Use parentConstraint on the joint to control to work #Twist arm cmds.addAttr("armwrist"+eachSide+"IK_ctrl", ln="TwistArm", at="long", min=-360, max=360, dv=0, k=1, nn="TwistArm") cmds.connectAttr ("armwrist"+eachSide+"IK_ctrl.TwistArm", "armelbow"+eachSide+"_jnt.rotate.rotateX", f=1) cmds.connectAttr ("armwrist"+eachSide+"IK_ctrl.TwistArm", "armshoulder"+eachSide+"_jnt.rotate.rotateX", f=1) IKArmlist=[ "armshoulder"+eachSide+"SH" ] startArmJoint=[ "armcollar"+eachSide+"SH_jnt" ] for each, item in map(None, IKArmlist, startArmJoint): cmds.ikHandle(n=each+"_ik", sj=item, ee=each+"_jnt", sol="ikRPsolver") cmds.setAttr(each+"_ik.visibility", 0) #connect FK controllers to FK skel cmds.connectAttr ("armshoulder"+eachSide+"_ctrl.rotate", "armshoulder"+eachSide+"FK_jnt.rotate", f=1) #cmds.connectAttr ("armelbow"+eachSide+"_ctrl.rotate", "armelbow"+eachSide+"FK_jnt.rotate", f=1) cmds.parentConstraint ("armelbow"+eachSide+"_ctrl", "armelbow"+eachSide+"FK_jnt", mo=1) cmds.parentConstraint ("armwrist"+eachSide+"_ctrl", "armwrist"+eachSide+"FK_jnt", mo=1) #cmds.connectAttr ("armelbow"+eachSide+"_ctrl.translate", "armelbow"+eachSide+"FK_jnt.translate", f=1) #cmds.orientConstraint("armwrist"+eachSide+"_ctrl", "armwrist"+eachSide+"FK_jnt", mo=1) #FK controls parents cmds.parent("armwrist"+eachSide+"_grp","armelbow"+eachSide+"_ctrl") cmds.parent("armelbow"+eachSide+"_grp","armshoulder"+eachSide+"_ctrl") #set visibility ChildActivatedValue=1 ChildDeactivatedValue=0 ControllerSecondValue=1 ControllerFirstValue=0 Children=["armelbow"+eachSide+"_ctrl.visibility", "armwrist"+eachSide+"_ctrl.visibility", "armshoulder"+eachSide+"_ctrl.visibility"] Controller="armcollar"+eachSide+"IK_ctrl."+eachSide+"ArmFK_IK" defaultSet=0 for eachChild in Children: getClass.controlFirstValueChildOn(Controller, eachChild, defaultSet, ChildActivatedValue, ChildDeactivatedValue, ControllerSecondValue, ControllerFirstValue) Children=["armelbow"+eachSide+"_jnt_ikPole_lctr.visibility", "armwrist"+eachSide+"_offset_IK_ctrl.visibility"] ChildActivatedValue=1 ChildDeactivatedValue=0 ControllerSecondValue=1 ControllerFirstValue=0 Controller="armcollar"+eachSide+"IK_ctrl."+eachSide+"ArmFK_IK" defaultSet=1 for Child in Children: getClass.controlSecondValueChildOn(Controller, Child, defaultSet, ChildActivatedValue, ChildDeactivatedValue, ControllerSecondValue, ControllerFirstValue) #cmds.connectAttr ("armhand"+eachSide+"IK_ctrl.translate", "armhand"+eachSide+"_ctrl.translate" , f=1) #set stretch getIKClass.stretch("armshoulder"+eachSide+"IK_jnt") cmds.addAttr("armwrist"+eachSide+"IK_ctrl", ln="Stretch", at="enum",en="on:off:", k=1, nn="Stretch") # ChildActivatedValue=2 # ChildDeactivatedValue=0 # ControllerSecondValue=1 # ControllerFirstValue=0 # Child="armshoulder"+eachSide+"IK_jnt_cond.operation" # Controller="armwrist"+eachSide+"IK_ctrl.Stretch" # defaultSet=0 # getClass.controlFirstValueChildOn(Controller, # Child, # defaultSet, # ChildActivatedValue, # ChildDeactivatedValue, # ControllerSecondValue, # ControllerFirstValue) #hooking up the nods #parent ik controls cmds.parent("armshoulder"+eachSide+"SH_ik", "armcollar"+eachSide+"IK_ctrl") #shoulder shrug ik to the collar control cmds.parent("armcollar"+eachSide+"IK_grp", "armcollar"+eachSide+"_nod") cmds.parent("armcollar"+eachSide+"SH_jnt", "armcollar"+eachSide+"_nod") #connect wrist orientation to FK wrist control #cmds.orientConstraint("armwrist"+eachSide+"IK_ctrl", "armwrist"+eachSide+"IK_jnt", mo=1)#aim wrist to ik control cmds.pointConstraint("armshoulder"+eachSide+"_ctrl", "armshoulder"+eachSide+"IK_jnt")#follow the IK chain to the shoulder control cmds.pointConstraint("armshoulder"+eachSide+"_ctrl", "armshoulder"+eachSide+"FK_jnt")#follow the FK chain to the shoulder control cmds.pointConstraint("armshoulder"+eachSide+"_ctrl", "armshoulder"+eachSide+"_jnt")#follow the skeleton to the shoulder control cmds.pointConstraint("armshoulder"+eachSide+"SH_ik", "armshoulder"+eachSide+"_ctrl")#follow the shoulder control to the ik handle of the shrug cmds.parent("armshoulder"+eachSide+"_jnt", "armcollar"+eachSide+"_nod") cmds.parent("armshoulder"+eachSide+"_grp", "armcollar"+eachSide+"_nod") cmds.parent("armshoulder"+eachSide+"FK_jnt", "armcollar"+eachSide+"_nod") #cmds.parentConstraint("armcollar"+eachSide+"_nod", "armshoulder"+eachSide+"IK_jnt", mo=1) cmds.parent("armshoulder"+eachSide+"IK_jnt", "armcollar"+eachSide+"_nod") #attach the IK chain to parent nod cmds.setAttr("armwrist"+eachSide+"IK_ctrl.visibility", 0)