Difference between revisions of "AHM2012-Slicer-Architecture"

From NAMIC Wiki
Jump to: navigation, search
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.cmake]
+
*** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CLAPACK.cmake CLAPACK]
*** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_cmcurl.cmake cmcurl.cmake]
+
*** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_cmcurl.cmake cmcurl]
*** [https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_CTKAPPLAUNCHER.cmake 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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-Architecture

Modularization Object Specialization

AHM2012 SlicerArch.png

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

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.