QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
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 
27 class QgsLineString;
28 
35 class CORE_EXPORT QgsCurve: public QgsAbstractGeometry
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 
70  virtual bool isClosed() const SIP_HOLDGIL;
71 
75  virtual bool isRing() const SIP_HOLDGIL;
76 
86  virtual QgsLineString *curveToLine( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const = 0 SIP_FACTORY;
87 
91  virtual void addToPainterPath( QPainterPath &path ) const = 0;
92  QPainterPath asQPainterPath() const override;
93 
98  virtual void drawAsPolygon( QPainter &p ) const = 0;
99 
103  virtual void points( QgsPointSequence &pt SIP_OUT ) const = 0;
104 
108  virtual int numPoints() const = 0;
109 
110 #ifdef SIP_RUN
111  int __len__() const;
112  % Docstring
113  Returns the number of points in the curve.
114  % End
115  % MethodCode
116  sipRes = sipCpp->numPoints();
117  % End
118 
120  int __bool__() const;
121  % MethodCode
122  sipRes = true;
123  % End
124 #endif
125 
129  virtual void sumUpArea( double &sum SIP_OUT ) const = 0;
130 
131  QgsCoordinateSequence coordinateSequence() const override;
132  bool nextVertex( QgsVertexId &id, QgsPoint &vertex SIP_OUT ) const override;
133  void adjacentVertices( QgsVertexId vertex, QgsVertexId &previousVertex SIP_OUT, QgsVertexId &nextVertex SIP_OUT ) const override;
134  int vertexNumberFromVertexId( QgsVertexId id ) const override;
135 
143  virtual bool pointAt( int node, QgsPoint &point SIP_OUT, QgsVertexId::VertexType &type SIP_OUT ) const = 0;
144 
149  virtual QgsCurve *reversed() const = 0 SIP_FACTORY;
150 
151  QgsAbstractGeometry *boundary() const override SIP_FACTORY;
152 
153  QString asKml( int precision = 17 ) const override;
154 
160  QgsCurve *segmentize( double tolerance = M_PI_2 / 90, SegmentationToleranceType toleranceType = MaximumAngle ) const override SIP_FACTORY;
161 
162  int vertexCount( int part = 0, int ring = 0 ) const override;
163  int ringCount( int part = 0 ) const override;
164  int partCount() const override;
165  QgsPoint vertexAt( QgsVertexId id ) const override;
166  QgsCurve *toCurveType() const override SIP_FACTORY;
167 
168  QgsRectangle boundingBox() const override;
169  bool isValid( QString &error SIP_OUT, int flags = 0 ) const override;
170 
176  virtual double xAt( int index ) const = 0;
177 
183  virtual double yAt( int index ) const = 0;
184 
188  virtual QPolygonF asQPolygonF() const;
189 
201  virtual QgsPoint *interpolatePoint( double distance ) const = 0 SIP_FACTORY;
202 
215  virtual QgsCurve *curveSubstring( double startDistance, double endDistance ) const = 0 SIP_FACTORY;
216 
224  double straightDistance2d() const;
225 
235  double sinuosity() const;
236 
239  {
242  };
243 
251  Orientation orientation() const;
252 
253 #ifndef SIP_RUN
254 
262  inline const QgsCurve *cast( const QgsAbstractGeometry *geom ) const
263  {
264  if ( !geom )
265  return nullptr;
266 
267  QgsWkbTypes::Type type = geom->wkbType();
269  {
270  return static_cast<const QgsCurve *>( geom );
271  }
272  return nullptr;
273  }
274 #endif
275 
276 
277  protected:
278 
279  void clearCache() const override;
280 
281  int childCount() const override;
282  QgsPoint childPoint( int index ) const override;
283 
284 #ifndef SIP_RUN
285 
290  bool snapToGridPrivate( double hSpacing, double vSpacing, double dSpacing, double mSpacing,
291  const QVector<double> &srcX, const QVector<double> &srcY, const QVector<double> &srcZ, const QVector<double> &srcM,
292  QVector<double> &outX, QVector<double> &outY, QVector<double> &outZ, QVector<double> &outM ) const;
293 #endif
294 
295  private:
296 
297  mutable QgsRectangle mBoundingBox;
298 
299  mutable bool mHasCachedValidity = false;
300  mutable QString mValidityFailureReason;
301 };
302 
303 #endif // QGSCURVE_H
QgsCurve
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
QgsAbstractGeometry::coordinateSequence
virtual QgsCoordinateSequence coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
QgsCurve::pointAt
virtual bool pointAt(int node, QgsPoint &point, QgsVertexId::VertexType &type) const =0
Returns the point and vertex id of a point within the curve.
QgsCoordinateSequence
QVector< QgsRingSequence > QgsCoordinateSequence
Definition: qgsabstractgeometry.h:51
QgsWkbTypes::isSingleType
static bool isSingleType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a single type.
Definition: qgswkbtypes.h:822
QgsAbstractGeometry::adjacentVertices
virtual void adjacentVertices(QgsVertexId vertex, QgsVertexId &previousVertex, QgsVertexId &nextVertex) const =0
Returns the vertices adjacent to a specified vertex within a geometry.
QgsAbstractGeometry::clearCache
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
Definition: qgsabstractgeometry.cpp:112
QgsCurve::startPoint
virtual QgsPoint startPoint() const =0
Returns the starting point of the curve.
qgsrectangle.h
QgsPoint
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:38
QgsCurve::reversed
virtual QgsCurve * reversed() const =0
Returns a reversed copy of the curve, where the direction of the curve has been flipped.
SIP_OUT
#define SIP_OUT
Definition: qgis_sip.h:58
QgsWkbTypes::Type
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
QgsAbstractGeometry::SegmentationToleranceType
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
Definition: qgsabstractgeometry.h:115
QgsLineString
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:44
QgsCurve::sumUpArea
virtual void sumUpArea(double &sum) const =0
Sums up the area of the curve by iterating over the vertices (shoelace formula).
QgsRectangle
A rectangle specified with double values.
Definition: qgsrectangle.h:42
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsCurve::QgsCurve
QgsCurve()=default
Constructor for QgsCurve.
precision
int precision
Definition: qgswfsgetfeature.cpp:49
SIP_HOLDGIL
#define SIP_HOLDGIL
Definition: qgis_sip.h:157
QgsAbstractGeometry::wkbType
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
Definition: qgsabstractgeometry.h:193
QgsCurve::endPoint
virtual QgsPoint endPoint() const =0
Returns the end point of the curve.
QgsCurve::Clockwise
@ Clockwise
Clockwise orientation.
Definition: qgscurve.h:240
QgsAbstractGeometry::childPoint
virtual QgsPoint childPoint(int index) const
Returns point at index (for geometries without child geometries - i.e.
Definition: qgsabstractgeometry.cpp:292
QgsCurve::equals
virtual bool equals(const QgsCurve &other) const =0
Checks whether this curve exactly equals another curve.
qgis_sip.h
QgsCurve::CounterClockwise
@ CounterClockwise
Counter-clockwise orientation.
Definition: qgscurve.h:241
QgsAbstractGeometry::vertexNumberFromVertexId
virtual int vertexNumberFromVertexId(QgsVertexId id) const =0
Returns the vertex number corresponding to a vertex id.
QgsAbstractGeometry
Abstract base class for all geometries.
Definition: qgsabstractgeometry.h:74
QgsCurve::clone
QgsCurve * clone() const override=0
Clones the geometry by performing a deep copy.
QgsWkbTypes::LineGeometry
@ LineGeometry
Definition: qgswkbtypes.h:143
QgsCurve::cast
const QgsCurve * cast(const QgsAbstractGeometry *geom) const
Cast the geom to a QgsCurve.
Definition: qgscurve.h:262
QgsPointSequence
QVector< QgsPoint > QgsPointSequence
Definition: qgsabstractgeometry.h:46
QgsAbstractGeometry::operator!=
virtual bool operator!=(const QgsAbstractGeometry &other) const =0
QgsAbstractGeometry::childCount
virtual int childCount() const
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
Definition: qgsabstractgeometry.h:1013
QgsVertexId
Utility class for identifying a unique vertex within a geometry.
Definition: qgsabstractgeometry.h:1059
QgsWkbTypes::geometryType
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:938
QgsAbstractGeometry::boundary
virtual QgsAbstractGeometry * boundary() const =0
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
QgsVertexId::VertexType
VertexType
Type of vertex.
Definition: qgsabstractgeometry.h:1065
QgsAbstractGeometry::operator==
virtual bool operator==(const QgsAbstractGeometry &other) const =0
QgsCurve::Orientation
Orientation
Curve orientation.
Definition: qgscurve.h:239
qgsabstractgeometry.h
QgsAbstractGeometry::nextVertex
virtual bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const =0
Returns next vertex id and coordinates.