00001 #ifndef BOUNDARY_2_H 00002 #define BOUNDARY_2_H 00003 #include "afltypes.h" 00004 #include "boundary.h" 00005 00006 #include <iostream> 00007 #include <list> 00008 00009 namespace afl 00010 { 00017 class Boundary_2 00018 { 00022 public: 00029 Boundary_2( const Point& from, const Point& to, bool colour ); 00030 00036 Boundary_2( const Field* field, bool colour ); 00037 00042 Boundary_2( const Boundary_2& toCopy ); 00043 00047 virtual ~Boundary_2( ); 00048 00056 virtual troolean locate( const Point& p ) const; 00057 00069 virtual data_t intersect( const Point& p, const Point& v ) const; 00070 00081 virtual void addSegment( const Point& from, const Point& to ); 00082 00093 virtual void addSegment( const Field* field ); 00094 00103 virtual void toXML( std::ostream& doc, 00104 const std::string& componentsDir, 00105 const std::string& baseURI ) const; 00106 00110 virtual Boundary_2* clone( ); 00111 00118 virtual Point findNearest( const Point& p ) const; 00119 00126 virtual Value getNormal( const Point& p ) const; 00127 00134 virtual Point getBoundingBoxMin( ) const; 00135 00142 virtual Point getBoundingBoxMax( ) const; 00143 00144 00145 protected: 00146 friend class SimpleBoundary_2; 00147 friend class FieldBoundary_2; 00148 friend class BoundaryTree_2; 00149 00153 Boundary_2( ); 00154 00163 virtual int whereIs( const Point& p ) const; 00164 00173 virtual bool intersectSegment( const Point& from, const Point& to ) const; 00174 00178 bool _colour; 00179 00183 std::list<Boundary_2> _segments; 00184 00188 Boundary_2* _impl; 00189 00190 }; //class Boundary_2 00191 00192 } // namespace afl 00193 00194 #endif //BOUNDARY_2_H 00195