Atoms Crowd  7.0.0
ImathBox.h
1 //
2 // SPDX-License-Identifier: BSD-3-Clause
3 // Copyright Contributors to the OpenEXR Project.
4 //
5 
6 //
7 // Axis-aligned bounding box
8 //
9 
10 #ifndef INCLUDED_ATOMSMATHBOX_H
11 #define INCLUDED_ATOMSMATHBOX_H
12 
13 #include <AtomsMath/ImathNamespace.h>
14 #include <AtomsMath/ImathVec.h>
15 
16 ATOMSMATH_INTERNAL_NAMESPACE_HEADER_ENTER
17 
34 
35 template <class V> class Box
36 {
37  public:
38 
41 
43  V min;
44 
46  V max;
47 
49 
52 
56  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box() noexcept;
57 
59  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const V& point) noexcept;
60 
62  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const V& minV, const V& maxV) noexcept;
63 
65 
68 
70  ATOMSMATH_HOSTDEVICE constexpr bool operator== (const Box<V>& src) const noexcept;
71 
73  ATOMSMATH_HOSTDEVICE constexpr bool operator!= (const Box<V>& src) const noexcept;
74 
76 
79 
83  ATOMSMATH_HOSTDEVICE void makeEmpty() noexcept;
84 
86  ATOMSMATH_HOSTDEVICE void extendBy (const V& point) noexcept;
87 
89  ATOMSMATH_HOSTDEVICE void extendBy (const Box<V>& box) noexcept;
90 
92  ATOMSMATH_HOSTDEVICE void makeInfinite() noexcept;
93 
95 
98 
102  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 V size() const noexcept;
103 
106  ATOMSMATH_HOSTDEVICE constexpr V center() const noexcept;
107 
109  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const V& point) const noexcept;
110 
112  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const Box<V>& box) const noexcept;
113 
116  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 unsigned int majorAxis() const noexcept;
117 
120  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isEmpty() const noexcept;
121 
123  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool hasVolume() const noexcept;
124 
128  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isInfinite() const noexcept;
129 
131 };
132 
133 //--------------------
134 // Convenient typedefs
135 //--------------------
136 
138 typedef Box<V2s> Box2s;
139 
141 typedef Box<V2i> Box2i;
142 typedef Box<V2i64> Box2i64;
143 
145 typedef Box<V2f> Box2f;
146 
148 typedef Box<V2d> Box2d;
149 
151 typedef Box<V3s> Box3s;
152 
154 typedef Box<V3i> Box3i;
155 typedef Box<V3i64> Box3i64;
156 
158 typedef Box<V3f> Box3f;
159 
161 typedef Box<V3d> Box3d;
162 
163 template <class V> ATOMSMATH_CONSTEXPR14 inline Box<V>::Box() noexcept
164 {
165  makeEmpty();
166 }
167 
168 template <class V> ATOMSMATH_CONSTEXPR14 inline Box<V>::Box (const V& point) noexcept
169 {
170  min = point;
171  max = point;
172 }
173 
174 template <class V> ATOMSMATH_CONSTEXPR14 inline Box<V>::Box (const V& minV, const V& maxV) noexcept
175 {
176  min = minV;
177  max = maxV;
178 }
179 
180 template <class V>
181 constexpr inline bool
182 Box<V>::operator== (const Box<V>& src) const noexcept
183 {
184  return (min == src.min && max == src.max);
185 }
186 
187 template <class V>
188 constexpr inline bool
189 Box<V>::operator!= (const Box<V>& src) const noexcept
190 {
191  return (min != src.min || max != src.max);
192 }
193 
194 template <class V>
195 inline void
197 {
198  min = V (V::baseTypeMax());
199  max = V (V::baseTypeLowest());
200 }
201 
202 template <class V>
203 inline void
205 {
206  min = V (V::baseTypeLowest());
207  max = V (V::baseTypeMax());
208 }
209 
210 template <class V>
211 inline void
212 Box<V>::extendBy (const V& point) noexcept
213 {
214  for (unsigned int i = 0; i < min.dimensions(); i++)
215  {
216  if (point[i] < min[i])
217  min[i] = point[i];
218 
219  if (point[i] > max[i])
220  max[i] = point[i];
221  }
222 }
223 
224 template <class V>
225 inline void
226 Box<V>::extendBy (const Box<V>& box) noexcept
227 {
228  for (unsigned int i = 0; i < min.dimensions(); i++)
229  {
230  if (box.min[i] < min[i])
231  min[i] = box.min[i];
232 
233  if (box.max[i] > max[i])
234  max[i] = box.max[i];
235  }
236 }
237 
238 template <class V>
239 ATOMSMATH_CONSTEXPR14 inline bool
240 Box<V>::intersects (const V& point) const noexcept
241 {
242  for (unsigned int i = 0; i < min.dimensions(); i++)
243  {
244  if (point[i] < min[i] || point[i] > max[i])
245  return false;
246  }
247 
248  return true;
249 }
250 
251 template <class V>
252 ATOMSMATH_CONSTEXPR14 inline bool
253 Box<V>::intersects (const Box<V>& box) const noexcept
254 {
255  for (unsigned int i = 0; i < min.dimensions(); i++)
256  {
257  if (box.max[i] < min[i] || box.min[i] > max[i])
258  return false;
259  }
260 
261  return true;
262 }
263 
264 template <class V>
265 ATOMSMATH_CONSTEXPR14 inline V
266 Box<V>::size() const noexcept
267 {
268  if (isEmpty())
269  return V (0);
270 
271  return max - min;
272 }
273 
274 template <class V>
275 constexpr inline V
276 Box<V>::center() const noexcept
277 {
278  return (max + min) / 2;
279 }
280 
281 template <class V>
282 ATOMSMATH_CONSTEXPR14 inline bool
283 Box<V>::isEmpty() const noexcept
284 {
285  for (unsigned int i = 0; i < min.dimensions(); i++)
286  {
287  if (max[i] < min[i])
288  return true;
289  }
290 
291  return false;
292 }
293 
294 template <class V>
295 ATOMSMATH_CONSTEXPR14 inline bool
296 Box<V>::isInfinite() const noexcept
297 {
298  for (unsigned int i = 0; i < min.dimensions(); i++)
299  {
300  if (min[i] != V::baseTypeLowest() || max[i] != V::baseTypeMax())
301  return false;
302  }
303 
304  return true;
305 }
306 
307 template <class V>
308 ATOMSMATH_CONSTEXPR14 inline bool
309 Box<V>::hasVolume() const noexcept
310 {
311  for (unsigned int i = 0; i < min.dimensions(); i++)
312  {
313  if (max[i] <= min[i])
314  return false;
315  }
316 
317  return true;
318 }
319 
320 template <class V>
321 ATOMSMATH_CONSTEXPR14 inline unsigned int
322 Box<V>::majorAxis() const noexcept
323 {
324  unsigned int major = 0;
325  V s = size();
326 
327  for (unsigned int i = 1; i < min.dimensions(); i++)
328  {
329  if (s[i] > s[major])
330  major = i;
331  }
332 
333  return major;
334 }
335 
336 //-------------------------------------------------------------------
337 //
338 // Partial class specializations for Imath::Vec2<T> and Imath::Vec3<T>
339 //
340 //-------------------------------------------------------------------
341 
342 template <typename V> class Box;
343 
349 
350 template <class T> class Box<Vec2<T>>
351 {
352  public:
353 
356 
359 
362 
364 
367 
369  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box() noexcept;
370 
372  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const Vec2<T>& point) noexcept;
373 
375  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const Vec2<T>& minT, const Vec2<T>& maxT) noexcept;
376 
378 
381 
383  ATOMSMATH_HOSTDEVICE constexpr bool operator== (const Box<Vec2<T>>& src) const noexcept;
384 
386  ATOMSMATH_HOSTDEVICE constexpr bool operator!= (const Box<Vec2<T>>& src) const noexcept;
387 
389 
392 
396  ATOMSMATH_HOSTDEVICE void makeEmpty() noexcept;
397 
399  ATOMSMATH_HOSTDEVICE void extendBy (const Vec2<T>& point) noexcept;
400 
402  ATOMSMATH_HOSTDEVICE void extendBy (const Box<Vec2<T>>& box) noexcept;
403 
405  ATOMSMATH_HOSTDEVICE void makeInfinite() noexcept;
406 
408 
411 
414  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Vec2<T> size() const noexcept;
415 
418  ATOMSMATH_HOSTDEVICE constexpr Vec2<T> center() const noexcept;
419 
421  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const Vec2<T>& point) const noexcept;
422 
424  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const Box<Vec2<T>>& box) const noexcept;
425 
428  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 unsigned int majorAxis() const noexcept;
429 
432  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isEmpty() const noexcept;
433 
435  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool hasVolume() const noexcept;
436 
440  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isInfinite() const noexcept;
441 
443 };
444 
445 //----------------
446 // Implementation
447 //----------------
448 
449 template <class T> ATOMSMATH_CONSTEXPR14 inline Box<Vec2<T>>::Box() noexcept
450 {
451  makeEmpty();
452 }
453 
454 template <class T> ATOMSMATH_CONSTEXPR14 inline Box<Vec2<T>>::Box (const Vec2<T>& point) noexcept
455 {
456  min = point;
457  max = point;
458 }
459 
460 template <class T>
461 ATOMSMATH_CONSTEXPR14 inline Box<Vec2<T>>::Box (const Vec2<T>& minT, const Vec2<T>& maxT) noexcept
462 {
463  min = minT;
464  max = maxT;
465 }
466 
467 template <class T>
468 constexpr inline bool
469 Box<Vec2<T>>::operator== (const Box<Vec2<T>>& src) const noexcept
470 {
471  return (min == src.min && max == src.max);
472 }
473 
474 template <class T>
475 constexpr inline bool
476 Box<Vec2<T>>::operator!= (const Box<Vec2<T>>& src) const noexcept
477 {
478  return (min != src.min || max != src.max);
479 }
480 
481 template <class T>
482 inline void
484 {
487 }
488 
489 template <class T>
490 inline void
492 {
495 }
496 
497 template <class T>
498 inline void
499 Box<Vec2<T>>::extendBy (const Vec2<T>& point) noexcept
500 {
501  if (point[0] < min[0])
502  min[0] = point[0];
503 
504  if (point[0] > max[0])
505  max[0] = point[0];
506 
507  if (point[1] < min[1])
508  min[1] = point[1];
509 
510  if (point[1] > max[1])
511  max[1] = point[1];
512 }
513 
514 template <class T>
515 inline void
516 Box<Vec2<T>>::extendBy (const Box<Vec2<T>>& box) noexcept
517 {
518  if (box.min[0] < min[0])
519  min[0] = box.min[0];
520 
521  if (box.max[0] > max[0])
522  max[0] = box.max[0];
523 
524  if (box.min[1] < min[1])
525  min[1] = box.min[1];
526 
527  if (box.max[1] > max[1])
528  max[1] = box.max[1];
529 }
530 
531 template <class T>
532 ATOMSMATH_CONSTEXPR14 inline bool
533 Box<Vec2<T>>::intersects (const Vec2<T>& point) const noexcept
534 {
535  if (point[0] < min[0] || point[0] > max[0] || point[1] < min[1] || point[1] > max[1])
536  return false;
537 
538  return true;
539 }
540 
541 template <class T>
542 ATOMSMATH_CONSTEXPR14 inline bool
543 Box<Vec2<T>>::intersects (const Box<Vec2<T>>& box) const noexcept
544 {
545  if (box.max[0] < min[0] || box.min[0] > max[0] || box.max[1] < min[1] || box.min[1] > max[1])
546  return false;
547 
548  return true;
549 }
550 
551 template <class T>
552 ATOMSMATH_CONSTEXPR14 inline Vec2<T>
553 Box<Vec2<T>>::size() const noexcept
554 {
555  if (isEmpty())
556  return Vec2<T> (0);
557 
558  return max - min;
559 }
560 
561 template <class T>
562 constexpr inline Vec2<T>
563 Box<Vec2<T>>::center() const noexcept
564 {
565  return (max + min) / 2;
566 }
567 
568 template <class T>
569 ATOMSMATH_CONSTEXPR14 inline bool
570 Box<Vec2<T>>::isEmpty() const noexcept
571 {
572  if (max[0] < min[0] || max[1] < min[1])
573  return true;
574 
575  return false;
576 }
577 
578 template <class T>
579 ATOMSMATH_CONSTEXPR14 inline bool
580 Box<Vec2<T>>::isInfinite() const noexcept
581 {
582  if (min[0] != std::numeric_limits<T>::lowest() ||
583  max[0] != std::numeric_limits<T>::max() ||
584  min[1] != std::numeric_limits<T>::lowest() ||
585  max[1] != std::numeric_limits<T>::max())
586  return false;
587 
588  return true;
589 }
590 
591 template <class T>
592 ATOMSMATH_CONSTEXPR14 inline bool
593 Box<Vec2<T>>::hasVolume() const noexcept
594 {
595  if (max[0] <= min[0] || max[1] <= min[1])
596  return false;
597 
598  return true;
599 }
600 
601 template <class T>
602 ATOMSMATH_CONSTEXPR14 inline unsigned int
603 Box<Vec2<T>>::majorAxis() const noexcept
604 {
605  unsigned int major = 0;
606  Vec2<T> s = size();
607 
608  if (s[1] > s[major])
609  major = 1;
610 
611  return major;
612 }
613 
618 template <class T> class Box<Vec3<T>>
619 {
620  public:
621 
624 
627 
630 
632 
635 
637  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box() noexcept;
638 
640  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const Vec3<T>& point) noexcept;
641 
643  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box (const Vec3<T>& minT, const Vec3<T>& maxT) noexcept;
644 
646 
648  ATOMSMATH_HOSTDEVICE constexpr bool operator== (const Box<Vec3<T>>& src) const noexcept;
649 
651  ATOMSMATH_HOSTDEVICE constexpr bool operator!= (const Box<Vec3<T>>& src) const noexcept;
652 
656  ATOMSMATH_HOSTDEVICE void makeEmpty() noexcept;
657 
659  ATOMSMATH_HOSTDEVICE void extendBy (const Vec3<T>& point) noexcept;
661 
662  ATOMSMATH_HOSTDEVICE void extendBy (const Box<Vec3<T>>& box) noexcept;
663 
665  ATOMSMATH_HOSTDEVICE void makeInfinite() noexcept;
666 
669  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Vec3<T> size() const noexcept;
670 
673  ATOMSMATH_HOSTDEVICE constexpr Vec3<T> center() const noexcept;
674 
676  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const Vec3<T>& point) const noexcept;
677 
679  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects (const Box<Vec3<T>>& box) const noexcept;
680 
683  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 unsigned int majorAxis() const noexcept;
684 
687  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isEmpty() const noexcept;
688 
690  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool hasVolume() const noexcept;
691 
695  ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isInfinite() const noexcept;
696 };
697 
698 //----------------
699 // Implementation
700 //----------------
701 
702 template <class T> ATOMSMATH_CONSTEXPR14 inline Box<Vec3<T>>::Box() noexcept
703 {
704  makeEmpty();
705 }
706 
707 template <class T> ATOMSMATH_CONSTEXPR14 inline Box<Vec3<T>>::Box (const Vec3<T>& point) noexcept
708 {
709  min = point;
710  max = point;
711 }
712 
713 template <class T>
714 ATOMSMATH_CONSTEXPR14 inline Box<Vec3<T>>::Box (const Vec3<T>& minT, const Vec3<T>& maxT) noexcept
715 {
716  min = minT;
717  max = maxT;
718 }
719 
720 template <class T>
721 constexpr inline bool
722 Box<Vec3<T>>::operator== (const Box<Vec3<T>>& src) const noexcept
723 {
724  return (min == src.min && max == src.max);
725 }
726 
727 template <class T>
728 constexpr inline bool
729 Box<Vec3<T>>::operator!= (const Box<Vec3<T>>& src) const noexcept
730 {
731  return (min != src.min || max != src.max);
732 }
733 
734 template <class T>
735 inline void
737 {
740 }
741 
742 template <class T>
743 inline void
745 {
748 }
749 
750 template <class T>
751 inline void
752 Box<Vec3<T>>::extendBy (const Vec3<T>& point) noexcept
753 {
754  if (point[0] < min[0])
755  min[0] = point[0];
756 
757  if (point[0] > max[0])
758  max[0] = point[0];
759 
760  if (point[1] < min[1])
761  min[1] = point[1];
762 
763  if (point[1] > max[1])
764  max[1] = point[1];
765 
766  if (point[2] < min[2])
767  min[2] = point[2];
768 
769  if (point[2] > max[2])
770  max[2] = point[2];
771 }
772 
773 template <class T>
774 inline void
775 Box<Vec3<T>>::extendBy (const Box<Vec3<T>>& box) noexcept
776 {
777  if (box.min[0] < min[0])
778  min[0] = box.min[0];
779 
780  if (box.max[0] > max[0])
781  max[0] = box.max[0];
782 
783  if (box.min[1] < min[1])
784  min[1] = box.min[1];
785 
786  if (box.max[1] > max[1])
787  max[1] = box.max[1];
788 
789  if (box.min[2] < min[2])
790  min[2] = box.min[2];
791 
792  if (box.max[2] > max[2])
793  max[2] = box.max[2];
794 }
795 
796 template <class T>
797 ATOMSMATH_CONSTEXPR14 inline bool
798 Box<Vec3<T>>::intersects (const Vec3<T>& point) const noexcept
799 {
800  if (point[0] < min[0] || point[0] > max[0] || point[1] < min[1] || point[1] > max[1] ||
801  point[2] < min[2] || point[2] > max[2])
802  return false;
803 
804  return true;
805 }
806 
807 template <class T>
808 ATOMSMATH_CONSTEXPR14 inline bool
809 Box<Vec3<T>>::intersects (const Box<Vec3<T>>& box) const noexcept
810 {
811  if (box.max[0] < min[0] || box.min[0] > max[0] || box.max[1] < min[1] || box.min[1] > max[1] ||
812  box.max[2] < min[2] || box.min[2] > max[2])
813  return false;
814 
815  return true;
816 }
817 
818 template <class T>
819 ATOMSMATH_CONSTEXPR14 inline Vec3<T>
820 Box<Vec3<T>>::size() const noexcept
821 {
822  if (isEmpty())
823  return Vec3<T> (0);
824 
825  return max - min;
826 }
827 
828 template <class T>
829 constexpr inline Vec3<T>
830 Box<Vec3<T>>::center() const noexcept
831 {
832  return (max + min) / 2;
833 }
834 
835 template <class T>
836 ATOMSMATH_CONSTEXPR14 inline bool
837 Box<Vec3<T>>::isEmpty() const noexcept
838 {
839  if (max[0] < min[0] || max[1] < min[1] || max[2] < min[2])
840  return true;
841 
842  return false;
843 }
844 
845 template <class T>
846 ATOMSMATH_CONSTEXPR14 inline bool
847 Box<Vec3<T>>::isInfinite() const noexcept
848 {
849  if (min[0] != std::numeric_limits<T>::lowest() ||
850  max[0] != std::numeric_limits<T>::max() ||
851  min[1] != std::numeric_limits<T>::lowest() ||
852  max[1] != std::numeric_limits<T>::max() ||
853  min[2] != std::numeric_limits<T>::lowest() ||
854  max[2] != std::numeric_limits<T>::max())
855  return false;
856 
857  return true;
858 }
859 
860 template <class T>
861 ATOMSMATH_CONSTEXPR14 inline bool
862 Box<Vec3<T>>::hasVolume() const noexcept
863 {
864  if (max[0] <= min[0] || max[1] <= min[1] || max[2] <= min[2])
865  return false;
866 
867  return true;
868 }
869 
870 template <class T>
871 ATOMSMATH_CONSTEXPR14 inline unsigned int
872 Box<Vec3<T>>::majorAxis() const noexcept
873 {
874  unsigned int major = 0;
875  Vec3<T> s = size();
876 
877  if (s[1] > s[major])
878  major = 1;
879 
880  if (s[2] > s[major])
881  major = 2;
882 
883  return major;
884 }
885 
886 ATOMSMATH_INTERNAL_NAMESPACE_HEADER_EXIT
887 
888 #endif // INCLUDED_ATOMSMATHBOX_H
Vec2< T > max
The maximum value of the box.
Definition: ImathBox.h:361
Vec2< T > min
The minimum value of the box.
Definition: ImathBox.h:358
Vec3< T > min
The minimum value of the box.
Definition: ImathBox.h:626
Vec3< T > max
The maximum value of the box.
Definition: ImathBox.h:629
Definition: ImathBox.h:36
ATOMSMATH_HOSTDEVICE void extendBy(const V &point) noexcept
Extend the box to include the given point.
Definition: ImathBox.h:212
V min
The minimum value of the box.
Definition: ImathBox.h:43
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 unsigned int majorAxis() const noexcept
Definition: ImathBox.h:322
V max
The maximum value of the box.
Definition: ImathBox.h:46
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool hasVolume() const noexcept
Return true if the box is larger than a single point, false otherwise.
Definition: ImathBox.h:309
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool intersects(const V &point) const noexcept
Return true if the given point is inside the box, false otherwise.
Definition: ImathBox.h:240
ATOMSMATH_HOSTDEVICE void makeInfinite() noexcept
Make the box include the entire range of V.
Definition: ImathBox.h:204
constexpr ATOMSMATH_HOSTDEVICE V center() const noexcept
Definition: ImathBox.h:276
constexpr ATOMSMATH_HOSTDEVICE bool operator==(const Box< V > &src) const noexcept
Equality.
Definition: ImathBox.h:182
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 V size() const noexcept
Definition: ImathBox.h:266
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isEmpty() const noexcept
Definition: ImathBox.h:283
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 Box() noexcept
Definition: ImathBox.h:163
constexpr ATOMSMATH_HOSTDEVICE bool operator!=(const Box< V > &src) const noexcept
Inequality.
Definition: ImathBox.h:189
ATOMSMATH_HOSTDEVICE void makeEmpty() noexcept
Definition: ImathBox.h:196
ATOMSMATH_HOSTDEVICE ATOMSMATH_CONSTEXPR14 bool isInfinite() const noexcept
Definition: ImathBox.h:296
Definition: ImathVec.h:43
Definition: ImathVec.h:260