import maya.cmds as cmds #Button Maker Script """import creatureBoxUI reload(creatureBoxUI) creatureBoxUI.CBOX_UI()""" #-------------------- """Temp Legs..........also makes feet joints for pivot relations""" def Create_Temp_Leg_Joints(side, *args): cmds.select(d=True) cmds.joint( name = side + "temp_leg_Jnt_01", p= (-2.5, 17, 0), ) cmds.joint( name = side + "temp_leg_Jnt_02", p= (-2.5, 9, 1.5) ) cmds.joint( side + "temp_leg_Jnt_02", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_03", p= (-2.5 , 2, 1.25) ) cmds.joint(side + "temp_leg_Jnt_03", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_04", p= (-2.5 , 1, 5) ) cmds.joint(side + "temp_leg_Jnt_04", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_05", p= (-2.5 , 1, 8) ) cmds.joint(side + "temp_leg_Jnt_05", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_06", p= (-2.5 , 1, 1) ) cmds.joint(side + "temp_leg_Jnt_06", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_07", p= (-1 , 1, 4) ) cmds.joint(side + "temp_leg_Jnt_07", e=True, zso=True, oj='xyz') cmds.joint( name = side + "temp_leg_Jnt_08", p= (-4 , 1, 4) ) cmds.parent('R_temp_leg_Jnt_08', 'R_temp_leg_Jnt_06') #Creates IK, FK, and Bound leg joint chains based on temp leg joint chain """Create_true_FK and IKs_Left_and_right""" def Create_FKIK_Leg_Joints(side, replace): if "L_temp_leg_Jnt_01" in cmds.ls("L_temp_leg_Jnt_01"): cmds.select(cl=True) cmds.select(side+"_leg_Jnt_01", r=True) cmds.mirrorJoint(mirrorYZ=True,mirrorBehavior=True,searchReplace=(side, replace) ) else: cmds.select(cl=True) cmds.select("R_temp_leg_Jnt_01", r=True) cmds.mirrorJoint(mirrorYZ=True,mirrorBehavior=True,searchReplace=('R_', 'L_') ) #Creates IK, FK and bound sets, by way of joint mirror #NOT IN USE def big_call_joints(*args): Create_FKIK_Leg_Joints("pass", "pass") Create_FKIK_Leg_Joints("R_temp", "L_FK") Create_FKIK_Leg_Joints("L_FK", "R_FK") Create_FKIK_Leg_Joints("R_FK", "L_IK") Create_FKIK_Leg_Joints("L_IK", "R_IK") Create_FKIK_Leg_Joints("R_IK", "L_bn") Create_FKIK_Leg_Joints("L_bn", "R_bn") """-------------^^^^___Joint Creation___^^^^_____""" """_________Mini_Tools________""" #Freezes transforms of stuff in a list def freeze_transforms(to_freeze): if isinstance(to_freeze, list) == True: for i in to_freeze: cmds.select(cl=True) cmds.select(str(i), r=True) cmds.makeIdentity(apply=True) else: cmds.select(cl=True) cmds.select(str(to_freeze), r=True) cmds.makeIdentity(apply=True) #Clear list construction history def delete_history(del_his): for i in del_his: cmds.select(cl=True) cmds.select(str(i), r=True) cmds.delete(ch=True) """-----^^^___Mini_Tools___^^^-----""" """_______FK_Control_Stuff____""" #Creates Speherical FK control, cleanly #Succesfully makes one per joint def Create_FK_Handle(obj_name): #Check to make sure joint is to be FK'd, works for leg joint if int(obj_name[14:15]) > 4: print obj_name[14:15] else: #Creates Three Nurb Circles cmds.circle( n=obj_name+'_tmp_01', nr= (1, 0, 0) ) cmds.circle( n=obj_name+'_tmp_02', nr= (0, 1, 0) ) cmds.circle( n=obj_name+'_tmp_03', nr= (0, 0, 1) ) cmds.select(d=True, r=True) #Creates Empty group and combine shape nodes into one, deletes empy nodes cmds.group(em=True, name=obj_name[:9] + 'ctrl' + obj_name[12:15]) cmds.select(obj_name+'_tmp_01Shape', obj_name+'_tmp_02Shape', obj_name+'_tmp_03Shape', r=True) cmds.select(obj_name[:9] + 'ctrl' + obj_name[12:15], add=True) cmds.parent(r=True, s=True) cmds.delete(obj_name+'_tmp_01', obj_name+'_tmp_02', obj_name+'_tmp_03') #Create protector grp for each FK control cmds.group(obj_name[:9] + 'ctrl' + obj_name[12:15], name = obj_name[:9] + 'ctrl_grp' + obj_name[12:15]) #Places FKs to appropriate joints cmds.select(obj_name[:9] + 'ctrl_grp' + obj_name[12:15], r=True) cmds.select(obj_name, add=True) cmds.parent() cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.rotateZ', 0) cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.rotateX', 0) cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.rotateY', 0) cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.translateZ', 0) cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.translateY', 0) cmds.setAttr(obj_name[:9] + 'ctrl_grp' + obj_name[12:15] + '.translateX', 0) cmds.select(obj_name[:9] + 'ctrl_grp' + obj_name[12:15], r=True) cmds.parent(w=True) cmds.select(cl=True) cmds.parentConstraint(obj_name[:9] + 'ctrl' + obj_name[12:15], obj_name) #Finds FK leg jionts, puts them in a list and passes them as an argument to (def Create_FK_Handle) def attach_spherical_FKs(): FK_leg_joint_List=cmds.ls('*_FK_leg_Jnt_*') for i in FK_leg_joint_List: Create_FK_Handle(i) #Places FK leg controls groups into proper hierachy def FK_Group_Hierarchy(): FK_grp_list = cmds.ls('*_FK_leg_ctrl_grp_*') FK_grp_list.sort(reverse=True) for i in FK_grp_list: if i != 'R_FK_leg_ctrl_grp_01': group_above = FK_grp_list[FK_grp_list.index(i) + 1 : FK_grp_list.index(i) + 2] group_above_not_list = group_above[0] ctrl_of_group_above = group_above_not_list[:14] + group_above_not_list[18:] cmds.parent(i, ctrl_of_group_above) """_________IK_Related_Stuff________""" """Takes end joint and start joint as arguement, makes IK handle""" """Places ankle and feet IKS""" def IK_placement (jnt_name, end_jnt): cmds.select(cl=True) cmds.ikHandle(name=jnt_name[0:8] + '_handle_01', sj=jnt_name, ee=end_jnt) #NOT IN USE #Calls Ik Creation def big_IK_legs_call(): IK_placement('L_IK_leg_Jnt_01', 'L_IK_leg_Jnt_03') IK_placement('L_IK_leg_Jnt_02', 'L_IK_leg_Jnt_04') IK_placement('L_IK_leg_Jnt_03', 'L_IK_leg_Jnt_05') IK_placement('R_IK_leg_Jnt_01', 'R_IK_leg_Jnt_03') IK_placement('R_IK_leg_Jnt_02', 'R_IK_leg_Jnt_04') IK_placement('R_IK_leg_Jnt_03', 'R_IK_leg_Jnt_05') """ make empty grp nodes for feet IKs """ def feet_pivots(): IKS=cmds.ls(sl=True) for i in IKS: cmds.group(em=True) cmds.select('null1') cmds.select(str(i), add=True) cmds.parent() cmds.setAttr('null1' + '.rotateZ', 0) cmds.setAttr('null1' + '.rotateX', 0) cmds.setAttr('null1' + '.rotateY', 0) cmds.setAttr('null1' + '.translateZ', 0) cmds.setAttr('null1' + '.translateX', 0) cmds.setAttr('null1' + '.translateY', 0) cmds.select('null1', r=True) cmds.parent(w=True) freeze_transforms('null1') cmds.parent(str(i), 'null1') cmds.rename('null1', str(i) + '_pivot') """make empty grp nodes for tmp feet pivots""" def temp_feet_pivots(): cmds.select(cl=True) cmds.select('L_IK_leg_Jnt_06', r=True) cmds.select('L_IK_leg_Jnt_07', add=True) cmds.select('L_IK_leg_Jnt_08', add=True) cmds.select('R_IK_leg_Jnt_06', add=True) cmds.select('R_IK_leg_Jnt_07', add=True) cmds.select('R_IK_leg_Jnt_08', add=True) tmp_pivs = cmds.ls(sl=True) for i in tmp_pivs: cmds.group(em=True) cmds.select('null1') cmds.select(str(i), add=True) cmds.parent() cmds.setAttr('null1' + '.rotateZ', 0) cmds.setAttr('null1' + '.rotateX', 0) cmds.setAttr('null1' + '.rotateY', 0) cmds.setAttr('null1' + '.translateZ', 0) cmds.setAttr('null1' + '.translateX', 0) cmds.setAttr('null1' + '.translateY', 0) cmds.select('null1', r=True) cmds.parent(w=True) freeze_transforms('null1') cmds.rename('null1', str(i) + '_tmp_pivot') """_________Clean___UP____""" """Cleans up unesscary joints""" #don't use until after controls are created def cleanup_turkeylegs(): cmds.delete( 'L_temp_leg_Jnt_01', 'R_temp_leg_Jnt_01', 'L_FK_leg_Jnt_06', 'R_FK_leg_Jnt_06', 'R_IK_leg_Jnt_06', 'L_IK_leg_Jnt_06',) """"___Quick_Drop____Creating Ctrl Curves based on Joint positions___""" def zero_trans_rotate (obj_name): cmds.setAttr(obj_name + '.rotateZ', 0) cmds.setAttr(obj_name + '.rotateX', 0) cmds.setAttr(obj_name + '.rotateY', 0) cmds.setAttr(obj_name + '.translateZ', 0) cmds.setAttr(obj_name + '.translateX', 0) cmds.setAttr(obj_name + '.translateY', 0) def make_Feek_IK_Ctrl(): cmds.circle() cmds.parent('nurbsCircle1', 'L_IK_leg_Jnt_04') zero_trans_rotate('nurbsCircle1') cmds.parent('nurbsCircle1', w=True) """Organized Positions of feet jiont in 3 digit Tuple format""" toe_pos = cmds.xform( 'L_IK_leg_Jnt_05', query=True, translation=True, worldSpace=True ) heel_pos = cmds.xform( 'L_bn_leg_Jnt_06', query=True, translation=True, worldSpace=True ) inner_pos = cmds.xform( 'L_bn_leg_Jnt_07', query=True, translation=True, worldSpace=True ) outer_pos = cmds.xform( 'L_bn_leg_Jnt_08', query=True, translation=True, worldSpace=True ) """Storage for altered jiont positions for placement of ctrl curve CVs""" """basic four CVs""" alt_toe_pos = [ toe_pos[0], toe_pos[1], toe_pos[2] + 1.5 ] alt_heel_pos = [ heel_pos[0], heel_pos[1], heel_pos[2] - 1.5 ] alt_inner_pos = [ inner_pos[0] - 1.5, inner_pos[1] , inner_pos[2] ] alt_outer_pos = [ outer_pos[0] + 1.5, outer_pos[1] , outer_pos[2] ] """average four CVs""" pinkie = [outer_pos[0], toe_pos[1], toe_pos[2] + 1.5] big_toe = [inner_pos[0], toe_pos[1], toe_pos[2] + 1.5] in_heel = [inner_pos[0], heel_pos[1], heel_pos[2] - 1.5] out_heel = [outer_pos[0], heel_pos[1], heel_pos[2] - 1.5] """Set nurbsCircle CVs, based on foot joint positions""" cmds.xform('nurbsCircle1.cv[5]', a=True, ws=True, t = alt_toe_pos) cmds.xform('nurbsCircle1.cv[1]', a=True, ws=True, t = alt_heel_pos) cmds.xform('nurbsCircle1.cv[3]', a=True, ws=True, t = alt_inner_pos) cmds.xform('nurbsCircle1.cv[7]', a=True, ws=True, t = alt_outer_pos) """Set nurbs CVs, based on foot joint positions, NE, NW, SE, SW""" cmds.xform('nurbsCircle1.cv[6]', a=True, ws=True, t = pinkie) cmds.xform('nurbsCircle1.cv[4]', a=True, ws=True, t = big_toe) cmds.xform('nurbsCircle1.cv[2]', a=True, ws=True, t = in_heel) cmds.xform('nurbsCircle1.cv[0]', a=True, ws=True, t = out_heel) #Note, the "1.5" modifyers are not optimally versitile, they give skewed results on feet which are not positioned straight forward
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question