Slicer3:Loadable Modules:Phase1

From NAMIC 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 *_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?

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