250 likes | 428 Views
MedINRIA 2.0 - Platform architecture overview. Olivier Clatz Julien Wintz. Context. Multiple software MedINRIA CardioViz3D YAV++ Multiple operating systems Linux MacOSX Windows Multiple data to deal with Scalar, vector, tensor images Static or dynamic images
E N D
MedINRIA 2.0 - Platform architecture overview Olivier Clatz Julien Wintz
Context • Multiple software • MedINRIA • CardioViz3D • YAV++ • Multiple operating systems • Linux • MacOSX • Windows • Multiple data to deal with • Scalar, vector, tensor images • Static or dynamic images • Static or dynamic meshes • Diverse algorithms • image processing • visualization • FEM models • Different users • Clinicians • Research scientists • Many contributors • Internal • External
Problem • Non compatible codes - constrained architectures • Integration policy - compilation and dependencies • Code maintenance • Hard to get familiar with concepts for newcomers • Divergence of philosophy
A modular architecture • No prior knowledge of its functionalities • Low level behavior furnished by plugins • High level behavior furnished by scripts
Kernel • Organized into layers (dtkCore, dtkScript, dtkSql, dtkGui …) • Qt based (only) • Cross platform library handling • Cross platform introspection • Graphical user interface • Built using cmake A set of software components developed and maintained at INRIA for scientific software development
Kernel – core layer • Provides hierarchies of virtual data classes • Provides hierarchies of virtual processing classes • Provides hierarchies of virtual visualization classes • Provides factories to manage them all • Provides a plugin abstract interface • Provides a plugin manager
Kernel – script layer • An abstract interpretation engine • Embeds interpreters through specializations
Plugin • Technically speaking: • A dynamic library • Built independently • Relying on a common basis than the target application • Conceptually speaking: • A container of concrete concept types • Specializing abstract concept types • Registers these types to a factory • An optional user interface • An optional glue to external libraries Should be as atomic as possible to provide the highest modularity level possible Define low level behavior
Script • Manipulate wrapped layers • No matter the language Manipulate plugins, external libraries wrappers and the application to define a high level workflow
Platform • Domain specific use of dtk’s layers • Manipulate abstract concepts: data, processing and visualization • Plugin manager (dtkCore) • Script interpreter (dtkScript, dtkGui) • Domain specific specialization of dtk’s layers • User interface (medGui – dtkGui - QtGui) • Database (medSql – dtkSql – QtSql) Browsing area Viewer area Workspace area
Examples • Tensor visualization • ITK based plugins (data) • VTK based plugins (visualization) • Static user interface (from plugin) • Dynamic user interface (from script)
Examples • Tensor visualization • ITK based plugins (data) • VTK based plugins (visualization) • Static user interface (from plugin) • Dynamic user interface (from script) • Design
Examples • Tensor visualization • ITK based plugins (data) • VTK based plugins (visualization) • Static user interface (from plugin) • Dynamic user interface (from script) • Usage scenario - plugins
Examples • Tensor visualization • ITK based plugins (data) • VTK based plugins (visualization) • Static user interface (from plugin) • Dynamic user interface (from script) • Usage scenario - script definit(): buttn = widgetFactory.createButton("Run", "run()"); group = widgetFactory.createGroupBox("Tensor"); group.addButton(buttn); holder.addWidget(group.widget()); defrun(): global data, view, imdata, viewer tndata = dataFactory.create("itkDataImageTensor") tndata.read("...") imdata = dataFactory.create("itkDataImageDouble3") imdata.enableReader("itkDataImageDouble3Reader") imdata.read("...") view = viewFactory.create("vtkViewImage3DO") view.enableInteractor("vtkViewInteractorTensors") tndata.update() imdata.update() proxy = workspace.viewer().newView() proxy.attach(view.widget()) view.setData(tndata) view.setData(imdata)
Roadmap • Next months • First LGPL software release • Image visualization for clinical usage • Limited computational capacities • Access to existing wrapped libraries through script • Tutorials for scripts & plugins development • Documentation • Website • Next year • Advanced image processing and visualization • Visual programming • Advanced user interface elements
What's most important for a common platform / toolkit? • Unified development process +++ • Open-source community +++ • Powerful end-user application +++ • Extensible end-user application +++ • Heterogeneous plugins +++ • Scripting support +++ • Rapid prototyping ++ • General extension concept ++ • Workflow modeling ++ • Multiple consistent views ++ • Scene graphs + • Pipeline concept + • Visual programming +
How could a collaboration look like? Possible ways of collaboration: • “Common Toolkit”, composed from existing toolkits • “Common Toolkit”, implemented from scratch • Funding sources ?