1 /*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: TestContextItemStacking.cxx
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14 =========================================================================*/
15
16 #include "vtkBlockItem.h"
17 #include "vtkContextScene.h"
18 #include "vtkContextTransform.h"
19 #include "vtkContextView.h"
20 #include "vtkNew.h"
21 #include "vtkRenderWindow.h"
22 #include "vtkRenderWindowInteractor.h"
23 #include "vtkRenderer.h"
24 #include "vtkSmartPointer.h"
25
26 //------------------------------------------------------------------------------
TestContextItemStacking(int,char * [])27 int TestContextItemStacking(int, char*[])
28 {
29 // Set up a 2D context view, context test object and add it to the scene
30 vtkNew<vtkContextView> view;
31 view->GetRenderer()->SetBackground(0.32, 0.40, 0.47);
32 view->GetRenderWindow()->SetSize(400, 400);
33
34 vtkNew<vtkBlockItem> rootItem;
35 rootItem->SetDimensions(0, 350, 50, 50);
36
37 int i = 0;
38 int s = 120;
39 int step = s / 3;
40 vtkNew<vtkBlockItem> test1;
41 test1->SetDimensions(i, i, s, s);
42 test1->SetLabel("1");
43 i += step;
44 vtkNew<vtkBlockItem> test2;
45 test2->SetDimensions(i, i, s, s);
46 test2->SetLabel("2");
47 i += step;
48 vtkNew<vtkBlockItem> test3;
49 test3->SetDimensions(i, i, s, s);
50 test3->SetLabel("3");
51 i += step;
52 vtkNew<vtkBlockItem> test4;
53 test4->SetDimensions(i, i, s, s);
54 test4->SetLabel("4");
55 i += step;
56 vtkNew<vtkBlockItem> test41;
57 test41->SetDimensions(i, i, s, s);
58 test41->SetLabel("4.1");
59 i += step;
60 vtkNew<vtkBlockItem> test411;
61 test411->SetDimensions(i, i, s, s);
62 test411->SetLabel("4.1.1");
63 i += step;
64 vtkNew<vtkBlockItem> test42;
65 test42->SetDimensions(i, i, s, s);
66 test42->SetLabel("4.2");
67 i += step;
68 vtkNew<vtkBlockItem> test5;
69 test5->SetDimensions(i, i, s, s);
70 test5->SetLabel("5");
71
72 // Build up our multi-level scene
73 vtkIdType index1 = rootItem->AddItem(test1);
74 vtkIdType index2 = rootItem->AddItem(test2);
75 vtkIdType index3 = rootItem->AddItem(test3);
76 vtkIdType index4 = rootItem->AddItem(test4);
77 vtkIdType index41 = test4->AddItem(test41);
78 vtkIdType index411 = test41->AddItem(test411);
79 vtkIdType index42 = test4->AddItem(test42);
80 vtkIdType index5 = rootItem->AddItem(test5);
81 view->GetScene()->AddItem(rootItem);
82
83 // Check indexes
84 if (index1 != 0 || index2 != 1 || index3 != 2 || index4 != 3 || index41 != 0 || index411 != 0 ||
85 index42 != 1 || index5 != 4)
86 {
87 std::cerr << "AddItem, bad indexes: " << index1 << ", " << index2 << ", " << index3 << ", "
88 << index4 << ", " << index41 << ", " << index411 << ", " << index42 << ", " << index5
89 << std::endl;
90 return EXIT_FAILURE;
91 }
92 // Restack item 3 under all items
93 int res = rootItem->Lower(rootItem->GetItemIndex(test3));
94 index1 = rootItem->GetItemIndex(test1);
95 index2 = rootItem->GetItemIndex(test2);
96 index3 = rootItem->GetItemIndex(test3);
97 index4 = rootItem->GetItemIndex(test4);
98 if (res != 0 || index1 != 1 || index2 != 2 || index3 != 0 || index4 != 3)
99 {
100 std::cerr << "Lower, bad indexes: " << res << "->" << index1 << ", " << index2 << ", " << index3
101 << ", " << index4 << ", " << index41 << ", " << index411 << ", " << index42 << ", "
102 << index5 << std::endl;
103 return EXIT_FAILURE;
104 }
105 // Restack item 1 above 4
106 res = rootItem->StackAbove(index1, index4);
107 index1 = rootItem->GetItemIndex(test1);
108 index2 = rootItem->GetItemIndex(test2);
109 index3 = rootItem->GetItemIndex(test3);
110 index4 = rootItem->GetItemIndex(test4);
111 index41 = test4->GetItemIndex(test41);
112 index42 = test4->GetItemIndex(test42);
113 index5 = rootItem->GetItemIndex(test5);
114 if (res != 3 || index1 != 3 || index2 != 1 || index3 != 0 || index4 != 2 || index41 != 0 ||
115 index411 != 0 || index42 != 1 || index5 != 4)
116 {
117 std::cerr << "StackAbove, bad indexes: " << res << "->" << index1 << ", " << index2 << ", "
118 << index3 << ", " << index4 << ", " << index41 << ", " << index411 << ", " << index42
119 << ", " << index5 << std::endl;
120 return EXIT_FAILURE;
121 }
122 // Restack item 41 above 42
123 res = test4->Raise(index41);
124 index1 = rootItem->GetItemIndex(test1);
125 index2 = rootItem->GetItemIndex(test2);
126 index3 = rootItem->GetItemIndex(test3);
127 index4 = rootItem->GetItemIndex(test4);
128 index41 = test4->GetItemIndex(test41);
129 index42 = test4->GetItemIndex(test42);
130 index5 = rootItem->GetItemIndex(test5);
131 if (res != 1 || index1 != 3 || index2 != 1 || index3 != 0 || index4 != 2 || index41 != 1 ||
132 index411 != 0 || index42 != 0 || index5 != 4)
133 {
134 std::cerr << "Raise, bad indexes: " << res << "->" << index1 << ", " << index2 << ", " << index3
135 << ", " << index4 << ", " << index41 << ", " << index411 << ", " << index42 << ", "
136 << index5 << std::endl;
137 return EXIT_FAILURE;
138 }
139 // Restack item 1 above 4
140 res = rootItem->StackUnder(index2, index3);
141 index1 = rootItem->GetItemIndex(test1);
142 index2 = rootItem->GetItemIndex(test2);
143 index3 = rootItem->GetItemIndex(test3);
144 index4 = rootItem->GetItemIndex(test4);
145 index41 = test4->GetItemIndex(test41);
146 index42 = test4->GetItemIndex(test42);
147 index5 = rootItem->GetItemIndex(test5);
148 if (res != 0 || index1 != 3 || index2 != 0 || index3 != 1 || index4 != 2 || index41 != 1 ||
149 index411 != 0 || index42 != 0 || index5 != 4)
150 {
151 std::cerr << "StackUnder, bad indexes: " << res << "->" << index1 << ", " << index2 << ", "
152 << index3 << ", " << index4 << ", " << index41 << ", " << index411 << ", " << index42
153 << ", " << index5 << std::endl;
154 return EXIT_FAILURE;
155 }
156
157 // Turn off the color buffer
158 view->GetScene()->SetUseBufferId(false);
159
160 // Finally render the scene and compare the image to a reference image
161 view->GetRenderWindow()->SetMultiSamples(0);
162 view->GetInteractor()->Initialize();
163 view->GetInteractor()->Start();
164 return EXIT_SUCCESS;
165 }
166