|
|
| Line 1: |
Line 1: |
| − | From [[Slicer3:Loadable_Modules]]:
| + | <big>'''Note:''' We are migrating this content to the slicer.org domain - <font color="orange">The newer page is [http://www.slicer.org/slicerWiki/index.php/Slicer3:Loadable_Modules:Phase1 here]</font></big> |
| − | * 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]]
| |