Back to Projects List
MarkupConstraints Slicer Module
Key Investigators
- David Allemang (Kitware Inc.)
- Jean-Christophe Fillion-Robin (Kitware Inc.)
- Lucia Cevidanes (University of Michigan)
- Maxime Gillot (University of Michigan)
- Baptiste Baquero (University of Michigan)
Acknowledgements
- Kyle Sunderland (PerkLab)
Project Description
MarkupConstraints is a Slicer module intended for Slicer extension developers to constrain
and synchronize markups and control points of different nodes.
The module has been developed to support Q3DCExtension, however I intend to expand it
further for reuse in other interactive tools.
Objective
- Robust constraints between control points in different vtkMRMLMarkupNode instances
- Support for constraining points between for example a line and fiducial markup is
very limited
- Detect dependency cycles and provide meaningful error messages
- Slicer freezes indefinitely when updating constraints with cycles
- Robust constraints from control points to other node types
- Project a point to the surface of a model
- Support saving/loading a markup node or MRML scene while preserving constraints
- Determine the best mode of distribution and publish
- Likely will be published on the Extension Index in “Developer Tools”
- Create a simple interactive UI for debugging/testing purposes
- Should allow viewing or editing existing constraints in the scene
Progress
- Created a Slicer module and logic with appropriate observers for applying constraints
- Began refining API to support arbitrary constraints and dependencies (as means to
resolve #1)
- Fully resolved #1 with a robust API to define arbitrary constraints.
- Created architecture documentation and API documentation for build constraint functions.
- Created unittest suite for primary features.
Thanks to Kyle Sunderland (PerkLab) for his advice and inspiration!
Next Steps
- Implement more adaptors to enable constraints against arbitrary node types, not just control points.
- Use adaptors and node parameters/references to enable serialization with scene.
- Implement graph analysis to detect cycles and deadlocks.
- Expand constraint interface using abstract class for more extensibility.
Illustrations
Background and References
Source code is hosted in SlicerMarkupConstraints.