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] |
1.7.2