Public Types | Public Member Functions | Static Public Member Functions

mitk::NavigationDataToOpenGLFilter Class Reference

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>

Inheritance diagram for mitk::NavigationDataToOpenGLFilter:
Inheritance graph
[legend]
Collaboration diagram for mitk::NavigationDataToOpenGLFilter:
Collaboration graph
[legend]

List of all members.

Public Types

typedef
NavigationDataToOpenGLFilter 
Self
typedef
NavigationDataToNavigationDataFilter 
Superclass
typedef itk::SmartPointer< SelfPointer
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 ()

Detailed Description

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 (

See also:
http://www2.evl.uic.edu/ralph/508S98/coordinates.html). When using IGT for Augmented Reality applications the transform of navigation datas into the OpenGL coordinate system is mandatory.
mitk::CameraVisualizationFilter

Definition at line 41 of file mitkNavigationDataToOpenGLFilter.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::NavigationDataToOpenGLFilter::ConstPointer

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.

Reimplemented from mitk::NavigationDataToNavigationDataFilter.

Definition at line 44 of file mitkNavigationDataToOpenGLFilter.h.


Constructor & Destructor Documentation

mitk::NavigationDataToOpenGLFilter::NavigationDataToOpenGLFilter (  )
mitk::NavigationDataToOpenGLFilter::~NavigationDataToOpenGLFilter (  ) [virtual]

Definition at line 27 of file mitkNavigationDataToOpenGLFilter.cpp.

{
}

Member Function Documentation

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]
static Pointer mitk::NavigationDataToOpenGLFilter::New (  ) [static]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines