You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: An axis aligned bounding box class. |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef BOUNDBOX_H |
|
#define BOUNDBOX_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "mathlib/vector.h" |
|
|
|
#define COORD_NOTINIT ((float)(99999.0)) |
|
|
|
enum |
|
{ |
|
AXIS_X = 0, |
|
AXIS_Y, |
|
AXIS_Z |
|
}; |
|
|
|
class BoundBox |
|
{ |
|
public: |
|
|
|
BoundBox(void); |
|
BoundBox(const Vector &mins, const Vector &maxs); |
|
|
|
void ResetBounds(void); |
|
inline void SetBounds(const Vector &mins, const Vector &maxs); |
|
|
|
void UpdateBounds(const Vector& bmins, const Vector& bmaxs); |
|
void UpdateBounds(const Vector& pt); |
|
void UpdateBounds(const BoundBox *pBox); |
|
void GetBoundsCenter(Vector& ptdest); |
|
inline void GetBounds(Vector& Mins, Vector& Maxs); |
|
|
|
virtual bool IsIntersectingBox(const Vector& pfMins, const Vector& pfMaxs) const; |
|
bool IsInsideBox(const Vector& pfMins, const Vector& pfMaxs) const; |
|
bool ContainsPoint(const Vector& pt) const; |
|
bool IsValidBox(void) const; |
|
void GetBoundsSize(Vector& size); |
|
void SnapToGrid(int iGridSize); |
|
void Rotate90(int axis); |
|
|
|
Vector bmins; |
|
Vector bmaxs; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Gets the bounding box as two vectors, a min and a max. |
|
// Input : Mins - Receives the box's minima. |
|
// Maxs - Receives the box's maxima. |
|
//----------------------------------------------------------------------------- |
|
void BoundBox::GetBounds(Vector &Mins, Vector &Maxs) |
|
{ |
|
Mins = bmins; |
|
Maxs = bmaxs; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets the box outright, equivalent to ResetBounds + UpdateBounds. |
|
// Input : mins - Minima to set. |
|
// maxs - Maxima to set. |
|
//----------------------------------------------------------------------------- |
|
void BoundBox::SetBounds(const Vector &mins, const Vector &maxs) |
|
{ |
|
bmins = mins; |
|
bmaxs = maxs; |
|
} |
|
|
|
|
|
#endif // BOUNDBOX_H
|
|
|