The 3D animation library supports two kinds of animations: synchronous and asynchronous ones.
   An asynchronous animation is performed by attaching an {\em unsynchronized
   time-variant property value} pv to a geometric object go. Attaching
   pv to go immediately starts to animate go in some fashion, the
   animation ends once pv is again detached.
   A synchronous animation, on the other hand, is performed by attaching a
   {\em synchronized time-variant property value} pv to a geometric object
   go, and then issuing an animation request to pv. Associated with each
   synchronous property value is an AnimHandle.T. However, pv will not
   immediately start to change.
   The message ah.animate() will start to animate all time-varying property
   values tied to ah. The call to ah.animate() will return only after
   these animations are completed.
   Animation handles are monitored: only one thread can call animate at any
   given time, and no thread can insert requests into the request queue of a
   synchronous property value while animate is in progress.
INTERFACEAnimHandle ; IMPORT ProxiedObj; TYPE T <: Public; Public = ProxiedObj.T OBJECT METHODS init () : T; animate (); END;
ah.init()initializes a new animation handleahand returns it.ah.animate()triggers the animation of all synchronous property values that are tied toah. It returns when the animation is completed.
PROCEDURE New () : T;
Newis a convenience procedure. The expressionNew()is equivalent toNEW(T).init()
END AnimHandle.