QWT 7.0.1
Loading...
Searching...
No Matches
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 > class QVector;
41#endif
42
74class QWT_EXPORT QwtSpline
75{
76 public:
83 {
90
97
109 ClosedPolygon
110 };
111
117 {
120
122 AtEnd
123 };
124
137 {
143
152
161
170 LinearRunout
171 };
172
173 QwtSpline();
174 virtual ~QwtSpline();
175
176 void setParametrization( int type );
177 void setParametrization( QwtSplineParametrization* );
178 const QwtSplineParametrization* parametrization() const;
179
180 void setBoundaryType( BoundaryType );
181 BoundaryType boundaryType() const;
182
183 void setBoundaryValue( BoundaryPosition, double value );
184 double boundaryValue( BoundaryPosition ) const;
185
186 void setBoundaryCondition( BoundaryPosition, int condition );
187 int boundaryCondition( BoundaryPosition ) const;
188
189 void setBoundaryConditions( int condition,
190 double valueBegin = 0.0, double valueEnd = 0.0 );
191
192 virtual QPolygonF polygon( const QPolygonF&, double tolerance ) const;
193 virtual QPainterPath painterPath( const QPolygonF& ) const = 0;
194
195 virtual uint locality() const;
196
197 private:
198 Q_DISABLE_COPY(QwtSpline)
199
200 class PrivateData;
201 PrivateData* m_data;
202};
203
210class QWT_EXPORT QwtSplineInterpolating : public QwtSpline
211{
212 public:
214 virtual ~QwtSplineInterpolating();
215
216 virtual QPolygonF equidistantPolygon( const QPolygonF&,
217 double distance, bool withNodes ) const;
218
219 virtual QPolygonF polygon(
220 const QPolygonF&, double tolerance ) const QWT_OVERRIDE;
221
222 virtual QPainterPath painterPath( const QPolygonF& ) const QWT_OVERRIDE;
223 virtual QVector< QLineF > bezierControlLines( const QPolygonF& ) const = 0;
224
225 private:
226 Q_DISABLE_COPY(QwtSplineInterpolating)
227};
228
233class QWT_EXPORT QwtSplineG1 : public QwtSplineInterpolating
234{
235 public:
236 QwtSplineG1();
237 virtual ~QwtSplineG1();
238};
239
252class QWT_EXPORT QwtSplineC1 : public QwtSplineG1
253{
254 public:
255 QwtSplineC1();
256 virtual ~QwtSplineC1();
257
258 virtual QPainterPath painterPath( const QPolygonF& ) const QWT_OVERRIDE;
259 virtual QVector< QLineF > bezierControlLines( const QPolygonF& ) const QWT_OVERRIDE;
260
261 virtual QPolygonF equidistantPolygon( const QPolygonF&,
262 double distance, bool withNodes ) const QWT_OVERRIDE;
263
264 // these methods are the non parametric part
265 virtual QVector< QwtSplinePolynomial > polynomials( const QPolygonF& ) const;
266 virtual QVector< double > slopes( const QPolygonF& ) const = 0;
267
268 virtual double slopeAtBeginning( const QPolygonF&, double slopeNext ) const;
269 virtual double slopeAtEnd( const QPolygonF&, double slopeBefore ) const;
270};
271
284class QWT_EXPORT QwtSplineC2 : public QwtSplineC1
285{
286 public:
293 {
300 CubicRunout = LinearRunout + 1,
301
309 NotAKnot
310 };
311
312 QwtSplineC2();
313 virtual ~QwtSplineC2();
314
315 virtual QPainterPath painterPath( const QPolygonF& ) const QWT_OVERRIDE;
316 virtual QVector< QLineF > bezierControlLines( const QPolygonF& ) const QWT_OVERRIDE;
317
318 virtual QPolygonF equidistantPolygon( const QPolygonF&,
319 double distance, bool withNodes ) const QWT_OVERRIDE;
320
321 // calculating the parametric equations
322 virtual QVector< QwtSplinePolynomial > polynomials( const QPolygonF& ) const QWT_OVERRIDE;
323 virtual QVector< double > slopes( const QPolygonF& ) const QWT_OVERRIDE;
324 virtual QVector< double > curvatures( const QPolygonF& ) const = 0;
325};
326
327#endif
Definition qwt_clipper.h:40
Base class for spline interpolations providing a first order parametric continuity ( C1 ) between adj...
Definition qwt_spline.h:253
virtual QVector< double > slopes(const QPolygonF &) const =0
Find the first derivative at the control points.
Base class for spline interpolations providing a second order parametric continuity ( C2 ) between ad...
Definition qwt_spline.h:285
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:293
Base class for spline interpolations providing a first order geometric continuity ( G1 ) between adjo...
Definition qwt_spline.h:234
Base class for a spline interpolation.
Definition qwt_spline.h:211
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:75
BoundaryPosition
position of a boundary condition
Definition qwt_spline.h:117
@ AtBeginning
the condition is at the beginning of the polynomial
Definition qwt_spline.h:119
virtual QPainterPath painterPath(const QPolygonF &) const =0
Approximates a polygon piecewise with cubic Bezier curves and returns them as QPainterPath.
BoundaryType
Boundary type specifying the spline at its endpoints.
Definition qwt_spline.h:83
@ PeriodicPolygon
The polynomials at the start/endpoint are found by using imaginary additional points.
Definition qwt_spline.h:96
@ ConditionalBoundaries
The polynomials at the start/endpoint depend on specific conditions.
Definition qwt_spline.h:89
BoundaryCondition
Boundary condition.
Definition qwt_spline.h:137
@ Clamped2
The second derivative at the end point is given.
Definition qwt_spline.h:151
@ Clamped3
The third derivative at the end point is given.
Definition qwt_spline.h:160
@ Clamped1
The first derivative at the end point is given.
Definition qwt_spline.h:142