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 #include "mitkCameraVisualization.h"
00019
00020 #include "vtkCamera.h"
00021
00022 #include "mitkPropertyList.h"
00023 #include "mitkProperties.h"
00024
00025
00026
00027
00028 mitk::CameraVisualization::CameraVisualization(): NavigationDataToNavigationDataFilter(),
00029 m_Renderer(NULL), m_FocalLength(10.0), m_ViewAngle(30.0)
00030 {
00031
00032 m_DirectionOfProjectionInToolCoordinates[0] = 0;
00033 m_DirectionOfProjectionInToolCoordinates[1] = 0;
00034 m_DirectionOfProjectionInToolCoordinates[2] = -1;
00035 m_ViewUpInToolCoordinates[0] = 1;
00036 m_ViewUpInToolCoordinates[1] = 0;
00037 m_ViewUpInToolCoordinates[2] = 0;
00038 }
00039
00040
00041 mitk::CameraVisualization::~CameraVisualization()
00042 {
00043
00044 }
00045
00046
00047 void mitk::CameraVisualization::GenerateData()
00048 {
00049
00050 if (m_Renderer.IsNull())
00051 itkExceptionMacro(<< "Renderer was not properly set");
00052
00053
00054 unsigned int numberOfOutputs = this->GetNumberOfOutputs();
00055 for (unsigned int i = 0; i < numberOfOutputs ; ++i)
00056 {
00057 mitk::NavigationData* output = this->GetOutput(i);
00058 assert(output);
00059 const mitk::NavigationData* input = this->GetInput(i);
00060 assert(input);
00061
00062 if (input->IsDataValid() == false)
00063 {
00064 continue;
00065 }
00066 output->Graft(input);
00067 }
00068
00069 const NavigationData* navigationData = this->GetInput();
00070
00071 Point3D cameraPosition = navigationData->GetPosition();
00072
00073
00074 static itk::QuaternionRigidTransform<double>::Pointer quatTransform = itk::QuaternionRigidTransform<double>::New();
00075
00076 mitk::NavigationData::OrientationType orientation = navigationData->GetOrientation();
00077
00078 vnl_quaternion<double> doubleQuaternion(orientation.x(), orientation.y(), orientation.z(), orientation.r());
00079 quatTransform->SetIdentity();
00080 quatTransform->SetRotation(doubleQuaternion);
00081 quatTransform->Modified();
00082
00083
00084
00085 static AffineTransform3D::MatrixType m;
00086 mitk::TransferMatrix(quatTransform->GetMatrix(), m);
00087
00088 Vector3D directionOfProjection = m*m_DirectionOfProjectionInToolCoordinates;
00089 directionOfProjection.Normalize();
00090 Point3D focalPoint = cameraPosition + m_FocalLength*directionOfProjection;
00091
00092 Vector3D viewUp = m*m_ViewUpInToolCoordinates;
00093
00094 m_Renderer->GetVtkRenderer()->GetActiveCamera()->SetPosition(cameraPosition[0],cameraPosition[1],cameraPosition[2]);
00095 m_Renderer->GetVtkRenderer()->GetActiveCamera()->SetFocalPoint(focalPoint[0],focalPoint[1],focalPoint[2]);
00096 m_Renderer->GetVtkRenderer()->GetActiveCamera()->SetViewUp(viewUp[0],viewUp[1],viewUp[2]);
00097 m_Renderer->GetVtkRenderer()->ResetCameraClippingRange();
00098
00099 m_Renderer->RequestUpdate();
00100 }
00101
00102
00103 void mitk::CameraVisualization::SetRenderer(mitk::BaseRenderer* renderer)
00104 {
00105 m_Renderer = renderer;
00106 if (m_Renderer)
00107 {
00108 m_Renderer->GetVtkRenderer()->GetActiveCamera()->Zoom(0.4);
00109 }
00110 }
00111
00112
00113 const mitk::BaseRenderer* mitk::CameraVisualization::GetRenderer()
00114 {
00115 return m_Renderer;
00116 }
00117
00118
00119 void mitk::CameraVisualization::SetParameters( const mitk::PropertyList* p )
00120 {
00121 if (p == NULL)
00122 return;
00123 mitk::Vector3D doP;
00124 if (p->GetPropertyValue<mitk::Vector3D>("CameraVisualization_DirectionOfProjectionInToolCoordinates", doP) == true)
00125 this->SetDirectionOfProjectionInToolCoordinates(doP);
00126 mitk::Vector3D vUp;
00127 if (p->GetPropertyValue<mitk::Vector3D>("CameraVisualization_ViewUpInToolCoordinates", vUp) == true)
00128 this->SetViewUpInToolCoordinates(vUp);
00129 float fL;
00130 if (p->GetPropertyValue<float>("CameraVisualization_FocalLength", fL) == true)
00131 this->SetFocalLength(fL);
00132 float vA;
00133 if (p->GetPropertyValue<float>("CameraVisualization_ViewAngle", vA) == true)
00134 this->SetFocalLength(vA);
00135 }
00136
00137
00138 mitk::PropertyList::ConstPointer mitk::CameraVisualization::GetParameters() const
00139 {
00140 mitk::PropertyList::Pointer p = mitk::PropertyList::New();
00141 p->SetProperty("CameraVisualization_DirectionOfProjectionInToolCoordinates", mitk::Vector3DProperty::New(this->GetDirectionOfProjectionInToolCoordinates()));
00142 p->SetProperty("CameraVisualization_ViewUpInToolCoordinates", mitk::Vector3DProperty::New(this->GetViewUpInToolCoordinates()));
00143 p->SetProperty("CameraVisualization_FocalLength", mitk::Vector3DProperty::New(this->GetFocalLength()));
00144 p->SetProperty("CameraVisualization_ViewAngle", mitk::Vector3DProperty::New(this->GetViewAngle()));
00145 return mitk::PropertyList::ConstPointer(p);
00146 }