00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_SERIES_DATA_H
00011 #define QWT_SERIES_DATA_H 1
00012
00013 #include "qwt_global.h"
00014 #include "qwt_double_interval.h"
00015 #include "qwt_double_point_3d.h"
00016 #include <qvector.h>
00017 #include <qrect.h>
00018
00020 class QWT_EXPORT QwtIntervalSample
00021 {
00022 public:
00023 QwtIntervalSample();
00024 QwtIntervalSample(double, const QwtDoubleInterval &);
00025 QwtIntervalSample(double value, double min, double max);
00026
00027 bool operator==(const QwtIntervalSample &) const;
00028
00029 double value;
00030 QwtDoubleInterval interval;
00031 };
00032
00033 inline QwtIntervalSample::QwtIntervalSample():
00034 value(0.0)
00035 {
00036 }
00037
00038 inline QwtIntervalSample::QwtIntervalSample(
00039 double v, const QwtDoubleInterval &intv):
00040 value(v),
00041 interval(intv)
00042 {
00043 }
00044
00045 inline QwtIntervalSample::QwtIntervalSample(
00046 double v, double min, double max):
00047 value(v),
00048 interval(min, max)
00049 {
00050 }
00051
00052 inline bool QwtIntervalSample::operator==(const QwtIntervalSample &other) const
00053 {
00054 return value == other.value && interval == other.interval;
00055 }
00056
00058 class QWT_EXPORT QwtSetSample
00059 {
00060 public:
00061 QwtSetSample();
00062 bool operator==(const QwtSetSample &other) const;
00063
00064 double value;
00065 QVector<double> set;
00066 };
00067
00068 inline QwtSetSample::QwtSetSample():
00069 value(0.0)
00070 {
00071 }
00072
00073 inline bool QwtSetSample::operator==(const QwtSetSample &other) const
00074 {
00075 return value == other.value && set == other.set;
00076 }
00077
00086 template <typename T>
00087 class QwtSeriesData
00088 {
00089 public:
00090 virtual ~QwtSeriesData() {}
00091
00100 virtual QwtSeriesData *copy() const = 0;
00101
00103 virtual size_t size() const = 0;
00104
00110 virtual T sample(size_t i) const = 0;
00111
00122 virtual QRectF boundingRect() const = 0;
00123
00133 virtual void setRectOfInterest(const QRectF &) {};
00134
00135 private:
00139 QwtSeriesData<T> &operator=(const QwtSeriesData<T> &);
00140 };
00141
00148 template <typename T>
00149 class QwtArraySeriesData: public QwtSeriesData<T>
00150 {
00151 public:
00152 QwtArraySeriesData();
00153 QwtArraySeriesData(const QVector<T> &);
00154
00155 void setSamples(const QVector<T> &);
00156 const QVector<T> samples() const;
00157
00158 virtual size_t size() const;
00159 virtual T sample(size_t) const;
00160
00161 protected:
00162 QVector<T> d_samples;
00163 };
00164
00166 template <typename T>
00167 QwtArraySeriesData<T>::QwtArraySeriesData()
00168 {
00169 }
00170
00175 template <typename T>
00176 QwtArraySeriesData<T>::QwtArraySeriesData(const QVector<T> &samples):
00177 d_samples(samples)
00178 {
00179 }
00180
00185 template <typename T>
00186 void QwtArraySeriesData<T>::setSamples(const QVector<T> &samples)
00187 {
00188 d_samples = samples;
00189 }
00190
00192 template <typename T>
00193 const QVector<T> QwtArraySeriesData<T>::samples() const
00194 {
00195 return d_samples;
00196 }
00197
00199 template <typename T>
00200 size_t QwtArraySeriesData<T>::size() const
00201 {
00202 return d_samples.size();
00203 }
00204
00210 template <typename T>
00211 T QwtArraySeriesData<T>::sample(size_t i) const
00212 {
00213 return d_samples[i];
00214 }
00215
00217 class QWT_EXPORT QwtPointSeriesData: public QwtArraySeriesData<QPointF>
00218 {
00219 public:
00220 QwtPointSeriesData(
00221 const QVector<QPointF> & = QVector<QPointF>());
00222
00223 virtual QwtSeriesData<QPointF> *copy() const;
00224 virtual QRectF boundingRect() const;
00225 };
00226
00228 class QWT_EXPORT QwtPoint3DSeriesData: public QwtArraySeriesData<QwtDoublePoint3D>
00229 {
00230 public:
00231 QwtPoint3DSeriesData(
00232 const QVector<QwtDoublePoint3D> & = QVector<QwtDoublePoint3D>());
00233
00234 virtual QwtSeriesData<QwtDoublePoint3D> *copy() const;
00235 virtual QRectF boundingRect() const;
00236 };
00237
00239 class QWT_EXPORT QwtIntervalSeriesData: public QwtArraySeriesData<QwtIntervalSample>
00240 {
00241 public:
00242 QwtIntervalSeriesData(
00243 const QVector<QwtIntervalSample> & = QVector<QwtIntervalSample>());
00244
00245 virtual QwtSeriesData<QwtIntervalSample> *copy() const;
00246 virtual QRectF boundingRect() const;
00247 };
00248
00250 class QWT_EXPORT QwtSetSeriesData: public QwtArraySeriesData<QwtSetSample>
00251 {
00252 public:
00253 QwtSetSeriesData(
00254 const QVector<QwtSetSample> & = QVector<QwtSetSample>());
00255
00256 virtual QwtSeriesData<QwtSetSample> *copy() const;
00257 virtual QRectF boundingRect() const;
00258 };
00259
00263 class QWT_EXPORT QwtPointArrayData: public QwtSeriesData<QPointF>
00264 {
00265 public:
00266 QwtPointArrayData(const QVector<double> &x, const QVector<double> &y);
00267 QwtPointArrayData(const double *x, const double *y, size_t size);
00268 QwtPointArrayData &operator=(const QwtPointArrayData &);
00269 virtual QwtSeriesData<QPointF> *copy() const;
00270
00271 virtual QRectF boundingRect() const;
00272 virtual size_t size() const;
00273 virtual QPointF sample(size_t i) const;
00274
00275 const QVector<double> &xData() const;
00276 const QVector<double> &yData() const;
00277
00278 private:
00279 QVector<double> d_x;
00280 QVector<double> d_y;
00281 };
00282
00286 class QWT_EXPORT QwtCPointerData: public QwtSeriesData<QPointF>
00287 {
00288 public:
00289 QwtCPointerData(const double *x, const double *y, size_t size);
00290 QwtCPointerData &operator=(const QwtCPointerData &);
00291 virtual QwtSeriesData<QPointF> *copy() const;
00292
00293 virtual QRectF boundingRect() const;
00294 virtual size_t size() const;
00295 virtual QPointF sample(size_t i) const;
00296
00297 const double *xData() const;
00298 const double *yData() const;
00299
00300 private:
00301 const double *d_x;
00302 const double *d_y;
00303 size_t d_size;
00304 };
00305
00362 class QWT_EXPORT QwtSyntheticPointData: public QwtSeriesData<QPointF>
00363 {
00364 public:
00365 QwtSyntheticPointData(size_t size,
00366 const QwtDoubleInterval & = QwtDoubleInterval());
00367
00368 void setSize(size_t size);
00369 size_t size() const;
00370
00371 void setInterval(const QwtDoubleInterval& );
00372 QwtDoubleInterval interval() const;
00373
00374 virtual QRectF boundingRect() const;
00375 virtual QPointF sample(size_t i) const;
00376
00383 virtual double y(double x) const = 0;
00384 virtual double x(uint index) const;
00385
00386 virtual void setRectOfInterest(const QRectF &);
00387 QRectF rectOfInterest() const;
00388
00389 private:
00390 size_t d_size;
00391 QwtDoubleInterval d_interval;
00392 QRectF d_rectOfInterest;
00393 QwtDoubleInterval d_intervalOfInterest;
00394 };
00395
00396 QWT_EXPORT QRectF qwtBoundingRect(
00397 const QwtSeriesData<QPointF> &);
00398 QWT_EXPORT QRectF qwtBoundingRect(
00399 const QwtSeriesData<QwtDoublePoint3D> &);
00400 QWT_EXPORT QRectF qwtBoundingRect(
00401 const QwtSeriesData<QwtIntervalSample> &);
00402 QWT_EXPORT QRectF qwtBoundingRect(
00403 const QwtSeriesData<QwtSetSample> &);
00404
00405 #endif // !QWT_SERIES_DATA_H