The design involves breaking the visualization tool into components. The three major components are called the VisGen (visualization generator), the Application, and the Interface. The VisGen can be thought of as a wrapper for a visualization package that generates the geometry. In our case, we are using the freely available vtk library (visualization toolkit). The Application maintains the state of the tool, such as what dataset is being visualized, and it tells the VisGen what to generate. The interface component manipulates the state of the tool by sending messages to the Application. As a result, the VisGen is general purpose and can be used in any tool. The Application is application specific, but platform independent. The interface is platform specific, but even there some objects are shared between the CAVE and desktop version. Specifically, both interfaces make use of Command objects. Each gui component has a Command object that executes whenever the component is changed by the user. There are concrete subclasses of Command so that a gui component can be "bound" to a particular action at run-time. For instance, a CAVE slider widget can be attached to a Command that changes the isosurface value or the same slider can be attached to a Command that changes the zoom factor. Similarly, the desktop slider widget can be "attached" to the same Command objects.
Each component maintains itself and delegates whatever work it can to the more general component. The next sections describe each of the three components in greater detail.