import maya.cmds as cmds
import pymel.core as pm
import os
class TwistJointClass:
def MainWay(self):
self.Selected_Joint_Check()
def Selected_Joint_Check(self):
# need elbowJoint select
selected = cmds.ls(sl=True,long=True)
print("01 selected= "+str(selected))
if(str(selected)=="[]"):
print("Need Select Elbow Joint!!!!!!!!!!!!!!!!!!")
else:
self.elbowJoint_to_twistjoint(selected)
self.elbowJoint_to_drivenkey(selected)
def elbowJoint_to_drivenkey(self,selected):
elbow_joint_full=selected[0]
print("02 elbow_joint_full= "+str(elbow_joint_full))
self.select_fullname(elbow_joint_full)
elbow_joint_name =self.get_fullname_to_name(elbow_joint_full)
elbow_joint_togeJointName = self.make_elbow_toge_joint(elbow_joint_full)
elbow_mode="Genesis8"
if(elbow_mode=="Genesis8"):
elbow_way_rz=".ry"# my model
else:
elbow_way_rz=".rz"# tutorial
print("elbow_way_rz= "+elbow_way_rz)
# Key Value 1
destArr=elbow_joint_name+elbow_way_rz
cmds.setAttr( destArr, 0 )
destArr=elbow_joint_togeJointName+".tx"
cmds.setAttr( destArr, 0 )
destArr=elbow_joint_togeJointName+elbow_way_rz
cmds.setAttr( destArr, 0 )
# Set DrivenKey
#setDrivenKeyframe -currentDriver lowerarm_r.rotateZ lowerarm_toge_r.translateX;
fromAttr=elbow_joint_name+elbow_way_rz
DestAttr=elbow_joint_togeJointName+'.tx'
cmds.setDrivenKeyframe( DestAttr, currentDriver= fromAttr)
#setDrivenKeyframe -currentDriver lowerarm_r.rotateZ lowerarm_toge_r.rotateZ;
fromAttr=elbow_joint_name+elbow_way_rz
DestAttr=elbow_joint_togeJointName+elbow_way_rz
cmds.setDrivenKeyframe( DestAttr, currentDriver= fromAttr)
# Key Value 2
SideWay=self.check_Left_Or_Right(elbow_joint_name)
print("64 SideWay= "+SideWay)
if(SideWay=="R"):
destArr=elbow_joint_name+elbow_way_rz
cmds.setAttr( destArr, 180 )
#setAttr "lowerarm_toge_r.translateX" 4;
destArr=elbow_joint_togeJointName+".tx"
cmds.setAttr( destArr, 4 )
if(SideWay=="L"):
destArr=elbow_joint_name+elbow_way_rz
cmds.setAttr( destArr, -180 )
#setAttr "lowerarm_toge_r.translateX" 4;
destArr=elbow_joint_togeJointName+".tx"
cmds.setAttr( destArr, -4 )
#setAttr "lowerarm_toge_r.rotateZ" 90;
#destArr=elbow_joint_togeJointName+elbow_way_rz
#cmds.setAttr( destArr, 90 )
# Set DrivenKey
#setDrivenKeyframe -currentDriver lowerarm_r.rotateZ lowerarm_toge_r.translateX;
fromAttr=elbow_joint_name+elbow_way_rz
DestAttr=elbow_joint_togeJointName+'.tx'
cmds.setDrivenKeyframe( DestAttr, currentDriver= fromAttr)
#setDrivenKeyframe -currentDriver lowerarm_r.rotateZ lowerarm_toge_r.rotateZ;
fromAttr=elbow_joint_name+elbow_way_rz
DestAttr=elbow_joint_togeJointName+elbow_way_rz
cmds.setDrivenKeyframe( DestAttr, currentDriver= fromAttr)
# reset joint rz
destArr=elbow_joint_name+elbow_way_rz
cmds.setAttr( destArr, 0 )
def check_Left_Or_Right(self,elbow_joint_name):
SideWay=""
jointName_arr=elbow_joint_name.split("_")
if(jointName_arr[0].lower()=="left"):
SideWay="L"
if(jointName_arr[0].lower()=="l"):
SideWay="L"
if(jointName_arr[1].lower()=="left"):
SideWay="L"
if(jointName_arr[1].lower()=="l"):
SideWay="L"
if(jointName_arr[0].lower()=="right"):
SideWay="R"
if(jointName_arr[0].lower()=="r"):
SideWay="R"
if(jointName_arr[1].lower()=="right"):
SideWay="R"
if(jointName_arr[1].lower()=="r"):
SideWay="R"
print("SideWay= "+SideWay)
return SideWay
def make_elbow_toge_joint(self,elbow_joint_full):
elbow_joint_name =self.get_fullname_to_name(elbow_joint_full)
elbow_joint_togeJointName=self.makeName_togejoint(elbow_joint_name)
elbow_pos=cmds.xform(elbow_joint_full,q=1,ws=1,rp=1)
print("elbow_pos=" +str(elbow_pos))
jointName2=cmds.joint( p=(elbow_pos[0], elbow_pos[1], elbow_pos[2]-3) ,absolute=True)
cmds.rename(jointName2,elbow_joint_togeJointName);
#cmds.parent( elbow_joint_togeJointName, elbow_joint_full )
cmds.makeIdentity( apply=True, t=1, r=1, s=1, n=0,pn=1,jointOrient=1)
return elbow_joint_togeJointName
def elbowJoint_to_twistjoint(self,selected):
elbow_joint_full=selected[0]
print("02 elbow_joint_full= "+str(elbow_joint_full))
hand_joint_full=self.get_one_child_node(elbow_joint_full)
print("03 hand_joint_full= "+str(hand_joint_full))
upperarm_joint_arr = cmds.listRelatives(str(elbow_joint_full),parent=True,fullPath=True)
upperarm_joint_full=upperarm_joint_arr[0]
print("04 upperarm_joint_full= "+str(upperarm_joint_full))
#shoulder_joint_arr = cmds.listRelatives(str(upperarm_joint_full),parent=True,fullPath=True)
#shoulder_joint_full= shoulder_joint_arr[0]
#print("05 shoulder_joint_full= "+str(shoulder_joint_full))
self.Elbow_Func(hand_joint_full,elbow_joint_full)
self.Hand_Func(hand_joint_full,elbow_joint_full)
#---------------------------------------------------------------------------------------
#--------------------------------- upperarm_joint_full -------------------------------
#---------------------------------------------------------------------------------------
self.UpperArm_Func(elbow_joint_full,upperarm_joint_full)
self.Shoulder_Func(upperarm_joint_full)
def Hand_Func(self,hand_joint_full,elbow_joint_full):
hand_joint_name =self.get_fullname_to_name(hand_joint_full)
hand_joint_twistJointName=self.makeName_twistjoint(hand_joint_name)
hand_pos=cmds.xform(hand_joint_full,q=1,ws=1,rp=1)
print("hand_pos=" +str(hand_pos))
jointName2=cmds.joint( p=(hand_pos[0], hand_pos[1], hand_pos[2]) ,absolute=True)
cmds.rename(jointName2,hand_joint_twistJointName);
cmds.parent( hand_joint_twistJointName, elbow_joint_full )
cmds.makeIdentity( apply=True, t=1, r=1, s=1, n=0,pn=1,jointOrient=1)
# -------------Hand CONNECT -----------------------------------------------------
fromAtt=hand_joint_name+".rotateX"
destArr=hand_joint_twistJointName+".rotateX"
cmds.connectAttr( fromAtt, destArr )
#--------------------------------------------------------------------------------
def Elbow_Func(self,hand_joint_full,elbow_joint_full):
# make joint
elbow_joint_name =self.get_fullname_to_name(elbow_joint_full)
elbow_joint_twistJointName=self.makeName_twistjoint(elbow_joint_name)
elbow_pos=cmds.xform(elbow_joint_full,q=1,ws=1,rp=1)
hand_pos=cmds.xform(hand_joint_full,q=1,ws=1,rp=1)
print("elbow_pos=" +str(elbow_pos))
print("hand_pos=" +str(hand_pos))
average_x=(elbow_pos[0]+hand_pos[0])/2
average_y=(elbow_pos[1]+hand_pos[1])/2
average_z=(elbow_pos[2]+hand_pos[2])/2
jointName=cmds.joint( p=(average_x, average_y, average_z) ,absolute=True)
cmds.rename(jointName,elbow_joint_twistJointName);
#makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -pn 1;
cmds.makeIdentity( apply=True, t=1, r=1, s=1, n=0,pn=1,jointOrient=1)
#cmds.joint( elbow_joint_twistJointName, e=True,position=(0, 0, 0) )
#-----------------elbow divide --------------------------------------------------
# 1
DivideName=elbow_joint_name+"_Divide"
cmds.shadingNode('multiplyDivide', asUtility=True, name=DivideName)
fromAtt=hand_joint_full+".rotateX"
destArr=DivideName+".input1X"
self.connectAttr_FullPath( fromAtt, destArr )
# ------------- CONNECT ----------
# 2
fromAtt=DivideName+".outputX"
destArr=elbow_joint_twistJointName+".rotateX"
self.connectAttr_FullPath( fromAtt, destArr )
# 3 ------------- setAttr --------------------------
destArr=DivideName+".input2X"
self.setAttr_FullPath( destArr, 0.5 )
def UpperArm_Func(self,elbow_joint_full,upperarm_joint_full):
#upperarm_joint_arr = cmds.listRelatives(str(elbow_joint_full),parent=True,fullPath=True)
#upperarm_joint_full=upperarm_joint_arr[0]
self.select_fullname(upperarm_joint_full)
# make joint -----------------------------------------
upperarm_joint_name =self.get_fullname_to_name(upperarm_joint_full)
upperarm_joint_twistJointName=self.makeName_twistjoint(upperarm_joint_name)
upperarm_pos=cmds.xform(upperarm_joint_full,q=1,ws=1,rp=1)
elbow_pos=cmds.xform(elbow_joint_full,q=1,ws=1,rp=1)
print("upperarm_pos=" +str(upperarm_pos))
print("elbow_pos=" +str(elbow_pos))
average_x=(elbow_pos[0]+upperarm_pos[0])/2
average_y=(elbow_pos[1]+upperarm_pos[1])/2
average_z=(elbow_pos[2]+upperarm_pos[2])/2
jointName=cmds.joint( p=(average_x, average_y, average_z) ,absolute=True)
cmds.rename(jointName,upperarm_joint_twistJointName);
#makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -pn 1;
cmds.makeIdentity( apply=True, t=1, r=1, s=1, n=0,pn=1,jointOrient=1)
#-----------------Upperarm divide2 --------------------------
#hand_joint_name=fullName_to_ShortName(hand_joint_full)
DivideName2=upperarm_joint_name+"_Divide"
cmds.shadingNode('multiplyDivide', asUtility=True, name=DivideName2)
# 1
fromAtt=upperarm_joint_name+".rotateX"
destArr=DivideName2+".input1X"
self.connectAttr_FullPath( fromAtt, destArr )
# ------------- CONNECT ----------
# 2
fromAtt=DivideName2+".outputX"
destArr=upperarm_joint_twistJointName+".rotateX"
self.connectAttr_FullPath( fromAtt, destArr )
# 3 ------------- setAttr --------------------------
destArr=DivideName2+".input2X"
self.setAttr_FullPath( destArr, -0.5 )
#-----------------Upperarm divide2 --------------------------END
def Shoulder_Func(self,upperarm_joint_full):
#upperarm_joint_arr = cmds.listRelatives(str(elbow_joint_full),parent=True,fullPath=True)
#upperarm_joint_full=upperarm_joint_arr[0]
self.select_fullname(upperarm_joint_full)
# make joint -----------------------------------------
upperarm_joint_name =self.get_fullname_to_name(upperarm_joint_full)
shoulder_joint_twistJointName=self.makeName_twistjoint("shoulder_"+upperarm_joint_name)
upperarm_pos=cmds.xform(upperarm_joint_full,q=1,ws=1,rp=1)
print("upperarm_pos=" +str(upperarm_pos))
jointName=cmds.joint( p=(upperarm_pos[0], upperarm_pos[1], upperarm_pos[2]) ,absolute=True)
cmds.rename(jointName,shoulder_joint_twistJointName);
#makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -pn 1;
cmds.makeIdentity( apply=True, t=1, r=1, s=1, n=0,pn=1,jointOrient=1)
#-----------------Upperarm divide3 --------------------------
#hand_joint_name=fullName_to_ShortName(hand_joint_full)
DivideName3="shoulder_"+upperarm_joint_name+"_Divide"
cmds.shadingNode('multiplyDivide', asUtility=True, name=DivideName3)
# 1
fromAtt=upperarm_joint_name+".rotateX"
destArr=DivideName3+".input1X"
self.connectAttr_FullPath( fromAtt, destArr )
# ------------- CONNECT ----------
# 2
fromAtt=DivideName3+".outputX"
destArr=shoulder_joint_twistJointName+".rotateX"
self.connectAttr_FullPath( fromAtt, destArr )
# 3 ------------- setAttr --------------------------
destArr=DivideName3+".input2X"
self.setAttr_FullPath( destArr, -1 )
#-----------------Upperarm divide2 --------------------------END
def select_fullname(self,fullname):
import sys
try:
cmds.select( fullname)
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
#raise
def setAttr_FullPath(self, destArr ,value):
import sys
try:
cmds.setAttr( destArr, value )
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
#raise
def fullName_to_ShortName(fullName):
shortName=""
fullName_index=fullName.find("|")
if(fullName_index==-1):
pass
else:
fullName_Arr=fullName.split("|")
fullName_Len=len(fullName_Arr)
shortName = fullName_Arr[fullName_Len-1]
print("shortName= "+shortName)
return shortName
def connectAttr_FullPath(self, fromAtt, destArr ):
import sys
try:
cmds.connectAttr( fromAtt, destArr )
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
#raise
def get_one_child_node(self,elbow_joint_full):
hand_joint_full=""
hand_joint_arr = cmds.listRelatives(str(elbow_joint_full),children=True,fullPath=True)
print("02 hand_joint_arr= "+str(hand_joint_arr))
temp_child_name=hand_joint_arr[0]
elbow_arr=elbow_joint_full.split("|")
elbow_len=len(elbow_arr)-1
elbow_last=elbow_arr[elbow_len]
print("elbow_last= "+elbow_last)
temp_arr=temp_child_name.split("|")
temp_len=len(temp_arr)-1
temp_elbowlastlen_name=temp_arr[elbow_len]
temp_elbowlastlen_plusone_name=temp_arr[elbow_len+1]
print("temp_elbowlastlen_name= "+temp_elbowlastlen_name)
if(elbow_last==temp_elbowlastlen_name):
print("same OK temp_elbowlastlen_name= "+temp_elbowlastlen_name)
print("temp_elbowlastlen_plusone_name= "+temp_elbowlastlen_plusone_name)
#for jname in temp_arr
buildStr=""
#for(int i = 0; i < elbow_len+1; i++)
for i in range(1,elbow_len+1+1):
jname = temp_arr[i]
buildStr=buildStr+"|"+jname
print("buildStr= "+buildStr)
hand_joint_full=buildStr
return hand_joint_full
def handJoint_to_twistjoint(self):
# need hand select
selected = cmds.ls(sl=True,long=True)
print("01 selected= "+str(selected))
hand_joint_full=selected[0]
print("02 hand_joint_full= "+str(hand_joint_full))
"""
hiji_joint_arr = cmds.listRelatives(str(hand_joint_full),parent=True,fullPath=True)
hiji_joint_full=hiji_joint_arr[0]
print("03 hiji_joint_full= "+str(hiji_joint_full))
"""
#hand_joint_name =self.get_fullname_to_name(hand_joint_full)
#hiji_joint_name =self.get_fullname_to_name(hiji_joint_full)
#hiji_twistJointName=self.makeName_twistjoint(hiji_joint_name)
#cmds.select(hiji_joint_full)
#cmds.insertJoint( 'joint2' )
#あとで復帰
#cmds.select(selected)
#cmds.select(hand_joint_full)
def makeName_twistjoint(self,joint_name):
joint_name_arr= joint_name.split("_")
twistJointName=joint_name_arr[0]+"_twist_"+joint_name_arr[1]
print("twistJointName= "+twistJointName)
return twistJointName
def makeName_togejoint(self,joint_name):
joint_name_arr= joint_name.split("_")
togeJointName=joint_name_arr[0]+"_toge_"+joint_name_arr[1]
print("togeJointName= "+togeJointName)
return togeJointName
def get_fullname_to_name(self,fullname):
hand_joint_full_arr=fullname.split("|")
print("04 hand_joint_full_arr= "+str(hand_joint_full_arr))
hand_joint_full_len=len(hand_joint_full_arr)
hand_joint_jointName=hand_joint_full_arr[hand_joint_full_len-1]
print("05 hand_joint_jointName= "+str(hand_joint_jointName))
return hand_joint_jointName
ClassIns= TwistJointClass()
ClassIns.MainWay()
コメント