MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkNavigationDataObjectVisualizationFilterTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
14#include "mitkNavigationData.h"
15
16#include "mitkTestingMacros.h"
17#include <mitkTestingConfig.h>
18#include <mitkTestFixture.h>
19
20#include <vtkTransform.h>
21#include <iostream>
22
23#include "mitkSurface.h"
24
29{
30 // List of Tests
32
33 //Constructor
34 MITK_TEST(TestInitialize);
35 MITK_TEST(TestInput);
36 MITK_TEST(TestOutput);
38 MITK_TEST(TestTransforms);
40 MITK_TEST(TestThirdInput);
41 MITK_TEST(TestSetTransformPosition);
44 MITK_TEST(TestUpdateOrientation);
45
46 CPPUNIT_TEST_SUITE_END();
47
48 // Used Variables
49private:
50 mitk::NavigationDataObjectVisualizationFilter::Pointer myFilter;
51 mitk::NavigationData::PositionType initialPos1, initialPos2;
54 mitk::ScalarType initialError1;
55 mitk::ScalarType initialError2;
56 bool initialValid1;
57 bool initialValid2;
58 mitk::NavigationData::Pointer nd1;
59 mitk::NavigationData::Pointer nd2;
60
61 // Test setting BaseData
62 mitk::Surface::Pointer mitkToolData1;
63 std::vector<mitk::BaseData::Pointer> mitkToolVectorData1;
64 mitk::Surface::Pointer mitkToolData2;
65 std::vector<mitk::BaseData::Pointer> mitkToolVectorData2;
66
67 //dummy for test; will not be set but used to test find
68 mitk::Surface::Pointer mitkToolDataDummy;
69 std::vector<mitk::BaseData::Pointer> mitkToolVectorDataDummy;
70 //and the Dummy NavigationData for this
73 mitk::ScalarType initialErrorDummy;
74 bool initialValidDummy;
75 mitk::NavigationData::Pointer ndDummy ;
76
78
79 mitk::AffineTransform3D::Pointer affineTransform1;
80 mitk::AffineTransform3D::OutputVectorType offset1;
81
82 mitk::AffineTransform3D::Pointer affineTransform2;
83 mitk::AffineTransform3D::OutputVectorType offset2;
84 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1;
85 mitk::AffineTransform3D::MatrixType::InternalMatrixType m2;
86
87public:
88
89 // Set up for variables
90 void setUp() override
91 {
92 // -------------- Setup for Filter ---------------------------
93
94 /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
95 myFilter = mitk::NavigationDataObjectVisualizationFilter::New();
96 mitk::FillVector3D(initialPos1, 1.1, 2.2, 3.3);
97 mitk::FillVector3D(initialPos2, 5.0, 6.0, 7.0);
98 mitk::FillVector4D(initialOri1, 0.1, 0.2, 0.3, 0.4);
99 mitk::FillVector4D(initialOri2,0.5, 0.6, 0.7, 0.8);
100 initialError1=0.0;
101 initialError2=5.0;
102 initialValid1 = true;
103 initialValid2 = true;
104
105 //Set Navigation Data
106 nd1 = mitk::NavigationData::New();
107 nd1->SetPosition(initialPos1);
108 nd1->SetOrientation(initialOri1);
109 nd1->SetPositionAccuracy(initialError1);
110 nd1->SetDataValid(initialValid1);
111
112 nd2 = mitk::NavigationData::New();
113 nd2->SetPosition(initialPos2);
114 nd2->SetOrientation(initialOri2);
115 nd2->SetPositionAccuracy(initialError2);
116 nd2->SetDataValid(initialValid2);
117
118 //Set Input
119 myFilter->SetInput(nd1);
120 myFilter->SetInput(1, nd2);
121 output = myFilter->GetOutput();
122
123 // -------------------------- Setup for TestData ----------------------
124
125 // Test setting BaseData
126 mitkToolData1 = mitk::Surface::New();
127 mitkToolData2 = mitk::Surface::New();
128
129 // Test setting BaseData vectors
130 mitkToolVectorData1.push_back(mitkToolData1.GetPointer());
131 mitkToolVectorData2.push_back(mitkToolData2.GetPointer());
132
133 //dummy for test; will not be set but used to test find
134 mitkToolDataDummy = mitk::Surface::New();
135 mitkToolVectorDataDummy.push_back(mitkToolDataDummy.GetPointer());
136 //and the Dummy NavigationData for this
137 mitk::FillVector3D(initialPosDummy, 8.8, 9.9, 10.10);
138 mitk::FillVector4D(initialOriDummy,1.1, 2.2, 3.3, 4.4);
139 initialErrorDummy=10.0;
140 initialValidDummy=true;
141 ndDummy = mitk::NavigationData::New();
142 ndDummy->SetPosition(initialPosDummy);
143 ndDummy->SetOrientation(initialOriDummy);
144 ndDummy->SetPositionAccuracy(initialErrorDummy);
145 ndDummy->SetDataValid(initialValidDummy);
146 //now we have ndDummy and mitkToolDataDummy to test with
147 }
148
149 void tearDown() override
150 {
151 }
152
153 // Test functions
154
156 // first test: did this work?
157 CPPUNIT_ASSERT_MESSAGE("Testing instantiation", myFilter.IsNotNull());
158 }
159
160 void TestInput(){
161 //testing the input
162 CPPUNIT_ASSERT_MESSAGE("Testing Set-/GetInput() input 1 without index",myFilter->GetInput() == nd1);
163 CPPUNIT_ASSERT_MESSAGE("Testing Set-/GetInput() input 1", myFilter->GetInput(0) == nd1);
164 CPPUNIT_ASSERT_MESSAGE( "Testing Set-/GetInput() input 2", myFilter->GetInput(1) == nd2);
165 CPPUNIT_ASSERT_MESSAGE("Testing GetNumberOfToolRepresentations()", myFilter->GetNumberOfToolRepresentations() == 0);
166 }
167
169 //testing getting the output
170 CPPUNIT_ASSERT_MESSAGE("Testing GetOutput()", output != nullptr);
171 CPPUNIT_ASSERT_MESSAGE("Testing GetOutput() == GetOutput()", output == myFilter->GetOutput());
172 CPPUNIT_ASSERT_MESSAGE("Testing GetOutput() != GetOutput(1)", output != myFilter->GetOutput(1));
173 }
174
176 //setting nodes
177 myFilter->SetRepresentationObject(0, mitkToolData1.GetPointer());
178 CPPUNIT_ASSERT_MESSAGE( "Testing SetRepresentationObject()/GetRepresentationObject() node 1", myFilter->GetRepresentationObject(0) == mitkToolData1);
179 CPPUNIT_ASSERT_MESSAGE("Testing GetNumberOfToolRepresentations() after adding first tool", myFilter->GetNumberOfToolRepresentations() == 1);
180
181 myFilter->SetRepresentationObject(1, mitkToolData2.GetPointer());
182 CPPUNIT_ASSERT_MESSAGE( "Testing SetRepresentationObject() node 2", myFilter->GetRepresentationObject(1) == mitkToolData2);
183 CPPUNIT_ASSERT_MESSAGE( "Testing GetNumberOfToolRepresentations() after adding second tool", myFilter->GetNumberOfToolRepresentations() == 2);
184 //getting nodes
185 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() node 1", myFilter->GetRepresentationObject(0) == mitkToolData1);
186 CPPUNIT_ASSERT_MESSAGE( "Testing GetRepresentationObject() != Dummy node", myFilter->GetRepresentationObject(0) != mitkToolDataDummy);
187 CPPUNIT_ASSERT_MESSAGE( "Testing GetRepresentationObject() node 2", myFilter->GetRepresentationObject(1) == mitkToolData2);
188 CPPUNIT_ASSERT_MESSAGE( "Testing GetRepresentationObject() != Dummy node", myFilter->GetRepresentationObject(1) != mitkToolDataDummy);
189 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() with out of range parameter", myFilter->GetRepresentationObject(111) == nullptr);
190 }
191
193 {
194 // setting nodes
195 myFilter->SetRepresentationObjects(0, mitkToolVectorData1);
196 CPPUNIT_ASSERT_MESSAGE("Testing SetRepresentationObject()/GetRepresentationObject() node 1", myFilter->GetAllRepresentationObjects(0) == mitkToolVectorData1);
197 CPPUNIT_ASSERT_MESSAGE("Testing GetNumberOfToolRepresentations() after adding first tool", myFilter->GetNumberOfToolRepresentations() == 1);
198
199 myFilter->SetRepresentationObjects(1, mitkToolVectorData2);
200 CPPUNIT_ASSERT_MESSAGE("Testing SetRepresentationObject() node 2", myFilter->GetAllRepresentationObjects(1) == mitkToolVectorData2);
201 CPPUNIT_ASSERT_MESSAGE("Testing GetNumberOfToolRepresentations() after adding second tool", myFilter->GetNumberOfToolRepresentations() == 2);
202 // getting nodes
203 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() node 1", myFilter->GetAllRepresentationObjects(0) == mitkToolVectorData1);
204 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() != Dummy node", myFilter->GetAllRepresentationObjects(0) != mitkToolVectorDataDummy);
205 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() node 2", myFilter->GetAllRepresentationObjects(1) == mitkToolVectorData2);
206 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() != Dummy node", myFilter->GetAllRepresentationObjects(1) != mitkToolVectorDataDummy);
207 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() with out of range parameter", myFilter->GetAllRepresentationObjects(111).empty() == true);
208 }
209
211 myFilter->SetRepresentationObject(0, mitkToolData1.GetPointer());
212 myFilter->SetRepresentationObject(1, mitkToolData2.GetPointer());
213 //Process
214 myFilter->Update();
215
216 affineTransform1 = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
217 offset1 = affineTransform1->GetOffset();
218 affineTransform2 = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
219 offset2 = affineTransform2->GetOffset();
220
221 m1 = affineTransform1->GetMatrix().GetVnlMatrix();
222 m2 = affineTransform2->GetMatrix().GetVnlMatrix();
223
224 //now check it there are data connected to the nodes with the according orientation and offsets
225 CPPUNIT_ASSERT_MESSAGE("Testing Offset position 1", offset1.GetVnlVector()==initialPos1.GetVnlVector());
226 CPPUNIT_ASSERT_MESSAGE("Testing Offset position 2", offset2.GetVnlVector()==initialPos2.GetVnlVector());
227
228 MITK_TEST_OUTPUT( << "\n initOrient1="<<initialOri1<<" affineTransform1->GetVnlMatrix():\n "<< m1);
229 MITK_TEST_OUTPUT( << "\n initOrient2=" << initialOri2 << " affineTransform2->GetVnlMatrix():\n " << m2);
230 }
231
233 myFilter->SetRepresentationObject(0, mitkToolData1.GetPointer());
234 myFilter->SetRepresentationObject(1, mitkToolData2.GetPointer());
235 //Process
236 myFilter->Update();
237
238 affineTransform1 = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
239 offset1 = affineTransform1->GetOffset();
240 affineTransform2 = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
241 offset2 = affineTransform2->GetOffset();
242
243 m1 = affineTransform1->GetMatrix().GetVnlMatrix();
244 m2 = affineTransform2->GetMatrix().GetVnlMatrix();
245
246 //messing with SetRepresentationObject
247 //setting nodes
248 myFilter->SetRepresentationObject(0, mitkToolData2.GetPointer());
249 CPPUNIT_ASSERT_MESSAGE("Twisting mitkToolData by using SetRepresentationObject() NavigationData 1 with ToolData 2", myFilter->GetRepresentationObject(0) == mitkToolData2);
250 CPPUNIT_ASSERT_MESSAGE( "Testing GetNumberOfToolRepresentations() == 1", myFilter->GetNumberOfToolRepresentations() == 2);
251
252 myFilter->SetRepresentationObject(1, mitkToolData1.GetPointer());
253 CPPUNIT_ASSERT_MESSAGE("Twisting mitkToolData by using SetRepresentationObject() NavigationData 2 with ToolData 1", myFilter->GetRepresentationObject(1) == mitkToolData1);
254 CPPUNIT_ASSERT_MESSAGE( "Testing GetNumberOfToolRepresentations() == 2", myFilter->GetNumberOfToolRepresentations() == 2);
255
256 //getting nodes
257 CPPUNIT_ASSERT_MESSAGE("Testing switched BaseData of NavigationData 1 ", myFilter->GetRepresentationObject(0) == mitkToolData2);
258 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() != Dummy node", myFilter->GetRepresentationObject(0) != mitkToolDataDummy);
259 CPPUNIT_ASSERT_MESSAGE("Testing switched BaseData NavigationData 2", myFilter->GetRepresentationObject(1) == mitkToolData1);
260 CPPUNIT_ASSERT_MESSAGE("Testing GetRepresentationObject() != Dummy node", myFilter->GetRepresentationObject(1) != mitkToolDataDummy);
261
262 //processing update through pipeline
263 myFilter->Update();
264
265 //now check it there are data connected to the nodes with the according orientation and offsets
266 mitk::AffineTransform3D::Pointer affineTransform1Second = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
267 CPPUNIT_ASSERT_MESSAGE( "Testing affineTransform1 after second update", affineTransform1 == affineTransform1Second);
268 mitk::AffineTransform3D::OutputVectorType offset1Second = affineTransform1->GetOffset();
269 CPPUNIT_ASSERT_MESSAGE( "Testing offset1 after second update", offset1 == offset1Second);
270 CPPUNIT_ASSERT_MESSAGE("Testing offset1 equals first update", offset1Second.GetVnlVector()==offset1.GetVnlVector());
271
272 mitk::AffineTransform3D::Pointer affineTransform2Second = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
273 CPPUNIT_ASSERT_MESSAGE("Testing affineTransform2 after second update", affineTransform2 == affineTransform2Second);
274 mitk::AffineTransform3D::OutputVectorType offset2Second = affineTransform2->GetOffset();
275 CPPUNIT_ASSERT_MESSAGE("Testing offset2 after second update", offset2 == offset2Second);
276 CPPUNIT_ASSERT_MESSAGE("Testing offset2 equals first update", offset2Second.GetVnlVector()==offset2.GetVnlVector());
277
278 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1Second= affineTransform1Second->GetMatrix().GetVnlMatrix();
279 MITK_TEST_OUTPUT( <<"\n after second update initOrient1="<<initialOri1<<" affineTransform1->GetVnlMatrix():\n "<< m1Second);
280
281 mitk::AffineTransform3D::MatrixType::InternalMatrixType m2Second= affineTransform2Second->GetMatrix().GetVnlMatrix();
282 MITK_TEST_OUTPUT( << "\n after second update initOrient2="<<initialOri2<<" affineTransform2->GetVnlMatrix():\n "<< m2Second);
283 }
284
286 myFilter->SetRepresentationObject(0, mitkToolData1.GetPointer());
287 myFilter->SetRepresentationObject(1, mitkToolData2.GetPointer());
288 //Process
289 myFilter->Update();
290
291 //testing adding a third input
292 myFilter->SetInput(2,ndDummy);
293 CPPUNIT_ASSERT_MESSAGE("Adding new input and testing GetNumberOfInputs == 3", myFilter->GetNumberOfInputs() == 3);
294 CPPUNIT_ASSERT_MESSAGE("testing GetNumberOfOutputs == 3", myFilter->GetNumberOfOutputs() == 3);
295 CPPUNIT_ASSERT_MESSAGE("Testing Input == newly added input", myFilter->GetInput(2) == ndDummy);
296 CPPUNIT_ASSERT_MESSAGE("Testing GetOutput(2) != nullptr", myFilter->GetOutput(2) != nullptr);
297 CPPUNIT_ASSERT_MESSAGE( "Testing GetOutput(2) != GetOutput(1)", myFilter->GetOutput(2) != myFilter->GetOutput(1));
298 myFilter->SetRepresentationObject(2, mitkToolDataDummy.GetPointer());
299 CPPUNIT_ASSERT_MESSAGE("Testing GetNumberOfToolRepresentations() after adding latest tool", myFilter->GetNumberOfToolRepresentations() == 3);
300 CPPUNIT_ASSERT_MESSAGE("Testing Set-/GetRepresentationObject() equals was set", myFilter->GetRepresentationObject(2) == mitkToolDataDummy);
301
302 //last time processing update through pipeline
303 myFilter->Update();
304
305 //now check for the new values
306 mitk::AffineTransform3D::Pointer affineTransformDummy = mitkToolDataDummy->GetGeometry()->GetIndexToWorldTransform();
307 mitk::AffineTransform3D::OutputVectorType offsetDummy = affineTransformDummy->GetOffset();
308 CPPUNIT_ASSERT_MESSAGE("Testing Offset latest added tool", offsetDummy.GetVnlVector()==initialPosDummy.GetVnlVector());
309
310 mitk::AffineTransform3D::MatrixType::InternalMatrixType m1Latest= affineTransformDummy->GetMatrix().GetVnlMatrix();
311 MITK_TEST_OUTPUT( << "\n latest initOrient="<<initialOriDummy<<" latest affineTransform->GetVnlMatrix():\n "<< m1Latest);
312
313 mitk::Surface::Pointer anotherSurface = mitk::Surface::New();
314 myFilter->SetRepresentationObject(0, anotherSurface.GetPointer());
315 CPPUNIT_ASSERT_MESSAGE("Overwriting BaseData index 0", myFilter->GetRepresentationObject(0) == anotherSurface);
316 }
317
319 // test Set/GetTransformPosition()
320 myFilter->SetTransformPosition(0,true);
321 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(0,true)", myFilter->GetTransformPosition(0)==true);
322 myFilter->SetTransformPosition(1,true);
323 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(1,true)", myFilter->GetTransformPosition(1)==true);
324 myFilter->SetTransformPosition(2,true);
325 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(2,true)", myFilter->GetTransformPosition(2)==true);
326 myFilter->SetTransformPosition(3,true);
327 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(3,true)", myFilter->GetTransformPosition(3)==true);
328
329 myFilter->SetTransformPosition(0,false);
330 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(0,false)", myFilter->GetTransformPosition(0)==false);
331 myFilter->SetTransformPosition(1,false);
332 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(1,false)", myFilter->GetTransformPosition(1)==false);
333 myFilter->SetTransformPosition(2,false);
334 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(2,false)", myFilter->GetTransformPosition(2)==false);
335 myFilter->SetTransformPosition(3,false);
336 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformPosition(3,false)", myFilter->GetTransformPosition(3)==false);
337 }
338
340 // test Set/GetTransformOrientation()
341 myFilter->SetTransformOrientation(0,true);
342 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(0,true)", myFilter->GetTransformOrientation(0)==true);
343 myFilter->SetTransformOrientation(1,true);
344 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(1,true)", myFilter->GetTransformOrientation(1)==true);
345 myFilter->SetTransformOrientation(2,true);
346 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(2,true)", myFilter->GetTransformOrientation(2)==true);
347 myFilter->SetTransformOrientation(3,true);
348 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(3,true)", myFilter->GetTransformOrientation(3)==true);
349
350 myFilter->SetTransformOrientation(0,false);
351 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(0,false)", myFilter->GetTransformOrientation(0)==false);
352 myFilter->SetTransformOrientation(1,false);
353 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(1,false)", myFilter->GetTransformOrientation(1)==false);
354 myFilter->SetTransformOrientation(2,false);
355 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(2,false)", myFilter->GetTransformOrientation(2)==false);
356 myFilter->SetTransformOrientation(3,false);
357 CPPUNIT_ASSERT_MESSAGE("test Set/GetTransformOrientation(3,false)", myFilter->GetTransformOrientation(3)==false);
358 }
359
361 // test the convenience methods to set/getTransformOrientation/Position
362 myFilter->TransformOrientationOn(0);
363 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOn()", myFilter->GetTransformOrientation(0)==true);
364 myFilter->TransformOrientationOff(0);
365 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOff()", myFilter->GetTransformOrientation(0)==false);
366 myFilter->TransformOrientationOff(1);
367 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOff()", myFilter->GetTransformOrientation(1)==false);
368 myFilter->TransformOrientationOn(1);
369 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOn()", myFilter->GetTransformOrientation(1)==true);
370 myFilter->TransformOrientationOn(2);
371 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOn()", myFilter->GetTransformOrientation(2)==true);
372 myFilter->TransformOrientationOff(2);
373 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOff()", myFilter->GetTransformOrientation(2)==false);
374 myFilter->TransformOrientationOn(3);
375 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOn()", myFilter->GetTransformOrientation(3)==true);
376 myFilter->TransformOrientationOff(3);
377 CPPUNIT_ASSERT_MESSAGE("test TransformOrientationOff()", myFilter->GetTransformOrientation(3)==false);
378
379 myFilter->TransformPositionOn(0);
380 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOn()", myFilter->GetTransformPosition(0)==true);
381 myFilter->TransformPositionOff(0);
382 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOff()", myFilter->GetTransformPosition(0)==false);
383 myFilter->TransformPositionOff(1);
384 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOff()", myFilter->GetTransformPosition(1)==false);
385 myFilter->TransformPositionOn(1);
386 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOn()", myFilter->GetTransformPosition(1)==true);
387 myFilter->TransformPositionOn(2);
388 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOn()", myFilter->GetTransformPosition(2)==true);
389 myFilter->TransformPositionOff(2);
390 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOff()", myFilter->GetTransformPosition(2)==false);
391 myFilter->TransformPositionOn(3);
392 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOn()", myFilter->GetTransformPosition(3)==true);
393 myFilter->TransformPositionOff(3);
394 CPPUNIT_ASSERT_MESSAGE("test TransformPositionOff()", myFilter->GetTransformPosition(3)==false);
395 }
396
398 // update position and orientation
399 mitk::NavigationData::PositionType updatedPos1, updatedPos2, zero;
400 mitk::FillVector3D(updatedPos1, 3.2, 1.5, 2.8);
401 mitk::FillVector3D(updatedPos2, 4.3, 5.2, 6.0);
402 mitk::FillVector3D(zero, 0.0, 0.0, 0.0);
403 mitk::NavigationData::OrientationType updatedOri1(0.7, 0.5, 0.1, 0.4);
404 mitk::NavigationData::OrientationType updatedOri2(0.2, 0.7, 0.6, 0.1);
405
406 updatedOri1.normalize();
407 updatedOri2.normalize();
408
409 nd1->SetPosition(updatedPos1);
410 nd1->SetOrientation(updatedOri1);
411
412 nd2->SetPosition(updatedPos2);
413 nd2->SetOrientation(updatedOri2);
414
415 myFilter->SetRepresentationObject(0, mitkToolData1.GetPointer());
416 myFilter->SetRepresentationObject(1, mitkToolData2.GetPointer());
417
418 myFilter->TransformPositionOn(0);
419 myFilter->TransformOrientationOff(0);
420 myFilter->TransformPositionOff(1);
421 myFilter->TransformOrientationOn(1);
422
423 myFilter->Update();
424
425 // test positions and orientations
426 mitk::AffineTransform3D::Pointer updatedAffineTransform1 = mitkToolData1->GetGeometry()->GetIndexToWorldTransform();
427 mitk::AffineTransform3D::OutputVectorType updatedOffset1 = updatedAffineTransform1->GetOffset();
428 CPPUNIT_ASSERT_MESSAGE("Testing updated position 1", mitk::Equal(updatedOffset1.GetVnlVector(),updatedPos1.GetVnlVector()));
429
430 mitk::AffineTransform3D::Pointer updatedAffineTransform2 = mitkToolData2->GetGeometry()->GetIndexToWorldTransform();
431 mitk::AffineTransform3D::OutputVectorType updatedOffset2 = updatedAffineTransform2->GetOffset();
432 CPPUNIT_ASSERT_MESSAGE( "Testing updated position 2", mitk::Equal(updatedOffset2.GetVnlVector(),zero.GetVnlVector()));
433
434 mitk::AffineTransform3D::Pointer identityTransform = mitk::AffineTransform3D::New();
435 identityTransform->SetIdentity();
436 mitk::AffineTransform3D::MatrixType identityMatrix = identityTransform->GetMatrix();
437 mitk::AffineTransform3D::MatrixType uM1 = updatedAffineTransform1->GetMatrix();
438
439 CPPUNIT_ASSERT_MESSAGE( "Testing updated orientation 1", mitk::MatrixEqualElementWise(uM1, identityMatrix));
440
441 mitk::AffineTransform3D::MatrixType::InternalMatrixType uM2 = updatedAffineTransform2->GetMatrix().GetVnlMatrix();
442 mitk::AffineTransform3D::MatrixType::InternalMatrixType updatedOriTransform2 = updatedOri2.rotation_matrix_transpose().transpose();
443
444 CPPUNIT_ASSERT_MESSAGE("Testing updated orientation 2", mitk::MatrixEqualElementWise(uM2,updatedOriTransform2));
445
446 // Test that the second RepresentationObject is updated properly even when
447 // the first RepresentationObject is invalid
448 nd2->Modified();
449 myFilter->SetRepresentationObject(0, nullptr);
450 mitkToolData2->GetGeometry()->SetIdentity();
451 myFilter->Update();
452 CPPUNIT_ASSERT_MESSAGE( "Test that the second repr object is updated correctly when the first repr object is invalid",
453 mitk::MatrixEqualElementWise(mitkToolData2->GetGeometry()->GetIndexToWorldTransform()->GetMatrix().GetVnlMatrix(),
454 updatedOri2.rotation_matrix_transpose().transpose()));
455 }
456};//end class mitkNavigationDataObjectVisualizationFilterTestSuite
457
458MITK_TEST_SUITE_REGISTRATION(mitkNavigationDataObjectVisualizationFilter)
mitk::Quaternion OrientationType
Type that holds the orientation part of the tracking data.
mitk::Point3D PositionType
Type that holds the position part of the tracking data.
MITKIGTBASE_EXPORT bool Equal(const mitk::NavigationData &leftHandSide, const mitk::NavigationData &rightHandSide, ScalarType eps=mitk::eps, bool verbose=false)
Equal A function comparing two navigation data objects for beeing equal in meta- and imagedata.