Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkCameraController.h"
00020 #include "mitkVtkPropRenderer.h"
00021 #include "mitkRenderingManager.h"
00022 #include <vtkRenderWindowInteractor.h>
00023 #include "vtkCommand.h"
00024
00025 #include "vtkCamera.h"
00026 #include "vtkRenderer.h"
00027
00028 mitk::CameraController::CameraController(const char * type) : BaseController(type), m_Renderer(NULL), m_ZoomFactor(1.0)
00029 {}
00030
00031
00032 mitk::CameraController::~CameraController()
00033 {}
00034
00035
00036 void mitk::CameraController::Resize(int, int)
00037 {}
00038
00039
00040 void mitk::CameraController::MousePressEvent(mitk::MouseEvent*)
00041 {}
00042
00043
00044 void mitk::CameraController::MouseReleaseEvent(mitk::MouseEvent*)
00045 {}
00046
00047
00048 void mitk::CameraController::MouseMoveEvent(mitk::MouseEvent*)
00049 {}
00050
00051
00052 void mitk::CameraController::KeyPressEvent(mitk::KeyEvent*)
00053 {}
00054
00055
00056 void mitk::CameraController::SetViewToAnterior()
00057 {
00058 this->SetStandardView(ANTERIOR);
00059 }
00060
00061
00062 void mitk::CameraController::SetViewToPosterior()
00063 {
00064 this->SetStandardView(POSTERIOR);
00065 }
00066
00067
00068 void mitk::CameraController::SetViewToSinister()
00069 {
00070 this->SetStandardView(SINISTER);
00071 }
00072
00073
00074 void mitk::CameraController::SetViewToDexter()
00075 {
00076 this->SetStandardView(DEXTER);
00077 }
00078
00079
00080 void mitk::CameraController::SetViewToCranial()
00081 {
00082 this->SetStandardView(CRANIAL);
00083 }
00084
00085
00086 void mitk::CameraController::SetViewToCaudal()
00087 {
00088 this->SetStandardView(CAUDAL);
00089 }
00090
00091
00092 void mitk::CameraController::SetStandardView( mitk::CameraController::StandardView view )
00093 {
00094 const mitk::VtkPropRenderer* glRenderer = dynamic_cast<const mitk::VtkPropRenderer*>(m_Renderer);
00095 if (glRenderer == NULL)
00096 return;
00097 vtkRenderer* vtkRenderer = glRenderer->GetVtkRenderer();
00098 assert (vtkRenderer);
00099
00100 mitk::BoundingBox::Pointer bb;
00101 mitk::DataStorage* ds = m_Renderer->GetDataStorage();
00102 if (ds != NULL)
00103 bb = ds->ComputeBoundingBox();
00104 else
00105 return;
00106
00107 mitk::Point3D middle = bb->GetCenter();
00108 vtkRenderer->GetActiveCamera()->SetFocalPoint(middle[0], middle[1], middle[2]);
00109 switch(view)
00110 {
00111 case ANTERIOR:
00112 case POSTERIOR:
00113 case SINISTER:
00114 case DEXTER:
00115 vtkRenderer->GetActiveCamera()->SetViewUp(0,0,1);
00116 break;
00117 case CRANIAL:
00118 case CAUDAL:
00119 vtkRenderer->GetActiveCamera()->SetViewUp(0,-1,0);
00120 }
00121 switch(view)
00122 {
00123 case ANTERIOR:
00124 vtkRenderer->GetActiveCamera()->SetPosition(middle[0],-100000,middle[2]);
00125 break;
00126 case POSTERIOR:
00127 vtkRenderer->GetActiveCamera()->SetPosition(middle[0],+100000,middle[2]);
00128 break;
00129 case SINISTER:
00130 vtkRenderer->GetActiveCamera()->SetPosition(+100000,middle[1],middle[2]);
00131 break;
00132 case DEXTER:
00133 vtkRenderer->GetActiveCamera()->SetPosition(-100000,middle[1],middle[2]);
00134 break;
00135 case CRANIAL:
00136 vtkRenderer->GetActiveCamera()->SetPosition(middle[0],middle[1],100000);
00137 break;
00138 case CAUDAL:
00139 vtkRenderer->GetActiveCamera()->SetPosition(middle[0],middle[1],-100000);
00140 break;
00141 }
00142 vtkRenderer->ResetCamera();
00143 double *cameraPosition = vtkRenderer->GetActiveCamera()->GetPosition();
00144 switch(view)
00145 {
00146 case ANTERIOR:
00147 case POSTERIOR:
00148 vtkRenderer->GetActiveCamera()->SetPosition(cameraPosition[0],cameraPosition[1] / m_ZoomFactor,cameraPosition[2]);
00149 break;
00150
00151 case SINISTER:
00152 case DEXTER:
00153 vtkRenderer->GetActiveCamera()->SetPosition(cameraPosition[0] / m_ZoomFactor,cameraPosition[1],cameraPosition[2]);
00154 break;
00155
00156 case CRANIAL:
00157 case CAUDAL:
00158 vtkRenderer->GetActiveCamera()->SetPosition(cameraPosition[0],cameraPosition[1],cameraPosition[2] / m_ZoomFactor);
00159 break;
00160 }
00161 vtkRenderer->ResetCameraClippingRange();
00162
00163 mitk::RenderingManager* rm = m_Renderer->GetRenderingManager();
00164 rm->RequestUpdateAll();
00165 }