From 49425f929a148a165708e8a0850bb891270e86ce Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Sat, 1 Dec 2018 08:24:14 -0500 Subject: [PATCH] BUG: Fix anatomical orientation. See #48 --- Modules/Scripted/Home/Home.py | 44 ++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Modules/Scripted/Home/Home.py b/Modules/Scripted/Home/Home.py index fd8b861..bc824da 100644 --- a/Modules/Scripted/Home/Home.py +++ b/Modules/Scripted/Home/Home.py @@ -144,6 +144,8 @@ def loadData(self): self.resetViews() + return averageTemplate, annotation + def onStartupCompleted(self, *unused): qt.QTimer.singleShot(0, lambda: self.onSceneEndClose(slicer.mrmlScene)) @@ -408,7 +410,7 @@ def onSceneEndClose(self, caller=None, event=None): if not scene or not scene.IsA('vtkMRMLScene'): return - self.loadData() + averageTemplate, annotation = self.loadData() sliceNode = slicer.mrmlScene.GetNodeByID('vtkMRMLSliceNodeSlice') self.addObserver(sliceNode, vtk.vtkCommand.ModifiedEvent, self.onSliceNodeModified) @@ -418,6 +420,46 @@ def onSceneEndClose(self, caller=None, event=None): self.get('StepSizeSliderWidget').setMRMLScene(slicer.mrmlScene) + # Create RAStoPIR transform - See https://github.com/BICCN/cell-locator/issues/48#issuecomment-443412860 + # 0 0 1 -1 + # 1 0 0 0 + # 0 1 0 0 + # 0 0 0 1 + ras2pirTransform = slicer.vtkMRMLTransformNode() + ras2pirTransform.SetName("RAStoPIR") + slicer.mrmlScene.AddNode(ras2pirTransform) + transformMatrix = vtk.vtkMatrix4x4() + transformMatrix.SetElement(0, 0, 0.0) + transformMatrix.SetElement(1, 0, 1.0) + transformMatrix.SetElement(2, 0, 0.0) + transformMatrix.SetElement(3, 0, 0.0) + transformMatrix.SetElement(0, 1, 0.0) + transformMatrix.SetElement(1, 1, 0.0) + transformMatrix.SetElement(2, 1, 1.0) + transformMatrix.SetElement(3, 1, 0.0) + transformMatrix.SetElement(0, 2, 1.0) + transformMatrix.SetElement(1, 2, 0.0) + transformMatrix.SetElement(2, 2, 0.0) + transformMatrix.SetElement(3, 2, 0.0) + transformMatrix.SetElement(0, 3, -1.0) + transformMatrix.SetElement(1, 3, 0.0) + transformMatrix.SetElement(2, 3, 0.0) + transformMatrix.SetElement(3, 3, 1.0) + ras2pirTransform.SetMatrixTransformToParent(transformMatrix) + + # Apply transform + averageTemplate.SetAndObserveTransformNodeID(ras2pirTransform.GetID()) + annotation.SetAndObserveTransformNodeID(ras2pirTransform.GetID()) + + # Update Coronal preset so that +x is +P - See https://github.com/BICCN/cell-locator/issues/48#issuecomment-443423073 + sliceNode.DisableModifiedEventOn() + orientationMatrix = vtk.vtkMatrix3x3() + slicer.vtkMRMLSliceNode.InitializeCoronalMatrix(orientationMatrix) + orientationMatrix.SetElement(1, 2, -1.0) + sliceNode.RemoveSliceOrientationPreset("Coronal") + sliceNode.AddSliceOrientationPreset("Coronal", orientationMatrix) + sliceNode.DisableModifiedEventOff() + self.updateGUIFromMRML() def setup(self):