00001 #ifndef INTERPOLATOR_H 00002 #define INTERPOLATOR_H 00003 00004 #include "ddf/ddf.h" 00005 00006 #include "afltypes.h" 00007 #include "point.h" 00008 #include "value.h" 00009 #include "boundary.h" 00010 00011 namespace afl 00012 { 00013 00017 class Interpolator 00018 { 00019 00021 public: 00022 virtual ~Interpolator() { } 00029 virtual Value interpolate( const Point& x ) const = 0; 00030 00035 virtual void toXML( std::ostream& doc ) const; 00036 00041 virtual Interpolator* clone( ) = 0; 00042 00048 virtual void boundary( const Boundary* boundary, const Field* parent ); 00049 00053 virtual void invalidateTriangulation( ); 00054 00058 virtual const std::string& getImplementation( ) const = 0; 00059 00063 virtual const std::string& getMethod( ) const = 0; 00064 00069 void setParentField( const Field* parent ); 00070 00072 protected: 00078 Interpolator( const Field* f, const Parameters& params ); 00083 Interpolator( ); 00084 00085 protected: 00089 const ddf::PropertySet* _pset; 00093 const Field* _parent; 00097 const Boundary* _boundary; 00101 mutable bool _validTriangulation; 00102 }; 00103 00104 }; 00105 00106 #endif // INTERPOLATOR_H