00001 #ifndef FIELDBOUNDARY_2_H 00002 #define FIELDBOUNDARY_2_H 00003 #include "afltypes.h" 00004 #include "boundary_2.h" 00005 #include "field.h" 00006 00007 #include <iostream> 00008 #include <list> 00009 00010 namespace afl 00011 { 00016 class FieldBoundary_2 : public Boundary_2 00017 { 00021 public: 00022 00030 FieldBoundary_2( const Field* field, bool colour ); 00031 00035 virtual ~FieldBoundary_2( ); 00036 00045 virtual troolean locate( const Point& p ) const; 00046 00058 virtual data_t intersect( const Point& p, const Point& v ) const; 00059 00070 virtual void addSegment( const Point& from, const Point& to ); 00071 00081 virtual void addSegment( const Field* field ); 00082 00089 virtual Point getBoundingBoxMin( ) const; 00090 00097 virtual Point getBoundingBoxMax( ) const; 00098 00107 virtual void toXML( std::ostream& doc, 00108 const std::string& componentsDir, 00109 const std::string& baseURI ) const; 00110 00114 virtual Boundary_2* clone( ); 00115 00122 virtual Point findNearest( const Point& p ) const; 00123 00130 virtual Value getNormal( const Point& p ) const; 00131 00132 00136 protected: 00145 virtual troolean inLocal( const Point& p ) const; 00146 00154 virtual int whereIs( const Point& p ) const; 00155 00160 void computeBoundingBox( size_t stops = boundaryParts ) const; 00161 00165 private: 00169 const Field* _field; 00170 00174 mutable bool _boundingBoxAvailable; 00175 00179 mutable Point _bbMin; 00180 00184 mutable Point _bbMax; 00185 00186 }; //class FieldBoundary_2 00187 00188 } // namespace afl 00189 00190 #endif //FIELDBOUNDARY_2_H 00191
1.4.6