Difference between revisions of "Slicer3:Loadable Modules:Phase1"
TerryLorber (talk | contribs) |
TerryLorber (talk | contribs) |
||
Line 38: | Line 38: | ||
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? | 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 XML loadable module description ==== | ||
+ | |||
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <loadable> | ||
+ | <name>Volume Rendering Module</name> | ||
+ | <shortname>VRModule</shortname> | ||
+ | <guiname>VolumeRendering</guiname> | ||
+ | <tclinitname>Volumerenderingmodule_Init</tclinitname> | ||
+ | <message>Initializing Volume Rendering Module...</message> | ||
+ | </loadable> | ||
===== result of tele-conference 28jan2008 ===== | ===== result of tele-conference 28jan2008 ===== |
Revision as of 22:11, 25 March 2008
Home < Slicer3:Loadable Modules:Phase1From 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
Contents
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 XML loadable module description
<?xml version="1.0" encoding="utf-8"?> <loadable> <name>Volume Rendering Module</name> <shortname>VRModule</shortname> <guiname>VolumeRendering</guiname> <tclinitname>Volumerenderingmodule_Init</tclinitname> <message>Initializing Volume Rendering Module...</message> </loadable>
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/