Since there's no built-in MAXScript function to remove controller once you add it to a parameter, here's a function to do that for you. Big thanks to Larry Minton for revealing how to handle ParamBlock2 PB2Values.
fn removeController subAnim = if isKindOf subAnim ::SubAnim and isController subAnim.controller do(local originalValue = subAnim.valuelocal REFMSG_CONTROLREF_CHANGE = 0xFAif isKindOf subAnim.parent ParamBlock2 then(local iGlobal = (dotNetClass "Autodesk.Max.GlobalInterface").Instancelocal pBlockNET = iGlobal.Animatable.GetAnimByHandle (getHandleByAnim subAnim.parent)local pValNET = pBlockNET.GetPB2Value (pBlockNET.IndexToId (subAnim.index - 1)) 0pValNET.Flags = bit.or pValNET.Flags 0x40 -- set the flag on the PB2Value which controls if the parameter is animated - this effectively removes the controller)else(local ctrl = subAnim.controllerlocal parent = subAnim.parentlocal index = for i = 1 to refs.getNumRefs parent where refs.getReference parent i == ctrl do exit with irefs.replaceReference parent index undefined)if classOf subAnim.value == classOf originalValue do subAnim.value = originalValuenotifyDependents subAnim.parent msg:REFMSG_CONTROLREF_CHANGE)
A sample of usage shows how to remove a controller from a sphere's radius parameter:
Sphere radius:.5 isSelected:on$.radius.controller = Bezier_Float()removeController $.baseObject[#radius]
DISCLAIMER: All scripts and snippets are provided as is under Creative Commons Zero (public domain, no restrictions) license. The author and this blog cannot be held liable for any loss caused as a result of inaccuracy or error within these web pages. Use at your own risk.


This Post needs Your Comment!
Leave a Comment