We show how to create surgical guides for pedicle screws with adaptive spinous process base with Rhino3DMedical.

Live session video

Watch here the full workflow:

In the following we will briefly note all the necessary steps to create the surgical guides.

1. Open image

Open a 3D image with command RMOpenImage (button Open Image).

Open image.

2. Image analysis

Run command RMImageAnalysis (button Image Analysis). With the controls navigate through the image and set a threshold to show the bone in green color. Click Surface Preview to see a 3D preview of the segmented area. Double click in a 2D view to position all slices over the mouse cursor.

Image analysis.

3. Segmentation

Run command RMSegmentation (button Segmentation). In the Segmentation controls, press button Mask from Threshold (with Close Surface checked on) to create a model of the full spine. Hit Mask from Threshold to turn the segmented area into manual mask. Press Create under Bounding Box to create a box over the vertebra of interest. This will clip the mask (this step is optional, for the purpose of further isolating the vertebra). Click Surface from Mask (with Close ticked) to extract the 3D model of at least the vertebra of interest and its surroundings.


4. Layers panel

Run command Layer to display the Layers panel. There you can rename, show, hide, lock and unlock layers. Hide or lock the layer where the full spine is, as we won’t need it to create the guides. Keep visible the layer containing the isolated vertebra. You can change its color by clicking on the Material circle next to its layer.

Layers panel.

5. Slicing plane

Run command Gumball and press On in the command line. Go to the Rhino3DMedical top menu and select Slicing Plane (or run command RMSlicingPlane). Create a plane over any view, then click and drag the colored arrows (the gumball) to place it over the vertebra of interest. After dragging, the slicing plane will show the intersection between the geometric plane and the 3D image. The mesh helps us orient and place the plane. Ideally, the slicing plane should lie over the horizontal symmetry plane of the vertebra, equally cutting the pedicles in two parts.
You can create as many additional slicing planes as needed. Every slicing plane is contained in a layer called Slicing Plane.

If for some reason the slicing plane turns white, you can turn it back to color by running RMSlicingPlane and clicking SelectPlane in the command line, then selecting the geometric plane.

When done, you can hide the mesh layer (normally called Surface or Surface extract) in the Layers panel (run command Layer to make Layers panel appear).

Slicing plane.

6. Guide tubes

Run command CPlane and select Surface in the command line. Select the slicing plane (or the main slicing plane you made) and press Enter twice in your keyboard. Now the origin of coordinates has been placed with the slicing plane as reference, and anything that we draw will be set in that 3D plane. Go to the Slicing Plane layer in Layers panel and lock it (click on the locker next to its name), so that it doesn’t interfere when selecting other objects of the scene.

Now we will draw the guides: run command Tube and in the command line select DirectionConstraint=None. Click over a point and write a number for the inner radius, Enter, and a radius for the outer radius, Enter. Then draw the tube from initial point to end point. Do this over one pedicle, then repeat for the second pedicle. Make sure the view is in shaded mode (go to the name Perspective/Top/Front/Right at the top-left corner, click over the arrow and select Shaded; you can double click over Perspective/Top/Front/Right to make that view the main one).

Make the mesh of the vertebra visible again (in the Layers panel) to check that your guides do not intersect the surrounding vertebrae. You can move the guides or scale them with the gumball (Gumball On) until this condition is satisfied.

Guide tubes.

7. Extract mesh faces for the base

In the Layers panel (command Layer) create a new layer called Base. Make sure that the vertebra mesh layer is visible and unlocked, hide Images layer, lock all other layers then run command RMExtractMeshFacesWithBrush (Rhino3DMedical top menu Mesh Repair Extract Mesh Faces). The cursor will become a brush that you can shrink or enlarge by holding Shift key. With it you can paint the mesh to create the base of the guide. Once you paint a stroke (do not move the camera while doing so), press Enter twice and call command ChangeLayer to move the added base mesh to the layer Base. Repeat this procedure several times with different camera views until you have created your base area.

