mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-04 00:04:03 -04:00
* require qwt >=6.2 (and fallback to internal 6.3 if system's qwt doesn't suffice) * debian doesn't have qwt for Qt6 and won't have it for trixie
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
/******************************************************************************
|
||
* Qwt Widget Library
|
||
* Copyright (C) 1997 Josef Wilgen
|
||
* Copyright (C) 2002 Uwe Rathmann
|
||
*
|
||
* This library is free software; you can redistribute it and/or
|
||
* modify it under the terms of the Qwt License, Version 1.0
|
||
*****************************************************************************/
|
||
|
||
#ifndef QWT_BEZIER_H
|
||
#define QWT_BEZIER_H
|
||
|
||
#include "qwt_global.h"
|
||
|
||
class QPointF;
|
||
class QPolygonF;
|
||
|
||
/*!
|
||
\brief An implementation of the de Casteljau’s Algorithm for interpolating
|
||
Bézier curves
|
||
|
||
The flatness criterion for terminating the subdivision is based on
|
||
"Piecewise Linear Approximation of Bézier Curves" by
|
||
Roger Willcocks ( http://www.rops.org )
|
||
|
||
This article explains the maths behind in a very nice way:
|
||
https://jeremykun.com/2013/05/11/bezier-curves-and-picasso
|
||
*/
|
||
class QWT_EXPORT QwtBezier
|
||
{
|
||
public:
|
||
QwtBezier( double tolerance = 0.5 );
|
||
~QwtBezier();
|
||
|
||
void setTolerance( double tolerance );
|
||
double tolerance() const;
|
||
|
||
QPolygonF toPolygon( const QPointF& p1, const QPointF& cp1,
|
||
const QPointF& cp2, const QPointF& p2 ) const;
|
||
|
||
void appendToPolygon( const QPointF& p1, const QPointF& cp1,
|
||
const QPointF& cp2, const QPointF& p2, QPolygonF& polygon ) const;
|
||
|
||
static QPointF pointAt( const QPointF& p1, const QPointF& cp1,
|
||
const QPointF& cp2, const QPointF& p2, double t );
|
||
|
||
private:
|
||
double m_tolerance;
|
||
double m_flatness;
|
||
};
|
||
|
||
/*!
|
||
\return Tolerance, that is used as criterion for the subdivision
|
||
\sa setTolerance()
|
||
*/
|
||
inline double QwtBezier::tolerance() const
|
||
{
|
||
return m_tolerance;
|
||
}
|
||
|
||
#endif
|