From 77e57ca2665e3b4611efcbf8f3b911caf4384895 Mon Sep 17 00:00:00 2001
From: Tamas Ungi <ungi.tamas@gmail.com>
Date: Mon, 13 Sep 2021 14:47:55 -0400
Subject: [PATCH] Re #46: Added ultrasound 2D and 3D view

---
 LumpNav2/LumpNav2.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/LumpNav2/LumpNav2.py b/LumpNav2/LumpNav2.py
index 6f59481..54bf200 100644
--- a/LumpNav2/LumpNav2.py
+++ b/LumpNav2/LumpNav2.py
@@ -826,6 +826,31 @@ def setup(self):
 
     self.setupTransformHierarchy()
 
+    # Show ultrasound in 2D view
+
+    layoutManager = slicer.app.layoutManager()
+    # Show ultrasound in red view.
+    redSlice = layoutManager.sliceWidget('Red')
+    controller = redSlice.sliceController()
+    controller.setSliceVisible(True)
+    redSliceLogic = redSlice.sliceLogic()
+    image_Image = parameterNode.GetNodeReference(self.IMAGE_IMAGE)
+    redSliceLogic.GetSliceCompositeNode().SetBackgroundVolumeID(image_Image.GetID())
+    # Set up volume reslice driver.
+    resliceLogic = slicer.modules.volumereslicedriver.logic()
+    if resliceLogic:
+      redNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeRed')
+      # Typically the image is zoomed in, therefore it is faster if the original resolution is used
+      # on the 3D slice (and also we can show the full image and not the shape and size of the 2D view)
+      redNode.SetSliceResolutionMode(slicer.vtkMRMLSliceNode.SliceResolutionMatchVolumes)
+      resliceLogic.SetDriverForSlice(image_Image.GetID(), redNode)
+      resliceLogic.SetModeForSlice(6, redNode)  # Transverse mode, default for PLUS ultrasound.
+      resliceLogic.SetFlipForSlice(False, redNode)
+      resliceLogic.SetRotationForSlice(180, redNode)
+      redSliceLogic.FitSliceToAll()
+    else:
+      logging.warning('Logic not found for Volume Reslice Driver')
+
     # Create models
 
     createModelsLogic = slicer.modules.createmodels.logic()
@@ -947,6 +972,7 @@ def setupTransformHierarchy(self):
       imageImage.CreateDefaultDisplayNodes()
       imageArray = np.zeros((512, 512, 1), dtype="uint8")
       slicer.util.updateVolumeFromArray(imageImage, imageArray)
+      parameterNode.SetNodeReferenceID(self.IMAGE_IMAGE, imageImage.GetID())
     imageImage.SetAndObserveTransformNodeID(imageToTransd.GetID())
 
   def updateImageToTransdFromDepth(self, depthMm):