1. Data-flow Paradigm
The design of the Voreen framework revolves around the concept of data-flow networks.
These networks consist of modular units, called processors, which encapsulate rendering and data processing algorithms. A processor operates on input data it receives from its inports and outputs the processed results via its outports.
The data-flow is established by unidirectional connections from outports to inports. Processor ports are typed, i.e., each port transmits a certain type of data, such as a 2D image, a 3D volume, geometric data, or a collection of objects of these basic types. Processors furthermore have properties for the parameterization of the encapsulated algorithms. Voreen offers various types of properties ranging from primitive numeric types to complex rendering parameters, such as camera position and transfer function. Properties can be linked within and across processors, in order to synchronize their values.
The strength of the data-flow concept lies in the flexible combinability of components. Since a processor's behaviour is solely determined by its input data and property configuration, processors can be arbitrarily joined into networks with the only restriction that connected ports need to be of equal type. Moreover, there is no distinction made between standard processors provided by the framework and custom processors created by external developers. This allows developers to completely focus on implementing new techniques, while utilizing standard framework processors for common data processing, rendering, and user interaction tasks.
1.1 User Interface
The Voreen framework provides a graphical network editor that enables the user to interactively design data-flow networks from existing processors without writing a single line of code. In particular, the user can manipulate the network topology by adding or removing processors, establishing or deleting port connections, and editing property links. Furthermore, processors can be aggregated to higher-level groupings.
For a convenient parameterization of processors, property widgets are automatically generated for each property in a network. In the usual application case, this completely frees processor developers from the burden of GUI programming. Only custom property types, which are rarely actually necessary, require the developer to implement a corresponding property widget.
The network editor and the property widgets are embedded in the Qt-based VoreenVE (visualization environment) application. It also provides GUI tools for the inspection of intermediate data processing results, performance analysis, animation recording, and Python scripting.