How do I change the text in a Text Shape dynamically?

MAXScript FAQ > Accessing Object Properties > How do I change the text in a Text Shape dynamically?

Normally, the text of a Text shape is not animatable. The resulting mesh will be evaluated once at the beginning of the rendering and will not change as it is considered static (not changing over time). A workaround is to assign a script controller to a property of the text shape which will do two things: tell the renderer that the text shape is animated and thus requires reevaluation on each frame, and set the actual text in the text property.

WARNING!

Changing the text object's text property in anything other than a controller applied to the text object can lead to a renderer crash!

EXAMPLE

 --Create a box and a text shape
b=box name: "ControlBox" wirecolor:blue
t=text name: "ControlledText" wirecolor:red
t.baseobject.renderable=true --set the shape to renderable
theCtrl = float_script() --create a float script controller
theCtrl.addNode "TheText" t --add a variable, connect to theText node
theCtrl.addNode "TheBox" b --add a variable, connect to the Box node --Set the expression to assign the height of the box as string to the --.text property of the text shape, then return 0 on the next line:
theCtrl.SetExpression "TheText.text = TheBox.height as string\n0"
t.kerning.controller=theCtrl --assign the controller to the kerning
animate on at time 100 b.height*=2 --animate the height of the box
max tool zoomextents all --zoom into the two objects
playAnimation() --play back the animation
 
--You should be able to render the scene without any problems --and the text will show the height of the box in generic units. 

See Also