loadable modules
DESCRIPTION
Loadable Modules. Julien Finet 2012 NA-MIC All Hands Meeting. Loadable modules. Slicer Modules Core CLI Loadable Colors CropVolume Data Models Tractography Transforms Volumes VolumeRendering Scripted. Application. MRML. Module. Module Plugin qSlicerMyModule : public QPlugin. - PowerPoint PPT PresentationTRANSCRIPT
Loadable Modules
Julien Finet2012 NA-MIC All Hands Meeting
Loadable modules
• Slicer– Modules
• Core• CLI• Loadable
– Colors– CropVolume– Data– Models– Tractography– Transforms– Volumes– VolumeRendering
• Scripted
Application
GUI
MRML
Module
Module PluginqSlicerMyModule
: public QPlugin
Module GUIqSlicerMyModuleWidget
: public QWidget
Module LogicvtkSlicerMyModuleLogic
: public vtkSlicerLogic
• Slicer/Modules/Loadable– MyModule
• Documentation• Logic• MRMLDisplayableManager• MRML• Resources• Testing• Widgets
Module LogicvtkSlicerMyModuleLogic
create() create()
Module Widget qSlicerMyModuleWidget
Module PluginqSlicerMyModule
vtkMRMLScenevtkMRMLNodes
Module Designer UIqSlicerMyModuleWidget.ui
Module plugin qSlicerMyModule
TitleIcon
CategoryHiddenIndex
IO
Dependencies
HelpAcknowledg
mentsContributors
Name
Module LogicvtkSlicerModuleLogic
vtkMRMLMyNode
vtkMRMLMyDisplayable
Manager
vtkSlicerLogicHelper
Module widgetqSlicerMyModuleWidget
IconsResources
Custom widgets
UI
IO Options widget
Life of a module…1. Slicer start-up2. Slicer discovers MyModule
a. Resolve dependenciesb. Add module title in menuc. Create module logic
• Optionally register new nodesd. Setup module
• Optionally registerIO, displayableManager
3. Slicer loads a file (Add Data)a. Check that registered IO can readb. Display IO options within Add Data dialogc. Load file using IO
4. Create module widget on first show
Show me some code…
• RegisterIO (Volumes)• Custom widgets (Volumes)• Module node, displayable manager
(VolumeRendering)• Logics can depend on other logics (Crop
Volume)
button
checkbox
Module Widget
MRML Node
synchronize
Connect
QObject::connect( slider,SIGNAL(valueChanged(double)), widget, SLOT(onValueChanged(double)));
Connect
qvtkConnect(node,vtkCommand::ModifiedEvent, widget,SLOT(onNodeModified()));
button
checkbox
Module Widget
MRML Node
5205
SIGNAL
Connect
void qSlicerModuleWidget::onValueChanged(double newValue){ node->SetValue(newValue);}
SLOT
20
Connect
Invoke Event
SLOT
void qSlicerModuleWidget::onMRMLNodeModified( vtkMRMLNode* node){ slider->setValue(node->GetValue());}
Set value
Set v
alue
button
checkbox
Module Widget
MRML Node
5205
SIGNAL
Connect
SLOT
20
Connect
Invoke Event
SLOT
Set value
Set v
alue
Design a module
• cd Slicer-Superbuild/Slicer-build
• ./Slicer --designer• make
Links
• http://www.slicer.org/slicerWiki/index.php/Documentation/4.0/Developers/Tutorials/ModuleWriting
• http://www.slicer.org/slicerWiki/index.php/Documentation/4.0/Developers/Tutorials/QtDesigner