Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkRenderingManagerTest.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 "mitkProperties.h"
14 #include "mitkRenderingManager.h"
16 #include "mitkVtkPropRenderer.h"
17 #include "vtkRenderWindow.h"
18 
19 #include "mitkTestingMacros.h"
20 
21 #include "mitkSurface.h"
22 #include <vtkCubeSource.h>
23 
24 // Propertylist Test
25 
34 class mitkRenderingManagerTestClass
35 {
36 public:
37  static void TestPropertyList(mitk::RenderingManager::Pointer renderingManager)
38  {
39  mitk::PropertyList::Pointer propertyList = renderingManager->GetPropertyList();
40 
41  MITK_TEST_CONDITION(renderingManager->GetPropertyList().IsNotNull(),
42  "Testing if the constructor set the propertylist")
43 
44  // check if the default properties are set
45  renderingManager->SetProperty("booltest", mitk::BoolProperty::New(true));
46 
47  auto *prop = dynamic_cast<mitk::BoolProperty *>(renderingManager->GetProperty("booltest"));
48 
49  MITK_TEST_CONDITION(prop->GetValue(), "Testing if getting the bool property")
50 
51  MITK_TEST_CONDITION(propertyList == renderingManager->GetPropertyList(),
52  "Testing if the propertylist has changed during the last tests")
53  }
54 
55  static void TestSurfaceLoading(mitk::RenderingManager::Pointer renderingManager)
56  {
57  // create and render two dimensional surface
58  vtkCubeSource *plane = vtkCubeSource::New();
59 
60  double planeBounds[] = {-1.0, 1.0, -1.0, 1.0, 0.0, 0.0};
61  double cubeBounds[] = {-0.5, 0.5, -0.5, 0.5, -0.5, 0.5};
62  plane->SetBounds(planeBounds);
63  plane->SetCenter(0.0, 0.0, 0.0);
64 
65  vtkPolyData *polys = plane->GetOutput();
67  mitkPlane->SetVtkPolyData(polys);
68  plane->Delete();
69 
71  planeNode->SetData(mitkPlane);
72 
73  renderingManager->GetDataStorage()->Add(planeNode);
74 
76  planeGeometry->SetFloatBounds(planeBounds);
77 
78  MITK_TEST_CONDITION(renderingManager->InitializeViews(planeGeometry),
79  "Testing if two dimensional Geometry3Ds can be displayed")
80 
81  // clear rendering
82  renderingManager->GetDataStorage()->Remove(planeNode);
83 
84  renderingManager->InitializeViews();
85 
86  // create and render three dimensional surface
87  vtkCubeSource *cube = vtkCubeSource::New();
88  cube->SetBounds(cubeBounds);
89  cube->SetCenter(0.0, 0.0, 0.0);
90 
91  vtkPolyData *polyCube = cube->GetOutput();
93  mitkCube->SetVtkPolyData(polyCube);
94  cube->Delete();
95 
97  cubeNode->SetData(mitkCube);
98 
99  renderingManager->GetDataStorage()->Add(cubeNode);
100 
102  cubeGeometry->SetFloatBounds(cubeBounds);
103 
104  MITK_TEST_CONDITION(renderingManager->InitializeViews(cubeGeometry),
105  "Testing if three dimensional Geometry3Ds can be displayed")
106 
107  // clear rendering
108  renderingManager->GetDataStorage()->Remove(cubeNode);
109 
110  renderingManager->InitializeViews();
111  }
112 
113  static void TestAddRemoveRenderWindow()
114  {
116 
117  // mitk::StandaloneDataStorage::Pointer ds = mitk::StandaloneDataStorage::New();
118 
119  // myRenderingManager->SetDataStorage(ds);
120 
121  {
122  vtkRenderWindow *vtkRenWin = vtkRenderWindow::New();
123 
124  MITK_TEST_CONDITION_REQUIRED(myRenderingManager->GetAllRegisteredRenderWindows().size() == 0,
125  "Render window list must be empty")
126 
127  // Add Render Window
128  myRenderingManager->AddRenderWindow(vtkRenWin);
129 
130  MITK_TEST_CONDITION_REQUIRED(myRenderingManager->GetAllRegisteredRenderWindows().size() == 1,
131  "Render window list must contain one item")
132 
133  // Remove Render Window
134  myRenderingManager->RemoveRenderWindow(vtkRenWin);
135 
136  MITK_TEST_CONDITION_REQUIRED(myRenderingManager->GetAllRegisteredRenderWindows().size() == 0,
137  "Render window list must be empty")
138 
139  // Test if the Render Window was removed properly. This should not do anything
140  MITK_TEST_OUTPUT(<< "Call RequestUpdate on removed render window")
141  myRenderingManager->RequestUpdate(vtkRenWin);
142  MITK_TEST_OUTPUT(<< "Call ForceImmediateUpdate on removed render window")
143  myRenderingManager->ForceImmediateUpdate(vtkRenWin);
144 
145  MITK_TEST_CONDITION_REQUIRED(myRenderingManager->GetAllRegisteredRenderWindows().size() == 0,
146  "Render window list must be empty")
147 
148  // Delete vtk variable correctly
149  vtkRenWin->Delete();
150  }
151 
152  // Check that the previous calls to RequestUpdate and ForceImmediateUpdate
153  // did not modify the internal vtkRenderWindow list. This should not crash.
154  MITK_TEST_OUTPUT(<< "Call RequestUpdateAll after deleting render window")
155  myRenderingManager->RequestUpdateAll();
156  MITK_TEST_OUTPUT(<< "Call ForceImmediateUpdateAll after deleting render window")
157  myRenderingManager->ForceImmediateUpdateAll();
158  }
159 
160 }; // mitkDataNodeTestClass
161 int mitkRenderingManagerTest(int /* argc */, char * /*argv*/ [])
162 {
163  // always start with this!
164  MITK_TEST_BEGIN("RenderingManager")
165 
166  mitkRenderingManagerTestClass::TestAddRemoveRenderWindow();
167 
169 
170  MITK_TEST_CONDITION_REQUIRED(globalRenderingManager.IsNotNull(), "Testing instantiation of global static instance")
171 
173 
174  MITK_TEST_CONDITION_REQUIRED(myRenderingManager.IsNotNull(), "Testing instantiation of second 'local' instance")
175 
176  MITK_TEST_CONDITION_REQUIRED(myRenderingManager != globalRenderingManager,
177  "Testing whether global instance equals new local instance (must not be!)")
178 
181 
182  myRenderingManager->SetDataStorage(ds);
183 
184  vtkRenderWindow *vtkRenWin = vtkRenderWindow::New();
185  mitk::VtkPropRenderer::Pointer br = mitk::VtkPropRenderer::New("testingBR", vtkRenWin);
186 
187  mitk::BaseRenderer::AddInstance(vtkRenWin, br);
188  myRenderingManager->AddRenderWindow(vtkRenWin);
189 
190  MITK_TEST_CONDITION_REQUIRED(br->GetDataStorage() == ds,
191  "Testing if internal DataStorage has been set correctly for registered BaseRenderer")
192  myRenderingManager->SetDataStorage(ds2);
194  br->GetDataStorage() == ds2,
195  "Testing if change of internal DataStorage has been forwarded correctly to registered BaseRenderer")
196 
197  mitkRenderingManagerTestClass::TestPropertyList(myRenderingManager);
198 
199  mitkRenderingManagerTestClass::TestSurfaceLoading(myRenderingManager);
200 
201  // write your own tests here and use the macros from mitkTestingMacros.h !!!
202  // do not write to std::cout and do not return from this function yourself!
203 
204  // Remove Render Window
205  myRenderingManager->RemoveRenderWindow(vtkRenWin);
206 
207  // Delete vtk variable correctly
208  vtkRenWin->Delete();
209 
210  // always end with this!
211  MITK_TEST_END()
212 }
#define MITK_TEST_CONDITION_REQUIRED(COND, MSG)
section GeneralTestsDeprecatedOldTestingStyle Deprecated macros All tests with MITK_TEST_BEGIN()
int mitkRenderingManagerTest(int, char *[])
static Pointer New()
#define MITK_TEST_OUTPUT(x)
Output some text.
static Pointer New()
static Pointer New()
#define MITK_TEST_CONDITION(COND, MSG)
static RenderingManager * GetInstance()
and MITK_TEST_END()
static Pointer New(const char *_arga, vtkRenderWindow *_argb)
static Pointer New()
static void AddInstance(vtkRenderWindow *renWin, BaseRenderer *baseRenderer)