00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __WXBOUNDINGBOX_H__
00013 #define __WXBOUNDINGBOX_H__
00014
00015 #ifndef WX_PRECOMP
00016 #include "wx/wx.h"
00017 #endif
00018
00019 #include "wx/artbase/afmatrix.h"
00020 #include "wx/geometry.h"
00021
00022
00023
00024 enum OVERLAP
00025 {
00026 _IN,
00027 _ON,
00028 _OUT
00029 };
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 class A2DARTBASEDLLEXP a2dBoundingBox
00040 {
00041 public:
00042
00043
00044 a2dBoundingBox();
00045
00046
00047 a2dBoundingBox( const a2dBoundingBox& box );
00048
00049
00050 a2dBoundingBox( const a2dPoint2D& point );
00051
00052
00053 a2dBoundingBox( double x1, double y1, double x2, double y2 );
00054
00055
00056 a2dBoundingBox& operator+( a2dBoundingBox& );
00057
00058
00059 const a2dBoundingBox& operator+=( const a2dBoundingBox& box );
00060
00061
00062 a2dBoundingBox& operator=( const a2dBoundingBox& );
00063
00064
00065 bool And( a2dBoundingBox*, double Marge = 0 );
00066
00067
00068 void Enlarge( const double Marge );
00069
00070
00071 void EnlargeXY( const double MargeX, const double MargeY );
00072
00073
00074 void Shrink( const double Marge );
00075
00076
00077 void Expand( const a2dPoint2D& , const a2dPoint2D& );
00078
00079
00080 void Expand( const a2dPoint2D& );
00081
00082
00083 void Expand( double x, double y );
00084
00085
00086 void Expand( const a2dBoundingBox& bbox );
00087
00088
00089
00090 OVERLAP Intersect( const a2dBoundingBox &, double Marge = 0 ) const;
00091
00092
00093
00094 bool LineIntersect( const a2dPoint2D& begin, const a2dPoint2D& end ) const;
00095
00096
00097 bool PointInBox( const a2dPoint2D&, double Marge = 0 ) const;
00098
00099
00100 bool PointInBox( double x, double y, double Marge = 0 ) const;
00101
00102
00103 bool PointOnBox( double x, double y, double Marge ) const;
00104
00105
00106 void Reset();
00107
00108
00109 const a2dBoundingBox& Translate( a2dPoint2D& );
00110
00111
00112 const a2dBoundingBox& Translate( double x, double y );
00113
00114
00115
00116
00117 void MapBbox( const a2dAffineMatrix& matrix );
00118
00119
00120 double GetWidth() const;
00121
00122 double GetHeight() const;
00123
00124
00125 bool GetValid() const;
00126
00127
00128 void SetValid( bool );
00129
00130
00131 void SetBoundingBox( const a2dPoint2D& a_point );
00132
00133
00134 void SetMin( double px, double py );
00135
00136
00137 void SetMax( double px, double py );
00138
00139
00140 a2dPoint2D GetMin() const;
00141
00142
00143 a2dPoint2D GetMax() const;
00144
00145
00146 double GetMinX() const;
00147
00148
00149 double GetMinY() const;
00150
00151
00152 double GetMaxX() const;
00153
00154
00155 double GetMaxY() const;
00156
00157 inline double GetSize()
00158 {
00159 if ( !m_validbbox )
00160 return 0;
00161
00162 return wxMax( fabs( m_maxx - m_minx ), fabs( m_maxy - m_miny ) );
00163 }
00164
00165
00166 void SetMinX( double minx ) { m_minx = minx; }
00167
00168 void SetMinY( double miny ) { m_miny = miny; }
00169
00170 void SetMaxX( double maxx ) { m_maxx = maxx; }
00171
00172 void SetMaxY( double maxy ) { m_maxy = maxy; }
00173
00174 #ifdef _DEBUG
00175
00176 void Dump() const;
00177 #endif
00178
00179 protected:
00180
00181
00182 double m_minx;
00183
00184 double m_miny;
00185
00186 double m_maxx;
00187
00188 double m_maxy;
00189
00190
00191 bool m_validbbox;
00192 };
00193
00194
00195 A2DARTBASEDLLEXP_DATA( extern a2dBoundingBox ) wxNonValidBbox;
00196
00197 #endif