QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
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 "qgsbox3d.h"
25
26#include <QPainterPath>
27
28class QgsLineString;
29
35class CORE_EXPORT QgsCurve: public QgsAbstractGeometry SIP_ABSTRACT
36{
37 public:
38
39 QgsCurve() = default;
40
44 virtual bool equals( const QgsCurve &other ) const = 0;
45
46 bool operator==( const QgsAbstractGeometry &other ) const override;
47 bool operator!=( const QgsAbstractGeometry &other ) const override;
48
49 QgsCurve *clone() const override = 0 SIP_FACTORY;
50
55 virtual QgsPoint startPoint() const = 0;
56
61 virtual QgsPoint endPoint() const = 0;
62
68 virtual bool isClosed() const SIP_HOLDGIL;
69
79 virtual bool isClosed2D() const SIP_HOLDGIL;
80
84 virtual bool isRing() const SIP_HOLDGIL;
85
95 virtual QgsLineString *curveToLine( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const = 0 SIP_FACTORY;
96
100 virtual void addToPainterPath( QPainterPath &path ) const = 0;
101 QPainterPath asQPainterPath() const override;
102
107 virtual void drawAsPolygon( QPainter &p ) const = 0;
108
112 virtual void points( QgsPointSequence &pt SIP_OUT ) const = 0;
113
117 virtual int numPoints() const = 0;
118
119#ifdef SIP_RUN
120 int __len__() const;
121 % Docstring
122 Returns the number of points in the curve.
123 % End
124 % MethodCode
125 sipRes = sipCpp->numPoints();
126 % End
127
129 int __bool__() const;
130 % MethodCode
131 sipRes = true;
132 % End
133#endif
134
138 virtual void sumUpArea( double &sum SIP_OUT ) const = 0;
139
141 bool nextVertex( QgsVertexId &id, QgsPoint &vertex SIP_OUT ) const override;
142 void adjacentVertices( QgsVertexId vertex, QgsVertexId &previousVertex SIP_OUT, QgsVertexId &nextVertex SIP_OUT ) const override;
143 int vertexNumberFromVertexId( QgsVertexId id ) const override;
144
152 virtual bool pointAt( int node, QgsPoint &point SIP_OUT, Qgis::VertexType &type SIP_OUT ) const = 0;
153
164 virtual int indexOf( const QgsPoint &point ) const = 0;
165
169 virtual QgsCurve *reversed() const = 0 SIP_FACTORY;
170
171 QgsAbstractGeometry *boundary() const override SIP_FACTORY;
172
173 QString asKml( int precision = 17 ) const override;
174
180 QgsCurve *segmentize( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const override SIP_FACTORY;
181
182 int vertexCount( int part = 0, int ring = 0 ) const override;
183 int ringCount( int part = 0 ) const override;
184 int partCount() const override;
185 QgsPoint vertexAt( QgsVertexId id ) const override;
186 QgsCurve *toCurveType() const override SIP_FACTORY;
187 void normalize() final SIP_HOLDGIL;
188
189 QgsBox3D boundingBox3D() const override;
190 bool isValid( QString &error SIP_OUT, Qgis::GeometryValidityFlags flags = Qgis::GeometryValidityFlags() ) const override;
191
197 virtual double xAt( int index ) const = 0;
198
204 virtual double yAt( int index ) const = 0;
205
212 virtual double zAt( int index ) const = 0;
213
220 virtual double mAt( int index ) const = 0;
221
225 virtual QPolygonF asQPolygonF() const;
226
238 virtual QgsPoint *interpolatePoint( double distance ) const = 0 SIP_FACTORY;
239
252 virtual QgsCurve *curveSubstring( double startDistance, double endDistance ) const = 0 SIP_FACTORY;
253
261 double straightDistance2d() const;
262
272 double sinuosity() const;
273
281 Qgis::AngularDirection orientation() const;
282
294 virtual void scroll( int firstVertexIndex ) = 0;
295
310 virtual double distanceBetweenVertices( QgsVertexId fromVertex, QgsVertexId toVertex ) const = 0;
311
312#ifndef SIP_RUN
313
322 inline static const QgsCurve *cast( const QgsAbstractGeometry *geom )
323 {
324 if ( !geom )
325 return nullptr;
326
327 const Qgis::WkbType type = geom->wkbType();
329 {
330 return static_cast<const QgsCurve *>( geom );
331 }
332 return nullptr;
333 }
334
343 inline static QgsCurve *cast( QgsAbstractGeometry *geom )
344 {
345 if ( !geom )
346 return nullptr;
347
348 const Qgis::WkbType type = geom->wkbType();
350 {
351 return static_cast<QgsCurve *>( geom );
352 }
353 return nullptr;
354 }
355
366 virtual std::tuple< std::unique_ptr< QgsCurve >, std::unique_ptr< QgsCurve > > splitCurveAtVertex( int index ) const = 0;
367
368#endif
369
370
371 protected:
372
373 void clearCache() const override;
374
375 int childCount() const override;
376 QgsPoint childPoint( int index ) const override;
377#ifndef SIP_RUN
378
383 bool snapToGridPrivate( double hSpacing, double vSpacing, double dSpacing, double mSpacing,
384 const QVector<double> &srcX, const QVector<double> &srcY, const QVector<double> &srcZ, const QVector<double> &srcM,
385 QVector<double> &outX, QVector<double> &outY, QVector<double> &outZ, QVector<double> &outM,
386 bool removeRedundantPoints ) const;
387#endif
388
393
394 mutable bool mHasCachedSummedUpArea = false;
395 mutable double mSummedUpArea = 0;
396
397 private:
398
399 mutable bool mHasCachedValidity = false;
400 mutable QString mValidityFailureReason;
401
402 friend class TestQgsGeometry;
403};
404
405#endif // QGSCURVE_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
VertexType
Types of vertex.
Definition qgis.h:3066
@ Line
Lines.
Definition qgis.h:360
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:277
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.
@ MaximumAngle
Maximum angle between generating radii (lines from arc center to output vertices).
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.
Qgis::WkbType wkbType() const
Returns the WKB type of the geometry.
virtual bool operator!=(const QgsAbstractGeometry &other) const =0
virtual QgsCoordinateSequence coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
virtual bool operator==(const QgsAbstractGeometry &other) const =0
QgsAbstractGeometry()=default
virtual bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const =0
Returns next vertex id and coordinates.
A 3-dimensional box composed of x, y, z coordinates.
Definition qgsbox3d.h:42
virtual bool equals(const QgsCurve &other) const =0
Checks whether this curve exactly equals another curve.
Qgis::AngularDirection orientation() const
Returns the curve's orientation, e.g.
Definition qgscurve.cpp:287
virtual int numPoints() const =0
Returns the number of points in the curve.
double sinuosity() const
Returns the curve sinuosity, which is the ratio of the curve length() to curve straightDistance2d().
Definition qgscurve.cpp:278
bool mHasCachedSummedUpArea
Definition qgscurve.h:394
void normalize() final
Reorganizes the geometry into a normalized form (or "canonical" form).
Definition qgscurve.cpp:212
QPainterPath asQPainterPath() const override
Returns the geometry represented as a QPainterPath.
Definition qgscurve.cpp:71
virtual void scroll(int firstVertexIndex)=0
Scrolls the curve vertices so that they start with the vertex at the given index.
int partCount() const override
Returns count of parts contained in the geometry.
Definition qgscurve.cpp:194
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
Definition qgscurve.cpp:176
virtual bool isRing() const
Returns true if the curve is a ring.
Definition qgscurve.cpp:66
virtual bool pointAt(int node, QgsPoint &point, Qgis::VertexType &type) const =0
Returns the point and vertex id of a point within the curve.
QgsBox3D boundingBox3D() const override
Returns the 3D bounding box for the geometry.
Definition qgscurve.cpp:239
virtual QgsCurve * curveSubstring(double startDistance, double endDistance) const =0
Returns a new curve representing a substring of this curve.
virtual bool isClosed() const
Returns true if the curve is closed.
Definition qgscurve.cpp:54
static const QgsCurve * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsCurve.
Definition qgscurve.h:322
bool isValid(QString &error, Qgis::GeometryValidityFlags flags=Qgis::GeometryValidityFlags()) const override
Checks validity of the geometry, and returns true if the geometry is valid.
Definition qgscurve.cpp:248
virtual bool isClosed2D() const
Returns true if the curve is closed.
Definition qgscurve.cpp:42
int vertexCount(int part=0, int ring=0) const override
Returns the number of vertices of which this geometry is built.
Definition qgscurve.cpp:181
QgsPoint vertexAt(QgsVertexId id) const override
Returns the point corresponding to a specified vertex id.
Definition qgscurve.cpp:199
virtual QPolygonF asQPolygonF() const
Returns a QPolygonF representing the points.
Definition qgscurve.cpp:267
virtual void addToPainterPath(QPainterPath &path) const =0
Adds a curve to a painter path.
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...
friend class TestQgsGeometry
Definition qgscurve.h:402
QgsCurve * toCurveType() const override
Returns the geometry converted to the more generic curve type.
Definition qgscurve.cpp:207
virtual void sumUpArea(double &sum) const =0
Sums up the area of the curve by iterating over the vertices (shoelace formula).
bool snapToGridPrivate(double hSpacing, double vSpacing, double dSpacing, double mSpacing, const QVector< double > &srcX, const QVector< double > &srcY, const QVector< double > &srcZ, const QVector< double > &srcM, QVector< double > &outX, QVector< double > &outY, QVector< double > &outZ, QVector< double > &outM, bool removeRedundantPoints) const
Helper function for QgsCurve subclasses to snap to grids.
Definition qgscurve.cpp:318
QString asKml(int precision=17) const override
Returns a KML representation of the geometry.
Definition qgscurve.cpp:165
QgsBox3D mBoundingBox
Cached bounding box.
Definition qgscurve.h:392
virtual QgsPoint * interpolatePoint(double distance) const =0
Returns an interpolated point on the curve at the specified distance.
QgsCurve * clone() const override=0
Clones the geometry by performing a deep copy.
virtual double distanceBetweenVertices(QgsVertexId fromVertex, QgsVertexId toVertex) const =0
Returns the distance along the curve between two vertices.
virtual double xAt(int index) const =0
Returns the x-coordinate of the specified node in the line string.
int ringCount(int part=0) const override
Returns the number of rings of which this geometry is built.
Definition qgscurve.cpp:188
virtual QgsPoint startPoint() const =0
Returns the starting point of the curve.
static QgsCurve * cast(QgsAbstractGeometry *geom)
Cast the geom to a QgsCurve.
Definition qgscurve.h:343
double straightDistance2d() const
Returns the straight distance of the curve, i.e.
Definition qgscurve.cpp:273
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...
bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const override
Returns next vertex id and coordinates.
Definition qgscurve.cpp:88
virtual double zAt(int index) const =0
Returns the z-coordinate of the specified node in the line string.
virtual QgsCurve * reversed() const =0
Returns a reversed copy of the curve, where the direction of the curve has been flipped.
virtual void drawAsPolygon(QPainter &p) const =0
Draws the curve as a polygon on the specified QPainter.
virtual double mAt(int index) const =0
Returns the m-coordinate of the specified node in the line string.
virtual QgsPoint endPoint() const =0
Returns the end point of the curve.
virtual double yAt(int index) const =0
Returns the y-coordinate of the specified node in the line string.
virtual void points(QgsPointSequence &pt) const =0
Returns a list of points within the curve.
virtual QgsLineString * curveToLine(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const =0
Returns a new line string geometry corresponding to a segmentized approximation of the curve.
double mSummedUpArea
Definition qgscurve.h:395
QgsCurve()=default
Line string geometry type, with support for z-dimension and m-values.
Point geometry type, with support for z-dimension and m-values.
Definition qgspoint.h:49
static Qgis::GeometryType geometryType(Qgis::WkbType type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static Q_INVOKABLE bool isSingleType(Qgis::WkbType type)
Returns true if the WKB type is a single type.
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_ABSTRACT
Definition qgis_sip.h:221
#define SIP_HOLDGIL
Definition qgis_sip.h:179
#define SIP_FACTORY
Definition qgis_sip.h:84
QVector< QgsRingSequence > QgsCoordinateSequence
QVector< QgsPoint > QgsPointSequence
Utility class for identifying a unique vertex within a geometry.
Definition qgsvertexid.h:30