82 const auto id =
GetId();
83 const auto nPanels = panels.size();
89 if (m_lY > 0 && m_lZ > 0) {
90 ToGlobal(-m_lX, -m_lY, -m_lZ, xv0, yv0, zv0);
91 ToGlobal(-m_lX, +m_lY, -m_lZ, xv1, yv1, zv1);
92 ToGlobal(-m_lX, +m_lY, +m_lZ, xv2, yv2, zv2);
93 ToGlobal(-m_lX, -m_lY, +m_lZ, xv3, yv3, zv3);
98 panel.
xv = {xv0, xv1, xv2, xv3};
99 panel.
yv = {yv0, yv1, yv2, yv3};
100 panel.
zv = {zv0, zv1, zv2, zv3};
103 panels.push_back(std::move(panel));
106 if (m_lX > 0 && m_lY > 0 && m_lZ > 0) {
107 ToGlobal(+m_lX, -m_lY, -m_lZ, xv0, yv0, zv0);
108 ToGlobal(+m_lX, +m_lY, -m_lZ, xv1, yv1, zv1);
109 ToGlobal(+m_lX, +m_lY, +m_lZ, xv2, yv2, zv2);
110 ToGlobal(+m_lX, -m_lY, +m_lZ, xv3, yv3, zv3);
115 panel.
xv = {xv0, xv1, xv2, xv3};
116 panel.
yv = {yv0, yv1, yv2, yv3};
117 panel.
zv = {zv0, zv1, zv2, zv3};
120 panels.push_back(std::move(panel));
123 if (m_lX > 0 && m_lZ > 0) {
124 ToGlobal(-m_lX, -m_lY, -m_lZ, xv0, yv0, zv0);
125 ToGlobal(+m_lX, -m_lY, -m_lZ, xv1, yv1, zv1);
126 ToGlobal(+m_lX, -m_lY, +m_lZ, xv2, yv2, zv2);
127 ToGlobal(-m_lX, -m_lY, +m_lZ, xv3, yv3, zv3);
132 panel.
xv = {xv0, xv1, xv2, xv3};
133 panel.
yv = {yv0, yv1, yv2, yv3};
134 panel.
zv = {zv0, zv1, zv2, zv3};
137 panels.push_back(std::move(panel));
140 if (m_lX > 0 && m_lY > 0 && m_lZ > 0) {
141 ToGlobal(-m_lX, +m_lY, -m_lZ, xv0, yv0, zv0);
142 ToGlobal(+m_lX, +m_lY, -m_lZ, xv1, yv1, zv1);
143 ToGlobal(+m_lX, +m_lY, +m_lZ, xv2, yv2, zv2);
144 ToGlobal(-m_lX, +m_lY, +m_lZ, xv3, yv3, zv3);
149 panel.
xv = {xv0, xv1, xv2, xv3};
150 panel.
yv = {yv0, yv1, yv2, yv3};
151 panel.
zv = {zv0, zv1, zv2, zv3};
154 panels.push_back(std::move(panel));
157 if (m_lX > 0 && m_lY > 0) {
158 ToGlobal(-m_lX, -m_lY, -m_lZ, xv0, yv0, zv0);
159 ToGlobal(-m_lX, +m_lY, -m_lZ, xv1, yv1, zv1);
160 ToGlobal(+m_lX, +m_lY, -m_lZ, xv2, yv2, zv2);
161 ToGlobal(+m_lX, -m_lY, -m_lZ, xv3, yv3, zv3);
166 panel.
xv = {xv0, xv1, xv2, xv3};
167 panel.
yv = {yv0, yv1, yv2, yv3};
168 panel.
zv = {zv0, zv1, zv2, zv3};
171 panels.push_back(std::move(panel));
174 if (m_lX > 0 && m_lY > 0 && m_lZ > 0) {
175 ToGlobal(-m_lX, -m_lY, +m_lZ, xv0, yv0, zv0);
176 ToGlobal(-m_lX, +m_lY, +m_lZ, xv1, yv1, zv1);
177 ToGlobal(+m_lX, +m_lY, +m_lZ, xv2, yv2, zv2);
178 ToGlobal(+m_lX, -m_lY, +m_lZ, xv3, yv3, zv3);
183 panel.
xv = {xv0, xv1, xv2, xv3};
184 panel.
yv = {yv0, yv1, yv2, yv3};
185 panel.
zv = {zv0, zv1, zv2, zv3};
188 panels.push_back(std::move(panel));
191 std::cout <<
"SolidBox::SolidPanels: " << panels.size() - nPanels
223 const double xn,
const double yn,
const double zn,
224 std::vector<Panel>& panels) {
230 std::vector<double> xv;
231 std::vector<double> yv;
232 std::vector<double> zv;
236 ToGlobal(-m_lX, -m_lY, -m_lZ, x1, y1, z1);
238 ToGlobal(+m_lX, -m_lY, -m_lZ, x2, y2, z2);
240 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
246 ToGlobal(-m_lX, +m_lY, -m_lZ, x2, y2, z2);
247 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
253 ToGlobal(-m_lX, -m_lY, +m_lZ, x2, y2, z2);
254 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
260 ToGlobal(+m_lX, +m_lY, -m_lZ, x1, y1, z1);
261 ToGlobal(-m_lX, +m_lY, -m_lZ, x2, y2, z2);
262 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
268 ToGlobal(+m_lX, -m_lY, -m_lZ, x2, y2, z2);
269 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
275 ToGlobal(+m_lX, +m_lY, +m_lZ, x2, y2, z2);
276 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
282 ToGlobal(-m_lX, +m_lY, +m_lZ, x1, y1, z1);
283 ToGlobal(+m_lX, +m_lY, +m_lZ, x2, y2, z2);
284 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
290 ToGlobal(-m_lX, -m_lY, +m_lZ, x2, y2, z2);
291 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
297 ToGlobal(-m_lX, +m_lY, -m_lZ, x1, y1, z1);
298 ToGlobal(-m_lX, +m_lY, +m_lZ, x2, y2, z2);
299 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
305 ToGlobal(+m_lX, -m_lY, +m_lZ, x1, y1, z1);
306 ToGlobal(-m_lX, -m_lY, +m_lZ, x2, y2, z2);
307 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
313 ToGlobal(+m_lX, +m_lY, +m_lZ, x2, y2, z2);
314 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
320 ToGlobal(+m_lX, -m_lY, -m_lZ, x2, y2, z2);
321 if (
Intersect(x1, y1, z1, x2, y2, z2, x0, y0, z0, xn, yn, zn, xc, yc, zc)) {
329 if (xv.size() >= 3) {
339 panels.push_back(std::move(panel));