Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkSliceNavigationControllerTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include <mitkGeometry3D.h>
14 #include <mitkPlaneGeometry.h>
15 #include <mitkSlicedGeometry3D.h>
17 
18 #include <mitkTestFixture.h>
19 #include <mitkTestingMacros.h>
20 
21 // T22254
22 
23 class mitkSliceNavigationControllerTestSuite : public mitk::TestFixture
24 {
25  CPPUNIT_TEST_SUITE(mitkSliceNavigationControllerTestSuite);
26  CPPUNIT_TEST(validateAxialViewDirection);
27  CPPUNIT_TEST(validateCoronalViewDirection);
28  CPPUNIT_TEST(validateSagittalViewDirection);
29  CPPUNIT_TEST_SUITE_END();
30 
31 public:
32  void setUp() override
33  {
34  mitk::Point3D origin;
35  mitk::FillVector3D(origin, 10.0, 20.0, 30.0);
36 
37  mitk::Vector3D firstAxisVector;
38  mitk::FillVector3D(firstAxisVector, 100.0, 0.0, 0.0);
39 
40  mitk::Vector3D secondAxisVector;
41  mitk::FillVector3D(secondAxisVector, 0.0, 50.0, 0.0);
42 
43  mitk::Vector3D spacing;
44  mitk::FillVector3D(spacing, 1.0, 1.0, 2.0);
45 
46  auto planeGeometry = mitk::PlaneGeometry::New();
47  planeGeometry->InitializeStandardPlane(firstAxisVector, secondAxisVector, &spacing);
48  planeGeometry->SetOrigin(origin);
49 
50  unsigned int numberOfSlices = 100U;
51 
52  auto slicedGeometry3D = mitk::SlicedGeometry3D::New();
53  slicedGeometry3D->InitializeEvenlySpaced(planeGeometry, numberOfSlices);
54 
55  m_Geometry3D = mitk::Geometry3D::New();
56  m_Geometry3D->SetBounds(slicedGeometry3D->GetBounds());
57  m_Geometry3D->SetIndexToWorldTransform(slicedGeometry3D->GetIndexToWorldTransform());
58  }
59 
60  void tearDown() override
61  {
62  }
63 
64  void validateAxialViewDirection()
65  {
66  auto sliceNavigationController = mitk::SliceNavigationController::New();
67 
68  sliceNavigationController->SetInputWorldGeometry3D(m_Geometry3D);
69  sliceNavigationController->SetViewDirection(mitk::SliceNavigationController::Axial);
70  sliceNavigationController->Update();
71 
72  mitk::Point3D origin;
73  mitk::FillVector3D(origin, 10.0, 70.0, 229.0);
74 
75  mitk::Vector3D firstAxisVector;
76  mitk::FillVector3D(firstAxisVector, 100.0, 0.0, 0.0);
77 
78  mitk::Vector3D secondAxisVector;
79  mitk::FillVector3D(secondAxisVector, 0.0, -50.0, 0.0);
80 
81  mitk::Vector3D thirdAxisVector;
82  mitk::FillVector3D(thirdAxisVector, 0.0, 0.0, -200.0);
83 
84  std::cout << "Axial view direction" << std::endl;
85  CPPUNIT_ASSERT(this->validateGeometry(sliceNavigationController->GetCurrentGeometry3D(), origin, firstAxisVector, secondAxisVector, thirdAxisVector));
86  }
87 
88  void validateCoronalViewDirection()
89  {
90  auto sliceNavigationController = mitk::SliceNavigationController::New();
91 
92  sliceNavigationController->SetInputWorldGeometry3D(m_Geometry3D);
93  sliceNavigationController->SetViewDirection(mitk::SliceNavigationController::Frontal);
94  sliceNavigationController->Update();
95 
96  mitk::Point3D origin;
97  mitk::FillVector3D(origin, 10.0, 69.5, 30.0);
98 
99  mitk::Vector3D firstAxisVector;
100  mitk::FillVector3D(firstAxisVector, 100.0, 0.0, 0.0);
101 
102  mitk::Vector3D secondAxisVector;
103  mitk::FillVector3D(secondAxisVector, 0.0, 0.0, 200.0);
104 
105  mitk::Vector3D thirdAxisVector;
106  mitk::FillVector3D(thirdAxisVector, 0.0, -50.0, 0.0);
107 
108  std::cout << "Coronal view direction" << std::endl;
109  CPPUNIT_ASSERT(this->validateGeometry(sliceNavigationController->GetCurrentGeometry3D(), origin, firstAxisVector, secondAxisVector, thirdAxisVector));
110  }
111 
112  void validateSagittalViewDirection()
113  {
114  auto sliceNavigationController = mitk::SliceNavigationController::New();
115 
116  sliceNavigationController->SetInputWorldGeometry3D(m_Geometry3D);
117  sliceNavigationController->SetViewDirection(mitk::SliceNavigationController::Sagittal);
118  sliceNavigationController->Update();
119 
120  mitk::Point3D origin;
121  mitk::FillVector3D(origin, 10.5, 20.0, 30.0);
122 
123  mitk::Vector3D firstAxisVector;
124  mitk::FillVector3D(firstAxisVector, 0.0, 50.0, 0.0);
125 
126  mitk::Vector3D secondAxisVector;
127  mitk::FillVector3D(secondAxisVector, 0.0, 0.0, 200.0);
128 
129  mitk::Vector3D thirdAxisVector;
130  mitk::FillVector3D(thirdAxisVector, 100.0, 0.0, 0.0);
131 
132  std::cout << "Sagittal view direction" << std::endl;
133  CPPUNIT_ASSERT(this->validateGeometry(sliceNavigationController->GetCurrentGeometry3D(), origin, firstAxisVector, secondAxisVector, thirdAxisVector));
134  }
135 
136 private:
137  bool validateGeometry(mitk::BaseGeometry::ConstPointer geometry, const mitk::Point3D &origin, const mitk::Vector3D &firstAxisVector, const mitk::Vector3D &secondAxisVector, const mitk::Vector3D &thirdAxisVector)
138  {
139  bool result = true;
140 
141  std::cout << " Origin" << std::endl;
142 
143  if (!mitk::Equal(geometry->GetOrigin(), origin, mitk::eps, true))
144  result = false;
145 
146  std::cout << " First axis vector" << std::endl;
147 
148  if (!mitk::Equal(geometry->GetAxisVector(0), firstAxisVector, mitk::eps, true))
149  result = false;
150 
151  std::cout << " Second axis vector" << std::endl;
152 
153  if (!mitk::Equal(geometry->GetAxisVector(1), secondAxisVector, mitk::eps, true))
154  result = false;
155 
156  std::cout << " Third axis vector" << std::endl;
157 
158  if (!mitk::Equal(geometry->GetAxisVector(2), thirdAxisVector, mitk::eps, true))
159  result = false;
160 
161  return result;
162  }
163 
164  mitk::Geometry3D::Pointer m_Geometry3D;
165 };
166 
167 MITK_TEST_SUITE_REGISTRATION(mitkSliceNavigationController)
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
static Pointer New()
static Pointer New()
void FillVector3D(Tout &out, mitk::ScalarType x, mitk::ScalarType y, mitk::ScalarType z)
Definition: mitkArray.h:106
Test fixture for parameterized tests.
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.
static Pointer New()
MITKCORE_EXPORT const ScalarType eps