QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgscurve.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscurve.h
3 ------------
4 begin : September 2014
5 copyright : (C) 2014 by Marco Hugentobler
6 email : marco at sourcepole dot ch
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSCURVE_H
19#define QGSCURVE_H
20
21#include "qgis_core.h"
22#include "qgis_sip.h"
23#include "qgsabstractgeometry.h"
24#include "qgsrectangle.h"
25#include <QPainterPath>
26
27class QgsLineString;
28
35class CORE_EXPORT QgsCurve: public QgsAbstractGeometry SIP_ABSTRACT
36{
37 public:
38
42 QgsCurve() = default;
43
48 virtual bool equals( const QgsCurve &other ) const = 0;
49
50 bool operator==( const QgsAbstractGeometry &other ) const override;
51 bool operator!=( const QgsAbstractGeometry &other ) const override;
52
53 QgsCurve *clone() const override = 0 SIP_FACTORY;
54
59 virtual QgsPoint startPoint() const = 0;
60
65 virtual QgsPoint endPoint() const = 0;
66
72 virtual bool isClosed() const SIP_HOLDGIL;
73
83 virtual bool isClosed2D() const SIP_HOLDGIL;
84
88 virtual bool isRing() const SIP_HOLDGIL;
89
99 virtual QgsLineString *curveToLine( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const = 0 SIP_FACTORY;
100
104 virtual void addToPainterPath( QPainterPath &path ) const = 0;
105 QPainterPath asQPainterPath() const override;
106
111 virtual void drawAsPolygon( QPainter &p ) const = 0;
112
116 virtual void points( QgsPointSequence &pt SIP_OUT ) const = 0;
117
121 virtual int numPoints() const = 0;
122
123#ifdef SIP_RUN
124 int __len__() const;
125 % Docstring
126 Returns the number of points in the curve.
127 % End
128 % MethodCode
129 sipRes = sipCpp->numPoints();
130 % End
131
133 int __bool__() const;
134 % MethodCode
135 sipRes = true;
136 % End
137#endif
138
142 virtual void sumUpArea( double &sum SIP_OUT ) const = 0;
143
145 bool nextVertex( QgsVertexId &id, QgsPoint &vertex SIP_OUT ) const override;
146 void adjacentVertices( QgsVertexId vertex, QgsVertexId &previousVertex SIP_OUT, QgsVertexId &nextVertex SIP_OUT ) const override;
147 int vertexNumberFromVertexId( QgsVertexId id ) const override;
148
156 virtual bool pointAt( int node, QgsPoint &point SIP_OUT, Qgis::VertexType &type SIP_OUT ) const = 0;
157
168 virtual int indexOf( const QgsPoint &point ) const = 0;
169
174 virtual QgsCurve *reversed() const = 0 SIP_FACTORY;
175
176 QgsAbstractGeometry *boundary() const override SIP_FACTORY;
177
178 QString asKml( int precision = 17 ) const override;
179
185 QgsCurve *segmentize( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const override SIP_FACTORY;
186
187 int vertexCount( int part = 0, int ring = 0 ) const override;
188 int ringCount( int part = 0 ) const override;
189 int partCount() const override;
190 QgsPoint vertexAt( QgsVertexId id ) const override;
191 QgsCurve *toCurveType() const override SIP_FACTORY;
192 void normalize() final SIP_HOLDGIL;
193
194 QgsRectangle boundingBox() const override;
195 bool isValid( QString &error SIP_OUT, Qgis::GeometryValidityFlags flags = Qgis::GeometryValidityFlags() ) const override;
196
202 virtual double xAt( int index ) const = 0;
203
209 virtual double yAt( int index ) const = 0;
210
214 virtual QPolygonF asQPolygonF() const;
215
227 virtual QgsPoint *interpolatePoint( double distance ) const = 0 SIP_FACTORY;
228
241 virtual QgsCurve *curveSubstring( double startDistance, double endDistance ) const = 0 SIP_FACTORY;
242
250 double straightDistance2d() const;
251
261 double sinuosity() const;
262
270 Qgis::AngularDirection orientation() const;
271
283 virtual void scroll( int firstVertexIndex ) = 0;
284
285#ifndef SIP_RUN
286
294 inline static const QgsCurve *cast( const QgsAbstractGeometry *geom )
295 {
296 if ( !geom )
297 return nullptr;
298
299 const QgsWkbTypes::Type type = geom->wkbType();
301 {
302 return static_cast<const QgsCurve *>( geom );
303 }
304 return nullptr;
305 }
306
317 virtual std::tuple< std::unique_ptr< QgsCurve >, std::unique_ptr< QgsCurve > > splitCurveAtVertex( int index ) const = 0;
318
319#endif
320
321
322 protected:
323
324 void clearCache() const override;
325
326 int childCount() const override;
327 QgsPoint childPoint( int index ) const override;
328#ifndef SIP_RUN
329
334 bool snapToGridPrivate( double hSpacing, double vSpacing, double dSpacing, double mSpacing,
335 const QVector<double> &srcX, const QVector<double> &srcY, const QVector<double> &srcZ, const QVector<double> &srcM,
336 QVector<double> &outX, QVector<double> &outY, QVector<double> &outZ, QVector<double> &outM ) const;
337#endif
338
343
344 mutable bool mHasCachedSummedUpArea = false;
345 mutable double mSummedUpArea = 0;
346
347 private:
348
349 mutable bool mHasCachedValidity = false;
350 mutable QString mValidityFailureReason;
351
352 friend class TestQgsGeometry;
353};
354
355#endif // QGSCURVE_H
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:72
VertexType
Types of vertex.
Definition: qgis.h:1518
Abstract base class for all geometries.
virtual QgsPoint childPoint(int index) const
Returns point at index (for geometries without child geometries - i.e.
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
virtual int vertexNumberFromVertexId(QgsVertexId id) const =0
Returns the vertex number corresponding to a vertex id.
virtual QgsAbstractGeometry * boundary() const =0
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
virtual int childCount() const
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
virtual void adjacentVertices(QgsVertexId vertex, QgsVertexId &previousVertex, QgsVertexId &nextVertex) const =0
Returns the vertices adjacent to a specified vertex within a geometry.
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
virtual bool operator!=(const QgsAbstractGeometry &other) const =0
virtual QgsCoordinateSequence coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
virtual bool operator==(const QgsAbstractGeometry &other) const =0
virtual bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const =0
Returns next vertex id and coordinates.
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
virtual bool equals(const QgsCurve &other) const =0
Checks whether this curve exactly equals another curve.
virtual bool pointAt(int node, QgsPoint &point, Qgis::VertexType &type) const =0
Returns the point and vertex id of a point within the curve.
static const QgsCurve * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsCurve.
Definition: qgscurve.h:294
virtual int indexOf(const QgsPoint &point) const =0
Returns the index of the first vertex matching the given point, or -1 if a matching vertex is not fou...
virtual void sumUpArea(double &sum) const =0
Sums up the area of the curve by iterating over the vertices (shoelace formula).
QgsCurve * clone() const override=0
Clones the geometry by performing a deep copy.
virtual QgsPoint startPoint() const =0
Returns the starting point of the curve.
virtual std::tuple< std::unique_ptr< QgsCurve >, std::unique_ptr< QgsCurve > > splitCurveAtVertex(int index) const =0
Splits the curve at the specified vertex index, returning two curves which represent the portion of t...
QgsRectangle mBoundingBox
Cached bounding box.
Definition: qgscurve.h:342
virtual QgsCurve * reversed() const =0
Returns a reversed copy of the curve, where the direction of the curve has been flipped.
virtual QgsPoint endPoint() const =0
Returns the end point of the curve.
QgsCurve()=default
Constructor for QgsCurve.
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:45
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
A rectangle specified with double values.
Definition: qgsrectangle.h:42
static bool isSingleType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a single type.
Definition: qgswkbtypes.h:852
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
Definition: qgswkbtypes.h:968
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_ABSTRACT
Definition: qgis_sip.h:208
#define SIP_HOLDGIL
Definition: qgis_sip.h:166
#define SIP_FACTORY
Definition: qgis_sip.h:76
QVector< QgsRingSequence > QgsCoordinateSequence
QVector< QgsPoint > QgsPointSequence
int precision
Utility class for identifying a unique vertex within a geometry.
Definition: qgsvertexid.h:31