Loadable Modules
description
Transcript of Loadable Modules
![Page 1: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/1.jpg)
Loadable Modules
Julien Finet2012 NA-MIC All Hands Meeting
![Page 2: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/2.jpg)
Loadable modules
• Slicer– Modules
• Core• CLI• Loadable
– Colors– CropVolume– Data– Models– Tractography– Transforms– Volumes– VolumeRendering
• Scripted
![Page 3: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/3.jpg)
Application
GUI
MRML
Module
Module PluginqSlicerMyModule
: public QPlugin
Module GUIqSlicerMyModuleWidget
: public QWidget
Module LogicvtkSlicerMyModuleLogic
: public vtkSlicerLogic
![Page 4: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/4.jpg)
• Slicer/Modules/Loadable– MyModule
• Documentation• Logic• MRMLDisplayableManager• MRML• Resources• Testing• Widgets
![Page 5: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/5.jpg)
Module LogicvtkSlicerMyModuleLogic
create() create()
Module Widget qSlicerMyModuleWidget
Module PluginqSlicerMyModule
vtkMRMLScenevtkMRMLNodes
Module Designer UIqSlicerMyModuleWidget.ui
![Page 6: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/6.jpg)
Module plugin qSlicerMyModule
TitleIcon
CategoryHiddenIndex
IO
Dependencies
HelpAcknowledg
mentsContributors
Name
![Page 7: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/7.jpg)
Module LogicvtkSlicerModuleLogic
vtkMRMLMyNode
vtkMRMLMyDisplayable
Manager
vtkSlicerLogicHelper
![Page 8: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/8.jpg)
Module widgetqSlicerMyModuleWidget
IconsResources
Custom widgets
UI
IO Options widget
![Page 9: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/9.jpg)
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
![Page 10: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/10.jpg)
Show me some code…
• RegisterIO (Volumes)• Custom widgets (Volumes)• Module node, displayable manager
(VolumeRendering)• Logics can depend on other logics (Crop
Volume)
![Page 11: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/11.jpg)
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()));
![Page 12: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/12.jpg)
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
![Page 13: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/13.jpg)
button
checkbox
Module Widget
MRML Node
5205
SIGNAL
Connect
SLOT
20
Connect
Invoke Event
SLOT
Set value
Set v
alue
![Page 14: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/14.jpg)
Design a module
• cd Slicer-Superbuild/Slicer-build
• ./Slicer --designer• make
![Page 15: Loadable Modules](https://reader036.fdocuments.net/reader036/viewer/2022062305/56816304550346895dd37f5b/html5/thumbnails/15.jpg)
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