Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Add distance attribute to motion paths.
- import maya.cmds as cmds
- attr = "distance"
- for mp in set(c
- for a in cmds.ls(sl=True)
- for b in [a] + (cmds.listRelatives(a, ad=True) or [])
- for c in cmds.listConnections(b, t="motionPath") or []
- if not cmds.attributeQuery(attr, n=c, ex=True)):
- cmds.addAttr(mp, sn=attr, k=True)
- for length in (cmds.arclen(a, ch=True) for a in cmds.listConnections(mp, type="nurbsCurve") or []):
- clamp, mul = cmds.shadingNode("clamp", au=True), cmds.shadingNode("multiplyDivide", au=True)
- for src in cmds.listConnections("%s.uValue" % mp, p=True, d=False) or []:
- for crv in cmds.ls(cmds.listHistory(src) or [], type="animCurve"):
- cmds.scaleKey(crv, vs=cmds.getAttr("%s.arcLength" % length))
- cmds.connectAttr(src, "%s.%s" % (mp, attr), f=True)
- for dst in cmds.listConnections("%s.uValue" % mp, p=True, s=False) or []:
- cmds.connectAttr("%s.%s" % (mp, attr), dst, f=True)
- cmds.connectAttr("%s.arcLength" % length, "%s.input2X" % mul, f=True)
- cmds.connectAttr("%s.arcLength" % length, "%s.maxR" % clamp, f=True)
- cmds.connectAttr("%s.%s" % (mp, attr), "%s.inputR" % clamp, f=True)
- cmds.connectAttr("%s.outputR" % clamp, "%s.input1X" % mul, f=True)
- cmds.connectAttr("%s.outputX" % mul, "%s.uValue" % mp, f=True)
- cmds.setAttr("%s.operation" % mul, 2)
Add Comment
Please, Sign In to add comment