00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_PLOT_CURVE_H
00011 #define QWT_PLOT_CURVE_H
00012
00013 #include <qpen.h>
00014 #include <qstring.h>
00015 #include "qwt_global.h"
00016 #include "qwt_plot_item.h"
00017 #include "qwt_text.h"
00018 #include "qwt_polygon.h"
00019 #include "qwt_data.h"
00020
00021 class QPainter;
00022 class QwtScaleMap;
00023 class QwtSymbol;
00024 class QwtCurveFitter;
00025
00056 class QWT_EXPORT QwtPlotCurve: public QwtPlotItem
00057 {
00058 public:
00059 enum CurveType
00060 {
00061 Yfx,
00062 Xfy
00063 };
00064
00069 enum CurveStyle
00070 {
00071 NoCurve,
00072
00073 Lines,
00074 Sticks,
00075 Steps,
00076 Dots,
00077
00078 UserCurve = 100
00079 };
00080
00085 enum CurveAttribute
00086 {
00087 Inverted = 1,
00088 Fitted = 2
00089 };
00090
00095 enum PaintAttribute
00096 {
00097 PaintFiltered = 1,
00098 ClipPolygons = 2
00099 };
00100
00101 explicit QwtPlotCurve();
00102 explicit QwtPlotCurve(const QwtText &title);
00103 explicit QwtPlotCurve(const QString &title);
00104
00105 virtual ~QwtPlotCurve();
00106
00107 virtual int rtti() const;
00108
00109 void setCurveType(CurveType);
00110 CurveType curveType() const;
00111
00112 void setPaintAttribute(PaintAttribute, bool on = true);
00113 bool testPaintAttribute(PaintAttribute) const;
00114
00115 void setRawData(const double *x, const double *y, int size);
00116 void setData(const double *xData, const double *yData, int size);
00117 void setData(const QwtArray<double> &xData, const QwtArray<double> &yData);
00118 #if QT_VERSION < 0x040000
00119 void setData(const QwtArray<QwtDoublePoint> &data);
00120 #else
00121 void setData(const QPolygonF &data);
00122 #endif
00123 void setData(const QwtData &data);
00124
00125 int closestPoint(const QPoint &pos, double *dist = NULL) const;
00126
00127 QwtData &data();
00128 const QwtData &data() const;
00129
00130 int dataSize() const;
00131 inline double x(int i) const;
00132 inline double y(int i) const;
00133
00134 virtual QwtDoubleRect boundingRect() const;
00135
00137 inline double minXValue() const { return boundingRect().left(); }
00139 inline double maxXValue() const { return boundingRect().right(); }
00141 inline double minYValue() const { return boundingRect().top(); }
00143 inline double maxYValue() const { return boundingRect().bottom(); }
00144
00145 void setCurveAttribute(CurveAttribute, bool on = true);
00146 bool testCurveAttribute(CurveAttribute) const;
00147
00148 void setPen(const QPen &);
00149 const QPen &pen() const;
00150
00151 void setBrush(const QBrush &);
00152 const QBrush &brush() const;
00153
00154 void setBaseline(double ref);
00155 double baseline() const;
00156
00157 void setStyle(CurveStyle style);
00158 CurveStyle style() const;
00159
00160 void setSymbol(const QwtSymbol &s);
00161 const QwtSymbol& symbol() const;
00162
00163 void setCurveFitter(QwtCurveFitter *);
00164 QwtCurveFitter *curveFitter() const;
00165
00166 virtual void draw(QPainter *p,
00167 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00168 const QRect &) const;
00169
00170 virtual void draw(QPainter *p,
00171 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00172 int from, int to) const;
00173
00174 void draw(int from, int to) const;
00175
00176 virtual void updateLegend(QwtLegend *) const;
00177
00178 protected:
00179
00180 void init();
00181
00182 virtual void drawCurve(QPainter *p, int style,
00183 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00184 int from, int to) const;
00185
00186 virtual void drawSymbols(QPainter *p, const QwtSymbol &,
00187 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00188 int from, int to) const;
00189
00190 void drawLines(QPainter *p,
00191 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00192 int from, int to) const;
00193 void drawSticks(QPainter *p,
00194 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00195 int from, int to) const;
00196 void drawDots(QPainter *p,
00197 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00198 int from, int to) const;
00199 void drawSteps(QPainter *p,
00200 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00201 int from, int to) const;
00202
00203 void fillCurve(QPainter *,
00204 const QwtScaleMap &, const QwtScaleMap &,
00205 QwtPolygon &) const;
00206 void closePolyline(const QwtScaleMap &, const QwtScaleMap &,
00207 QwtPolygon &) const;
00208
00209 private:
00210 QwtData *d_xy;
00211
00212 class PrivateData;
00213 PrivateData *d_data;
00214 };
00215
00217 inline QwtData &QwtPlotCurve::data()
00218 {
00219 return *d_xy;
00220 }
00221
00223 inline const QwtData &QwtPlotCurve::data() const
00224 {
00225 return *d_xy;
00226 }
00227
00232 inline double QwtPlotCurve::x(int i) const
00233 {
00234 return d_xy->x(i);
00235 }
00236
00241 inline double QwtPlotCurve::y(int i) const
00242 {
00243 return d_xy->y(i);
00244 }
00245
00246 #endif