00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef FXRANGED_H
00025
#define FXRANGED_H
00026
00027
00028
namespace FX {
00029
00030
00031
class FXSphered;
00032
00033
00034
00035 class FXAPI FXRanged {
00036
public:
00037
FXVec3d lower;
00038
FXVec3d upper;
00039
public:
00040
00041
00042 FXRanged(){}
00043
00044
00045 FXRanged(
const FXRanged& bounds):lower(bounds.lower),upper(bounds.upper){}
00046
00047
00048 FXRanged(
const FXVec3d& lo,
const FXVec3d& hi):lower(lo),upper(hi){}
00049
00050
00051 FXRanged(FXdouble xlo,FXdouble xhi,FXdouble ylo,FXdouble yhi,FXdouble zlo,FXdouble zhi):lower(xlo,ylo,zlo),upper(xhi,yhi,zhi){}
00052
00053
00054 FXRanged(
const FXSphered& sphere);
00055
00056
00057 FXRanged& operator=(
const FXRanged& bounds){ lower=bounds.
lower; upper=bounds.
upper;
return *
this; }
00058
00059
00060 FXVec3d& operator[](FXint i){
return (&lower)[i]; }
00061
00062
00063 const FXVec3d& operator[](FXint i)
const {
return (&lower)[i]; }
00064
00065
00066 FXdouble width()
const {
return upper.x-lower.x; }
00067
00068
00069 FXdouble height()
const {
return upper.y-lower.y; }
00070
00071
00072 FXdouble depth()
const {
return upper.z-lower.z; }
00073
00074
00075 FXdouble longest() const;
00076
00077
00078 FXdouble shortest() const;
00079
00080
00081 FXdouble diameter() const;
00082
00083
00084
FXVec3d diagonal() const;
00085
00086
00087
FXVec3d center() const;
00088
00089
00090 FXbool empty() const;
00091
00092
00093 FXbool contains(FXdouble x,FXdouble y,FXdouble z) const;
00094
00095
00096 FXbool contains(const
FXVec3d& p) const;
00097
00098
00099 FXbool contains(const FXRanged& bounds) const;
00100
00101
00102 FXbool contains(const FXSphered& sphere) const;
00103
00104
00105 FXRanged& include(FXdouble x,FXdouble y,FXdouble z);
00106
00107
00108 FXRanged& include(const
FXVec3d& v);
00109
00110
00111 FXRanged& include(const FXRanged& box);
00112
00113
00114 FXRanged& include(const FXSphered& sphere);
00115
00116
00117 FXint intersect(const
FXVec4d &plane) const;
00118
00119
00120 FXbool intersect(const
FXVec3d& u,const
FXVec3d& v);
00121
00122
00123 friend FXAPI FXbool overlap(const FXRanged& a,const FXRanged& b);
00124
00125
00126 FXVec3d corner(FXint c)
const {
return FXVec3d((&lower)[c&1].x, (&lower)[(c>>1)&1].y, (&lower)[c>>2].z); }
00127
00128
00129
friend FXAPI FXRanged unite(
const FXRanged& a,
const FXRanged& b);
00130
00131
00132
friend FXAPI FXRanged intersect(
const FXRanged& a,
const FXRanged& b);
00133
00134
00135
friend FXAPI
FXStream& operator<<(
FXStream& store,
const FXRanged& bounds);
00136
00137
00138
friend FXAPI
FXStream& operator>>(
FXStream& store,FXRanged& bounds);
00139 };
00140
00141 }
00142
00143
#endif
00144