230 likes | 245 Views
Explore the evolution of ParaView architecture, issues with the current design, goals, and the motivation behind enhancing the architecture. The text delves into the transition from old to new architecture, client/server support, and the binary communication with servers. It also details ParaView architecture components such as Data/render server, Server Manager Design, and GUI Architecture, emphasizing the need for a more efficient and user-friendly design. Additionally, it addresses issues related to GUI design, including incomplete MVC pattern implementation, inconsistent proxy access, and code duplication.
E N D
ParaView • Current Architecture and History • Issues with the Current Design
ParaView Project Goals • Develop an open-source, multi-platform visualization application • Support distributed computation models to process large datasets • Create an open, flexible and intuitive user interface • Develop an extensible architecture based on open standards
ParaView Architecture • Parallel VTK as IO, processing and rendering engine • MPI and TCP/IP as network communication • Tcl as scripting language • KW widgets as GUI
ParaView Architecture • XML configurable, extensible GUI • User extensible, open source engine (VTK) • Tool for end-users as well as developers who want to deploy algorithms
Evolution of Architecture • Old architecture MPI On accept: vtkSphereSource sphere0 sphere0 SetPhiResolution 256 On reset: this->Script(“sphere0 GetResolution”); int val = atoi(this->SetValue(this->GetLastResult)); vtkSphereSource sphere0 sphere0 SetPhiResolution 256 vtkSphereSource sphere0 sphere0 SetPhiResolution 256
Evolution of Architecture • Added client/server support
Motivation • Problems with old architecture • Tcl based communication: • String based. Imprecise and inefficient. • Standard Tcl interpreter is not secure. • Dummy pipeline on client: • VTK pipeline objects are not designed to only store state. Some objects misbehave when disconnected or empty. • Communication with server is still necessary to obtain information about distributed data. • Client must be linked to all VTK + VTK Tcl libs
Goals • Binary communication with server where possible • Replace empty pipeline on client with a proxy representation • Separation of pipeline management from GUI to support multiple client types • Provide default implementation of complicated, parallel pipeline and rendering architecture to make client development easy and to reuse code
ParaView Architecture • Data/render server: • C++ • Client/server wrapping • No direct access • Server manager: • C++ API • XML configuration • Tcl, Python or Java scripting (optional)
ParaView Architecture • Desktop Client: • KWWidgets (Tcl/Tk and C++) • Tcl scripting of GUI • XML configuration of GUI • Web Client: • DHTML/JavaScript • Server code uses Python
ServerManager Design • Proxies – VTK objects • Example: Sphere • Properties – Attributes of VTK objects • Example: Radius • Domains – Restrictions on values • Example: Numbers greater than 0
SM: Proxies • Based on proxy design pattern • Proxies are responsible of • Creating server-side VTK objects • Maintaining references to server-side VTK objects using ids • Maintaining a copy of the state of the server-side objects using properties
SM: Properties • Maintain the state of the attributes of the server-side objects • Each property has a set of values and one or more commands to set or get them • Regular and information properties
GUI Design – Main Classes • vtkPVApplication • vtkPVWindow (main window) • vtkPVRenderView (render window, interaction) • vtkPVSource (source/filter proxy) • vtkPVDisplayGUI (display proxy) • vtkPVWidget (property)
GUI Architecture • vtkPVSource and sub-classes implement: • Accept() : push GUI values to server manager then push server manager values to server • Reset() : update the GUI from the server manager • vtkPVWidget and sub-classes follow the same pattern with SM properties.
GUI Architecture • PVSources and PVWidgets are created on the fly based on GUI XML description • GUI events are stored in trace files. • GUI state is stored in state files.
GUI Design Issues • Incomplete implementation of MVC pattern: • GUI (view) can be only partially updated from SM (model) • PVSource can be updated using Reset() • Other pages cannot be updated from SM • GUI pages corresponding to proxy should exist to be updated
GUI Design Issues • Inconsistent access of SM proxies: • PVSource and PVWidgets use Accept()/Reset() • PVDisplayGUI and other pages push values immediately
GUI Design Issues • Rigid GUI design • Access to different types of proxies is different and hard-coded • Proxy/property interface is simple • GUI elements to access any type of proxy should be uniform, simple and XML configurable
GUI Design Issues • Code duplication • Many sub-classes of vtkPVWidget that duplicate functionality of KWWidgets • Trace, state and batch follow separate paths although they perform very similar functions