Edit this page

NA-MIC Project Weeks

Back to Projects List

Interactive Slice Intersections

Key Investigators

Project Description

Current slice navigation is based on hotkeys like Shift+drag for moving the 3D cursor, or Ctrl+Alt+drag&drop for rotation of the slice planes when slice intersections are shown. It would be great to have these features available more explicitly that could be used directly with the mouse, avoiding the use of keyboard.

In this project, we want to develop an interactive slice intersections mode to enable users to navigate slices using interaction handles (similar to markups translation/rotation).

Details:

A sketch is shown on the “Illustrations” section below.

More information in this GitHub issue: here

Objective

  1. Create base classes to control interaction handles.

  2. Develop the interactive slice intersections mode.

  3. Customize slice interaction handles.

  4. Test it on sample images.

Approach and Plan

  1. Explore the rendering pipeline for current Markups interaction handles (i.e., MarkupsInteractionPipeline class in vtkSlicerMarkupsWidgetRepresentation). :heavy_check_mark:

  2. Move base class and display options to a lower level. :heavy_check_mark:

  3. Create new classes vtkMRMLSliceIntersectionInteractionWidget and vtkMRMLSliceIntersectionInteractionRepresentation in DisplayableManager. :heavy_check_mark:

  4. Customize handles to control slice intersection in an intuitive manner. :heavy_check_mark:

  5. Create new vtkMRMLSliceDisplayNode :heavy_check_mark:

  6. Create property in vtkMRMLSliceDisplayNode to control handles visibility mode :heavy_check_mark:

Progress and Next Steps

  1. Migrate pipelines for generic widget interaction handles from Markups module to new base classes in DisplayableManager (vtkMRMLInteractionWidget and vtkMRMLInteractionWidgetRepresentation). :heavy_check_mark:

  2. Improve base interaction classes to allow easy implementation of custom interaction handles. :heavy_check_mark:

  3. Implement interaction handles test case for manipulating transform nodes. :heavy_check_mark:

    BEFORE

    BEFORE

    AFTER

    AFTER

  4. Create new classes to render interaction handles for interactive slice intersection: vtkMRMLSliceIntersectionInteractionWidget and vtkMRMLSliceIntersectionInteractionRepresentation. :heavy_check_mark:

  5. Add new option in ViewersToolbar to select interactive slice intersection mode. This option is only enabled and visible when slice intersection mode is active. :heavy_check_mark:

    drawing

  6. Render interaction handles in slice views and enable interactions.

    HANDLES

  7. Modify interactions to update slice intersections. Currently, sliceToRAS transform of the slice node is being updated. :heavy_check_mark:

  8. Customize handles for interactive slice intersection. :heavy_check_mark:

  9. Test new mode in sample images :heavy_check_mark:

  10. Integrate in Slicer. Pull request: https://github.com/Slicer/Slicer/pull/6008

Illustrations

Final video:

https://user-images.githubusercontent.com/10816661/150459600-ba59f51b-b2aa-499d-abcd-3f023809a7ed.mp4

Background and References