Slicer3:Loadable Modules:Phase1

From Slicer Wiki
Jump to: navigation, search
Home < Slicer3:Loadable Modules:Phase1

From Slicer3:Loadable_Modules:

   * runtime module discovery
   * module template
   * like CommandLineModuleFactory 


Starting at ~900 in Applications/GUI/Slicer3.cxx, static modules load occurs.

Using vtkSys tools to list shared libraries present. Use itk::DyanmicLoader to open libraries and call our specified entry points.

The actions taken for each module to be added could be queried from the found shared library using a LoadableModuleInfo class. Some of the information a library should provide:

  • vtkSlicerLogic pointer (maybe this is one of the defined entry points for a loadable module)
  • methods to call on the Logic pointer
  • vtkSlicerModulesGUI pointer (ditto)
  • methods to call on the GUI pointer
  • module name

LoadableModuleFactory (dervie from? Libs/ModuleDescriptionParser/ModuleFactory.cxx) handles this. Looks like ModuleFactory::ScanForSharedObjectModules does something very similar.


Create shared libraries for each of the static modules listed in Slicer3.cxx

loadable modules entry points

void* GetLoadableModuleGUI
void* GetLoadableModuleLogic
char* GetLoadableModuleDescription

That might be it, it'd be nice to have the module describe the necessary methods to call on the GUI and Logic pointer, but that might be Phase I-A. Within Slicer3_main, there doesn't seem to be much variation.

Slicer3.cxx also defines [modulename]_Init(Tcl_Interp* interp) functions and calls them for each module. Should this also be conditional for loadable modules? Does it require an additional entry point?

loadable module support

Is there a header/source file that should be added to every module? Can we follow the CLP methodology and use an XML source and CMake driven tool to generate the necessary files?

example loadable module description, named SlicerTractographyDisplayModule.txt

Name: Slicer Tractography Display
GUIName: LoadDisplaySave
result of tele-conference 28jan2008

Things that the module's XML description should be able to tell:

Name
Group
Description
Home Page
Dependencies (on other Groups or Modules and what versions)
Version #

[and maybe:]

icon
Author(s)
Acknowledgment(s)

Module Groups for Slicer3:

Base
Segmentation
Registration
Filtering
Diffusion Imaging/Tractography
Modeling
Meshing
Image Guided Therapy
Rendering
Radiation Treatment
Microscopy
Astronomy
Utilities
Databases (XCEDE?)
Other

Options users might want to specify when building:

src install vs. binary download
version #'s of libs (e.g. cvs tags or branches to use)
release build vs debug build
clean rebuild
update/refresh libraries
run tests and submit to dashboard
make an installation package
upload to web site

SVN branch

http://www.na-mic.org/svn/Slicer3/branches/tgl_loadable_modules/

References

Slicer3:Execution_Model_Documentation

Slicer3:How_to_implement_an_Interactive_Module_GUI

Slicer3:Loadable_Modules:HOWTO