A better, user-friendly curveControl UI object.

I've posted before about my bitter struggles with the terrible curveControl UI object that ships with Max. Maxscript does not give you good access to it, it's very difficult to get it to initialize and remember it's settings from a previous session and if the control is not visible Max doesn't even "see" that the curve exists causing any scene objects relying on the curve for control data to crash, especially when a scene re-opens. In short, it is a piece of junk and Maya offers all kinds of ways to easily use curves to control rigs etc. The only curves in Max that are easily accessible for rigging and animation are the ones embedded in the Reaction Manager, but anyone who's used the Reaction Manager knows that that system is no walk in the park either. It constantly creates junk states that you have to sift through and manually remove, etc.

SO! How about a curveControl 2.0? One that's almost as easy to implement in your script as a spinner or a button? Would anyone be willing to take up this cause? I would say it is one of the most badly needed features as far as the animation/character aspect of Max goes.

How about it anyone?


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
pacermike's picture


Hi John,

That's a good idea. I'll start working on a mockup in Photoshop to show how I wish the curveControl UI would work. It'll probably take me a few days to think it through. I'll post it here and on the CGTalk forums too.

The four most important things would be
1) The curve values would need to be automatically linked/stored in the paramBlock like spinner and slider values are. My hack for this has been to write all the curve data to a gigantic string file which is stored in the paramBlock. The curve then gets its data by executing the string, then whenever the curves are modified you have to tell the curve to write its changes to the string file. Pretty messy.

2) The curve needs to be WAY simpler to initialize, the code is ridiculous as it is currently, especially when compared to the other UI elements in Max.

3) The curve values need to be visible to Max as soon as the scene loads. Currently any controller relying on curveControl data for input will crash on scene load because Max doesn't "see" the curveControl. My hack for this has been to force the curveControl to display on a floater during pre-load so everything initializes before any controllers try to access the curves. It works but is a clunky fix.

4) The scene needs to recognize the difference between curveControls. Try adding multiple curveControls in a scene and then try to display them separately on a floater. In my experience Max thinks both are the same control and will only display one.

Anyway, it's hard to imagine something more useful for animation and rigging than a curve. Maya has several ways to utilize curves for rigging purposes. As far as I know Max only has the reactionManager and it's got plenty of its own problems and limitations. If the curveControl were easier to implement as a UI device you could really do a lot with it. As it sits now its so difficult to get any scene object to be reliably driven by curveControl data it's pretty much useless.

Anyway, I'll try to put some images together that will better show what I'm talking about.

pacermike's picture


So, I've been looking at things and I think that since Max's curveControl has remained unchanged for at least 10 releases of the software I need to re-think the way I'm trying to use this UI object. I think I can avoid all of the trouble I've been having if I just create bezier curves in a global track controller (globaltracks.float[1][1].controller for instance) and then figure out a way to have the curveControl UI reference the global track. That way I don't have to store a string file of the curveControl's parameters to the paramBlock and I don't have to worry about trying to force load the curveControl to avoid crashing dependent controllers. I can then use some of the curveControl event handlers to manipulate the global track bezier curve. This way the curveControl will just be a visual representation of the global track in the rollout so you don't have to go to the track view to manipulate or change it. I'll post an update if I ever get this working...

JokerMartini's picture


you should post and image or something more in detail of what you would want as far as workflow and control goes.

John Martini
Digital Artist
http://www.JokerMartini.com (new site)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.