|
||||||||||||||||||||
|
||||||||||||||||||||
SignPost 2 - Software DesignIdeaTraversing
OpenInventor scene-graphs takes a lot of time. To reduce the size of
the complete scene graph and to use the automatical caching feature of
OpenInventor we developed a client/server-like architecture. The idea
was, that the server provides a parameterizable scene graph, which can
be customized by the clients in a quite flexible manner. To
parameterize the scene-graph, we used OpenInventor, which can be
influenced from the outside of the scene graph. This can be done using
the so called states. The states are acessible from each node in the
scene-graph and are modified during traversal. Several nodes rely their
behavior on this states. We use following nodes: the SoSwitch node with
its inheritance feature, the SoMultiSwitch, also with its inheritance
feature, and a special set of nodes, conssiting of SoContext, which
modifies a special context state and SoContextSwitch, which acts on the
state modified by SoContext.
The ServerThe
SoBAUKit scene graph represents a building and its rooms. A building
(BAUBuilding) contains several rooms. Each room contains geometry,
portal and neighbor information.
The geometry information consists of several sets of polygons: wall, floor, ceiling, portal and special. For each of them, different rendering styles can be set. The set of styles to be used is defined by the context value while traversing the ContextSwitch. To display only a subset of rooms, the MultiSwitch is used. ![]() The ClientThe
client is a special node called BAUClient. it can be used like an
ordinary OpenInventor node. Actually, the BAUInstance, an internally
used node, contains a reference to the
BAUBuilding. The BAUBuilding reference is acquired automatically by the BAUClient during its initilization phase of the node: It searches for a BAUKit and invokes the createInstance method, which returns a pointer to the BAUBuilding. The BAUClient wraps these actions to 'hide' it from the programmer. ![]() On the following image you can see
the interaction between BAUClient nodes and the BAUKit. The
arrows denote dependencies in the following way: blue arrows denote
references, red arrows inheritance and green arrows context-states.
![]() The ApplicationsWIM - World-In-Miniature
The World-In-Miniature is a small representation of the building modell
floating in fron of the user. |
| Webmaster | studierstube.icg.tu-graz.ac.at | |