When you have finished painting, select all the meshes that you created and run command Join. They will be joined together. Make sure that there’s only one resulting big mesh; pretty often there will be redundant fragments around that should be deleted.

Extract mesh faces for the base.

8. Offset mesh for the base

Select the base mesh and call command OffsetMesh. In the command line write the numerical value of the thickness you want the base to have, then press Enter. Normally this value should be negative in order to go over the vertebra instead of inside; do the opposite if you observe otherwise.

After offsetting the mesh, it will become a solid. You may observe artifacts flying around: run command RMExtractLargestRegion (also found in Mesh Repair subtoolset) over the mesh and delete the old bigger one, which in turn will make the artifacts disappear.

Offset mesh for the base.

9. Closing the base mesh

Run command What over the base mesh. Ideally, a text says that it is valid and closed. If it is not closed (it’s open), we must close it. There’s several options to do so:

  • Run command RMFillMeshHoles (also found in Mesh Repair subtoolset) over the mesh. The new mesh will appear in a new layer.
  • Run command FillMeshHoles over the mesh.
  • If none of the above works, run command ShowEdges over the mesh and click Zoom to find the faces and edges giving trouble. Try to add a face in that hole with command PatchSingleFace or try removing the surrounding edge face with command DeleteFaces and redoing PatchSingleFace and potentially the two steps above.
  • If after all this the mesh is still open, consider redoing the whole step of extracting and offsetting the mesh base with a different, smaller and smoother painted area.

When you finally have your closed base mesh, run command RMSmoothenMesh (found in Mesh Repair subtoolset) over it to have a smoother shape (it will appear in a new layer).

Closing the base mesh.

10. Text mark

Text mark is an optional step to place an identifying mark over the model. Run command TextObject, select a text height and write your text. Select Output Solids and a Thickness value (in the same dimensions of your scene, usually millimiters for default templates). Place your text object far from the guides in any view, then run command OrientOnSrf and select the text object. Select a base point of the text object and a reference second point (in most cases you should select one corner of the text and the opposite corner), then select the surface to orient on (usually a flat area of the base) and uncheck option Rigid. Select a point of the surface to place the text and it will be automatically added.

The orientation of the text might be wrong, hence you will need to redo the operation with an inverse choice of the base point/reference second point when first running OrientOnSrf. Also make sure by visual inspection that the text object is properly glued to the bridge with no space in between.

11. Mesh boolean split

Show and unlock all layers containing the vertebra, the tube guides and the base. Run command MeshBooleanSplit and select the base to be split, Enter, the tubes as cutting objects, Enter. Run command MeshBooleanSplit again and select the tubes to be split, Enter, the big vertebra mesh as cutting object, and Enter.

Mesh boolean split.

12. Exploding and joining all pieces

Hide the vertebra mesh layer. Select the full base and guides and run command Explode. Go over the tubes and select and delete all pieces that are not needed. Clean up the hole of tubes and base. Finally, select the whole base and tubes (and optionally text mark) and run command Join. Select the final object and run What: the description should say that the mesh is valid and closed (otherwise, go back and repeat the procedure to have a valid and closed mesh base).

Exploding and joining all pieces.

13. Exporting to STL

Exporting to STL

Provided that the full guide object is valid and closed as mesh, run command RMExportMeshToSTL and select it. Choose a directory and a name for the file and the STL object will be placed there. This is ready for 3D printing or for export into other CAD software.

14. Setting a rendering material

This step is optional and needed in case you want to set up a rendering material for the guide or mesh vertebrae. Run command Materials and you will find a tab listing current materials. Click the "+" sign and add a material, for example Plaster. Choose a name and a color, select the material picture of a sphere-like object and drag it onto the guide mesh. This is the same as assigning the material to the object. Select the down-arrow in the top-left corner of any view and select Rendered. The object will display the assigned material. You can change the material settings or delete it in the Materials panel.


Thanks to Aida Ribera Navarro, PhD student at University College London Institute of Orhopaedics and Musculoskeletal Science, for providing the CT scan used here (scoliotic cadaveric specimen).