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 "vtkRenderer.h"
17 #include "vtkRenderWindow.h"
18 #include "vtkRenderWindowInteractor.h"
19 #include "vtkSmartPointer.h"
20 #include "vtkBlockItem.h"
21 #include "vtkContextTransform.h"
22 #include "vtkContextView.h"
23 #include "vtkContextScene.h"
24 #include "vtkNew.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 ||
85 index41 != 0 || index411 != 0 || index42 != 1 || index5 != 4)
86 {
87 std::cerr << "AddItem, bad indexes: "
88 << index1 << ", " << index2 << ", " << index3 << ", "
89 << index4 << ", " << index41 << ", " << index411 << ", "
90 << index42 << ", " << index5 << std::endl;
91 return EXIT_FAILURE;
92 }
93 // Restack item 3 under all items
94 int res = rootItem->Lower(rootItem->GetItemIndex(test3));
95 index1 = rootItem->GetItemIndex(test1);
96 index2 = rootItem->GetItemIndex(test2);
97 index3 = rootItem->GetItemIndex(test3);
98 index4 = rootItem->GetItemIndex(test4);
99 if (res != 0 || index1 != 1 || index2 != 2 || index3 != 0 || index4 != 3)
100 {
101 std::cerr << "Lower, bad indexes: " << res << "->"
102 << index1 << ", " << index2 << ", " << index3 << ", "
103 << index4 << ", " << index41 << ", " << index411 << ", "
104 << index42 << ", " << index5 << std::endl;
105 return EXIT_FAILURE;
106 }
107 // Restack item 1 above 4
108 res = rootItem->StackAbove(index1, index4);
109 index1 = rootItem->GetItemIndex(test1);
110 index2 = rootItem->GetItemIndex(test2);
111 index3 = rootItem->GetItemIndex(test3);
112 index4 = rootItem->GetItemIndex(test4);
113 index41 = test4->GetItemIndex(test41);
114 index42 = test4->GetItemIndex(test42);
115 index5 = rootItem->GetItemIndex(test5);
116 if (res != 3 || index1 != 3 || index2 != 1 || index3 != 0 || index4 != 2 ||
117 index41 != 0 || index411 != 0 || index42 != 1 || index5 != 4)
118 {
119 std::cerr << "StackAbove, bad indexes: " << res << "->"
120 << index1 << ", " << index2 << ", " << index3 << ", "
121 << index4 << ", " << index41 << ", " << index411 << ", "
122 << index42 << ", " << index5 << std::endl;
123 return EXIT_FAILURE;
124 }
125 // Restack item 41 above 42
126 res = test4->Raise(index41);
127 index1 = rootItem->GetItemIndex(test1);
128 index2 = rootItem->GetItemIndex(test2);
129 index3 = rootItem->GetItemIndex(test3);
130 index4 = rootItem->GetItemIndex(test4);
131 index41 = test4->GetItemIndex(test41);
132 index42 = test4->GetItemIndex(test42);
133 index5 = rootItem->GetItemIndex(test5);
134 if (res != 1 || index1 != 3 || index2 != 1 || index3 != 0 || index4 != 2 ||
135 index41 != 1 || index411 != 0 || index42 != 0 || index5 != 4)
136 {
137 std::cerr << "Raise, bad indexes: " << res << "->"
138 << index1 << ", " << index2 << ", " << index3 << ", "
139 << index4 << ", " << index41 << ", " << index411 << ", "
140 << index42 << ", " << index5 << std::endl;
141 return EXIT_FAILURE;
142 }
143 // Restack item 1 above 4
144 res = rootItem->StackUnder(index2, index3);
145 index1 = rootItem->GetItemIndex(test1);
146 index2 = rootItem->GetItemIndex(test2);
147 index3 = rootItem->GetItemIndex(test3);
148 index4 = rootItem->GetItemIndex(test4);
149 index41 = test4->GetItemIndex(test41);
150 index42 = test4->GetItemIndex(test42);
151 index5 = rootItem->GetItemIndex(test5);
152 if (res != 0 || index1 != 3 || index2 != 0 || index3 != 1 || index4 != 2 ||
153 index41 != 1 || index411 != 0 || index42 != 0 || index5 != 4)
154 {
155 std::cerr << "StackUnder, bad indexes: " << res << "->"
156 << index1 << ", " << index2 << ", " << index3 << ", "
157 << index4 << ", " << index41 << ", " << index411 << ", "
158 << index42 << ", " << index5 << std::endl;
159 return EXIT_FAILURE;
160 }
161
162 // Turn off the color buffer
163 view->GetScene()->SetUseBufferId(false);
164
165 //Finally render the scene and compare the image to a reference image
166 view->GetRenderWindow()->SetMultiSamples(0);
167 view->GetInteractor()->Initialize();
168 view->GetInteractor()->Start();
169 return EXIT_SUCCESS;
170 }
171