00001 #ifndef BOUNDARY_4_H 00002 #define BOUNDARY_4_H 00003 #include "afltypes.h" 00004 #include "boundary.h" 00005 00006 #include <iostream> 00007 #include <list> 00008 00009 namespace afl 00010 { 00017 class Boundary_4 00018 { 00022 public: 00029 Boundary_4( const Point& from, const Point& to, bool colour ); 00030 00036 Boundary_4( const Field* field, bool colour ); 00037 00042 Boundary_4( const Boundary_4& toCopy ); 00043 00047 virtual ~Boundary_4( ); 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_4* 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 protected: 00145 friend class SimpleBoundary_4; 00146 friend class FieldBoundary_4; 00147 friend class BoundaryTree_4; 00148 00152 Boundary_4( ); 00153 00162 virtual int whereIs( const Point& p ) const; 00163 00172 virtual bool intersectSegment( const Point& from, const Point& to ) const; 00173 00177 bool _colour; 00178 00182 std::list<Boundary_4> _segments; 00183 00187 Boundary_4* _impl; 00188 00189 }; //class Boundary_4 00190 00191 } // namespace afl 00192 00193 #endif //BOUNDARY_4_H 00194