40 } |
41 } |
41 |
42 |
42 // ============================================================================= |
43 // ============================================================================= |
43 // ----------------------------------------------------------------------------- |
44 // ----------------------------------------------------------------------------- |
44 vertex::vertex (double x, double y, double z) |
45 vertex::vertex (double x, double y, double z) |
45 { m_coords[X] = x; |
46 { |
|
47 m_coords[X] = x; |
46 m_coords[Y] = y; |
48 m_coords[Y] = y; |
47 m_coords[Z] = z; |
49 m_coords[Z] = z; |
48 } |
50 } |
49 |
51 |
50 // ============================================================================= |
52 // ============================================================================= |
51 // ----------------------------------------------------------------------------- |
53 // ----------------------------------------------------------------------------- |
52 void vertex::move (const vertex& other) |
54 void vertex::move (const vertex& other) |
53 { for_axes (ax) |
55 { |
|
56 for_axes (ax) |
54 m_coords[ax] += other[ax]; |
57 m_coords[ax] += other[ax]; |
55 } |
58 } |
56 |
59 |
57 // ============================================================================= |
60 // ============================================================================= |
58 // ----------------------------------------------------------------------------- |
61 // ----------------------------------------------------------------------------- |
59 double vertex::distanceTo (const vertex& other) const |
62 double vertex::distanceTo (const vertex& other) const |
60 { double dx = abs (x() - other.x()); |
63 { |
|
64 double dx = abs (x() - other.x()); |
61 double dy = abs (y() - other.y()); |
65 double dy = abs (y() - other.y()); |
62 double dz = abs (z() - other.z()); |
66 double dz = abs (z() - other.z()); |
63 return sqrt ((dx * dx) + (dy * dy) + (dz * dz)); |
67 return sqrt ((dx * dx) + (dy * dy) + (dz * dz)); |
64 } |
68 } |
65 |
69 |
66 // ============================================================================= |
70 // ============================================================================= |
67 // ----------------------------------------------------------------------------- |
71 // ----------------------------------------------------------------------------- |
68 vertex vertex::midpoint (const vertex& other) |
72 vertex vertex::midpoint (const vertex& other) |
69 { vertex mid; |
73 { |
|
74 vertex mid; |
70 |
75 |
71 for_axes (ax) |
76 for_axes (ax) |
72 mid[ax] = (m_coords[ax] + other[ax]) / 2; |
77 mid[ax] = (m_coords[ax] + other[ax]) / 2; |
73 |
78 |
74 return mid; |
79 return mid; |
75 } |
80 } |
76 |
81 |
77 // ============================================================================= |
82 // ============================================================================= |
78 // ----------------------------------------------------------------------------- |
83 // ----------------------------------------------------------------------------- |
79 str vertex::stringRep (bool mangled) const |
84 str vertex::stringRep (bool mangled) const |
80 { str fmtstr = "%1 %2 %3"; |
85 { |
|
86 str fmtstr = "%1 %2 %3"; |
81 |
87 |
82 if (mangled) |
88 if (mangled) |
83 fmtstr = "(%1, %2, %3)"; |
89 fmtstr = "(%1, %2, %3)"; |
84 |
90 |
85 return fmt (fmtstr, coord (X), coord (Y), coord (Z)); |
91 return fmt (fmtstr, coord (X), coord (Y), coord (Z)); |
86 } |
92 } |
87 |
93 |
88 // ============================================================================= |
94 // ============================================================================= |
89 // ----------------------------------------------------------------------------- |
95 // ----------------------------------------------------------------------------- |
90 void vertex::transform (matrix matr, vertex pos) |
96 void vertex::transform (matrix matr, vertex pos) |
91 { double x2 = (matr[0] * x()) + (matr[1] * y()) + (matr[2] * z()) + pos[X]; |
97 { |
|
98 double x2 = (matr[0] * x()) + (matr[1] * y()) + (matr[2] * z()) + pos[X]; |
92 double y2 = (matr[3] * x()) + (matr[4] * y()) + (matr[5] * z()) + pos[Y]; |
99 double y2 = (matr[3] * x()) + (matr[4] * y()) + (matr[5] * z()) + pos[Y]; |
93 double z2 = (matr[6] * x()) + (matr[7] * y()) + (matr[8] * z()) + pos[Z]; |
100 double z2 = (matr[6] * x()) + (matr[7] * y()) + (matr[8] * z()) + pos[Z]; |
94 |
101 |
95 x() = x2; |
102 x() = x2; |
96 y() = y2; |
103 y() = y2; |
98 } |
105 } |
99 |
106 |
100 // ============================================================================= |
107 // ============================================================================= |
101 // ----------------------------------------------------------------------------- |
108 // ----------------------------------------------------------------------------- |
102 vertex vertex::operator-() const |
109 vertex vertex::operator-() const |
103 { return vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]); |
110 { |
|
111 return vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]); |
104 } |
112 } |
105 |
113 |
106 // ============================================================================= |
114 // ============================================================================= |
107 // ----------------------------------------------------------------------------- |
115 // ----------------------------------------------------------------------------- |
108 bool vertex::operator!= (const vertex& other) const |
116 bool vertex::operator!= (const vertex& other) const |
109 { return !operator== (other); |
117 { |
|
118 return !operator== (other); |
110 } |
119 } |
111 |
120 |
112 // ============================================================================= |
121 // ============================================================================= |
113 // ----------------------------------------------------------------------------- |
122 // ----------------------------------------------------------------------------- |
114 double& vertex::operator[] (const Axis ax) |
123 double& vertex::operator[] (const Axis ax) |
115 { return coord ( (int) ax); |
124 { |
|
125 return coord ( (int) ax); |
116 } |
126 } |
117 |
127 |
118 const double& vertex::operator[] (const Axis ax) const |
128 const double& vertex::operator[] (const Axis ax) const |
119 { return coord ( (int) ax); |
129 { |
|
130 return coord ( (int) ax); |
120 } |
131 } |
121 |
132 |
122 double& vertex::operator[] (const int ax) |
133 double& vertex::operator[] (const int ax) |
123 { return coord (ax); |
134 { |
|
135 return coord (ax); |
124 } |
136 } |
125 |
137 |
126 const double& vertex::operator[] (const int ax) const |
138 const double& vertex::operator[] (const int ax) const |
127 { return coord (ax); |
139 { |
|
140 return coord (ax); |
128 } |
141 } |
129 |
142 |
130 // ============================================================================= |
143 // ============================================================================= |
131 // ----------------------------------------------------------------------------- |
144 // ----------------------------------------------------------------------------- |
132 bool vertex::operator== (const vertex& other) const |
145 bool vertex::operator== (const vertex& other) const |
133 { return coord (X) == other[X] && |
146 { |
|
147 return coord (X) == other[X] && |
134 coord (Y) == other[Y] && |
148 coord (Y) == other[Y] && |
135 coord (Z) == other[Z]; |
149 coord (Z) == other[Z]; |
136 } |
150 } |
137 |
151 |
138 // ============================================================================= |
152 // ============================================================================= |
139 // ----------------------------------------------------------------------------- |
153 // ----------------------------------------------------------------------------- |
140 vertex& vertex::operator/= (const double d) |
154 vertex& vertex::operator/= (const double d) |
141 { for_axes (ax) |
155 { |
|
156 for_axes (ax) |
142 m_coords[ax] /= d; |
157 m_coords[ax] /= d; |
143 |
158 |
144 return *this; |
159 return *this; |
145 } |
160 } |
146 |
161 |
147 // ============================================================================= |
162 // ============================================================================= |
148 // ----------------------------------------------------------------------------- |
163 // ----------------------------------------------------------------------------- |
149 vertex vertex::operator/ (const double d) const |
164 vertex vertex::operator/ (const double d) const |
150 { vertex other (*this); |
165 { |
|
166 vertex other (*this); |
151 return other /= d; |
167 return other /= d; |
152 } |
168 } |
153 |
169 |
154 // ============================================================================= |
170 // ============================================================================= |
155 // ----------------------------------------------------------------------------- |
171 // ----------------------------------------------------------------------------- |
156 vertex& vertex::operator+= (const vertex& other) |
172 vertex& vertex::operator+= (const vertex& other) |
157 { move (other); |
173 { |
|
174 move (other); |
158 return *this; |
175 return *this; |
159 } |
176 } |
160 |
177 |
161 // ============================================================================= |
178 // ============================================================================= |
162 // ----------------------------------------------------------------------------- |
179 // ----------------------------------------------------------------------------- |
163 vertex vertex::operator+ (const vertex& other) const |
180 vertex vertex::operator+ (const vertex& other) const |
164 { vertex newvert (*this); |
181 { |
|
182 vertex newvert (*this); |
165 newvert.move (other); |
183 newvert.move (other); |
166 return newvert; |
184 return newvert; |
167 } |
185 } |
168 |
186 |
169 // ============================================================================= |
187 // ============================================================================= |
170 // ----------------------------------------------------------------------------- |
188 // ----------------------------------------------------------------------------- |
171 int vertex::operator< (const vertex& other) const |
189 int vertex::operator< (const vertex& other) const |
172 { if (operator== (other)) |
190 { |
|
191 if (operator== (other)) |
173 return false; |
192 return false; |
174 |
193 |
175 if (coord (X) < other[X]) |
194 if (coord (X) < other[X]) |
176 return true; |
195 return true; |
177 |
196 |
188 } |
207 } |
189 |
208 |
190 // ============================================================================= |
209 // ============================================================================= |
191 // ----------------------------------------------------------------------------- |
210 // ----------------------------------------------------------------------------- |
192 matrix::matrix (double vals[]) |
211 matrix::matrix (double vals[]) |
193 { for (int i = 0; i < 9; ++i) |
212 { |
|
213 for (int i = 0; i < 9; ++i) |
194 m_vals[i] = vals[i]; |
214 m_vals[i] = vals[i]; |
195 } |
215 } |
196 |
216 |
197 // ============================================================================= |
217 // ============================================================================= |
198 // ----------------------------------------------------------------------------- |
218 // ----------------------------------------------------------------------------- |
199 matrix::matrix (double fillval) |
219 matrix::matrix (double fillval) |
200 { for (int i = 0; i < 9; ++i) |
220 { |
|
221 for (int i = 0; i < 9; ++i) |
201 m_vals[i] = fillval; |
222 m_vals[i] = fillval; |
202 } |
223 } |
203 |
224 |
204 // ============================================================================= |
225 // ============================================================================= |
205 // ----------------------------------------------------------------------------- |
226 // ----------------------------------------------------------------------------- |
206 matrix::matrix (initlist<double> vals) |
227 matrix::matrix (initlist<double> vals) |
207 { assert (vals.size() == 9); |
228 { |
|
229 assert (vals.size() == 9); |
208 memcpy (&m_vals[0], & (*vals.begin()), sizeof m_vals); |
230 memcpy (&m_vals[0], & (*vals.begin()), sizeof m_vals); |
209 } |
231 } |
210 |
232 |
211 // ============================================================================= |
233 // ============================================================================= |
212 // ----------------------------------------------------------------------------- |
234 // ----------------------------------------------------------------------------- |
213 void matrix::puts() const |
235 void matrix::puts() const |
214 { for (int i = 0; i < 3; ++i) |
236 { |
215 { for (int j = 0; j < 3; ++j) |
237 for (int i = 0; i < 3; ++i) |
|
238 { |
|
239 for (int j = 0; j < 3; ++j) |
216 log ("%1\t", m_vals[ (i * 3) + j]); |
240 log ("%1\t", m_vals[ (i * 3) + j]); |
217 |
241 |
218 log ("\n"); |
242 log ("\n"); |
219 } |
243 } |
220 } |
244 } |
221 |
245 |
222 // ============================================================================= |
246 // ============================================================================= |
223 // ----------------------------------------------------------------------------- |
247 // ----------------------------------------------------------------------------- |
224 str matrix::stringRep() const |
248 str matrix::stringRep() const |
225 { str val; |
249 { |
|
250 str val; |
226 |
251 |
227 for (int i = 0; i < 9; ++i) |
252 for (int i = 0; i < 9; ++i) |
228 { if (i > 0) |
253 { |
|
254 if (i > 0) |
229 val += ' '; |
255 val += ' '; |
230 |
256 |
231 val += str::number (m_vals[i]); |
257 val += str::number (m_vals[i]); |
232 } |
258 } |
233 |
259 |
255 } |
283 } |
256 |
284 |
257 // ============================================================================= |
285 // ============================================================================= |
258 // ----------------------------------------------------------------------------- |
286 // ----------------------------------------------------------------------------- |
259 matrix& matrix::operator= (matrix other) |
287 matrix& matrix::operator= (matrix other) |
260 { memcpy (&m_vals[0], &other.m_vals[0], sizeof m_vals); |
288 { |
|
289 memcpy (&m_vals[0], &other.m_vals[0], sizeof m_vals); |
261 return *this; |
290 return *this; |
262 } |
291 } |
263 |
292 |
264 // ============================================================================= |
293 // ============================================================================= |
265 // ----------------------------------------------------------------------------- |
294 // ----------------------------------------------------------------------------- |
266 double matrix::getDeterminant() const |
295 double matrix::getDeterminant() const |
267 { return (val (0) * val (4) * val (8)) + |
296 { |
|
297 return (val (0) * val (4) * val (8)) + |
268 (val (1) * val (5) * val (6)) + |
298 (val (1) * val (5) * val (6)) + |
269 (val (2) * val (3) * val (7)) - |
299 (val (2) * val (3) * val (7)) - |
270 (val (2) * val (4) * val (6)) - |
300 (val (2) * val (4) * val (6)) - |
271 (val (1) * val (3) * val (8)) - |
301 (val (1) * val (3) * val (8)) - |
272 (val (0) * val (5) * val (7)); |
302 (val (0) * val (5) * val (7)); |
273 } |
303 } |
274 |
304 |
275 // ============================================================================= |
305 // ============================================================================= |
276 // ----------------------------------------------------------------------------- |
306 // ----------------------------------------------------------------------------- |
277 bool matrix::operator== (const matrix& other) const |
307 bool matrix::operator== (const matrix& other) const |
278 { for (int i = 0; i < 9; ++i) |
308 { |
|
309 for (int i = 0; i < 9; ++i) |
279 if (val (i) != other[i]) |
310 if (val (i) != other[i]) |
280 return false; |
311 return false; |
281 |
312 |
282 return true; |
313 return true; |
283 } |
314 } |
284 |
315 |
285 // ============================================================================= |
316 // ============================================================================= |
286 // ----------------------------------------------------------------------------- |
317 // ----------------------------------------------------------------------------- |
287 StringFormatArg::StringFormatArg (const str& v) |
318 StringFormatArg::StringFormatArg (const str& v) |
288 { m_val = v; |
319 { |
|
320 m_val = v; |
289 } |
321 } |
290 |
322 |
291 StringFormatArg::StringFormatArg (const char& v) |
323 StringFormatArg::StringFormatArg (const char& v) |
292 { m_val = v; |
324 { |
|
325 m_val = v; |
293 } |
326 } |
294 |
327 |
295 StringFormatArg::StringFormatArg (const uchar& v) |
328 StringFormatArg::StringFormatArg (const uchar& v) |
296 { m_val = v; |
329 { |
|
330 m_val = v; |
297 } |
331 } |
298 |
332 |
299 StringFormatArg::StringFormatArg (const QChar& v) |
333 StringFormatArg::StringFormatArg (const QChar& v) |
300 { m_val = v; |
334 { |
|
335 m_val = v; |
301 } |
336 } |
302 |
337 |
303 StringFormatArg::StringFormatArg (const float& v) |
338 StringFormatArg::StringFormatArg (const float& v) |
304 { m_val = str::number (v); |
339 { |
|
340 m_val = str::number (v); |
305 } |
341 } |
306 |
342 |
307 StringFormatArg::StringFormatArg (const double& v) |
343 StringFormatArg::StringFormatArg (const double& v) |
308 { m_val = str::number (v); |
344 { |
|
345 m_val = str::number (v); |
309 } |
346 } |
310 |
347 |
311 StringFormatArg::StringFormatArg (const vertex& v) |
348 StringFormatArg::StringFormatArg (const vertex& v) |
312 { m_val = v.stringRep (false); |
349 { |
|
350 m_val = v.stringRep (false); |
313 } |
351 } |
314 |
352 |
315 StringFormatArg::StringFormatArg (const matrix& v) |
353 StringFormatArg::StringFormatArg (const matrix& v) |
316 { m_val = v.stringRep(); |
354 { |
|
355 m_val = v.stringRep(); |
317 } |
356 } |
318 |
357 |
319 StringFormatArg::StringFormatArg (const char* v) |
358 StringFormatArg::StringFormatArg (const char* v) |
320 { m_val = v; |
359 { |
|
360 m_val = v; |
321 } |
361 } |
322 |
362 |
323 StringFormatArg::StringFormatArg (const void* v) |
363 StringFormatArg::StringFormatArg (const void* v) |
324 { m_val.sprintf ("%p", v); |
364 { |
|
365 m_val.sprintf ("%p", v); |
325 } |
366 } |
326 |
367 |
327 // ============================================================================= |
368 // ============================================================================= |
328 // ----------------------------------------------------------------------------- |
369 // ----------------------------------------------------------------------------- |
329 File::File() |
370 File::File() |
330 { // Make a null file |
371 { |
|
372 // Make a null file |
331 m_file = null; |
373 m_file = null; |
332 m_textstream = null; |
374 m_textstream = null; |
333 } |
375 } |
334 |
376 |
335 File::File (str path, OpenType rtype) |
377 File::File (str path, OpenType rtype) |
336 { m_file = null; |
378 { |
|
379 m_file = null; |
337 m_path = path; |
380 m_path = path; |
338 open (path, rtype); |
381 open (path, rtype); |
339 } |
382 } |
340 |
383 |
341 File::File (FILE* fp, OpenType rtype) |
384 File::File (FILE* fp, OpenType rtype) |
342 { m_file = null; |
385 { |
|
386 m_file = null; |
343 open (fp, rtype); |
387 open (fp, rtype); |
344 } |
388 } |
345 |
389 |
346 // ============================================================================= |
390 // ============================================================================= |
347 // ----------------------------------------------------------------------------- |
391 // ----------------------------------------------------------------------------- |
348 File::~File() |
392 File::~File() |
349 { if (m_file) |
393 { |
350 { m_file->close(); |
394 if (m_file) |
|
395 { |
|
396 m_file->close(); |
351 delete m_file; |
397 delete m_file; |
352 |
398 |
353 if (m_textstream) |
399 if (m_textstream) |
354 delete m_textstream; |
400 delete m_textstream; |
355 } |
401 } |
356 } |
402 } |
357 |
403 |
358 // ============================================================================= |
404 // ============================================================================= |
359 // ----------------------------------------------------------------------------- |
405 // ----------------------------------------------------------------------------- |
360 bool File::open (FILE* fp, OpenType rtype) |
406 bool File::open (FILE* fp, OpenType rtype) |
361 { return open ("", rtype, fp); |
407 { |
|
408 return open ("", rtype, fp); |
362 } |
409 } |
363 |
410 |
364 bool File::open (str path, OpenType rtype, FILE* fp) |
411 bool File::open (str path, OpenType rtype, FILE* fp) |
365 { close(); |
412 { |
|
413 close(); |
366 |
414 |
367 if (!m_file) |
415 if (!m_file) |
368 m_file = new QFile; |
416 m_file = new QFile; |
369 |
417 |
370 m_file->setFileName (path); |
418 m_file->setFileName (path); |
392 } |
441 } |
393 |
442 |
394 // ============================================================================= |
443 // ============================================================================= |
395 // ----------------------------------------------------------------------------- |
444 // ----------------------------------------------------------------------------- |
396 File::iterator File::begin() |
445 File::iterator File::begin() |
397 { return iterator (this); |
446 { |
|
447 return iterator (this); |
398 } |
448 } |
399 |
449 |
400 File::iterator& File::end() |
450 File::iterator& File::end() |
401 { return m_endIterator; |
451 { |
|
452 return m_endIterator; |
402 } |
453 } |
403 |
454 |
404 // ============================================================================= |
455 // ============================================================================= |
405 // ----------------------------------------------------------------------------- |
456 // ----------------------------------------------------------------------------- |
406 void File::write (str msg) |
457 void File::write (str msg) |
407 { m_file->write (msg.toUtf8(), msg.length()); |
458 { |
|
459 m_file->write (msg.toUtf8(), msg.length()); |
408 } |
460 } |
409 |
461 |
410 // ============================================================================= |
462 // ============================================================================= |
411 // ----------------------------------------------------------------------------- |
463 // ----------------------------------------------------------------------------- |
412 bool File::readLine (str& line) |
464 bool File::readLine (str& line) |
413 { if (!m_textstream || m_textstream->atEnd()) |
465 { |
|
466 if (!m_textstream || m_textstream->atEnd()) |
414 return false; |
467 return false; |
415 |
468 |
416 line = m_textstream->readLine(); |
469 line = m_textstream->readLine(); |
417 return true; |
470 return true; |
418 } |
471 } |
419 |
472 |
420 // ============================================================================= |
473 // ============================================================================= |
421 // ----------------------------------------------------------------------------- |
474 // ----------------------------------------------------------------------------- |
422 bool File::atEnd() const |
475 bool File::atEnd() const |
423 { assert (m_textstream != null); |
476 { |
|
477 assert (m_textstream != null); |
424 return m_textstream->atEnd(); |
478 return m_textstream->atEnd(); |
425 } |
479 } |
426 |
480 |
427 // ============================================================================= |
481 // ============================================================================= |
428 // ----------------------------------------------------------------------------- |
482 // ----------------------------------------------------------------------------- |
429 bool File::isNull() const |
483 bool File::isNull() const |
430 { return m_file == null; |
484 { |
|
485 return m_file == null; |
431 } |
486 } |
432 |
487 |
433 bool File::operator!() const |
488 bool File::operator!() const |
434 { return isNull(); |
489 { |
|
490 return isNull(); |
435 } |
491 } |
436 |
492 |
437 // ============================================================================= |
493 // ============================================================================= |
438 // ----------------------------------------------------------------------------- |
494 // ----------------------------------------------------------------------------- |
439 void File::close() |
495 void File::close() |
440 { if (!m_file) |
496 { |
|
497 if (!m_file) |
441 return; |
498 return; |
442 |
499 |
443 delete m_file; |
500 delete m_file; |
444 m_file = null; |
501 m_file = null; |
445 |
502 |
446 if (m_textstream) |
503 if (m_textstream) |
447 { delete m_textstream; |
504 { |
|
505 delete m_textstream; |
448 m_textstream = null; |
506 m_textstream = null; |
449 } |
507 } |
450 } |
508 } |
451 |
509 |
452 // ============================================================================= |
510 // ============================================================================= |
453 // ----------------------------------------------------------------------------- |
511 // ----------------------------------------------------------------------------- |
454 bool File::flush() |
512 bool File::flush() |
455 { return m_file->flush(); |
513 { |
|
514 return m_file->flush(); |
456 } |
515 } |
457 |
516 |
458 // ============================================================================= |
517 // ============================================================================= |
459 // ----------------------------------------------------------------------------- |
518 // ----------------------------------------------------------------------------- |
460 File::operator bool() const |
519 File::operator bool() const |
461 { return !isNull(); |
520 { |
|
521 return !isNull(); |
462 } |
522 } |
463 |
523 |
464 // ============================================================================= |
524 // ============================================================================= |
465 // ----------------------------------------------------------------------------- |
525 // ----------------------------------------------------------------------------- |
466 void File::rewind() |
526 void File::rewind() |
467 { m_file->seek (0); |
527 { |
|
528 m_file->seek (0); |
468 } |
529 } |
469 |
530 |
470 // ============================================================================= |
531 // ============================================================================= |
471 // ----------------------------------------------------------------------------- |
532 // ----------------------------------------------------------------------------- |
472 File::iterator::iterator (File* f) : m_file (f) |
533 File::iterator::iterator (File* f) : m_file (f) |
473 { operator++(); |
534 { |
|
535 operator++(); |
474 } |
536 } |
475 |
537 |
476 // ============================================================================= |
538 // ============================================================================= |
477 // ----------------------------------------------------------------------------- |
539 // ----------------------------------------------------------------------------- |
478 void File::iterator::operator++() |
540 void File::iterator::operator++() |
479 { m_gotdata = m_file->readLine (m_text); |
541 { |
|
542 m_gotdata = m_file->readLine (m_text); |
480 } |
543 } |
481 |
544 |
482 // ============================================================================= |
545 // ============================================================================= |
483 // ----------------------------------------------------------------------------- |
546 // ----------------------------------------------------------------------------- |
484 str File::iterator::operator*() |
547 str File::iterator::operator*() |
485 { return m_text; |
548 { |
|
549 return m_text; |
486 } |
550 } |
487 |
551 |
488 // ============================================================================= |
552 // ============================================================================= |
489 // The prime contestant for the weirdest operator== 2013 award? |
553 // The prime contestant for the weirdest operator== 2013 award? |
490 // ----------------------------------------------------------------------------- |
554 // ----------------------------------------------------------------------------- |
491 bool File::iterator::operator== (File::iterator& other) |
555 bool File::iterator::operator== (File::iterator& other) |
492 { return (other.m_file == null && !m_gotdata); |
556 { |
|
557 return (other.m_file == null && !m_gotdata); |
493 } |
558 } |
494 |
559 |
495 // ============================================================================= |
560 // ============================================================================= |
496 // ----------------------------------------------------------------------------- |
561 // ----------------------------------------------------------------------------- |
497 bool File::iterator::operator!= (File::iterator& other) |
562 bool File::iterator::operator!= (File::iterator& other) |
498 { return !operator== (other); |
563 { |
|
564 return !operator== (other); |
499 } |
565 } |
500 |
566 |
501 // ============================================================================= |
567 // ============================================================================= |
502 // ----------------------------------------------------------------------------- |
568 // ----------------------------------------------------------------------------- |
503 LDBoundingBox::LDBoundingBox() |
569 LDBoundingBox::LDBoundingBox() |
504 { reset(); |
570 { |
|
571 reset(); |
505 } |
572 } |
506 |
573 |
507 // ============================================================================= |
574 // ============================================================================= |
508 // ----------------------------------------------------------------------------- |
575 // ----------------------------------------------------------------------------- |
509 void LDBoundingBox::calculate() |
576 void LDBoundingBox::calculate() |
510 { reset(); |
577 { |
|
578 reset(); |
511 |
579 |
512 if (!getCurrentDocument()) |
580 if (!getCurrentDocument()) |
513 return; |
581 return; |
514 |
582 |
515 for (LDObject* obj : getCurrentDocument()->getObjects()) |
583 for (LDObject* obj : getCurrentDocument()->getObjects()) |
545 } |
618 } |
546 |
619 |
547 // ============================================================================= |
620 // ============================================================================= |
548 // ----------------------------------------------------------------------------- |
621 // ----------------------------------------------------------------------------- |
549 LDBoundingBox& LDBoundingBox::operator<< (const vertex& v) |
622 LDBoundingBox& LDBoundingBox::operator<< (const vertex& v) |
550 { calcVertex (v); |
623 { |
|
624 calcVertex (v); |
551 return *this; |
625 return *this; |
552 } |
626 } |
553 |
627 |
554 // ============================================================================= |
628 // ============================================================================= |
555 // ----------------------------------------------------------------------------- |
629 // ----------------------------------------------------------------------------- |
556 LDBoundingBox& LDBoundingBox::operator<< (LDObject* obj) |
630 LDBoundingBox& LDBoundingBox::operator<< (LDObject* obj) |
557 { calcObject (obj); |
631 { |
|
632 calcObject (obj); |
558 return *this; |
633 return *this; |
559 } |
634 } |
560 |
635 |
561 // ============================================================================= |
636 // ============================================================================= |
562 // ----------------------------------------------------------------------------- |
637 // ----------------------------------------------------------------------------- |
563 void LDBoundingBox::calcVertex (const vertex& v) |
638 void LDBoundingBox::calcVertex (const vertex& v) |
564 { for_axes (ax) |
639 { |
565 { if (v[ax] < m_Vertex0[ax]) |
640 for_axes (ax) |
|
641 { |
|
642 if (v[ax] < m_Vertex0[ax]) |
566 m_Vertex0[ax] = v[ax]; |
643 m_Vertex0[ax] = v[ax]; |
567 |
644 |
568 if (v[ax] > m_Vertex1[ax]) |
645 if (v[ax] > m_Vertex1[ax]) |
569 m_Vertex1[ax] = v[ax]; |
646 m_Vertex1[ax] = v[ax]; |
570 } |
647 } |
573 } |
650 } |
574 |
651 |
575 // ============================================================================= |
652 // ============================================================================= |
576 // ----------------------------------------------------------------------------- |
653 // ----------------------------------------------------------------------------- |
577 void LDBoundingBox::reset() |
654 void LDBoundingBox::reset() |
578 { m_Vertex0[X] = m_Vertex0[Y] = m_Vertex0[Z] = 0x7FFFFFFF; |
655 { |
|
656 m_Vertex0[X] = m_Vertex0[Y] = m_Vertex0[Z] = 0x7FFFFFFF; |
579 m_Vertex1[X] = m_Vertex1[Y] = m_Vertex1[Z] = 0xFFFFFFFF; |
657 m_Vertex1[X] = m_Vertex1[Y] = m_Vertex1[Z] = 0xFFFFFFFF; |
580 |
658 |
581 setEmpty (true); |
659 setEmpty (true); |
582 } |
660 } |
583 |
661 |
584 // ============================================================================= |
662 // ============================================================================= |
585 // ----------------------------------------------------------------------------- |
663 // ----------------------------------------------------------------------------- |
586 double LDBoundingBox::size() const |
664 double LDBoundingBox::size() const |
587 { double xscale = (m_Vertex0[X] - m_Vertex1[X]); |
665 { |
|
666 double xscale = (m_Vertex0[X] - m_Vertex1[X]); |
588 double yscale = (m_Vertex0[Y] - m_Vertex1[Y]); |
667 double yscale = (m_Vertex0[Y] - m_Vertex1[Y]); |
589 double zscale = (m_Vertex0[Z] - m_Vertex1[Z]); |
668 double zscale = (m_Vertex0[Z] - m_Vertex1[Z]); |
590 double size = zscale; |
669 double size = zscale; |
591 |
670 |
592 if (xscale > yscale) |
671 if (xscale > yscale) |
593 { if (xscale > zscale) |
672 { |
|
673 if (xscale > zscale) |
594 size = xscale; |
674 size = xscale; |
595 } |
675 } |
596 elif (yscale > zscale) |
676 elif (yscale > zscale) |
597 size = yscale; |
677 size = yscale; |
598 |
678 |