00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_CURVE_H
00011 #define QWT_CURVE_H
00012
00013 #include <qpen.h>
00014 #include <qstring.h>
00015 #include "qwt_global.h"
00016 #include "qwt_array.h"
00017 #include "qwt_data.h"
00018 #include "qwt_spline.h"
00019 #include "qwt_symbol.h"
00020
00021 class QPainter;
00022 class QwtDiMap;
00023
00024 #if defined(QWT_TEMPLATEDLL)
00025
00026 template class QWT_EXPORT QwtArray<double>;
00027
00028 #endif
00029
00060 class QWT_EXPORT QwtCurve
00061 {
00062 public:
00067 enum CurveStyle
00068 {
00069 NoCurve,
00070 Lines,
00071 Sticks,
00072 Steps,
00073 Dots,
00074 Spline,
00075 UserCurve = 100
00076 };
00077
00082 enum CurveOption
00083 {
00084 Auto = 0,
00085 Yfx = 1,
00086 Xfy = 2,
00087 Parametric = 4,
00088 Periodic = 8,
00089 Inverted = 16
00090 };
00091
00092 QwtCurve(const QString &title = QString::null);
00093 QwtCurve(const QwtCurve &c);
00094 virtual ~QwtCurve();
00095
00096 const QwtCurve& operator= (const QwtCurve &c);
00097
00098 void setRawData(const double *x, const double *y, int size);
00099 void setData(const double *xData, const double *yData, int size);
00100 void setData(const QwtArray<double> &xData, const QwtArray<double> &yData);
00101 void setData(const QwtArray<QwtDoublePoint> &data);
00102 void setData(const QwtData &data);
00103
00104 int dataSize() const;
00105 inline double x(int i) const;
00106 inline double y(int i) const;
00107
00108 virtual QwtDoubleRect boundingRect() const;
00109
00111 inline double minXValue() const { return boundingRect().x1(); }
00113 inline double maxXValue() const { return boundingRect().x2(); }
00115 inline double minYValue() const { return boundingRect().y1(); }
00117 inline double maxYValue() const { return boundingRect().y2(); }
00118
00119 void setOptions(int t);
00120 int options() const;
00121
00122 void setTitle(const QString &title);
00123 const QString &title() const;
00124
00125 void setPen(const QPen &);
00126 const QPen &pen() const;
00127
00128 void setBrush(const QBrush &);
00129 const QBrush &brush() const;
00130
00131 void setBaseline(double ref);
00132 double baseline() const;
00133
00134 void setStyle(int style, int options = 0);
00135 int style() const;
00136
00137 void setSymbol(const QwtSymbol &s);
00138 const QwtSymbol& symbol() const;
00139
00140 void setSplineSize(int s);
00141 int splineSize() const;
00142
00143 virtual void draw(QPainter *p, const QwtDiMap &xMap, const QwtDiMap &yMap,
00144 int from = 0, int to = -1);
00145
00146 protected:
00147
00148 void init(const QString &title);
00149 void copy(const QwtCurve &c);
00150
00151 virtual void drawCurve(QPainter *p, int style,
00152 const QwtDiMap &xMap, const QwtDiMap &yMap,
00153 int from, int to);
00154
00155 virtual void drawSymbols(QPainter *p, QwtSymbol &,
00156 const QwtDiMap &xMap, const QwtDiMap &yMap,
00157 int from, int to);
00158
00159 void drawLines(QPainter *p,
00160 const QwtDiMap &xMap, const QwtDiMap &yMap,
00161 int from, int to);
00162 void drawSticks(QPainter *p,
00163 const QwtDiMap &xMap, const QwtDiMap &yMap,
00164 int from, int to);
00165 void drawDots(QPainter *p,
00166 const QwtDiMap &xMap, const QwtDiMap &yMap,
00167 int from, int to);
00168 void drawSteps(QPainter *p,
00169 const QwtDiMap &xMap, const QwtDiMap &yMap,
00170 int from, int to);
00171 void drawSpline(QPainter *p,
00172 const QwtDiMap &xMap, const QwtDiMap &yMap);
00173
00174 void closePolyline(const QwtDiMap &, const QwtDiMap &,
00175 QPointArray &) const;
00176
00177 virtual void curveChanged();
00178
00179 int verifyRange(int &i1, int &i2);
00180
00181 protected:
00182 QwtSpline d_spx;
00183 QwtSpline d_spy;
00184
00185 private:
00186 QwtData *d_data;
00187
00188 int d_style;
00189 double d_ref;
00190
00191 QwtSymbol d_sym;
00192
00193 QPen d_pen;
00194 QBrush d_brush;
00195 QString d_title;
00196
00197 int d_options;
00198 int d_splineSize;
00199 };
00200
00205 inline double QwtCurve::x(int i) const
00206 {
00207 return d_data->x(i);
00208 }
00209
00214 inline double QwtCurve::y(int i) const
00215 {
00216 return d_data->y(i);
00217 }
00218
00219 #endif