Next: The hierarchy of time managers
Up: Components of the Virtual Laboratory
Previous: Viewers

Time

One of the essential elements present in the physical laboratory which must be re-created for the virtual laboratory under discussion here, is time. Its importance in the overall design can hardly be overstated. Every experiment runs its course in the river of time. Experiments are described, controlled, and recorded in terms of the passage of time. In order to provide a convincing simulacrum of the real thing, time has a special status within the Oorange design [12].

Time has its own distribution system based on a tree of time managers. Each time manager is attached to a specific node and is responsible for all animated objects in the node or its children. Compare [9] for a similar time concept.

Objects can participate in the flow of time by conforming to one of several animation protocols, (each of which is a prerequisite of the next):

OoAnimated defines methods that apply to any object that is interested in time.
OoValueAnimated extends the OoAnimated protocol for objects that have values that depend on time.
OoKeyAnimated extends the OoAnimated protocol by allowing manipulation of key frames.

When a new instance of an animated object is created, it has the responsibility to register itself with the time manager of its containing node. Time managers relay animated methods to the animated objects registered with them.

The current Oorange class library includes animated classes for numbers (floats and doubles), vectors, colors, and linear transformations. The vectors can be elements of the classical spaces tex2html_wrap_inline978 , tex2html_wrap_inline980 , tex2html_wrap_inline982 or tex2html_wrap_inline984 (euclidean, hyperbolic, spherical, or projective 3-space). Euclidean similarities are decomposed into appropriate factors which are then interpolated. All interpolation currently is linear.

The design philosophy of Oorange is to avoid using animated variables as instance variables of objects; instead, use ordinary variables (floats, vectors, etc) as instance variables and use networks to connect animated variables to these variables. This simplifies the code of objects and lets the network update mechanism take care of keeping all variables synchronized to the current time.


Copyright © 1997 Sonderforschungsbereich 288, Differential Geometry and Quantum Physics, TU-Berlin