00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkNavigationDataTransformFilter.h"
00019 #include "mitkNavigationData.h"
00020
00021 #include "mitkTestingMacros.h"
00022
00023 #include <itkTransform.h>
00024 #include <itkVector.h>
00025 #include <iostream>
00026
00027
00031 typedef itk::Rigid3DTransform<mitk::ScalarType > TransformType;
00032
00033 typedef itk::Vector<mitk::ScalarType,3> VectorType;
00034
00035 int mitkNavigationDataTransformFilterTest(int , char* [])
00036 {
00037 MITK_TEST_BEGIN("NavigationDataTransformFilter")
00038
00039
00040 mitk::NavigationDataTransformFilter::Pointer myFilter = mitk::NavigationDataTransformFilter::New();
00041
00042
00043
00044
00045 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
00046
00047
00048 mitk::NavigationData::PositionType initialPos, resultPos;
00049 mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
00050 mitk::FillVector3D(resultPos, 5.0, 5.0,5.0);
00051
00052 mitk::NavigationData::OrientationType initialOri(0.0, 0.0, -0.7071, 0.7071);
00053 mitk::ScalarType initialError(0.0);
00054 bool initialValid(true);
00055
00056 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00057 nd1->SetPosition(initialPos);
00058 nd1->SetOrientation(initialOri);
00059 nd1->SetPositionAccuracy(initialError);
00060 nd1->SetDataValid(initialValid);
00061
00062 myFilter->SetInput(nd1);
00063 MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "Testing Set-/GetInput()");
00064
00065 mitk::NavigationData* output = myFilter->GetOutput(0);
00066
00067
00068 MITK_TEST_FOR_EXCEPTION(std::exception, output->Update(););
00069
00070
00071 mitk::NavigationDataTransformFilter::TransformType::Pointer transform = mitk::NavigationDataTransformFilter::TransformType::New();
00072 VectorType translationVector;
00073 translationVector[0] = 3.9;
00074 translationVector[1] = 2.8;
00075 translationVector[2] = 1.7;
00076
00077
00078
00079 transform->Translate(translationVector);
00080
00081 myFilter->SetRigid3DTransform(transform);
00082
00083 output = myFilter->GetOutput();
00084 MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()");
00085
00086 output->Update();
00087
00088 MITK_TEST_CONDITION(output->GetPosition() == resultPos, "Testing if translation was calculated correct");
00089 MITK_TEST_CONDITION( mitk::Equal(output->GetOrientation(),initialOri),"Testing if Orientation remains unchanged ");
00090 MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged");
00091
00092
00093
00094 mitk::NavigationDataTransformFilter::Pointer myFilter2 = mitk::NavigationDataTransformFilter::New();
00095
00096
00097 MITK_TEST_CONDITION_REQUIRED(myFilter2.IsNotNull(),"Testing instantiation");
00098
00099 mitk::FillVector3D(initialPos, 1.1, 1.1, 1.1);
00100 mitk::FillVector3D(resultPos, 1.1, -1.1, 1.1);
00101
00102 mitk::NavigationData::OrientationType resultOri(0.0, 0.0, -0.7071, 0.7071);
00103 initialOri[0] = 0;
00104 initialOri[1] = 0;
00105 initialOri[2] = 0;
00106 initialOri[3] = 1;
00107
00108 nd1->SetPosition(initialPos);
00109 nd1->SetOrientation(initialOri);
00110
00111 myFilter2->SetInput(nd1);
00112
00113 itk::Matrix<mitk::ScalarType,3,3> rotMatrix;
00114 rotMatrix[0][0] = 0;
00115 rotMatrix[0][1] = 1;
00116 rotMatrix[0][2] = 0;
00117 rotMatrix[1][0] = -1;
00118 rotMatrix[1][1] = 0;
00119 rotMatrix[1][2] = 0;
00120 rotMatrix[2][0] = 0;
00121 rotMatrix[2][1] = 0;
00122 rotMatrix[2][2] = 1;
00123
00124 mitk::NavigationDataTransformFilter::TransformType::Pointer transform2 = mitk::NavigationDataTransformFilter::TransformType::New();
00125 transform2->SetRotationMatrix(rotMatrix);
00126
00127 myFilter2->SetRigid3DTransform(transform2);
00128
00129 mitk::NavigationData* output2 = myFilter2->GetOutput();
00130 MITK_TEST_CONDITION_REQUIRED(output2 != NULL, "Testing GetOutput()");
00131
00132 output2->Update();
00133
00134 MITK_TEST_CONDITION(output2->GetPosition() == resultPos, "Testing if position after rotation is correctly calculated");
00135 MITK_TEST_CONDITION( mitk::Equal(output2->GetOrientation(), resultOri),"Testing if orientation after rotation is correctly caclculated ");
00136 MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged");
00137
00138
00139
00140
00141 mitk::NavigationData::PositionType initialPos2, resultPos2;
00142 mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
00143 mitk::FillVector3D(initialPos2, -1000.0, 567.89, 0.0);
00144 mitk::FillVector3D(resultPos, 2.2,-1.1, 3.3);
00145 mitk::FillVector3D(resultPos2, 567.89, 1000, 0.0);
00146 mitk::NavigationData::OrientationType initialOri2(0.5,0.5,0.5,0.5);
00147 mitk::NavigationData::OrientationType resultOri2(0.7071,0.0,0.0,0.7071);
00148 mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
00149
00150 nd1->SetPosition(initialPos);
00151 nd1->SetOrientation(initialOri);
00152 nd1->SetPositionAccuracy(initialError);
00153 nd1->SetDataValid(initialValid);
00154
00155 nd2->SetPosition(initialPos2);
00156 nd2->SetOrientation(initialOri2);
00157 nd2->SetPositionAccuracy(initialError);
00158 nd2->SetDataValid(initialValid);
00159
00160 myFilter = NULL;
00161 myFilter = mitk::NavigationDataTransformFilter::New();
00162 myFilter->SetRigid3DTransform(transform2);
00163 myFilter->SetInput(0, nd1);
00164 myFilter->SetInput(1, nd2);
00165
00166 MITK_TEST_CONDITION(((myFilter->GetInput(0) == nd1)
00167 && (myFilter->GetInput(1) == nd2)), "Testing Set-/GetInput(index, data)");
00168 output = NULL;
00169 output2 = NULL;
00170 output = myFilter->GetOutput(0);
00171 output2 = myFilter->GetOutput(1);
00172 output2->Update();
00173 MITK_TEST_CONDITION_REQUIRED(((output != NULL) && (output2 != NULL)), "Testing GetOutput(index)");
00174
00175 MITK_TEST_CONDITION(output->GetPosition() == resultPos, "Testing if position rotation was calculated correct [output 0]");
00176 MITK_TEST_CONDITION(mitk::Equal(output->GetOrientation(), resultOri),"Testing if orientation rotation was calculated correct [output 0]");
00177 MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 0");
00178
00179 MITK_TEST_CONDITION(output2->GetPosition() == resultPos2, "Testing if rotation was calculated correct [output 1]");
00180 MITK_TEST_CONDITION(mitk::Equal(output2->GetOrientation(), resultOri2),"Testing if orientation rotation was calculated correct [output 1]");
00181 MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 1");
00182
00183
00184 output->Update();
00185 MITK_TEST_CONDITION((output->GetPosition() == (resultPos)) && (output2->GetPosition() == (resultPos2)), "Testing translation calculation after second update()");
00186
00187
00188 mitk::NavigationData::PositionType pos3, resultPos3;
00189 mitk::FillVector3D(pos3, 123.456, -234.567, 789.987);
00190 mitk::FillVector3D(resultPos3, -234.567, -123.456, 789.987);
00191 nd1->SetPosition(pos3);
00192 MITK_TEST_CONDITION((output->GetPosition() == (resultPos))
00193 &&(output2->GetPosition() == (resultPos2)), "Testing transfomr calculation after input change, before update()");
00194
00195 output->Update();
00196 MITK_TEST_CONDITION((output->GetPosition() == (resultPos3)) && (output2->GetPosition() == (resultPos2)), "Testing transform calculation after input change, after update()");
00197
00198
00199 MITK_TEST_END();
00200 }
00201