QWT API (中文) 7.3.0
Qt绘图库 - 中文API文档
载入中...
搜索中...
未找到
qwt_spline.h
1/******************************************************************************
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 * Modified by ChenZongYan in 2024 <czy.t@163.com>
10 * Summary of major modifications (see ChangeLog.md for full history):
11 * 1. CMake build system & C++11 throughout.
12 * 2. Core panner/ zoomer refactored:
13 * - QwtPanner → QwtCachePanner (pixmap-cache version)
14 * - New real-time QwtPlotPanner derived from QwtPicker.
15 * 3. Zoomer supports multi-axis.
16 * 4. Parasite-plot framework:
17 * - QwtFigure, QwtPlotParasiteLayout, QwtPlotTransparentCanvas,
18 * - QwtPlotScaleEventDispatcher, built-in pan/zoom on axis.
19 * 5. New picker: QwtPlotSeriesDataPicker (works with date axis).
20 * 6. Raster & color-map extensions:
21 * - QwtGridRasterData (2-D table + interpolation)
22 * - QwtLinearColorMap::stopColors(), stopPos() API rename.
23 * 7. Bar-chart: expose pen/brush control.
24 * 8. Amalgamated build: single QwtPlot.h / QwtPlot.cpp pair in src-amalgamate.
25 *****************************************************************************/
26
27#ifndef QWT_SPLINE_H
28#define QWT_SPLINE_H
29
30#include "qwt_global.h"
31#include "qwt_spline.h"
32
35class QPainterPath;
36class QLineF;
37class QPolygonF;
38
39#if QT_VERSION < 0x060000
40template< typename T >
41class QVector;
42#endif
43
73class QWT_EXPORT QwtSpline
74{
75public:
82 {
89
96
108 ClosedPolygon
109 };
110
116 {
119
121 AtEnd
122 };
123
136 {
142
151
160
169 LinearRunout
170 };
171
173 QwtSpline();
175 virtual ~QwtSpline();
176
178 void setParametrization(int type);
180 void setParametrization(QwtSplineParametrization*);
182 const QwtSplineParametrization* parametrization() const;
183
185 void setBoundaryType(BoundaryType);
187 BoundaryType boundaryType() const;
188
190 void setBoundaryValue(BoundaryPosition, double value);
192 double boundaryValue(BoundaryPosition) const;
193
195 void setBoundaryCondition(BoundaryPosition, int condition);
197 int boundaryCondition(BoundaryPosition) const;
198
200 void setBoundaryConditions(int condition, double valueBegin = 0.0, double valueEnd = 0.0);
201
203 virtual QPolygonF polygon(const QPolygonF&, double tolerance) const;
205 virtual QPainterPath painterPath(const QPolygonF&) const = 0;
206
208 virtual uint locality() const;
209
210private:
211 QwtSpline(const QwtSpline&) = delete;
212 QwtSpline& operator=(const QwtSpline&) = delete;
213
214 QWT_DECLARE_PRIVATE(QwtSpline)
215};
216
223class QWT_EXPORT QwtSplineInterpolating : public QwtSpline
224{
225public:
227 ~QwtSplineInterpolating() override;
228
229 virtual QPolygonF equidistantPolygon(const QPolygonF&, double distance, bool withNodes) const;
230
231 virtual QPolygonF polygon(const QPolygonF&, double tolerance) const override;
232
233 virtual QPainterPath painterPath(const QPolygonF&) const override;
234 virtual QVector< QLineF > bezierControlLines(const QPolygonF&) const = 0;
235
236private:
238 QwtSplineInterpolating& operator=(const QwtSplineInterpolating&) = delete;
239};
240
246class QWT_EXPORT QwtSplineG1 : public QwtSplineInterpolating
247{
248public:
249 QwtSplineG1();
250 ~QwtSplineG1() override;
251};
252
264class QWT_EXPORT QwtSplineC1 : public QwtSplineG1
265{
266public:
267 QwtSplineC1();
268 ~QwtSplineC1() override;
269
270 virtual QPainterPath painterPath(const QPolygonF&) const override;
271 virtual QVector< QLineF > bezierControlLines(const QPolygonF&) const override;
272
273 virtual QPolygonF equidistantPolygon(const QPolygonF&, double distance, bool withNodes) const override;
274
275 // these methods are the non parametric part
276 virtual QVector< QwtSplinePolynomial > polynomials(const QPolygonF&) const;
277 virtual QVector< double > slopes(const QPolygonF&) const = 0;
278
279 virtual double slopeAtBeginning(const QPolygonF&, double slopeNext) const;
280 virtual double slopeAtEnd(const QPolygonF&, double slopeBefore) const;
281};
282
294class QWT_EXPORT QwtSplineC2 : public QwtSplineC1
295{
296public:
303 {
310 CubicRunout = LinearRunout + 1,
311
319 NotAKnot
320 };
321
322 QwtSplineC2();
323 ~QwtSplineC2() override;
324
325 virtual QPainterPath painterPath(const QPolygonF&) const override;
326 virtual QVector< QLineF > bezierControlLines(const QPolygonF&) const override;
327
328 virtual QPolygonF equidistantPolygon(const QPolygonF&, double distance, bool withNodes) const override;
329
330 // calculating the parametric equations
331 virtual QVector< QwtSplinePolynomial > polynomials(const QPolygonF&) const override;
332 virtual QVector< double > slopes(const QPolygonF&) const override;
333 virtual QVector< double > curvatures(const QPolygonF&) const = 0;
334};
335
336#endif
Definition qwt_clipper.h:41
Base class for spline interpolations with C1 (first order parametric) continuity
Definition qwt_spline.h:265
virtual QVector< double > slopes(const QPolygonF &) const =0
Find the first derivative at the control points
Base class for spline interpolations with C2 (second order parametric) continuity
Definition qwt_spline.h:295
virtual QVector< double > curvatures(const QPolygonF &) const =0
Find the second derivative at the control points
BoundaryConditionC2
Boundary condition that requires C2 continuity
Definition qwt_spline.h:303
Base class for spline interpolations with G1 (first order geometric) continuity
Definition qwt_spline.h:247
Base class for spline interpolation
Definition qwt_spline.h:224
virtual QVector< QLineF > bezierControlLines(const QPolygonF &) const =0
Interpolate a curve with Bezier curves
Curve parametrization used for a spline interpolation
Definition qwt_spline_parametrization.h:62
A cubic polynomial without constant term
Definition qwt_spline_polynomial.h:48
Base class for all splines
Definition qwt_spline.h:74
BoundaryPosition
position of a boundary condition
Definition qwt_spline.h:116
@ AtBeginning
the condition is at the beginning of the polynomial
Definition qwt_spline.h:118
virtual QPainterPath painterPath(const QPolygonF &) const =0
Get painter path from polygon (pure virtual)
BoundaryType
Boundary type specifying the spline at its endpoints
Definition qwt_spline.h:82
@ PeriodicPolygon
Definition qwt_spline.h:95
@ ConditionalBoundaries
Definition qwt_spline.h:88
virtual ~QwtSpline()
Destructor
BoundaryCondition
Boundary condition
Definition qwt_spline.h:136
@ Clamped2
Definition qwt_spline.h:150
@ Clamped3
Definition qwt_spline.h:159
@ Clamped1
Definition qwt_spline.h:141