Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkCameraRotationController.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 
15 #include <itkCommand.h>
16 #include <vtkCamera.h>
17 #include <vtkRenderWindow.h>
18 #include <vtkRenderer.h>
19 
20 #include "mitkRenderingManager.h"
21 #include "mitkVtkPropRenderer.h"
22 
24  : BaseController(), m_LastStepperValue(180), m_Camera(nullptr), m_RenderWindow(nullptr)
25 {
26  m_Slice->SetAutoRepeat(true);
27  m_Slice->SetSteps(360);
28  m_Slice->SetPos(180);
29 
30  itk::SimpleMemberCommand<CameraRotationController>::Pointer sliceStepperChangedCommand, timeStepperChangedCommand;
31  sliceStepperChangedCommand = itk::SimpleMemberCommand<CameraRotationController>::New();
32  sliceStepperChangedCommand->SetCallbackFunction(this, &CameraRotationController::RotateCamera);
33 
34  m_Slice->AddObserver(itk::ModifiedEvent(), sliceStepperChangedCommand);
35 }
36 
38 {
39 }
40 
42 {
43  if (!m_Camera)
44  {
45  this->AcquireCamera();
46  }
47 
48  if (m_Camera)
49  {
50  int newStepperValue = m_Slice->GetPos();
51  m_Camera->Azimuth(m_LastStepperValue - newStepperValue);
52  m_LastStepperValue = newStepperValue;
53  // const_cast< RenderWindow* >(m_RenderWindow)->RequestUpdate(); // TODO does not work with movie generator!
55  // m_MultiWidget->RequestUpdate();
56  }
57 }
58 
60 {
61  BaseRenderer *renderer = mitk::BaseRenderer::GetInstance(m_RenderWindow);
62 
63  const auto *propRenderer = dynamic_cast<const mitk::VtkPropRenderer *>(renderer);
64  if (propRenderer)
65  {
66  // get vtk renderer
67  vtkRenderer *vtkrenderer = propRenderer->GetVtkRenderer();
68  if (vtkrenderer)
69  {
70  // get vtk camera
71  vtkCamera *vtkcam = vtkrenderer->GetActiveCamera();
72  if (vtkcam)
73  {
74  // vtk smart pointer handling
75  if (!m_Camera)
76  {
77  m_Camera = vtkcam;
78  m_Camera->Register(nullptr);
79  }
80  else
81  {
82  m_Camera->UnRegister(nullptr);
83  m_Camera = vtkcam;
84  m_Camera->Register(nullptr);
85  }
86  }
87  }
88  }
89 }
static BaseRenderer * GetInstance(vtkRenderWindow *renWin)
Baseclass for renderer slice-/camera-control.
vtkRenderer * GetVtkRenderer() const
Organizes the rendering process.
static RenderingManager * GetInstance()
Stepper::Pointer m_Slice
void RequestUpdate(vtkRenderWindow *renderWindow)