Osteotomy Planner 2.0 Release

Intro

This is a follow-up to our previous blog on the Osteotomy Planner. The Osteotomy Planner is a 3D Slicer extension for arranging and cutting closed surface mesh models that represent bone structures. It can be used for the planning of surgical procedures and analysis of the resulting structures. The original Osteotomy Planner implemented moving, splitting, and bending of surface models and incorporated analysis of reference metrics. The module was implemented in C++, and went out of date with recent changes to model representation in 3D Slicer, which are primarily based on Python. Here, we are presenting the new version of the planner.

Version 2.0

The new version provided a good opportunity for a clean break with previous code and reimplementing the module as a Python scripted module. Significant changes would have been needed to bring C++ version up to date. It also allows us to move with the current trend in 3D Slicer modules due to improved Python support. Python scripted modules are more accessible for novice and intermediate developers and allow for faster development in general compared to the C++ modules, as Python modules can be developed without building 3D Slicer on your system. The updated version of the module is available in the current Preview build of 3D Slicer.

Features

Subject hierarchy implementation

The previous implementation used the now obsolete Model Hierarchy data structure to represent the group of models operated on. The planner now uses Subject Hierarchy folders to group the models and can therefore take advantage of the continuous improvements to subject hierarchy support (updated widgets, performance improvements, etc).

Undo / Redo

The planner now includes a model history for tracking changes to a group of models. It supports a maximum of 10 history states to allow users to step through the operations on the model group. To allow the history to represent any possible change to the models (data or display), the history stores a complete copy of the model nodes at each state.

Curve cut and Splitting

Figure 1: Use curve cut tool for planning orthognathic surgery.

Plane-based splitting, a feature in the original Osteotomy Planner, is now joined by curve cutting, which allows users to define a markups-based curve to cut or split a model. Both features are implemented using the Dynamic Modeler functionality as a backend.

Multi-model operations

Users can now perform operations on multiple models at the same time by using shift or control buttons for selection.

Figure 2: Move multiple selected models at the same time.

Improved bending

We have also improved the bending operation. After placing a bending axis on a thin-shell-type model and initializing bend, users can drag the Magnitude button to interactively bend the planning model. Users are also able to control the radius of the deformable region by using the radius slider. Regions that are farther than the specified radius will rotate rigidly around the bending axis while the region within the bending radius will be deformed by using thin-plate spline.

Figure 3: Interactively bend the mandible.

Reference metrics

Figure 4: Use a compute distance function to measure the difference between the planning model and the semi-transparent targeting template.

As in the original planner, users can designate a reference model and compute metrics with respect to it. Currently, distance metrics are supported.

More resources are available from our source code repository at: https://github.com/KitwareMedical/OsteotomyPlanner

Acknowledgements

We would like to thank Dr. Tung Nguyen from the University of North Carolina at Chapel Hill School of Dentistry, and Dr. Joao Roberto Gonçalves from the São Paulo State University for kindly providing the scans used in this blog. This work was supported by The National Institutes of Health (NIH) National Institute for Dental and Craniofacial Research (NIDCR), project High-fidelity Virtual Reality Trainer for Orthognathic Surgery R44DE027595.

Questions or comments are always welcome!

X