1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
// // SPDX-License-Identifier: BSD-3-Clause // Copyright Contributors to the OpenEXR Project. // // // Axis-aligned bounding box // #ifndef INCLUDED_IMATHBOX_H #define INCLUDED_IMATHBOX_H #include "ImathExport.h" #include "ImathNamespace.h" #include "ImathVec.h" IMATH_INTERNAL_NAMESPACE_HEADER_ENTER /// /// The `Box` template represents an axis-aligned bounding box defined by /// minimum and maximum values of type `V`. The `min` and `max` members are /// public. /// /// The type `V` is typically an Imath vector (i.e. `V2i`, `V3f`, etc) and must /// implement an index `operator[]` that returns a type (typically as scalar) /// that supports assignment, comparison, and arithmetic operators. /// /// `V` must also provide a constructor that takes a float and/or double for /// use in initializing the box. /// /// `V` must also provide a function `V::dimensions()` which returns the /// number of dimensions in the class (since its assumed its a vector) -- /// preferably, this returns a constant expression, typically 2 or 3. /// template class IMATH_EXPORT_TEMPLATE_TYPE Box { public: /// @{ /// @name Direct access to bounds /// The minimum value of the box. V min; /// The maximum value of the box. V max; /// @} /// @{ /// @name Constructors /// Construct an empty bounding box. This initializes the mimimum to /// std::numeric_limits::max() and the maximum to /// std::numeric_limits::lowest(). IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; /// Construct a bounding box that contains a single point. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const V& point) IMATH_NOEXCEPT; /// Construct a bounding box with the given minimum and maximum values. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const V& minV, const V& maxV) IMATH_NOEXCEPT; /// @} /// @{ /// @name Comparison /// Equality IMATH_HOSTDEVICE constexpr bool operator== (const Box& src) const IMATH_NOEXCEPT; /// Inequality IMATH_HOSTDEVICE constexpr bool operator!= (const Box& src) const IMATH_NOEXCEPT; /// @} /// @{ /// @name Manipulation /// Set the box to be empty. A box is empty if the mimimum is greater /// than the maximum. makeEmpty() sets the mimimum to `V::baseTypeMax()` /// and the maximum to `V::baseTypeLowest()`. IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; /// Extend the box to include the given point. IMATH_HOSTDEVICE void extendBy (const V& point) IMATH_NOEXCEPT; /// Extend the box to include the given box. IMATH_HOSTDEVICE void extendBy (const Box& box) IMATH_NOEXCEPT; /// Make the box include the entire range of `V`. IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; /// @} /// @{ /// @name Query /// Return the size of the box. The size is of type `V`, defined /// as `(max-min)`. An empty box has a size of `V(0)`, i.e. 0 in /// each dimension. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 V size () const IMATH_NOEXCEPT; /// Return the center of the box. The center is defined as /// `(max+min)/2`. The center of an empty box is undefined. IMATH_HOSTDEVICE constexpr V center () const IMATH_NOEXCEPT; /// Return true if the given point is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const V& point) const IMATH_NOEXCEPT; /// Return true if the given box is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const Box& box) const IMATH_NOEXCEPT; /// Return the major axis of the box. The major axis is the dimension with /// the greatest difference between maximum and minimum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int majorAxis () const IMATH_NOEXCEPT; /// Return true if the box is empty, false otherwise. An empty box's /// minimum is greater than its maximum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; /// Return true if the box is larger than a single point, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; /// Return true if the box contains all points, false otherwise. /// An infinite box has a mimimum of`V::baseTypeLowest()` /// and a maximum of `V::baseTypeMax()`. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; /// @} }; //-------------------- // Convenient typedefs //-------------------- /// 2D box of base type `short`. typedef Box Box2s; /// 2D box of base type `int`. typedef Box Box2i; /// 2D box of base type `int64_t`. typedef Box Box2i64; /// 2D box of base type `half`. typedef Box Box2h; /// 2D box of base type `float`. typedef Box Box2f; /// 2D box of base type `double`. typedef Box Box2d; /// 3D box of base type `short`. typedef Box Box3s; /// 3D box of base type `int`. typedef Box Box3i; /// 3D box of base type `int64_t`. typedef Box Box3i64; /// 3D box of base type `half`. typedef Box Box3h; /// 3D box of base type `float`. typedef Box Box3f; /// 3D box of base type `double`. typedef Box Box3d; template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box::Box () IMATH_NOEXCEPT { makeEmpty (); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box::Box (const V& point) IMATH_NOEXCEPT { min = point; max = point; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box::Box ( const V& minV, const V& maxV) IMATH_NOEXCEPT { min = minV; max = maxV; } template IMATH_HOSTDEVICE constexpr inline bool Box::operator== (const Box& src) const IMATH_NOEXCEPT { return (min == src.min && max == src.max); } template IMATH_HOSTDEVICE constexpr inline bool Box::operator!= (const Box& src) const IMATH_NOEXCEPT { return (min != src.min || max != src.max); } template IMATH_HOSTDEVICE inline void Box::makeEmpty () IMATH_NOEXCEPT { min = V (V::baseTypeMax ()); max = V (V::baseTypeLowest ()); } template IMATH_HOSTDEVICE inline void Box::makeInfinite () IMATH_NOEXCEPT { min = V (V::baseTypeLowest ()); max = V (V::baseTypeMax ()); } template IMATH_HOSTDEVICE inline void Box::extendBy (const V& point) IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (point[i] < min[i]) min[i] = point[i]; if (point[i] > max[i]) max[i] = point[i]; } } template IMATH_HOSTDEVICE inline void Box::extendBy (const Box& box) IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (box.min[i] < min[i]) min[i] = box.min[i]; if (box.max[i] > max[i]) max[i] = box.max[i]; } } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box::intersects (const V& point) const IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (point[i] < min[i] || point[i] > max[i]) return false; } return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box::intersects (const Box& box) const IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (box.max[i] < min[i] || box.min[i] > max[i]) return false; } return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline V Box::size () const IMATH_NOEXCEPT { if (isEmpty ()) return V (0); return max - min; } template IMATH_HOSTDEVICE constexpr inline V Box::center () const IMATH_NOEXCEPT { return (max + min) / 2; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box::isEmpty () const IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (max[i] < min[i]) return true; } return false; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box::isInfinite () const IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (min[i] != V::baseTypeLowest () || max[i] != V::baseTypeMax ()) return false; } return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box::hasVolume () const IMATH_NOEXCEPT { for (unsigned int i = 0; i < min.dimensions (); i++) { if (max[i] <= min[i]) return false; } return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int Box::majorAxis () const IMATH_NOEXCEPT { unsigned int major = 0; V s = size (); for (unsigned int i = 1; i < min.dimensions (); i++) { if (s[i] > s[major]) major = i; } return major; } //------------------------------------------------------------------- // // Partial class specializations for Imath::Vec2 and Imath::Vec3 // //------------------------------------------------------------------- template class Box; /// /// The Box> template represents a 2D bounding box defined by /// minimum and maximum values of type Vec2. The min and max members are /// public. /// template class IMATH_EXPORT_TEMPLATE_TYPE Box> { public: /// @{ /// @name Direct access to bounds /// The minimum value of the box. Vec2 min; /// The maximum value of the box. Vec2 max; /// @} /// @{ /// @name Constructors and Assignment /// Empty by default IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; /// Construct a bounding box that contains a single point. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec2& point) IMATH_NOEXCEPT; /// Construct a bounding box with the given minimum and maximum points IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec2& minT, const Vec2& maxT) IMATH_NOEXCEPT; /// @} /// @{ /// @name Comparison /// Equality IMATH_HOSTDEVICE constexpr bool operator== (const Box>& src) const IMATH_NOEXCEPT; /// Inequality IMATH_HOSTDEVICE constexpr bool operator!= (const Box>& src) const IMATH_NOEXCEPT; /// @} /// @{ /// @name Manipulation /// Set the Box to be empty. A Box is empty if the mimimum is /// greater than the maximum. makeEmpty() sets the mimimum to /// std::numeric_limits::max() and the maximum to /// std::numeric_limits::lowest(). IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; /// Extend the Box to include the given point. IMATH_HOSTDEVICE void extendBy (const Vec2& point) IMATH_NOEXCEPT; /// Extend the Box to include the given box. IMATH_HOSTDEVICE void extendBy (const Box>& box) IMATH_NOEXCEPT; /// Make the box include the entire range of T. IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; /// @} /// @{ /// @name Query /// Return the size of the box. The size is of type `V`, defined as /// `(max-min)`. An empty box has a size of `V(0)`, i.e. 0 in each dimension. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec2 size () const IMATH_NOEXCEPT; /// Return the center of the box. The center is defined as /// `(max+min)/2`. The center of an empty box is undefined. IMATH_HOSTDEVICE constexpr Vec2 center () const IMATH_NOEXCEPT; /// Return true if the given point is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const Vec2& point) const IMATH_NOEXCEPT; /// Return true if the given box is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const Box>& box) const IMATH_NOEXCEPT; /// Return the major axis of the box. The major axis is the dimension with /// the greatest difference between maximum and minimum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int majorAxis () const IMATH_NOEXCEPT; /// Return true if the box is empty, false otherwise. An empty box's /// minimum is greater than its maximum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; /// Return true if the box is larger than a single point, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; /// Return true if the box contains all points, false otherwise. /// An infinite box has a mimimum of `V::baseTypeMin()` /// and a maximum of `V::baseTypeMax()`. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; /// @} }; //---------------- // Implementation //---------------- template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box () IMATH_NOEXCEPT { makeEmpty (); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( const Vec2& point) IMATH_NOEXCEPT { min = point; max = point; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( const Vec2& minT, const Vec2& maxT) IMATH_NOEXCEPT { min = minT; max = maxT; } template IMATH_HOSTDEVICE constexpr inline bool Box>::operator== (const Box>& src) const IMATH_NOEXCEPT { return (min == src.min && max == src.max); } template IMATH_HOSTDEVICE constexpr inline bool Box>::operator!= (const Box>& src) const IMATH_NOEXCEPT { return (min != src.min || max != src.max); } template IMATH_HOSTDEVICE inline void Box>::makeEmpty () IMATH_NOEXCEPT { min = Vec2 (Vec2::baseTypeMax ()); max = Vec2 (Vec2::baseTypeLowest ()); } template IMATH_HOSTDEVICE inline void Box>::makeInfinite () IMATH_NOEXCEPT { min = Vec2 (Vec2::baseTypeLowest ()); max = Vec2 (Vec2::baseTypeMax ()); } template IMATH_HOSTDEVICE inline void Box>::extendBy (const Vec2& point) IMATH_NOEXCEPT { min.x = std::min (min.x, point.x); max.x = std::max (max.x, point.x); min.y = std::min (min.y, point.y); max.y = std::max (max.y, point.y); } template IMATH_HOSTDEVICE inline void Box>::extendBy (const Box>& box) IMATH_NOEXCEPT { min.x = std::min (min.x, box.min.x); max.x = std::max (max.x, box.max.x); min.y = std::min (min.y, box.min.y); max.y = std::max (max.y, box.max.y); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::intersects (const Vec2& point) const IMATH_NOEXCEPT { return (point.x >= min.x) && (point.x <= max.x) && (point.y >= min.y) && (point.y <= max.y); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::intersects (const Box>& box) const IMATH_NOEXCEPT { return (box.min.x <= max.x) && (box.max.x >= min.x) && (box.min.y <= max.y) && (box.max.y >= min.y); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec2 Box>::size () const IMATH_NOEXCEPT { if (isEmpty ()) return Vec2 (0); return max - min; } template IMATH_HOSTDEVICE constexpr inline Vec2 Box>::center () const IMATH_NOEXCEPT { return (max + min) / 2; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::isEmpty () const IMATH_NOEXCEPT { return (max.x < min.x || max.y < min.y); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::isInfinite () const IMATH_NOEXCEPT { if (min.x != std::numeric_limits::lowest () || max.x != std::numeric_limits::max () || min.y != std::numeric_limits::lowest () || max.y != std::numeric_limits::max ()) return false; return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::hasVolume () const IMATH_NOEXCEPT { if (max.x <= min.x || max.y <= min.y) return false; return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int Box>::majorAxis () const IMATH_NOEXCEPT { Vec2 s = size (); return (s.x >= s.y) ? 0 : 1; } /// /// The Box template represents a 3D bounding box defined by /// minimum and maximum values of type Vec3. /// template class IMATH_EXPORT_TEMPLATE_TYPE Box> { public: /// @{ /// @name Direct access to bounds /// The minimum value of the box. Vec3 min; /// The maximum value of the box. Vec3 max; /// @} /// @{ /// @name Constructors /// Empty by default IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; /// Construct a bounding box that contains a single point. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec3& point) IMATH_NOEXCEPT; /// Construct a bounding box with the given minimum and maximum points IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec3& minT, const Vec3& maxT) IMATH_NOEXCEPT; /// @} /// Equality IMATH_HOSTDEVICE constexpr bool operator== (const Box>& src) const IMATH_NOEXCEPT; /// Inequality IMATH_HOSTDEVICE constexpr bool operator!= (const Box>& src) const IMATH_NOEXCEPT; /// Set the Box to be empty. A Box is empty if the mimimum is /// greater than the maximum. makeEmpty() sets the mimimum to /// std::numeric_limits::max() and the maximum to /// std::numeric_limits::lowest(). IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; /// Extend the Box to include the given point. IMATH_HOSTDEVICE void extendBy (const Vec3& point) IMATH_NOEXCEPT; /// Extend the Box to include the given box. IMATH_HOSTDEVICE void extendBy (const Box>& box) IMATH_NOEXCEPT; /// Make the box include the entire range of T. IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; /// Return the size of the box. The size is of type `V`, defined as /// (max-min). An empty box has a size of V(0), i.e. 0 in each dimension. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 size () const IMATH_NOEXCEPT; /// Return the center of the box. The center is defined as /// (max+min)/2. The center of an empty box is undefined. IMATH_HOSTDEVICE constexpr Vec3 center () const IMATH_NOEXCEPT; /// Return true if the given point is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const Vec3& point) const IMATH_NOEXCEPT; /// Return true if the given box is inside the box, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersects (const Box>& box) const IMATH_NOEXCEPT; /// Return the major axis of the box. The major axis is the dimension with /// the greatest difference between maximum and minimum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int majorAxis () const IMATH_NOEXCEPT; /// Return true if the box is empty, false otherwise. An empty box's /// minimum is greater than its maximum. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; /// Return true if the box is larger than a single point, false otherwise. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; /// Return true if the box contains all points, false otherwise. /// An infinite box has a mimimum of`V::baseTypeMin()` /// and a maximum of `V::baseTypeMax()`. IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; }; //---------------- // Implementation //---------------- template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box () IMATH_NOEXCEPT { makeEmpty (); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( const Vec3& point) IMATH_NOEXCEPT { min = point; max = point; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( const Vec3& minT, const Vec3& maxT) IMATH_NOEXCEPT { min = minT; max = maxT; } template IMATH_HOSTDEVICE constexpr inline bool Box>::operator== (const Box>& src) const IMATH_NOEXCEPT { return (min == src.min && max == src.max); } template IMATH_HOSTDEVICE constexpr inline bool Box>::operator!= (const Box>& src) const IMATH_NOEXCEPT { return (min != src.min || max != src.max); } template IMATH_HOSTDEVICE inline void Box>::makeEmpty () IMATH_NOEXCEPT { min = Vec3 (Vec3::baseTypeMax ()); max = Vec3 (Vec3::baseTypeLowest ()); } template IMATH_HOSTDEVICE inline void Box>::makeInfinite () IMATH_NOEXCEPT { min = Vec3 (Vec3::baseTypeLowest ()); max = Vec3 (Vec3::baseTypeMax ()); } template IMATH_HOSTDEVICE inline void Box>::extendBy (const Vec3& point) IMATH_NOEXCEPT { min.x = std::min (min.x, point.x); min.y = std::min (min.y, point.y); min.z = std::min (min.z, point.z); max.x = std::max (max.x, point.x); max.y = std::max (max.y, point.y); max.z = std::max (max.z, point.z); } template IMATH_HOSTDEVICE inline void Box>::extendBy (const Box>& box) IMATH_NOEXCEPT { min.x = std::min (min.x, box.min.x); min.y = std::min (min.y, box.min.y); min.z = std::min (min.z, box.min.z); max.x = std::max (max.x, box.max.x); max.y = std::max (max.y, box.max.y); max.z = std::max (max.z, box.max.z); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::intersects (const Vec3& point) const IMATH_NOEXCEPT { return (point.x >= min.x) && (point.x <= max.x) && (point.y >= min.y) && (point.y <= max.y) && (point.z >= min.z) && (point.z <= max.z); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::intersects (const Box>& box) const IMATH_NOEXCEPT { return (box.min.x <= max.x) && (box.max.x >= min.x) && (box.min.y <= max.y) && (box.max.y >= min.y) && (box.min.z <= max.z) && (box.max.z >= min.z); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec3 Box>::size () const IMATH_NOEXCEPT { if (isEmpty ()) return Vec3 (0); return max - min; } template IMATH_HOSTDEVICE constexpr inline Vec3 Box>::center () const IMATH_NOEXCEPT { return (max + min) / 2; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::isEmpty () const IMATH_NOEXCEPT { return (max.x < min.x || max.y < min.y || max.z < min.z); } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::isInfinite () const IMATH_NOEXCEPT { if (min.x != std::numeric_limits::lowest () || max.x != std::numeric_limits::max () || min.y != std::numeric_limits::lowest () || max.y != std::numeric_limits::max () || min.z != std::numeric_limits::lowest () || max.z != std::numeric_limits::max ()) return false; return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool Box>::hasVolume () const IMATH_NOEXCEPT { if (max.x <= min.x || max.y <= min.y || max.z <= min.z) return false; return true; } template IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int Box>::majorAxis () const IMATH_NOEXCEPT { Vec3 s = size (); if (s.x >= s.y) return (s.x >= s.z) ? 0 : 2; return (s.y >= s.z) ? 1 : 2; } IMATH_INTERNAL_NAMESPACE_HEADER_EXIT #endif // INCLUDED_IMATHBOX_H