Skip to content

Instantly share code, notes, and snippets.

@AndrewtConroy
Created March 22, 2016 04:17
Show Gist options
  • Save AndrewtConroy/3fddcd82d47e7543d33d to your computer and use it in GitHub Desktop.
Save AndrewtConroy/3fddcd82d47e7543d33d to your computer and use it in GitHub Desktop.
stretchy IK Handle - Rough
def buildIK() :
obj = 'Leg'
side = 'LF'
list = ['jntLeg01LF','jntLeg02LF','jntLeg03LF']
srtJoint = list[0]
midJoint = list[1]
endJoint = list[2]
parent = ''
handle = cmds.ikHandle(n=obj + '_IKHandle_' + side, sj = srtJoint, ee = endJoint)[0]
eff = cmds.rename('effector1' , obj + '_effector' + side)
Len = cmds.createNode('curveInfo', n= obj + side + 'Len')
srtPos = cmds.xform(srtJoint,q=1,t=1,ws=1)
endPos = cmds.xform(endJoint,q=1,t=1,ws=1)
cmds.distanceDimension(sp=srtPos,ep=endPos)
srtLoc = cmds.rename('locator1', obj + '_Start_DistLoc_' + side)
endLoc = cmds.rename('locator2',obj + '_End_DistLoc_' + side)
dist = cmds.rename('distanceDimension1','distance_' + obj + side)
if parent == '' :
parent = controls.ring(nameSpace + obj + 'IK' + side, size = 1)
utils.snapPoint(endJoint, parent)
cmds.parent(endLoc,parent)
cmds.parent(srtLoc,srtJoint)
cmds.parent(obj + '_IKHandle_' + side,parent)
#measure bone length
driver = 'distance_' + obj + side + 'Shape.distance'
srtLen = cmds.getAttr(midJoint + '.tx')
endLen = cmds.getAttr(endJoint + '.tx')
limbLen = srtLen + endLen
cmds.setDrivenKeyframe (midJoint,cd=driver,dv=limbLen,attribute='translateX',v=srtLen)
cmds.setDrivenKeyframe (midJoint,cd=driver,dv=(limbLen*2),attribute='translateX',v=(srtLen*2))
##
cmds.setDrivenKeyframe (endJoint,cd=driver,dv=limbLen,attribute='translateX',v=endLen)
cmds.setDrivenKeyframe (endJoint,cd=driver,dv=(limbLen*2),attribute='translateX',v=(endLen*2))
##
mel.eval('selectKey -add -k -f 8.022469 -f 16.044937 ' + midJoint + '_translateX ;')
mel.eval('setInfinity -poi cycleRelative;')
mel.eval('selectKey -add -k -f 8.022469 -f 16.044937 ' + endJoint + '_translateX ;')
mel.eval('setInfinity -poi cycleRelative;')
#hide extra junk
cmds.setAttr (srtLoc + '.visibility', 0)
cmds.setAttr (endLoc + '.visibility', 0)
cmds.setAttr (dist + '.visibility', 0)
cmds.setAttr (handle + '.visibility', 0)
grp = cmds.group(dist, n = nameSpace + 'grp' + obj + 'Distance')
if objExists(nameSpace + 'grpEX') == True :
cmds.parent(grp, nameSpace + 'grpEX')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment