A filter that transforms input NavigationData that are defined in a left-handed coordinate system into a right-handed coordinate system like OpenGL. More...
#include <mitkNavigationDataToOpenGLFilter.h>
Public Types | |
typedef NavigationDataToOpenGLFilter | Self |
typedef NavigationDataToNavigationDataFilter | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
NavigationDataToOpenGLFilter () | |
Constructor. | |
virtual | ~NavigationDataToOpenGLFilter () |
virtual void | GenerateData () |
transforms input NDs according to the calculated LandmarkTransform | |
Static Public Member Functions | |
static Pointer | New () |
A filter that transforms input NavigationData that are defined in a left-handed coordinate system into a right-handed coordinate system like OpenGL.
Documentation OpenGL uses a right handed coordinate system (
Definition at line 41 of file mitkNavigationDataToOpenGLFilter.h.
typedef itk::SmartPointer<const Self> mitk::NavigationDataToOpenGLFilter::ConstPointer |
Reimplemented from mitk::NavigationDataToNavigationDataFilter.
Definition at line 44 of file mitkNavigationDataToOpenGLFilter.h.
typedef itk::SmartPointer<Self> mitk::NavigationDataToOpenGLFilter::Pointer |
Reimplemented from mitk::NavigationDataToNavigationDataFilter.
Definition at line 44 of file mitkNavigationDataToOpenGLFilter.h.
Reimplemented from mitk::NavigationDataToNavigationDataFilter.
Definition at line 44 of file mitkNavigationDataToOpenGLFilter.h.
Reimplemented from mitk::NavigationDataToNavigationDataFilter.
Definition at line 44 of file mitkNavigationDataToOpenGLFilter.h.
mitk::NavigationDataToOpenGLFilter::NavigationDataToOpenGLFilter | ( | ) |
Constructor.
Definition at line 21 of file mitkNavigationDataToOpenGLFilter.cpp.
mitk::NavigationDataToOpenGLFilter::~NavigationDataToOpenGLFilter | ( | ) | [virtual] |
Definition at line 27 of file mitkNavigationDataToOpenGLFilter.cpp.
{ }
void mitk::NavigationDataToOpenGLFilter::GenerateData | ( | ) | [virtual] |
transforms input NDs according to the calculated LandmarkTransform
Definition at line 31 of file mitkNavigationDataToOpenGLFilter.cpp.
References mitk::NavigationData::GetHasOrientation(), mitk::NavigationData::GetOrientation(), mitk::NavigationData::GetPosition(), mitk::NavigationData::Graft(), mitk::NavigationData::IsDataValid(), MITK_WARN, mitk::NavigationData::SetOrientation(), and mitk::NavigationData::SetPosition().
{ this->CreateOutputsForAllInputs(); // make sure that we have the same number of outputs as inputs /* update outputs with tracking data from tools */ unsigned int numberOfOutputs = this->GetNumberOfOutputs(); for (unsigned int i = 0; i < numberOfOutputs ; ++i) { mitk::NavigationData* output = this->GetOutput(i); assert(output); const mitk::NavigationData* input = this->GetInput(i); assert(input); if (input->IsDataValid() == false || !input->GetHasOrientation() || !input->GetHasOrientation()) { MITK_WARN("mitk::NavigationDataToOpenGLFilter::GenerateData()") << "Input Navigation Data is either invalid or has no position or " << "has no orientation."; continue; } /* vnl_vector<mitk::ScalarType> vnlTranslation = input->GetPosition().GetVnlVector(); vnl_matrix<mitk::ScalarType> vnlRotation( input->GetOrientation().rotation_matrix_transpose()); vnl_matrix_fixed<mitk::ScalarType, 4, 4> m; m.fill(0); m(3,3) = 1; m.update(vnlRotation); m.set_column(3, vnlTranslation); MITK_DEBUG << "left handed matrix: " << m; // switch to right/left handed m[1][0] = -m[1][0]; m[1][1] = -m[1][1]; m[1][2] = -m[1][2]; m[1][3] = -m[1][3]; m[2][0] = -m[2][0]; m[2][1] = -m[2][1]; m[2][2] = -m[2][2]; m[2][3] = -m[2][3]; MITK_DEBUG << "right handed matrix: " << m; vnlTranslation = m.get_column(3); vnlTranslation = vnlTranslation.extract(3); vnlRotation = m.extract(3, 3); output->SetPosition( mitk::Point3D( vnlTranslation.data_block() ) ); output->SetOrientation( vnl_quaternion<mitk::ScalarType> ( vnlRotation ) ); */ output->Graft(input); // First, copy all information from input to output vnl_matrix<mitk::ScalarType> vnlRotation( input->GetOrientation().rotation_matrix_transpose()); // normalize rows of rotation matrix vnlRotation.normalize_rows(); vnl_matrix<mitk::ScalarType> vnlInverseRotation(3,3); // invert rotation vnlInverseRotation = vnl_matrix_inverse<mitk::ScalarType>(vnlRotation); vnl_vector<mitk::ScalarType> vnlTranslation = input->GetPosition().GetVnlVector(); // rotate translation vector by inverse rotation P = P' vnlTranslation = vnlInverseRotation * vnlTranslation; vnlTranslation *= -1; // save -P' // set new translation and rotation on output navdata objects mitk::Point3D position; mitk::FillVector3D(position, vnlTranslation[0], vnlTranslation[1], vnlTranslation[2]); // set position output->SetPosition( mitk::Point3D( vnlTranslation.data_block() ) ); output->SetOrientation( mitk::Quaternion( vnlRotation ) ); } }
virtual const char* mitk::NavigationDataToOpenGLFilter::GetClassName | ( | ) | const [virtual] |
Reimplemented from mitk::NavigationDataToNavigationDataFilter.
static Pointer mitk::NavigationDataToOpenGLFilter::New | ( | ) | [static] |