A quick function for creating a stretchy ik spline.
strCurve = name of the curve, or have a curve selected
iNum = number of joints you would like created
CreateStretchyIk(strCurve, iNum)
def CreateStretchyIk(strCurve=None, iNum):
strCurve = strCurve
if not strCurve:
Mc.ls(sl=True)[0]
lStrJnt = []
Mc.select(cl=True)
for i in range(iNum):
strI = '%s' %i
strJnt = Mc.joint(n=strCurve+strI)
lStrJnt.append(strJnt)
strCurveIk = Mc.ikHandle(sj=lStrJnt[0], ee=lStrJnt[-1], c=strCurve, n=strCurve+'_ik', sol='ikSplineSolver', ccv=False, rootOnCurve=True, parentCurve=False)[0]
gArcLen = Mc.arclen(strCurve)
gAverage = gArcLen/(iNum-1)
strCurveNode = Mc.createNode('curveInfo', n=strCurve+'_curveInfo')
strMultNode = Mc.createNode('multiplyDivide', n=strCurve+'_divide')
Mc.setAttr(strMultNode+'.operation', 2)
Mc.setAttr(strMultNode+'.input2X', gArcLen)
Mc.connectAttr(strCurveNode+'.arcLength', strMultNode+'.input1X')
Mc.connectAttr(strCurve+'Shape.worldSpace', strCurveNode+'.inputCurve')
for i in range(iNum):
if i > 0:
Mc.setAttr(lStrJnt[i]+'.tx', gAverage)
for jnt in lStrJnt:
Mc.connectAttr(strMultNode+'.outputX', jnt+'.scaleX')