Program Listing for File CameraSynchronizerTest.py
↰ Return to documentation for file (Testing/Python/CameraSynchronizerTest.py)
from unittest.mock import MagicMock
import slicer
from slicer import vtkMRMLLayerDMCameraSynchronizer, vtkMRMLSliceNode, vtkMRMLViewNode
from slicer.ScriptedLoadableModule import ScriptedLoadableModuleTest
from vtk import vtkCamera, vtkCommand, vtkRenderWindow, vtkRenderer
class CameraSynchronizerTest(ScriptedLoadableModuleTest):
def setUp(self):
slicer.mrmlScene.Clear(0)
self.renderWindow = vtkRenderWindow()
self.renderer = vtkRenderer()
self.renderWindow.AddRenderer(self.renderer)
self.firstCam = vtkCamera()
self.defaultCam = vtkCamera()
self.renderer.SetActiveCamera(self.firstCam)
self.cameraSync = vtkMRMLLayerDMCameraSynchronizer()
self.cameraSync.SetRenderer(self.renderer)
self.cameraSync.SetDefaultCamera(self.defaultCam)
# Create spy to check if the default camera was modified
self.mockModified = MagicMock()
self.cameraSync.AddObserver(vtkCommand.ModifiedEvent, self.mockModified)
def test_with_threed_view_node_synchronize_cam_on_active(self):
cam1 = vtkCamera()
cam1.SetDistance(1)
self.cameraSync.SetViewNode(vtkMRMLViewNode())
self.renderer.SetActiveCamera(cam1)
assert self.defaultCam.GetDistance() == 1
cam1.SetDistance(3)
assert self.defaultCam.GetDistance() == 3
cam2 = vtkCamera()
cam2.SetDistance(4)
self.renderer.SetActiveCamera(cam2)
assert self.defaultCam.GetDistance() == 4
def test_with_slice_view_synchronize_on_slice_modified(self):
preMTime = self.defaultCam.GetMTime()
sliceNode = vtkMRMLSliceNode()
self.cameraSync.SetViewNode(sliceNode)
assert preMTime != self.defaultCam.GetMTime()
preMTime = self.defaultCam.GetMTime()
sliceNode.SetXYZOrigin([1, 2, 3])
assert preMTime != self.defaultCam.GetMTime()
def test_updating_the_default_camera_triggers_camera_update_once(self):
self.cameraSync.SetViewNode(vtkMRMLViewNode())
self.mockModified.reset_mock()
self.firstCam.Modified()
self.mockModified.assert_called_once()
def test_doesnt_trigger_modified_events_on_camera_update_when_blocked(self):
assert not self.cameraSync.BlockModified(True)
self.cameraSync.SetViewNode(vtkMRMLViewNode())
self.firstCam.Modified()
self.mockModified.assert_not_called()
assert self.cameraSync.BlockModified(False)
self.firstCam.Modified()
self.mockModified.assert_called_once()
def test_updating_slice_view_triggers_camera_update_once(self):
sliceNode = vtkMRMLSliceNode()
self.cameraSync.SetViewNode(sliceNode)
self.mockModified.reset_mock()
sliceNode.SetXYZOrigin([1, 2, 3])
self.mockModified.assert_called_once()
def test_at_init_updates_trigger_camera_update_once(self):
self.cameraSync.SetViewNode(vtkMRMLViewNode())
self.mockModified.assert_called_once()
def test_on_first_camera_changed_default_camera_clipping_is_preserved(self):
self.cameraSync.SetViewNode(vtkMRMLViewNode())
self.defaultCam.SetClippingRange(1, 42)
self.mockModified.reset_mock()
self.firstCam.SetClippingRange(3,12)
self.mockModified.assert_called_once()
assert self.defaultCam.GetClippingRange()[0] == 1
assert self.defaultCam.GetClippingRange()[1] == 42