00001 #ifndef BOUNDARY_3_H 00002 #define BOUNDARY_3_H 00003 #include "afltypes.h" 00004 #include "boundary.h" 00005 00006 #include <iostream> 00007 #include <list> 00008 00009 namespace afl 00010 { 00017 class Boundary_3 00018 { 00022 public: 00029 Boundary_3( const Point& from, const Point& to, bool colour ); 00030 00036 Boundary_3( const Field* field, bool colour ); 00037 00042 Boundary_3( const Boundary_3& toCopy ); 00043 00047 virtual ~Boundary_3( ); 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_3* 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_3; 00146 friend class FieldBoundary_3; 00147 friend class BoundaryTree_3; 00148 00152 Boundary_3( ); 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_3> _segments; 00183 00187 Boundary_3* _impl; 00188 00189 }; //class Boundary_3 00190 00191 } // namespace afl 00192 00193 #endif //BOUNDARY_3_H 00194