# qwt_plot_curve.h

    00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
    00002  * Qwt Widget Library
    00003  * Copyright (C) 1997   Josef Wilgen
    00004  * Copyright (C) 2002   Uwe Rathmann
    00005  *
    00006  * This library is free software; you can redistribute it and/or
    00007  * modify it under the terms of the Qwt License, Version 1.0
    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