Difference between revisions of "AHM2012-Slicer-Architecture"
From NAMIC Wiki
Line 3: | Line 3: | ||
* Slicer is build on top libraries/toolkits/tools supported by the community: | * Slicer is build on top libraries/toolkits/tools supported by the community: | ||
** '''Core''' | ** '''Core''' | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CLAPACK.cmake CLAPACK | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CLAPACK.cmake CLAPACK] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_cmcurl.cmake cmcurl | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_cmcurl.cmake cmcurl] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CTKAPPLAUNCHER.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CTKAPPLAUNCHER.cmake CTKAPPLAUNCHER] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CTK.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CTK.cmake CTK] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ITKv3.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ITKv3.cmake ITKv3] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_teem.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_teem.cmake teem] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_VTK.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_VTK.cmake VTK] |
** '''Core <- CLI Support''' [Slicer_BUILD_CLI_SUPPORT = TRUE] | ** '''Core <- CLI Support''' [Slicer_BUILD_CLI_SUPPORT = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SlicerExecutionModel.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SlicerExecutionModel.cmake SlicerExecutionModel] |
** ''' Core <- Python''' [Slicer_USE_PYTHONQT = TRUE] | ** ''' Core <- Python''' [Slicer_USE_PYTHONQT = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_NUMPY.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_NUMPY.cmake NUMPY] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_python.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_python.cmake python] |
** ''' Core <- ExtensionManager ''' [Slicer_BUILD_EXTENSIONMANAGER_SUPPORT = TRUE] | ** ''' Core <- ExtensionManager ''' [Slicer_BUILD_EXTENSIONMANAGER_SUPPORT = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_LibArchive.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_LibArchive.cmake LibArchive] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_qMidasAPI.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_qMidasAPI.cmake qMidasAPI] |
** ''' Core <- Python <- Tcl Compatibility layer''' [Slicer_USE_PYTHONQT_WITH_TCL = TRUE] | ** ''' Core <- Python <- Tcl Compatibility layer''' [Slicer_USE_PYTHONQT_WITH_TCL = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_tcl.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_tcl.cmake tcl] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_incrTcl.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_incrTcl.cmake incrTcl] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_tk.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_tk.cmake tk] |
** '''Core <- BatchMake ''' | ** '''Core <- BatchMake ''' | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_BatchMake.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_BatchMake.cmake BatchMake] |
** ''' Core <- OpenIGTLink''' [Slicer_USE_OpenIGTLink = TRUE] | ** ''' Core <- OpenIGTLink''' [Slicer_USE_OpenIGTLink = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_OpenIGTLink.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_OpenIGTLink.cmake OpenIGTLink] |
** ''' Core <- OpenIGTLink <- OpenIGTLinkIF''' [Slicer_USE_OpenIGTLinkIF = TRUE] | ** ''' Core <- OpenIGTLink <- OpenIGTLinkIF''' [Slicer_USE_OpenIGTLinkIF = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_OpenIGTLinkIF.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_OpenIGTLinkIF.cmake OpenIGTLinkIF] |
** ''' Core <- Built-in ''Extension''''' | ** ''' Core <- Built-in ''Extension''''' | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ABC.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ABC.cmake ABC] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_BRAINSTools.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_BRAINSTools.cmake BRAINSTools] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ChangeTrackerPy.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ChangeTrackerPy.cmake ChangeTrackerPy] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_EMSegment.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_EMSegment.cmake EMSegment] |
** ''' Core <- ITKv4 ''' [Experimental - ITK_VERSION_MAJOR = 4] | ** ''' Core <- ITKv4 ''' [Experimental - ITK_VERSION_MAJOR = 4] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ITKv4.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_ITKv4.cmake ITKv4] |
** ''' Core <- ITKv4 <- SimpleITK ''' [Experimental - Slicer_USE_SimpleITK = TRUE] | ** ''' Core <- ITKv4 <- SimpleITK ''' [Experimental - Slicer_USE_SimpleITK = TRUE] | ||
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_PCRE.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_PCRE.cmake PCRE] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SimpleITK.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SimpleITK.cmake SimpleITK] |
− | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_Swig.cmake | + | *** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_Swig.cmake Swig] |
[[File:AHM2012_SlicerArch.png]] | [[File:AHM2012_SlicerArch.png]] |
Revision as of 14:21, 10 January 2012
Home < AHM2012-Slicer-ArchitectureModularization Object Specialization
- Slicer is build on top libraries/toolkits/tools supported by the community:
- Core
- Core <- CLI Support [Slicer_BUILD_CLI_SUPPORT = TRUE]
- Core <- Python [Slicer_USE_PYTHONQT = TRUE]
- Core <- ExtensionManager [Slicer_BUILD_EXTENSIONMANAGER_SUPPORT = TRUE]
- Core <- Python <- Tcl Compatibility layer [Slicer_USE_PYTHONQT_WITH_TCL = TRUE]
- Core <- BatchMake
- Core <- OpenIGTLink [Slicer_USE_OpenIGTLink = TRUE]
- Core <- OpenIGTLink <- OpenIGTLinkIF [Slicer_USE_OpenIGTLinkIF = TRUE]
- Core <- Built-in Extension
- Core <- ITKv4 [Experimental - ITK_VERSION_MAJOR = 4]
- Core <- ITKv4 <- SimpleITK [Experimental - Slicer_USE_SimpleITK = TRUE]
Displayable Managers
- Displayable manager: Specialized logic handling both RenderWindow <-> MRML and RenderWindow <-> Logic interactions.
- Motivation: Have a well-designed mechanism to ...
- ...represent MRML node within a Renderer/RenderWindow.
- ... handle mouse/keyboard interaction.
- ... synchronize widget across different views.
- Overview:
- Each time a viewer is instantiated, it asks a factory to provide him with a DisplayableManagerGroup.
- DisplayableManagerGroup contain a list of DisplayableManager
- Each DisplayableManager is associated with Renderer + InteractorStyle
- DisplayableManager
- Currently, there are two type of DisplayableManager: ThreeD and Slice DisplayableManager - Similar API.
- Both derive from vtkMRMLAbstractDisplayableManager.
- ThreeDDisplayableManager [1]: deals with MRMLViewNode / ThreeDInteractorStyle
- SliceDisplayableManager [2]: deals with MRMLSliceNode / SliceInteractorStyle
- DisplayableManager within Module
- Module can also register DisplayableManager. See qSlicerAnnotationsModule.cxx#L65
- DisplayableManager and Python
- Mechanism to load python based DisplayableManager
- Achieved using vtkMRMLScriptedDisplayableManager
- List of DisplayableManager (available in Libs/MRML/DisplayableManager directory)
Views and Layouts
- Implemented layouts
- conventionalView
- fourUpView
- oneUp3DView
- oneUpRedView
- oneUpYellowView
- oneUpGreenView
- tabbed3DView
- tabbedSliceView
- dual3DView
- triple3DView
- conventionalWidescreenView
- threeOverThreeView
- fourOverFourView
- compareView
- Concept
- Management of Layout and their associated View have been revisited.
- Layout are now described using a simple XML description. See vtkMRMLLayoutLogic
const char* triple3DEndoscopyView = "<layout type=\"vertical\" split=\"true\" >" " <item>" " <view class=\"vtkMRMLViewNode\">" " <property name=\"viewlabel\" action=\"default\">1</property>" " </view>" " </item>" " <item>" " <layout type=\"horizontal\">" " <item>" " <view class=\"vtkMRMLViewNode\" type=\"secondary\">" " <property name=\"viewlabel\" action=\"default\">2</property>" " </view>" " </item>" " <item>" " <view class=\"vtkMRMLViewNode\" type=\"endoscopy\">" " <property name=\"viewlabel\" action=\"default\">3</property>" " </view>" " </item>" " </layout>" " </item>" "</layout>";
- MRMLLayoutManager
- Bridge between MRML nodes, Layout description and corresponding Widgets layout.
- Aggregates a MRMLLayoutLogic
- Based on ctkLayoutManager
- vtkMRMLLayoutLogic
- Observes LayoutNode and ViewNodes
- Ensures that at least one 3D view and three slice views are always in the MRML scene (after a scene is closed or imported).
- Keeps an up-to-date list of the different MRML view nodes (3D, slice ...) that are mapped into a given layout.
- What's next ?
- API to ...
- ... dynamically update a given layout description
- ... register new layout.
- API to ...