MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkNavigationDataDisplacementFilterTest.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
18#include <iostream>
19#include "mitkPropertyList.h"
20#include "mitkProperties.h"
21
25int mitkNavigationDataDisplacementFilterTest(int /* argc */, char* /*argv*/[])
26{
27 MITK_TEST_BEGIN("NavigationDataDisplacementFilter")
28
29 // let's create an object of our class
30 mitk::NavigationDataDisplacementFilter::Pointer myFilter = mitk::NavigationDataDisplacementFilter::New();
31
32 // first test: did this work?
33 // using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
34 // it makes no sense to continue without an object.
35 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
36
37 /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */
39 mitk::FillVector3D(initialPos, 0.0, 0.0, 0.0);
40 mitk::NavigationData::OrientationType initialOri(0.0, 0.0, 0.0, 0.0);
41 mitk::ScalarType initialError(0.0);
42 bool initialValid(true);
43
44 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
45 nd1->SetPosition(initialPos);
46 nd1->SetOrientation(initialOri);
47 nd1->SetPositionAccuracy(initialError);
48 nd1->SetDataValid(initialValid);
49
50 myFilter->SetInput(nd1);
51 MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "testing Set-/GetInput()");
52
53 /* create filter parameter */
54 mitk::Vector3D offset;
55 mitk::FillVector3D(offset, 1.0, 1.0, 1.0);
56
57 myFilter->SetOffset(offset);
58 MITK_TEST_CONDITION(myFilter->GetOffset() == offset, "testing Set-/GetOffset()");
59
60 mitk::NavigationData* output = myFilter->GetOutput();
61 MITK_TEST_CONDITION_REQUIRED(output != nullptr, "Testing GetOutput()");
62
63 output->Update(); // execute filter
64
65 MITK_TEST_CONDITION(output->GetPosition() == (initialPos + offset), "Testing offset calculation");
66 MITK_TEST_CONDITION(output->GetOrientation() == initialOri, "Testing if Orientation remains unchanged");
67 MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged");
68
69 /* now test the filter with multiple inputs */
71 mitk::FillVector3D(initialPos2, -1000.0, 567.89, 0.0);
72 mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New();
73 nd2->SetPosition(initialPos2);
74 nd2->SetOrientation(initialOri);
75 nd2->SetPositionAccuracy(initialError);
76 nd2->SetDataValid(initialValid);
77
78 myFilter = nullptr;
79 myFilter = mitk::NavigationDataDisplacementFilter::New();
80 myFilter->SetOffset(offset);
81 myFilter->SetInput(0, nd1);
82 myFilter->SetInput(1, nd2);
83
84 MITK_TEST_CONDITION(((myFilter->GetInput(0) == nd1)
85 && (myFilter->GetInput(1) == nd2)), "testing Set-/GetInput(index, data)");
86
87 output = myFilter->GetOutput();
88 mitk::NavigationData* output2 = myFilter->GetOutput(1);
89 output2->Update(); // execute filter pipeline. this should update both outputs!
90 MITK_TEST_CONDITION(((output != nullptr)
91 && (output2 != nullptr)), "testing GetOutput(index)");
92
93 MITK_TEST_CONDITION(output->GetPosition() == (initialPos + offset), "Testing offset calculation for output 0");
94 MITK_TEST_CONDITION(output2->GetPosition() == (initialPos2 + offset), "Testing offset calculation for output 1");
95
96 MITK_TEST_CONDITION(output2->GetOrientation() == initialOri, "Testing if Orientation remains unchanged for output 1");
97 MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 1");
98
99 /* test if anything changes on second ->Update() */
100 output->Update(); // nothing should change, since inputs remain unchanged
101 MITK_TEST_CONDITION((output->GetPosition() == (initialPos + offset))
102 &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after second update()");
103
104 /* change an input, see if output changes too */
106 mitk::FillVector3D(pos2, 123.456, -234.567, 789.987);
107 nd1->SetPosition(pos2); // nd1 is modified, but nothing should change until pipe gets updated
108 MITK_TEST_CONDITION((output->GetPosition() == (initialPos + offset))
109 &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after input change, before update()");
110 output->Update(); // update pipeline. should recalculate positions, because input has changed
111 MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset))
112 &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after input change, after update()");
113
114 /* now, change filter parameter and check if pipeline updates correctly */
115 mitk::Vector3D offset2;
116 mitk::FillVector3D(offset2, -1.2, 3.45, -6.789);
117 myFilter->SetOffset(offset2);
118 MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset))
119 &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after offset parameter change, before update()");
120 output->Update(); // update pipeline. should recalculate positions, because input has changed
121 MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset2))
122 &&(output2->GetPosition() == (initialPos2 + offset2)), "Testing offset calculation after offset parameter , after update()");
123
124 /* Now test the PropertyList handling of the GetParameters() and SetParameters() methods */
125 mitk::PropertyList::ConstPointer p = myFilter->GetParameters();
126 MITK_TEST_CONDITION(p.IsNotNull(), "Testing GetParameters() has valid return type");
127 mitk::Vector3D v;
128 MITK_TEST_CONDITION(p->GetPropertyValue<mitk::Vector3D>("NavigationDataDisplacementFilter_Offset", v) == true, "PropertyList contains correct key?");
129 MITK_TEST_CONDITION(v == offset2, "Offset Property contains correct value?");
130 MITK_TEST_CONDITION(p->GetMap()->size() == 1, "PropertyList contains correct number of items?");
131
132 mitk::PropertyList::Pointer p2 = mitk::PropertyList::New();
133 myFilter->SetParameters(p2);
134 MITK_TEST_CONDITION(myFilter->GetOffset() == offset2, "Offset unchanged on SetParameters() with empty PropertyList?");
135 p2->SetProperty("NavigationDataDisplacementFilter_WRONGNAME", mitk::Vector3DProperty::New(v)); // fill PropertyList with incorrect parameter
136 MITK_TEST_CONDITION(myFilter->GetOffset() == offset2, "Offset unchanged on SetParameters() with wrong propertyname?");
137
138 mitk::FillVector3D(v, -111.1, 0.0, 111.1);
139 p2->SetProperty("NavigationDataDisplacementFilter_Offset", mitk::Vector3DProperty::New(v)); // fill PropertyList with correct parameter
140 myFilter->SetParameters(p2);
141 MITK_TEST_CONDITION(myFilter->GetOffset() == v, "Offset updated correctly by SetParameters()?");
142
143 p2 = mitk::PropertyList::New();
144 mitk::Vector3D v2;
145 mitk::FillVector3D(v2, 0.0, 111.1, 0.0);
146 p2->SetProperty("NavigationDataDisplacementFilter_Offset", mitk::Vector3DProperty::New(v2)); // change parameter in PropertyList
147 myFilter->SetParameters(p2);
148 MITK_TEST_CONDITION(myFilter->GetOffset() == v2, "Offset updated correctly by SetParameters()?");
149 //MITK_TEST_CONDITION(myFilter->GetParameters() == p2, "GetParameters() returns an equal PropertyList as the one set with SetParameters?"); // not possible, since PropertyLists don't have a == operator
150
151 v = myFilter->GetOffset();
152 myFilter->SetParameters(myFilter->GetParameters());
153 MITK_TEST_CONDITION(myFilter->GetOffset() == v, "Offset unchanged after SetParameters(GetParamters())");
154
155 // always end with this!
156 MITK_TEST_END();
157}
158
mitk::Quaternion OrientationType
Type that holds the orientation part of the tracking data.
virtual bool IsDataValid() const
returns true if the object contains valid data
mitk::Point3D PositionType
Type that holds the position part of the tracking data.
int mitkNavigationDataDisplacementFilterTest(int, char *[])