00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef IMG_FUNCTION_BASE_H
00028 #define IMG_FUNCTION_BASE_H
00029
00030 #include "module_config.hh"
00031 #include "data.hh"
00032 #include "data_observer.hh"
00033 #include "observable.hh"
00034 #include "pixel_sampling.hh"
00035
00036 namespace ost { namespace img {
00037
00038
00039 class NonModAlgorithm;
00040 class ImageHandle;
00041
00043
00054
00055
00056
00057
00058
00059 class DLLEXPORT_OST_IMG_BASE Function: public Data {
00060 typedef Observable<DataObserver> DataObservable;
00061
00062 public:
00067 virtual ~Function();
00069
00073
00075 virtual DataType GetType() const = 0;
00076
00078 virtual DataDomain GetDomain() const;
00079
00081
00085 virtual Extent GetExtent() const;
00087 void SetExtent(const Extent& e);
00088
00090 virtual void SetSpatialOrigin(const Point& o);
00092 virtual Point GetSpatialOrigin() const;
00093
00095
00102
00104 virtual Real GetReal(const Point& p) const;
00105
00107 virtual Complex GetComplex(const Point& p) const;
00108
00110 virtual Real GetIntpolReal(const Vec3 &v) const=0;
00111 virtual Real GetIntpolReal(const Vec2 &v) const;
00112 virtual Real GetIntpolReal(const Real &d) const;
00113
00115 virtual Complex GetIntpolComplex(const Vec3 &v) const=0;
00116 virtual Complex GetIntpolComplex(const Vec2 &v) const;
00117 virtual Complex GetIntpolComplex(const Real &d) const;
00118
00120
00121
00126
00127 virtual void Apply(NonModAlgorithm& a) const;
00128 virtual void ApplyIP(NonModAlgorithm& a) const;
00130
00133
00135 virtual void Attach(DataObserver *o) const;
00136 virtual void Detach(DataObserver *o) const;
00137 virtual void Notify() const;
00139
00140
00141 protected:
00143 Function(DataDomain d, const Extent& e=Extent());
00144
00145 Function(const Function& f);
00146
00147 Function& operator=(const Function& f);
00148
00152 virtual PixelSampling& Sampling();
00153 virtual const PixelSampling& Sampling() const;
00155
00156 private:
00157 Extent extent_;
00158 DataDomain domain_;
00159
00160
00161
00162
00163 mutable DataObservable obs_;
00164
00165 PixelSampling sampling_;
00166 };
00167
00168 }}
00169
00170 #endif