29 MITK_TEST_BEGIN(
"NavigationDataReferenceTransformFilter")
32 mitk::NavigationDataReferenceTransformFilter::Pointer myFilter = mitk::NavigationDataReferenceTransformFilter::New();
37 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),
"Testing instantiation");
41 mitk::Point3D sourcePos1,sourcePos2, sourcePos3, targetPos1, targetPos2, targetPos3;
42 mitk::FillVector3D(sourcePos1, 11.1, 11.1, 11.1);
43 mitk::FillVector3D(sourcePos2, 22.2, 22.2, 22.2);
44 mitk::FillVector3D(sourcePos3, 33.3, 33.3, 33.3);
45 mitk::FillVector3D(targetPos1, -1.1, -2.2, -3.3);
46 mitk::FillVector3D(targetPos2, -4.4, -5.5, -6.6);
47 mitk::FillVector3D(targetPos3, -7.7, -8.8, -9.9);
58 mitk::ScalarType initialError(0.0);
59 bool initialValid(
true);
62 mitk::NavigationData::Pointer snd1 = mitk::NavigationData::New();
63 snd1->SetPosition(sourcePos1);
64 snd1->SetOrientation(sourceOri1);
65 snd1->SetPositionAccuracy(initialError);
66 snd1->SetDataValid(initialValid);
68 mitk::NavigationData::Pointer snd2 = mitk::NavigationData::New();
69 snd2->SetPosition(sourcePos2);
70 snd2->SetOrientation(sourceOri2);
71 snd2->SetPositionAccuracy(initialError);
72 snd2->SetDataValid(initialValid);
74 mitk::NavigationData::Pointer snd3 = mitk::NavigationData::New();
75 snd3->SetPosition(sourcePos3);
76 snd3->SetOrientation(sourceOri3);
77 snd3->SetPositionAccuracy(initialError);
78 snd3->SetDataValid(initialValid);
80 mitk::NavigationData::Pointer tnd1 = mitk::NavigationData::New();
81 tnd1->SetPosition(targetPos1);
82 tnd1->SetOrientation(targetOri1);
83 tnd1->SetPositionAccuracy(initialError);
84 tnd1->SetDataValid(initialValid);
86 mitk::NavigationData::Pointer tnd2 = mitk::NavigationData::New();
87 tnd2->SetPosition(targetPos2);
88 tnd2->SetOrientation(targetOri2);
89 tnd2->SetPositionAccuracy(initialError);
90 tnd2->SetDataValid(initialValid);
92 mitk::NavigationData::Pointer tnd3 = mitk::NavigationData::New();
93 tnd3->SetPosition(targetPos3);
94 tnd3->SetOrientation(targetOri3);
95 tnd3->SetPositionAccuracy(initialError);
96 tnd3->SetDataValid(initialValid);
98 std::vector<mitk::NavigationData::Pointer> emptySourceNDs;
100 std::vector<mitk::NavigationData::Pointer> oneSourceNDs;
101 oneSourceNDs.push_back(snd1);
103 std::vector<mitk::NavigationData::Pointer> twoSourceNDs;
104 twoSourceNDs.push_back(snd1);
105 twoSourceNDs.push_back(snd2);
107 std::vector<mitk::NavigationData::Pointer> threeSourceNDs;
108 threeSourceNDs.push_back(snd1);
109 threeSourceNDs.push_back(snd2);
110 threeSourceNDs.push_back(snd3);
112 std::vector<mitk::NavigationData::Pointer> emptyTargetNDs;
114 std::vector<mitk::NavigationData::Pointer> oneTargetNDs;
115 oneTargetNDs.push_back(tnd1);
117 std::vector<mitk::NavigationData::Pointer> twoTargetNDs;
118 twoTargetNDs.push_back(tnd1);
119 twoTargetNDs.push_back(tnd2);
121 std::vector<mitk::NavigationData::Pointer> threeTargetNDs;
122 threeTargetNDs.push_back(tnd1);
123 threeTargetNDs.push_back(tnd2);
124 threeTargetNDs.push_back(tnd3);
128 myFilter->SetSourceNavigationDatas(emptySourceNDs);
129 MITK_TEST_CONDITION_REQUIRED(myFilter->GetSourceLandmarks()->IsEmpty() ==
true,
"Testing behaviour if setting no source NDs");
131 myFilter->SetSourceNavigationDatas(emptyTargetNDs);
132 MITK_TEST_CONDITION_REQUIRED(myFilter->GetTargetLandmarks()->IsEmpty() ==
true,
"Testing behaviour if setting no target NDs");
135 myFilter->SetSourceNavigationDatas(oneSourceNDs);
136 MITK_TEST_CONDITION_REQUIRED(myFilter->GetSourceLandmarks()->GetSize() == 3,
"Testing if 3 source points are generated from one source ND");
138 myFilter->SetTargetNavigationDatas(oneTargetNDs);
139 MITK_TEST_CONDITION_REQUIRED(myFilter->GetTargetLandmarks()->GetSize() == 3,
"Testing if 3 target points are generated from one target ND");
142 myFilter->SetSourceNavigationDatas(twoSourceNDs);
143 MITK_TEST_CONDITION_REQUIRED(myFilter->GetSourceLandmarks()->GetSize() == 6,
"Testing if 6 source points are generated from two source NDs");
145 myFilter->SetTargetNavigationDatas(twoTargetNDs);
146 MITK_TEST_CONDITION_REQUIRED(myFilter->GetTargetLandmarks()->GetSize() == 6,
"Testing if 6 target points are generated from two target NDs");
149 myFilter->SetSourceNavigationDatas(threeSourceNDs);
150 MITK_TEST_CONDITION_REQUIRED(myFilter->GetSourceLandmarks()->GetSize() == 3,
"Testing if 3 source NDs are passed to 3 source points");
152 myFilter->SetTargetNavigationDatas(threeTargetNDs);
153 MITK_TEST_CONDITION_REQUIRED(myFilter->GetTargetLandmarks()->GetSize() == 3,
"Testing if 3 target NDs are passed to 3 target points");
158 bool firstInitialize = myFilter->InitializeTransform();
159 myFilter->SetTargetNavigationDatas(twoTargetNDs);
160 MITK_TEST_CONDITION_REQUIRED((firstInitialize ==
true && myFilter->InitializeTransform() ==
false),
"Testing if initialization is denied, if different number of source and target NDs are set");
163 bool sourcePointsSet = myFilter->GetSourceLandmarks()->GetSize() > 0;
164 bool targetPointsSet = myFilter->GetTargetLandmarks()->GetSize() > 0;
165 MITK_TEST_CONDITION_REQUIRED(sourcePointsSet && targetPointsSet,
"Testing if there are source and target landmarks set in the superclass");
167 myFilter->ReinitFilter();
168 bool sourcePointsCleared = myFilter->GetSourceLandmarks()->GetSize() == 0;
169 bool targetPointsCleared = myFilter->GetTargetLandmarks()->GetSize() == 0;
170 MITK_TEST_CONDITION_REQUIRED(sourcePointsCleared && targetPointsCleared,
"Testing if reinit of filter was successful");
174 myFilter->SetSourceNavigationDatas(oneSourceNDs);
176 itk::QuaternionRigidTransform<double>::Pointer quaternionTransform = itk::QuaternionRigidTransform<double>::New();
177 vnl_quaternion<double>
const vnlQuatIn(sourceOri1.x(), sourceOri1.y(), sourceOri1.z(), sourceOri1.r());
178 quaternionTransform->SetRotation(vnlQuatIn);
180 mitk::Point3D pointA;
181 mitk::Point3D pointB;
182 mitk::Point3D pointC;
195 pointA = quaternionTransform->GetMatrix() * pointA;
196 pointB = quaternionTransform->GetMatrix() * pointB;
197 pointC = quaternionTransform->GetMatrix() * pointC;
201 pointA = mitk::Point3D(myFilter->GetSourceLandmarks()->GetPoint(0)-pointA);
202 pointB = mitk::Point3D(myFilter->GetSourceLandmarks()->GetPoint(1)-pointB);
203 pointC = mitk::Point3D(myFilter->GetSourceLandmarks()->GetPoint(2)-pointC);
205 MITK_TEST_CONDITION_REQUIRED(
mitk::Equal(sourcePos1,pointA,mitk::eps,
true),
"Testing if point generation of first point is correct");
206 MITK_TEST_CONDITION_REQUIRED(
mitk::Equal(sourcePos1,pointB,mitk::eps,
true),
"Testing if point generation of second point is correct");
207 MITK_TEST_CONDITION_REQUIRED(
mitk::Equal(sourcePos1,pointC,mitk::eps,
true),
"Testing if point generation of third point is correct");
211 quaternionTransform =
nullptr;