#-------------------------------------------------------------------------------
# Name: YJ_Foot_Rig
# Purpose: Create IK
#
# Author: YangJie
#
# Created: 15/04/2014
# Email: 691633493@
#-------------------------------------------------------------------------------
def YJ_CreateFootRig(StarBaseJnt,EndBaseJnt,HeelPvJnt,footanim,footIkHandle):
parent(HeelPvJnt,w=1)
AllBaseJntList=YJ_GetBaseJntList(StarBaseJnt,EndBaseJnt)
newJntList=YJ_DuplicateJntChain(AllBaseJntList,'ik')
YJ_SetParentConstraint(newJntList,AllBaseJntList)
FootIkJnt=newJntList[0]
ToeIkJnt=newJntList[1]
ToeEndIkJnt=newJntList[2]
InsidePiv,OutsidePiv,ToePiv,BallPiv,HeelPiv,WigglePiv=YJ_CreatEmGrp(FootIkJnt,ToeIkJnt,ToeEndIkJnt,HeelPvJnt)
FootSCIkHandle=YJ_Creat_IK(FootIkJnt,ToeIkJnt,'ikSCsolver')
ToeSCIkHandle=YJ_Creat_IK(ToeIkJnt,ToeEndIkJnt,'ikSCsolver')
YJ_ParentFootIkHandle(HeelPiv,BallPiv,WigglePiv,footIkHandle,FootSCIkHandle,ToeSCIkHandle,footanim)
YJ_AddFootAnimAttr(footanim)
footExpr=YJ_AddFootExpr(footanim,HeelPiv,BallPiv,ToePiv,OutsidePiv,InsidePiv,WigglePiv)
def YJ_CreatEmGrp(FootIkJnt,ToeIkJnt,ToeEndIkJnt,HeelPvJnt):
ToeLength=getAttr(ToeEndIkJnt+'.tx')
SideOff=ToeLength/2
InsidePiv=group( em=1, n=FootIkJnt[0:2]+'InsidePiv' )
YJ_MoveOrRotateToTargetWd(ToeIkJnt,InsidePiv,'t','t')
move(-1*SideOff,InsidePiv,x=1,r=1,os=1,wd=1)
OutsidePiv=group( em=1, n=FootIkJnt[0:2]+'OutsidePiv' )
YJ_MoveOrRotateToTargetWd(ToeIkJnt,OutsidePiv,'t','t')
move(SideOff,OutsidePiv,x=1,r=1,os=1,wd=1)
ToePiv=group( em=1, n=FootIkJnt[0:2]+'ToePiv' )
YJ_MoveOrRotateToTargetWd(ToeEndIkJnt,ToePiv,'t','t')
BallPiv=group( em=1, n=FootIkJnt[0:2]+'BallPiv' )
YJ_MoveOrRotateToTargetWd(ToeIkJnt,BallPiv,'t','t')
HeelPiv=group( em=1, n=FootIkJnt[0:2]+'HeelPiv' )
YJ_MoveOrRotateToTargetWd(HeelPvJnt,HeelPiv,'t','t')
WigglePiv=group( em=1, n=FootIkJnt[0:2]+'WigglePiv' )
YJ_MoveOrRotateToTargetWd(ToeIkJnt,WigglePiv,'t','t')
parent(BallPiv,InsidePiv)
parent(InsidePiv,OutsidePiv)
parent(OutsidePiv,ToePiv)
parent(ToePiv,HeelPiv)
parent(WigglePiv,InsidePiv)
delete(HeelPvJnt)
return InsidePiv,OutsidePiv,ToePiv,BallPiv,HeelPiv,WigglePiv
def YJ_AddFootAnimAttr(Ctrl):
AttrList1=['roll','toelift','toestraight','lean','side','toespin','toewiggle']
YJ_AddAttr(Ctrl,AttrList1,0)
def YJ_AddAttr(CtrL,AttrList,Atype):
while Atype == 0:
for i in AttrList:
addAttr( CtrL,longName=i, attributeType='double',k=1)
break
while Atype == 1:
for i in AttrList:
addAttr( CtrL,longName=i, attributeType='double',min=0,max=1,dv=0,k=1)
def YJ_ParentFootIkHandle(HeelPiv,BallPiv,WigglePiv,footIkHandle,FootSCIkHandle,ToeSCIkHandle,footanim):
parent(footIkHandle,BallPiv)
parent(ToeSCIkHandle,WigglePiv)
parent(FootSCIkHandle,WigglePiv)
parent(HeelPiv,footanim)
def YJ_AddFootExpr(footanim,HeelPiv,BallPiv,ToePiv,OutsidePiv,InsidePiv,WigglePiv):
string='$roll ='+ footanim+'.roll;\n$toeLift = '+footanim+'.toelift;\n$toeStraight ='+ footanim+'.toestraight;\n$lean = '+footanim+'.lean;\n$side ='\
+footanim+'.side;\n$spin =' +footanim+'.toespin;\n$wiggle ='+ footanim+'.toewiggle;\n'+HeelPiv+'.rotateX = min($roll,0);\n'\
+BallPiv+'.rotateX = (linstep(0,$toeLift,$roll)) *(1-(linstep($toeLift,$toeStraight,$roll))) * $roll;\n'\
+ToePiv+'.rotateX = linstep($toeLift, $toeStraight, $roll) * $roll;\n'+BallPiv+'.rotateY = $lean;\n'\
+OutsidePiv+'.rotateZ = min($side,0);\n'+InsidePiv+'.rotateZ= max(0,$side);\n'\
+ToePiv+'.rotateY = $spin;\n'+WigglePiv+'.rotateX = $wiggle;'
exprName=footanim+'_expr'
expression( s=string,n=exprName)
return exprName