| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | 
							- // Copyright (C) 2000  Sean Cavanaugh
 
- // This file is licensed under the terms of the Lesser GNU Public License
 
- // (see LPGL.txt, or http://www.gnu.org/copyleft/lesser.txt)
 
- // AJM:
 
- #ifdef SYSTEM_WIN32
 
- #pragma warning(disable:4305) // truncation from 'const double' to 'float'
 
- #endif
 
- #ifndef BOUNDINGBOX_H__
 
- #define BOUNDINGBOX_H__
 
- #if _MSC_VER >= 1000
 
- #pragma once
 
- #endif
 
- class BoundingBox
 
- {
 
- public:
 
-     typedef enum
 
-     {
 
-         eDisjoint,      // neither boxes touch
 
-         eUnion,         // this box intersects with the other box
 
-         eSubset,        // this box is inside the other box
 
-         eSuperset       // this box is completly envelops the other box
 
-     } eBoundingState;
 
-     // Tests if other box is completely outside of this box
 
-     bool testDisjoint(const BoundingBox& other) const
 
-     {
 
-         if ((m_Mins[0] > other.m_Maxs[0]) ||
 
-             (m_Mins[1] > other.m_Maxs[1]) ||
 
-             (m_Mins[2] > other.m_Maxs[2]) ||
 
-             (m_Maxs[0] < other.m_Mins[0]) ||
 
-             (m_Maxs[1] < other.m_Mins[1]) ||
 
-             (m_Maxs[2] < other.m_Mins[2]))
 
-         {
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     // returns true if this box is completely inside other box
 
-     bool testSubset(const BoundingBox& other) const
 
-     {
 
-         if (
 
-                 (m_Mins[0] >= other.m_Mins[0]) &&
 
-                 (m_Maxs[0] <= other.m_Maxs[0]) &&
 
-                 (m_Mins[1] >= other.m_Mins[1]) &&
 
-                 (m_Maxs[1] <= other.m_Maxs[1]) &&
 
-                 (m_Mins[2] >= other.m_Mins[2]) &&
 
-                 (m_Maxs[2] <= other.m_Maxs[2])
 
-            )
 
-         {
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     // returns true if this box contains the other box completely
 
-     bool testSuperset(const BoundingBox& other) const
 
-     {
 
-         return other.testSubset(*this);
 
-     }
 
-     // returns true if this box partially intersects the other box
 
-     bool testUnion(const BoundingBox& other) const
 
-     {
 
-         BoundingBox tmpBox;
 
-         tmpBox.m_Mins[0] = max(m_Mins[0], other.m_Mins[0]);
 
-         tmpBox.m_Mins[1] = max(m_Mins[1], other.m_Mins[1]);
 
-         tmpBox.m_Mins[2] = max(m_Mins[2], other.m_Mins[2]);
 
-         tmpBox.m_Maxs[0] = min(m_Maxs[0], other.m_Maxs[0]);
 
-         tmpBox.m_Maxs[1] = min(m_Maxs[1], other.m_Maxs[1]);
 
-         tmpBox.m_Maxs[2] = min(m_Maxs[2], other.m_Maxs[2]);
 
-         if ((tmpBox.m_Mins[0] > tmpBox.m_Maxs[0]) ||
 
-             (tmpBox.m_Mins[1] > tmpBox.m_Maxs[1]) ||
 
-             (tmpBox.m_Mins[2] > tmpBox.m_Maxs[2]))
 
-         {
 
-             return false;
 
-         }   
 
-         return true;
 
-     }
 
-     eBoundingState test(const BoundingBox& other) const
 
-     {
 
-         eBoundingState rval;
 
-         if (testDisjoint(other))
 
-         {
 
-             rval = eDisjoint;
 
-         }
 
-         else if (testSubset(other))
 
-         {
 
-             rval = eSubset;
 
-         }
 
-         else if (testSuperset(other))
 
-         {
 
-             rval = eSuperset;
 
-         }
 
-         else
 
-         {
 
-             rval = eUnion;
 
-         }
 
-         return rval;
 
-     }
 
-     void set(const vec3_t mins, const vec3_t maxs)
 
-     {
 
-         VectorCopy(mins, m_Mins);
 
-         VectorCopy(maxs, m_Maxs);
 
-     }
 
-     void reset()
 
-     {
 
-         VectorFill(m_Mins,  999999999.999);
 
-         VectorFill(m_Maxs, -999999999.999);
 
-     }
 
-     void add(const vec3_t point)
 
-     {
 
-         m_Mins[0] = min(m_Mins[0], point[0]);
 
-         m_Maxs[0] = max(m_Maxs[0], point[0]);
 
-         m_Mins[1] = min(m_Mins[1], point[1]);
 
-         m_Maxs[1] = max(m_Maxs[1], point[1]);
 
-         m_Mins[2] = min(m_Mins[2], point[2]);
 
-         m_Maxs[2] = max(m_Maxs[2], point[2]);
 
-     }
 
-     void add(const BoundingBox& other)
 
-     {
 
-         add(other.m_Mins);
 
-         add(other.m_Maxs);
 
-     }
 
- public:
 
-     // BoundingBox(const BoundingBox& other) // Default copy constructor ok
 
-     // BoundingBox& operator=(const BoundingBox& other); // Default copy operator ok
 
-     BoundingBox()
 
-     {
 
-         reset();
 
-     }
 
-     BoundingBox(const vec3_t& mins, const vec3_t& maxs)
 
-     {
 
-         VectorCopy(mins, m_Mins);
 
-         VectorCopy(maxs, m_Maxs);
 
-     }
 
-     ~BoundingBox() {}
 
- public:
 
-     // Bounding box
 
-     vec3_t m_Mins;
 
-     vec3_t m_Maxs;
 
- };
 
- #endif//BOUNDINGBOX_H__
 
 
  |