17#ifndef QGSBEZIERDATA_H
18#define QGSBEZIERDATA_H
42struct GUI_EXPORT QgsAnchorWithHandles
49 QgsAnchorWithHandles() =
default;
52 explicit QgsAnchorWithHandles(
const QgsPoint &point )
55 , rightHandle( point )
59 QgsAnchorWithHandles(
const QgsPoint &point,
const QgsPoint &left,
const QgsPoint &right )
62 , rightHandle( right )
79class GUI_EXPORT QgsBezierData
83 QgsBezierData() =
default;
86 static constexpr int INTERPOLATION_POINTS = 32;
93 void addAnchor(
const QgsPoint &point );
101 void moveAnchor(
int index,
const QgsPoint &point );
108 void moveHandle(
int index,
const QgsPoint &point );
115 void insertAnchor(
int segmentIndex,
const QgsPoint &point );
121 void deleteAnchor(
int index );
127 void retractHandle(
int index );
135 void extendHandle(
int index,
const QgsPoint &point );
138 int anchorCount()
const {
return mData.count(); }
141 int handleCount()
const {
return mData.count() * 2; }
144 QgsPoint anchor(
int index )
const;
147 QgsPoint handle(
int index )
const;
150 QVector<QgsPoint> anchors()
const;
153 QVector<QgsPoint> handles()
const;
160 const QgsAnchorWithHandles &anchorWithHandles(
int index )
const;
174 std::unique_ptr<QgsNurbsCurve> asNurbsCurve(
int degree = 3 )
const;
188 static QgsBezierData fromPolyBezierControlPoints(
const QVector<QgsPoint> &controlPoints,
int degree = 3 );
201 static QgsBezierData fromPolyBezierControlPoints(
const QVector<QgsPointXY> &controlPoints,
int degree = 3 );
211 static void calculateSymmetricHandles( QVector<QgsPoint> &controlPoints,
int anchorIndex,
const QgsPoint &mousePosition );
222 static void calculateSymmetricHandles(
const QgsPoint &anchor,
const QgsPoint &mousePosition, QgsPoint *handleFollow, QgsPoint *handleOpposite );
233 void calculateSymmetricHandles(
int anchorIndex,
const QgsPoint &mousePosition );
239 bool isEmpty()
const {
return mData.isEmpty(); }
247 int findClosestAnchor(
const QgsPoint &point,
double tolerance )
const;
255 int findClosestHandle(
const QgsPoint &point,
double tolerance )
const;
263 int findClosestSegment(
const QgsPoint &point,
double tolerance )
const;
266 QVector<QgsAnchorWithHandles> mData;
267 static const QgsAnchorWithHandles sInvalidAnchor;
Represents a NURBS (Non-Uniform Rational B-Spline) curve geometry in 2D/3D.
Point geometry type, with support for z-dimension and m-values.
QVector< QgsPoint > QgsPointSequence