source: pacpusframework/branches/2.0-beta1/include/extlib/qwt-5.2.1/qwt_plot_curve.h@ 89

Last change on this file since 89 was 89, checked in by morasjul, 11 years ago

PACPUS 2.0 Beta deployed in new branch

Major changes:
-Add communication interface between components
-Add examples for communications interface (TestComponents)
-Move to Qt5 support

  • Property svn:executable set to *
File size: 9.4 KB
Line 
1/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *****************************************************************************/
9
10#ifndef QWT_PLOT_CURVE_H
11#define QWT_PLOT_CURVE_H
12
13#include <qpen.h>
14#include <qstring.h>
15#include "qwt_global.h"
16#include "qwt_plot_item.h"
17#include "qwt_text.h"
18#include "qwt_polygon.h"
19#include "qwt_data.h"
20
21class QPainter;
22class QwtScaleMap;
23class QwtSymbol;
24class QwtCurveFitter;
25
26/*!
27 \brief A plot item, that represents a series of points
28
29 A curve is the representation of a series of points in the x-y plane.
30 It supports different display styles, interpolation ( f.e. spline )
31 and symbols.
32
33 \par Usage
34 <dl><dt>a) Assign curve properties</dt>
35 <dd>When a curve is created, it is configured to draw black solid lines
36 with in Lines style and no symbols. You can change this by calling
37 setPen(), setStyle() and setSymbol().</dd>
38 <dt>b) Connect/Assign data.</dt>
39 <dd>QwtPlotCurve gets its points using a QwtData object offering
40 a bridge to the real storage of the points ( like QAbstractItemModel ).
41 There are several convenience classes derived from QwtData, that also store
42 the points inside ( like QStandardItemModel ). QwtPlotCurve also offers
43 a couple of variations of setData(), that build QwtData objects from
44 arrays internally.</dd>
45 <dt>c) Attach the curve to a plot</dt>
46 <dd>See QwtPlotItem::attach()
47 </dd></dl>
48
49 \par Example:
50 see examples/bode
51
52 \sa QwtPlot, QwtData, QwtSymbol, QwtScaleMap
53*/
54class QWT_EXPORT QwtPlotCurve: public QwtPlotItem
55{
56public:
57 /*!
58 Curve type.
59
60 - Yfx\n
61 Draws y as a function of x (the default). The
62 baseline is interpreted as a horizontal line
63 with y = baseline().
64 - Xfy\n
65 Draws x as a function of y. The baseline is
66 interpreted as a vertical line with x = baseline().
67
68 The baseline is used for aligning the sticks, or
69 filling the curve with a brush.
70
71 \sa setCurveType(), curveType(), baseline() brush()
72 */
73 enum CurveType
74 {
75 Yfx,
76 Xfy
77 };
78
79 /*!
80 Curve styles.
81
82 - NoCurve\n
83 Don't draw a curve. Note: This doesn't affect the symbols.
84 - Lines\n
85 Connect the points with straight lines. The lines might
86 be interpolated depending on the 'Fitted' attribute. Curve
87 fitting can be configured using setCurveFitter().
88 - Sticks\n
89 Draw vertical(Yfx) or horizontal(Xfy) sticks from a baseline
90 which is defined by setBaseline().
91 - Steps\n
92 Connect the points with a step function. The step function
93 is drawn from the left to the right or vice versa,
94 depending on the 'Inverted' attribute.
95 - Dots\n
96 Draw dots at the locations of the data points. Note:
97 This is different from a dotted line (see setPen()), and faster
98 as a curve in NoStyle style and a symbol painting a point.
99 - UserCurve\n
100 Styles >= UserCurve are reserved for derived
101 classes of QwtPlotCurve that overload drawCurve() with
102 additional application specific curve types.
103
104 \sa setStyle(), style()
105 */
106 enum CurveStyle
107 {
108 NoCurve,
109
110 Lines,
111 Sticks,
112 Steps,
113 Dots,
114
115 UserCurve = 100
116 };
117
118 /*!
119 Attribute for drawing the curve
120
121 - Fitted ( in combination with the Lines QwtPlotCurve::CurveStyle only )\n
122 A QwtCurveFitter tries to
123 interpolate/smooth the curve, before it is painted.
124 Note that curve fitting requires temorary memory
125 for calculating coefficients and additional points.
126 If painting in Fitted mode is slow it might be better
127 to fit the points, before they are passed to QwtPlotCurve.
128 - Inverted\n
129 For Steps only. Draws a step function
130 from the right to the left.
131
132 \sa setCurveAttribute(), testCurveAttribute(), curveFitter()
133 */
134 enum CurveAttribute
135 {
136 Inverted = 1,
137 Fitted = 2
138 };
139
140 /*!
141 Attributes to modify the drawing algorithm.
142
143 - PaintFiltered\n
144 Tries to reduce the data that has to be painted, by sorting out
145 duplicates, or paintings outside the visible area. Might have a
146 notable impact on curves with many close points.
147 Only a couple of very basic filtering algos are implemented.
148 - ClipPolygons\n
149 Clip polygons before painting them. In situations, where points
150 are far outside the visible area (f.e when zooming deep) this
151 might be a substantial improvement for the painting performance
152 ( especially on Windows ).
153
154 The default is, that no paint attributes are enabled.
155
156 \sa setPaintAttribute(), testPaintAttribute()
157 */
158 enum PaintAttribute
159 {
160 PaintFiltered = 1,
161 ClipPolygons = 2
162 };
163
164 explicit QwtPlotCurve();
165 explicit QwtPlotCurve(const QwtText &title);
166 explicit QwtPlotCurve(const QString &title);
167
168 virtual ~QwtPlotCurve();
169
170 virtual int rtti() const;
171
172 void setCurveType(CurveType);
173 CurveType curveType() const;
174
175 void setPaintAttribute(PaintAttribute, bool on = true);
176 bool testPaintAttribute(PaintAttribute) const;
177
178 void setRawData(const double *x, const double *y, int size);
179 void setData(const double *xData, const double *yData, int size);
180 void setData(const QwtArray<double> &xData, const QwtArray<double> &yData);
181#if QT_VERSION < 0x040000
182 void setData(const QwtArray<QwtDoublePoint> &data);
183#else
184 void setData(const QPolygonF &data);
185#endif
186 void setData(const QwtData &data);
187
188 int closestPoint(const QPoint &pos, double *dist = NULL) const;
189
190 QwtData &data();
191 const QwtData &data() const;
192
193 int dataSize() const;
194 double x(int i) const;
195 double y(int i) const;
196
197 virtual QwtDoubleRect boundingRect() const;
198
199 double minXValue() const;
200 double maxXValue() const;
201 double minYValue() const;
202 double maxYValue() const;
203
204 void setCurveAttribute(CurveAttribute, bool on = true);
205 bool testCurveAttribute(CurveAttribute) const;
206
207 void setPen(const QPen &);
208 const QPen &pen() const;
209
210 void setBrush(const QBrush &);
211 const QBrush &brush() const;
212
213 void setBaseline(double ref);
214 double baseline() const;
215
216 void setStyle(CurveStyle style);
217 CurveStyle style() const;
218
219 void setSymbol(const QwtSymbol &s);
220 const QwtSymbol& symbol() const;
221
222 void setCurveFitter(QwtCurveFitter *);
223 QwtCurveFitter *curveFitter() const;
224
225 virtual void draw(QPainter *p,
226 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
227 const QRect &) const;
228
229 virtual void draw(QPainter *p,
230 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
231 int from, int to) const;
232
233 void draw(int from, int to) const;
234
235 virtual void updateLegend(QwtLegend *) const;
236
237protected:
238
239 void init();
240
241 virtual void drawCurve(QPainter *p, int style,
242 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
243 int from, int to) const;
244
245 virtual void drawSymbols(QPainter *p, const QwtSymbol &,
246 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
247 int from, int to) const;
248
249 void drawLines(QPainter *p,
250 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
251 int from, int to) const;
252 void drawSticks(QPainter *p,
253 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
254 int from, int to) const;
255 void drawDots(QPainter *p,
256 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
257 int from, int to) const;
258 void drawSteps(QPainter *p,
259 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
260 int from, int to) const;
261
262 void fillCurve(QPainter *,
263 const QwtScaleMap &, const QwtScaleMap &,
264 QwtPolygon &) const;
265 void closePolyline(const QwtScaleMap &, const QwtScaleMap &,
266 QwtPolygon &) const;
267
268private:
269 QwtData *d_xy;
270
271 class PrivateData;
272 PrivateData *d_data;
273};
274
275//! \return the the curve data
276inline QwtData &QwtPlotCurve::data()
277{
278 return *d_xy;
279}
280
281//! \return the the curve data
282inline const QwtData &QwtPlotCurve::data() const
283{
284 return *d_xy;
285}
286
287/*!
288 \param i index
289 \return x-value at position i
290*/
291inline double QwtPlotCurve::x(int i) const
292{
293 return d_xy->x(i);
294}
295
296/*!
297 \param i index
298 \return y-value at position i
299*/
300inline double QwtPlotCurve::y(int i) const
301{
302 return d_xy->y(i);
303}
304
305//! boundingRect().left()
306inline double QwtPlotCurve::minXValue() const
307{
308 return boundingRect().left();
309}
310
311//! boundingRect().right()
312inline double QwtPlotCurve::maxXValue() const
313{
314 return boundingRect().right();
315}
316
317//! boundingRect().top()
318inline double QwtPlotCurve::minYValue() const
319{
320 return boundingRect().top();
321}
322
323//! boundingRect().bottom()
324inline double QwtPlotCurve::maxYValue() const
325{
326 return boundingRect().bottom();
327}
328
329#endif
Note: See TracBrowser for help on using the repository browser.