34 MITK_TEST_BEGIN(
"NavigationDataTransformFilter")
37 mitk::NavigationDataTransformFilter::Pointer myFilter = mitk::NavigationDataTransformFilter::New();
42 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),
"Testing instantiation");
46 mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
47 mitk::FillVector3D(resultPos, 5.0, 5.0,5.0);
51 mitk::ScalarType initialError(0.0);
52 bool initialValid(
true);
54 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
55 nd1->SetPosition(initialPos);
56 nd1->SetOrientation(initialOri);
57 nd1->SetPositionAccuracy(initialError);
58 nd1->SetOrientationAccuracy(initialError);
59 nd1->SetDataValid(initialValid);
61 MITK_TEST_CONDITION(myFilter->GetPrecompose() ==
false,
"Testing default Precompose mode");
63 myFilter->SetPrecompose(
true);
64 MITK_TEST_CONDITION(myFilter->GetPrecompose() ==
true,
"Testing Set-/GetPrecompose, part 1");
66 myFilter->PrecomposeOff();
67 MITK_TEST_CONDITION(myFilter->GetPrecompose() ==
false,
"Testing PrecomposeOff");
69 myFilter->PrecomposeOn();
70 MITK_TEST_CONDITION(myFilter->GetPrecompose() ==
true,
"Testing PrecomposeOn");
72 myFilter->SetInput(nd1);
73 MITK_TEST_CONDITION(myFilter->GetInput() == nd1,
"Testing Set-/GetInput()");
78 MITK_TEST_FOR_EXCEPTION(std::exception, output->Update(););
81 mitk::NavigationDataTransformFilter::TransformType::Pointer transform = mitk::NavigationDataTransformFilter::TransformType::New();
83 translationVector[0] = 3.9;
84 translationVector[1] = 2.8;
85 translationVector[2] = 1.7;
91 transform->Translate(translationVector);
93 myFilter->SetRigid3DTransform(transform);
94 myFilter->SetPrecompose(
false);
96 output = myFilter->GetOutput();
97 MITK_TEST_CONDITION_REQUIRED(output !=
nullptr,
"Testing GetOutput()");
101 MITK_TEST_CONDITION(output->GetPosition() == resultPos,
"Testing if translation was calculated correct");
102 MITK_TEST_CONDITION(
mitk::Equal( output->GetOrientation(),initialOri, 0.00001 ),
"Testing if Orientation remains unchanged ");
103 MITK_TEST_CONDITION(output->
IsDataValid() == initialValid,
"Testing if DataValid remains unchanged");
107 myFilter->PrecomposeOn();
108 MITK_TEST_CONDITION(output->GetPosition() == resultPos,
109 "Testing if precomposed translation was calculated correct");
110 MITK_TEST_CONDITION(
mitk::Equal(output->GetOrientation(),initialOri,0.00001),
111 "Testing if precomposed Orientation remains unchanged ");
112 MITK_TEST_CONDITION(output->
IsDataValid() == initialValid,
113 "Testing if precomposed DataValid remains unchanged");
116 mitk::NavigationDataTransformFilter::Pointer myFilter2 = mitk::NavigationDataTransformFilter::New();
119 MITK_TEST_CONDITION_REQUIRED(myFilter2.IsNotNull(),
"Testing instantiation");
122 mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
128 nd1->SetPosition(initialPos);
129 nd1->SetOrientation(initialOri);
131 myFilter2->SetInput(nd1);
136 myFilter2->PrecomposeOff();
139 mitk::NavigationDataTransformFilter::TransformType::MatrixType rotMatrix;
143 rotMatrix[1][0] = -1;
150 mitk::NavigationDataTransformFilter::TransformType::Pointer transform2 = mitk::NavigationDataTransformFilter::TransformType::New();
151 transform2->SetMatrix(rotMatrix);
153 myFilter2->SetRigid3DTransform(transform2);
156 MITK_TEST_CONDITION_REQUIRED(output2 !=
nullptr,
"Testing GetOutput()");
160 mitk::FillVector3D(resultPos, 2.2, -1.1, 3.3);
162 MITK_TEST_CONDITION(
mitk::Equal(output2->GetPosition(), resultPos, 0.00001),
"Testing if position after rotation is correctly calculated");
163 MITK_TEST_CONDITION(
mitk::Equal(output2->GetOrientation(), resultOri, 0.00001),
"Testing if orientation after rotation is correctly caclculated ");
164 MITK_TEST_CONDITION(output2->
IsDataValid() == initialValid,
"Testing if DataValid remains unchanged");
169 myFilter2->PrecomposeOn();
173 MITK_TEST_CONDITION(output2->GetPosition() == initialPos,
174 "Testing if precomposed position after rotation is correctly calculated");
175 MITK_TEST_CONDITION(
mitk::Equal(output2->GetOrientation(), resultOri, 0.00001),
176 "Testing if precomposed orientation after rotation is correctly calculated");
177 MITK_TEST_CONDITION(output2->
IsDataValid() == initialValid,
178 "Testing if precomposed DataValid remains unchanged");
183 itk::QuaternionRigidTransform<mitk::NavigationDataTransformFilter::TransformType::ScalarType>::VnlQuaternionType obscureRotationQuat(37,29,71);
184 obscureRotationQuat.normalize();
186 itk::QuaternionRigidTransform<mitk::NavigationDataTransformFilter::TransformType::ScalarType>::Pointer rotation =
187 itk::QuaternionRigidTransform<mitk::NavigationDataTransformFilter::TransformType::ScalarType>::New();
188 rotation->SetRotation(obscureRotationQuat);
190 mitk::NavigationDataTransformFilter::TransformType::Pointer transform3 = mitk::NavigationDataTransformFilter::TransformType::New();
194 MITK_TEST_OUTPUT_NO_ENDL(<<
"Testing whether NavigationDataTransformFilter's internal transform has sufficient precision for ITK ")
195 transform3->SetMatrix(rotation->GetMatrix());
196 MITK_TEST_OUTPUT(<<
" [PASSED]")
197 mitk::TestManager::GetInstance()->TestPassed();
199 catch(std::exception&)
201 MITK_TEST_OUTPUT(<<
" [FAILED]")
202 mitk::TestManager::GetInstance()->TestFailed();
208 mitk::FillVector3D(initialPos, 1.1, 2.2, 3.3);
209 mitk::FillVector3D(initialPos2, -1000.0, 567.89, 0.0);
210 mitk::FillVector3D(resultPos, 2.2,-1.1, 3.3);
211 mitk::FillVector3D(resultPos2, 567.89, 1000, 0.0);
214 mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
216 nd1->SetPosition(initialPos);
217 nd1->SetOrientation(initialOri);
218 nd1->SetPositionAccuracy(initialError);
219 nd1->SetDataValid(initialValid);
221 nd2->SetPosition(initialPos2);
222 nd2->SetOrientation(initialOri2);
223 nd2->SetPositionAccuracy(initialError);
224 nd2->SetDataValid(initialValid);
227 myFilter = mitk::NavigationDataTransformFilter::New();
228 myFilter->SetRigid3DTransform(transform2);
229 myFilter->SetInput(0, nd1);
230 myFilter->SetInput(1, nd2);
232 MITK_TEST_CONDITION(((myFilter->GetInput(0) == nd1)
233 && (myFilter->GetInput(1) == nd2)),
"Testing Set-/GetInput(index, data)");
236 output = myFilter->GetOutput();
237 output2 = myFilter->GetOutput(1);
239 MITK_TEST_CONDITION_REQUIRED(((output !=
nullptr) && (output2 !=
nullptr)),
"Testing GetOutput(index)");
241 MITK_TEST_CONDITION(
mitk::Equal(output->GetPosition(), resultPos, 0.00001),
"Testing if position rotation was calculated correct [output 0]");
242 MITK_TEST_CONDITION(
mitk::Equal(output->GetOrientation(), resultOri, 0.00001),
"Testing if orientation rotation was calculated correct [output 0]");
243 MITK_TEST_CONDITION(output->
IsDataValid() == initialValid,
"Testing if DataValid remains unchanged for output 0");
245 MITK_TEST_CONDITION(
mitk::Equal(output2->GetPosition(), resultPos2, 0.0001),
"Testing if rotation was calculated correct [output 1]");
246 MITK_TEST_CONDITION(
mitk::Equal(output2->GetOrientation(), resultOri2, 0.00001),
"Testing if orientation rotation was calculated correct [output 1]");
247 MITK_TEST_CONDITION(output2->
IsDataValid() == initialValid,
"Testing if DataValid remains unchanged for output 1");
251 MITK_TEST_CONDITION(
mitk::Equal(output->GetPosition(), resultPos, 0.0001) &&
252 mitk::Equal(output2->GetPosition(), resultPos2, 0.0001),
"Testing translation calculation after second update()");
256 mitk::FillVector3D(
pos3, 123.456, -234.567, 789.987);
257 mitk::FillVector3D(resultPos3, -234.567, -123.456, 789.987);
258 nd1->SetPosition(
pos3);
259 MITK_TEST_CONDITION(
mitk::Equal(output->GetPosition(),resultPos, 0.00001)
260 &&
mitk::Equal(output2->GetPosition(), resultPos2, 0.0001),
"Testing transform calculation after input change, before update()");
263 MITK_TEST_CONDITION(
mitk::Equal(output->GetPosition(), resultPos3, 0.00001) &&
264 mitk::Equal(output2->GetPosition(), resultPos2, 0.0001),
"Testing transform calculation after input change, after update()");