00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025
00029 template <typename T>
00030 Rect<T>::Rect() :
00031 Left (0),
00032 Top (0),
00033 Right (0),
00034 Bottom(0)
00035 {
00036
00037 }
00038
00039
00043 template <typename T>
00044 Rect<T>::Rect(T LeftCoord, T TopCoord, T RightCoord, T BottomCoord) :
00045 Left (LeftCoord),
00046 Top (TopCoord),
00047 Right (RightCoord),
00048 Bottom(BottomCoord)
00049 {
00050
00051 }
00052
00053
00057 template <typename T>
00058 T Rect<T>::GetWidth() const
00059 {
00060 return Right - Left;
00061 }
00062
00063
00067 template <typename T>
00068 T Rect<T>::GetHeight() const
00069 {
00070 return Bottom - Top;
00071 }
00072
00073
00077 template <typename T>
00078 void Rect<T>::Offset(T OffsetX, T OffsetY)
00079 {
00080 Left += OffsetX;
00081 Right += OffsetX;
00082 Top += OffsetY;
00083 Bottom += OffsetY;
00084 }
00085
00086
00090 template <typename T>
00091 bool Rect<T>::Contains(T X, T Y) const
00092 {
00093 return (X >= Left) && (X <= Right) && (Y >= Top) && (Y <= Bottom);
00094 }
00095
00096
00100 template <typename T>
00101 bool Rect<T>::Intersects(const Rect<T>& Rectangle, Rect<T>* OverlappingRect) const
00102 {
00103
00104 Rect Overlapping(std::max(Left, Rectangle.Left),
00105 std::max(Top, Rectangle.Top),
00106 std::min(Right, Rectangle.Right),
00107 std::min(Bottom, Rectangle.Bottom));
00108
00109
00110 if ((Overlapping.Left < Overlapping.Right) && (Overlapping.Top < Overlapping.Bottom))
00111 {
00112 if (OverlappingRect)
00113 *OverlappingRect = Overlapping;
00114 return true;
00115 }
00116 else
00117 {
00118 if (OverlappingRect)
00119 *OverlappingRect = Rect(0, 0, 0, 0);
00120 return false;
00121 }
00122 }