ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
rendererslayoutalgo.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <vtkRenderer.h>
11 
12 #include <QList>
13 
14 namespace VtkUtils {
15 
16 template <int count>
17 inline void layoutRenderers(const QList<vtkRenderer*>& renderers) {}
18 // |X|
19 template <>
20 inline void layoutRenderers<1>(const QList<vtkRenderer*>& renderers) {
21  Q_ASSERT(renderers.size() == 1);
22 
23  vtkRenderer* renderer = renderers.first();
24 
25  renderer->SetViewport(0.0, 0.0, 1.0, 1.0);
26 }
27 
28 // |X|X|
29 template <>
30 inline void layoutRenderers<2>(const QList<vtkRenderer*>& renderers) {
31  Q_ASSERT(renderers.size() == 2);
32 
33  vtkRenderer* renderer1 = renderers.at(0);
34  vtkRenderer* renderer2 = renderers.at(1);
35 
36  renderer1->SetViewport(0.0, 0.0, 0.5, 1.0);
37  renderer2->SetViewport(0.5, 0.0, 1.0, 1.0);
38 }
39 
40 // |X|X|
41 // | X |
42 template <>
43 inline void layoutRenderers<3>(const QList<vtkRenderer*>& renderers) {
44  Q_ASSERT(renderers.size() == 3);
45 
46  vtkRenderer* renderer1 = renderers.at(0);
47  vtkRenderer* renderer2 = renderers.at(1);
48  vtkRenderer* renderer3 = renderers.at(2);
49 
50  renderer1->SetViewport(0.0, 0.0, 0.5, 0.5);
51  renderer2->SetViewport(0.5, 0.0, 1.0, 0.5);
52 
53  renderer3->SetViewport(0.0, 0.5, 1.0, 1.0);
54 }
55 
56 // |X|X|
57 // |X|X|
58 template <>
59 inline void layoutRenderers<4>(const QList<vtkRenderer*>& renderers) {
60  Q_ASSERT(renderers.size() == 4);
61 
62  vtkRenderer* renderer1 = renderers.at(0);
63  vtkRenderer* renderer2 = renderers.at(1);
64  vtkRenderer* renderer3 = renderers.at(2);
65  vtkRenderer* renderer4 = renderers.at(3);
66 
67  renderer1->SetViewport(0.0, 0.0, 0.5, 0.5);
68  renderer2->SetViewport(0.5, 0.0, 1.0, 0.5);
69 
70  renderer3->SetViewport(0.0, 0.5, 0.5, 1.0);
71  renderer4->SetViewport(0.5, 0.5, 1.0, 1.0);
72 }
73 
74 // |X|X|
75 // |X|X|
76 // | X |
77 template <>
78 inline void layoutRenderers<5>(const QList<vtkRenderer*>& renderers) {
79  Q_ASSERT(renderers.size() == 5);
80  qreal dy = (qreal)1 / 3;
81 
82  vtkRenderer* renderer1 = renderers.at(0);
83  vtkRenderer* renderer2 = renderers.at(1);
84  vtkRenderer* renderer3 = renderers.at(2);
85  vtkRenderer* renderer4 = renderers.at(3);
86  vtkRenderer* renderer5 = renderers.at(4);
87 
88  renderer1->SetViewport(0.0, 0.0, 0.5, dy);
89  renderer2->SetViewport(0.5, 0.0, 1.0, dy);
90 
91  renderer3->SetViewport(0.0, dy, 0.5, 2 * dy);
92  renderer4->SetViewport(0.5, dy, 1.0, 2 * dy);
93 
94  renderer5->SetViewport(0.0, 2 * dy, 1.0, 1.0);
95 }
96 
97 // |X|X|X|
98 // |X|X|X|
99 template <>
100 inline void layoutRenderers<6>(const QList<vtkRenderer*>& renderers) {
101  Q_ASSERT(renderers.size() == 6);
102 
103  qreal dx = (qreal)1 / 3;
104 
105  vtkRenderer* renderer1 = renderers.at(0);
106  vtkRenderer* renderer2 = renderers.at(1);
107  vtkRenderer* renderer3 = renderers.at(2);
108  vtkRenderer* renderer4 = renderers.at(3);
109  vtkRenderer* renderer5 = renderers.at(4);
110  vtkRenderer* renderer6 = renderers.at(5);
111 
112  renderer1->SetViewport(0.0, 0.0, dx, 0.5);
113  renderer2->SetViewport(dx, 0.0, 2 * dx, 0.5);
114  renderer3->SetViewport(2 * dx, 0.0, 1.0, 0.5);
115 
116  renderer4->SetViewport(0.0, 0.5, dx, 1.0);
117  renderer5->SetViewport(dx, 0.5, 2 * dx, 1.0);
118  renderer6->SetViewport(2 * dx, 0.5, 1.0, 1.0);
119 }
120 
121 // |X|X|X|
122 // |X|X|X|
123 // | X |
124 template <>
125 inline void layoutRenderers<7>(const QList<vtkRenderer*>& renderers) {
126  Q_ASSERT(renderers.size() == 7);
127 
128  qreal dx = (qreal)1 / 3;
129  qreal dy = (qreal)1 / 3;
130 
131  vtkRenderer* renderer1 = renderers.at(0);
132  vtkRenderer* renderer2 = renderers.at(1);
133  vtkRenderer* renderer3 = renderers.at(2);
134  vtkRenderer* renderer4 = renderers.at(3);
135  vtkRenderer* renderer5 = renderers.at(4);
136  vtkRenderer* renderer6 = renderers.at(5);
137  vtkRenderer* renderer7 = renderers.at(6);
138 
139  renderer1->SetViewport(0.0, 0.0, dx, dy);
140  renderer2->SetViewport(dx, 0.0, 2 * dx, dy);
141  renderer3->SetViewport(2 * dx, 0.0, 1.0, dy);
142 
143  renderer4->SetViewport(0.0, dy, dx, 2 * dy);
144  renderer5->SetViewport(dx, dy, 2 * dx, 2 * dy);
145  renderer6->SetViewport(2 * dx, dy, 1.0, 2 * dy);
146 
147  renderer7->SetViewport(0.0, 2 * dy, 1.0, 1.0);
148 }
149 
150 // |X|X|X|X|
151 // |X|X|X|X|
152 template <>
153 inline void layoutRenderers<8>(const QList<vtkRenderer*>& renderers) {
154  Q_ASSERT(renderers.size() == 8);
155 
156  qreal dx = (qreal)1 / 4;
157  qreal dy = (qreal)1 / 2;
158 
159  vtkRenderer* renderer1 = renderers.at(0);
160  vtkRenderer* renderer2 = renderers.at(1);
161  vtkRenderer* renderer3 = renderers.at(2);
162  vtkRenderer* renderer4 = renderers.at(3);
163  vtkRenderer* renderer5 = renderers.at(4);
164  vtkRenderer* renderer6 = renderers.at(5);
165  vtkRenderer* renderer7 = renderers.at(6);
166  vtkRenderer* renderer8 = renderers.at(7);
167 
168  renderer1->SetViewport(0.0, 0.0, dx, dy);
169  renderer2->SetViewport(dx, 0.0, 2 * dx, dy);
170  renderer3->SetViewport(2 * dx, 0.0, 1.0, dy);
171  renderer4->SetViewport(3 * dx, dy, 1.0, dy);
172 
173  renderer5->SetViewport(0.0, dy, dx, 1.0);
174  renderer6->SetViewport(dx, dy, 2 * dx, 1.0);
175  renderer7->SetViewport(2 * dx, dy, 3 * dx, 1.0);
176  renderer8->SetViewport(3 * dx, dy, 1.0, 1.0);
177 }
178 
179 // |X|X|X|
180 // |X|X|X|
181 // |X|X|X|
182 template <>
183 inline void layoutRenderers<9>(const QList<vtkRenderer*>& renderers) {
184  Q_ASSERT(renderers.size() == 9);
185 
186  qreal dx = (qreal)1 / 3;
187  qreal dy = (qreal)1 / 3;
188 
189  vtkRenderer* renderer1 = renderers.at(0);
190  vtkRenderer* renderer2 = renderers.at(1);
191  vtkRenderer* renderer3 = renderers.at(2);
192  vtkRenderer* renderer4 = renderers.at(3);
193  vtkRenderer* renderer5 = renderers.at(4);
194  vtkRenderer* renderer6 = renderers.at(5);
195  vtkRenderer* renderer7 = renderers.at(6);
196  vtkRenderer* renderer8 = renderers.at(7);
197  vtkRenderer* renderer9 = renderers.at(8);
198 
199  renderer1->SetViewport(0.0, 0.0, dx, dy);
200  renderer2->SetViewport(dx, 0.0, 2 * dx, dy);
201  renderer3->SetViewport(2 * dx, 0.0, 1.0, dy);
202 
203  renderer4->SetViewport(0.0, dy, dx, 2 * dy);
204  renderer5->SetViewport(dx, dy, 2 * dx, 2 * dy);
205  renderer6->SetViewport(2 * dx, dy, 1.0, 2 * dy);
206 
207  renderer7->SetViewport(0.0, 2 * dy, dx, 1.0);
208  renderer8->SetViewport(dx, 2 * dy, 2 * dx, 1.0);
209  renderer9->SetViewport(2 * dx, 2 * dy, 1.0, 1.0);
210 }
211 
212 // |X|X|X|X|X|
213 // |X|X|X|X|X|
214 template <>
215 inline void layoutRenderers<10>(const QList<vtkRenderer*>& renderers) {
216  Q_ASSERT(renderers.size() == 10);
217 
218  qreal dx = (qreal)1 / 5;
219  qreal dy = (qreal)1 / 2;
220 
221  vtkRenderer* renderer1 = renderers.at(0);
222  vtkRenderer* renderer2 = renderers.at(1);
223  vtkRenderer* renderer3 = renderers.at(2);
224  vtkRenderer* renderer4 = renderers.at(3);
225  vtkRenderer* renderer5 = renderers.at(4);
226  vtkRenderer* renderer6 = renderers.at(5);
227  vtkRenderer* renderer7 = renderers.at(6);
228  vtkRenderer* renderer8 = renderers.at(7);
229  vtkRenderer* renderer9 = renderers.at(8);
230  vtkRenderer* renderer10 = renderers.at(9);
231 
232  renderer1->SetViewport(0.0, 0.0, dx, dy);
233  renderer2->SetViewport(dx, 0.0, 2 * dx, dy);
234  renderer3->SetViewport(2 * dx, 0.0, 3 * dx, dy);
235  renderer4->SetViewport(3 * dx, 0.0, 4 * dx, dy);
236  renderer5->SetViewport(4 * dx, 0.0, 1.0, dy);
237 
238  renderer6->SetViewport(0.0, dy, dx, 1.0);
239  renderer7->SetViewport(dx, dy, 2 * dx, 1.0);
240  renderer8->SetViewport(2 * dx, dy, 3 * dx, 1.0);
241  renderer9->SetViewport(3 * dx, dy, 4 * dx, 1.0);
242  renderer10->SetViewport(4 * dx, dy, 1.0, 1.0);
243 }
244 
245 // |X|X|X|X|
246 // |X|X|X|X|
247 // |X|X| X |
248 template <>
249 inline void layoutRenderers<11>(const QList<vtkRenderer*>& renderers) {}
250 
251 // |X|X|X|X|
252 // |X|X|X|X|
253 // |X|X|X|X|
254 template <>
255 inline void layoutRenderers<12>(const QList<vtkRenderer*>& renderers) {}
256 
257 } // namespace VtkUtils
void layoutRenderers< 7 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 5 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 8 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 10 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 12 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 1 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 4 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 3 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 9 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 2 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 6 >(const QList< vtkRenderer * > &renderers)
void layoutRenderers< 11 >(const QList< vtkRenderer * > &renderers)