#include "mitkNavigationDataTransformFilter.h"#include "mitkNavigationData.h"#include "mitkTestingMacros.h"#include <itkTransform.h>#include <itkVector.h>#include <iostream>Go to the source code of this file.
Typedefs | |
| typedef itk::Rigid3DTransform < mitk::ScalarType > | TransformType |
| typedef itk::Vector < mitk::ScalarType, 3 > | VectorType |
Functions | |
| int | mitkNavigationDataTransformFilterTest (int, char *[]) |
| typedef itk::Rigid3DTransform<mitk::ScalarType > TransformType |
Documentation test for the class "NavigationDataTransformFilter".
Definition at line 31 of file mitkNavigationDataTransformFilterTest.cpp.
| typedef itk::Vector<mitk::ScalarType,3> VectorType |
Definition at line 33 of file mitkNavigationDataTransformFilterTest.cpp.
| int mitkNavigationDataTransformFilterTest | ( | int | , |
| char * | [] | ||
| ) |
Definition at line 35 of file mitkNavigationDataTransformFilterTest.cpp.
References mitk::NavigationData::GetOrientation(), mitk::NavigationData::GetPosition(), mitk::NavigationData::IsDataValid(), MITK_TEST_BEGIN, MITK_TEST_CONDITION, MITK_TEST_CONDITION_REQUIRED, MITK_TEST_END, MITK_TEST_FOR_EXCEPTION, mitk::NavigationData::New(), and mitk::NavigationDataTransformFilter::New().
{
MITK_TEST_BEGIN("NavigationDataTransformFilter")
// let's create an object of our class
mitk::NavigationDataTransformFilter::Pointer myFilter = mitk::NavigationDataTransformFilter::New();
// first test: did this work?
// using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
// it makes no sense to continue without an object.
MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
/* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
mitk::NavigationData::PositionType initialPos, resultPos;
mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
mitk::FillVector3D(resultPos, 5.0, 5.0,5.0);
mitk::NavigationData::OrientationType initialOri(0.0, 0.0, -0.7071, 0.7071);
mitk::ScalarType initialError(0.0);
bool initialValid(true);
mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
nd1->SetPosition(initialPos);
nd1->SetOrientation(initialOri);
nd1->SetPositionAccuracy(initialError);
nd1->SetDataValid(initialValid);
myFilter->SetInput(nd1);
MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "Testing Set-/GetInput()");
mitk::NavigationData* output = myFilter->GetOutput(0);
/*test case no transform set*/
MITK_TEST_FOR_EXCEPTION(std::exception, output->Update(););
/* test transformation */
mitk::NavigationDataTransformFilter::TransformType::Pointer transform = mitk::NavigationDataTransformFilter::TransformType::New();
VectorType translationVector;
translationVector[0] = 3.9;
translationVector[1] = 2.8;
translationVector[2] = 1.7;
/* test translation */
transform->Translate(translationVector);
myFilter->SetRigid3DTransform(transform);
output = myFilter->GetOutput();
MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()");
output->Update(); // execute filter
MITK_TEST_CONDITION(output->GetPosition() == resultPos, "Testing if translation was calculated correct");
MITK_TEST_CONDITION( mitk::Equal(output->GetOrientation(),initialOri),"Testing if Orientation remains unchanged ");
MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged");
// test rotation
mitk::NavigationDataTransformFilter::Pointer myFilter2 = mitk::NavigationDataTransformFilter::New();
// using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
// it makes no sense to continue without an object.
MITK_TEST_CONDITION_REQUIRED(myFilter2.IsNotNull(),"Testing instantiation");
mitk::FillVector3D(initialPos, 1.1, 1.1, 1.1);
mitk::FillVector3D(resultPos, 1.1, -1.1, 1.1);
mitk::NavigationData::OrientationType resultOri(0.0, 0.0, -0.7071, 0.7071);
initialOri[0] = 0;
initialOri[1] = 0;
initialOri[2] = 0;
initialOri[3] = 1;
nd1->SetPosition(initialPos);
nd1->SetOrientation(initialOri);
myFilter2->SetInput(nd1);
itk::Matrix<mitk::ScalarType,3,3> rotMatrix;
rotMatrix[0][0] = 0;
rotMatrix[0][1] = 1;
rotMatrix[0][2] = 0;
rotMatrix[1][0] = -1;
rotMatrix[1][1] = 0;
rotMatrix[1][2] = 0;
rotMatrix[2][0] = 0;
rotMatrix[2][1] = 0;
rotMatrix[2][2] = 1;
mitk::NavigationDataTransformFilter::TransformType::Pointer transform2 = mitk::NavigationDataTransformFilter::TransformType::New();
transform2->SetRotationMatrix(rotMatrix);
myFilter2->SetRigid3DTransform(transform2);
mitk::NavigationData* output2 = myFilter2->GetOutput();
MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput()");
output2->Update(); // execute filter
MITK_TEST_CONDITION(output2->GetPosition() == resultPos, "Testing if position after rotation is correctly calculated");
MITK_TEST_CONDITION( mitk::Equal(output2->GetOrientation(), resultOri),"Testing if orientation after rotation is correctly caclculated ");
MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged");
//-----------------------------------------------------------------------------------------------------------
/* now test the filter with multiple inputs */
mitk::NavigationData::PositionType initialPos2, resultPos2;
mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
mitk::FillVector3D(initialPos2, -1000.0, 567.89, 0.0);
mitk::FillVector3D(resultPos, 2.2,-1.1, 3.3);
mitk::FillVector3D(resultPos2, 567.89, 1000, 0.0);
mitk::NavigationData::OrientationType initialOri2(0.5,0.5,0.5,0.5);
mitk::NavigationData::OrientationType resultOri2(0.7071,0.0,0.0,0.7071);
mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
nd1->SetPosition(initialPos);
nd1->SetOrientation(initialOri);
nd1->SetPositionAccuracy(initialError);
nd1->SetDataValid(initialValid);
nd2->SetPosition(initialPos2);
nd2->SetOrientation(initialOri2);
nd2->SetPositionAccuracy(initialError);
nd2->SetDataValid(initialValid);
myFilter = NULL;
myFilter = mitk::NavigationDataTransformFilter::New();
myFilter->SetRigid3DTransform(transform2);
myFilter->SetInput(0, nd1);
myFilter->SetInput(1, nd2);
MITK_TEST_CONDITION(((myFilter->GetInput(0) == nd1)
&& (myFilter->GetInput(1) == nd2)), "Testing Set-/GetInput(index, data)");
output = NULL;
output2 = NULL;
output = myFilter->GetOutput(0);
output2 = myFilter->GetOutput(1);
output2->Update(); // execute filter pipeline. this should update both outputs!
MITK_TEST_CONDITION_REQUIRED(((output != NULL) && (output2 != NULL)), "Testing GetOutput(index)");
MITK_TEST_CONDITION(output->GetPosition() == resultPos, "Testing if position rotation was calculated correct [output 0]");
MITK_TEST_CONDITION(mitk::Equal(output->GetOrientation(), resultOri),"Testing if orientation rotation was calculated correct [output 0]");
MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 0");
MITK_TEST_CONDITION(output2->GetPosition() == resultPos2, "Testing if rotation was calculated correct [output 1]");
MITK_TEST_CONDITION(mitk::Equal(output2->GetOrientation(), resultOri2),"Testing if orientation rotation was calculated correct [output 1]");
MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 1");
//
// /* test if anything changes on second ->Update() */
output->Update(); // nothing should change, since inputs remain unchanged
MITK_TEST_CONDITION((output->GetPosition() == (resultPos)) && (output2->GetPosition() == (resultPos2)), "Testing translation calculation after second update()");
/* change an input, see if output changes too */
mitk::NavigationData::PositionType pos3, resultPos3;
mitk::FillVector3D(pos3, 123.456, -234.567, 789.987);
mitk::FillVector3D(resultPos3, -234.567, -123.456, 789.987);
nd1->SetPosition(pos3); // nd1 is modified, but nothing should change until pipe gets updated
MITK_TEST_CONDITION((output->GetPosition() == (resultPos))
&&(output2->GetPosition() == (resultPos2)), "Testing transfomr calculation after input change, before update()");
output->Update(); // update pipeline. should recalculate positions, because input has changed
MITK_TEST_CONDITION((output->GetPosition() == (resultPos3)) && (output2->GetPosition() == (resultPos2)), "Testing transform calculation after input change, after update()");
// always end with this!
MITK_TEST_END();
}
1.7.2