Table of Contents
VE-Suite is composed of three main software engines that coordinate the flow of data from the engineer to the virtual components being designed. The following sections will detail the design of each of these engines and describe how they contribute to the overall framework functionality.
To achieve the goals outlined for the project, a powerful and flexible user interface (UI) was implemented. Key features of the VE-Suite two-dimensional UI (VE-Conductor) are described in the following sections.
The UI makes use of platform independent libraries to enable the software to run on a wide range of computer hardware and operating systems. These platforms range from UNIX workstations to Pocket PCs and PDAs. This functionality is ideal for the virtual engineering-based system since users will frequently make use of handheld computing devices inside of immersive environments (e.g., cave-like systems at ISU-VRAC and NETL).
After reviewing a number of different UI libraries, WxWidgets was chosen. WxWidgets is one of the best cross-platform GUI packages available. It is well-maintained, has a large user base, and has ports for Windows, UNIX/X11, UNIX/Motif, OS2, Mac, and GTK. It also has an alpha version of a Windows CE port, which is under active development. This ensures that the user interface will run on all major platforms and even on Pocket PC-based PDAs.
The UI exists independently from the computational engine as a separate CORBA component. This functionality allows the UI to be attached and detached from an active simulation from any compatible computer on the network. As an example, this would allow a user to build and start a simulation and then detach from the computational engine. The user could then go to a different location, re-attach to the simulation, and regain monitoring and control functions.
To accomplish this functionality a CORBA IDL interface between the UI and the computational engine was defined. This CORBA interface provides all the necessary communication mechanisms between these components. The communication link is bidirectional and handles items such as model parameters passed to the computational engine and receives items such as execution status and results from the computational engine.
Another advantage of this design is the ability for multiple UIs to be attached to the same computational engine, allowing multiple users to monitor a simulation from different locations. A locking mechanism is used so that only one UI (controller) can change the design and inputs of the simulation. The UI also has the ability to connect to the graphical environment and control what graphical representations are shown for high fidelity data (i.e., contour planes, vector planes, streamlines, iso-surfaces) or for low fidelity data (i.e., gauges showing scalar information about plant performance, costing data, or emissions data).
Another important consideration for the UI design is extensibility. The UI is able to dynamically discover, identify, and load UI elements for new component models. This capability keeps the level of difficulty involved in integrating new component models to a minimum since it eliminates the need for modifications to the core interface when new models are added.
The dynamic discover and load capability is accomplished by loading user developed module UIs from dynamic link libraries (DLL in Windows) or shared libraries (SO lib in Linux/UNIX). A plugin C++ base class defining this UI-module interface is provided to all module developers. Developers can inherit from this class to create their own module UIs and then compile the resulting code into a DLL/shared library. The UI framework’s plug loader code will recognize the new module and bring that into its user-module library. By this mechanism, the core UI can plug in the third-party module-specific UI directly from binaries.
Another feature of the UI is unified control for all user interaction. This ensures that the user is not burdened with moving between different UIs to perform operations. There is a single UI with the ability to: 1) construct, specify, execute and monitor simulations; and 2) provide complete control of the three-dimensional virtual environment.
To provide this functionality, the UI is designed to communicate via CORBA to not only the computational engine, but also to the graphical engine. As was discussed for the UI-to-computational engine link, the use of CORBA with an appropriate IDL provides a flexible, detachable, and platform independent communication mechanism for this link as well.
The following figure shows the two-dimensional GUI. A list of available modules is maintained in a tree structure on the left side of the window, while the main canvas area shows the current simulation network.