QGIS API Documentation  3.17.0-Master (a035f434f4)
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 static const QgsCurve *cast( const QgsAbstractGeometry *geom )
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
int precision
A rectangle specified with double values.
Definition: qgsrectangle.h:41
virtual int vertexNumberFromVertexId(QgsVertexId id) const =0
Returns the vertex number corresponding to a vertex id.
virtual int childCount() const
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
static const QgsCurve * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsCurve.
Definition: qgscurve.h:262
virtual bool isValid(QString &error, int flags=0) const =0
Checks validity of the geometry, and returns true if the geometry is valid.
virtual QgsAbstractGeometry * toCurveType() const =0
Returns the geometry converted to the more generic curve type.
virtual QgsPoint childPoint(int index) const
Returns point at index (for geometries without child geometries - i.e.
QVector< QgsRingSequence > QgsCoordinateSequence
virtual bool operator==(const QgsAbstractGeometry &other) const =0
virtual QgsAbstractGeometry * boundary() const =0
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
virtual bool nextVertex(QgsVertexId &id, QgsPoint &vertex) const =0
Returns next vertex id and coordinates.
virtual QgsRectangle boundingBox() const =0
Returns the minimal bounding box for the geometry.
virtual QgsAbstractGeometry * clone() const =0
Clones the geometry by performing a deep copy.
virtual bool operator!=(const QgsAbstractGeometry &other) const =0
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:69
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
Utility class for identifying a unique vertex within a geometry.
VertexType
Type of vertex.
#define SIP_HOLDGIL
Definition: qgis_sip.h:157
virtual QString asKml(int precision=17) const =0
Returns a KML representation of the geometry.
virtual int ringCount(int part=0) const =0
Returns the number of rings of which this geometry is built.
Orientation
Curve orientation.
Definition: qgscurve.h:238
Abstract base class for curved geometry type.
Definition: qgscurve.h:35
#define SIP_FACTORY
Definition: qgis_sip.h:76
Abstract base class for all geometries.
Counter-clockwise orientation.
Definition: qgscurve.h:241
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:37
Clockwise orientation.
Definition: qgscurve.h:240
QVector< QgsPoint > QgsPointSequence
virtual QgsCoordinateSequence coordinateSequence() const =0
Retrieves the sequence of geometries, rings and nodes.
virtual void adjacentVertices(QgsVertexId vertex, QgsVertexId &previousVertex, QgsVertexId &nextVertex) const =0
Returns the vertices adjacent to a specified vertex within a geometry.
#define SIP_OUT
Definition: qgis_sip.h:58
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:43
virtual int vertexCount(int part=0, int ring=0) const =0
Returns the number of vertices of which this geometry is built.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
static bool isSingleType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a single type.
Definition: qgswkbtypes.h:822
virtual QgsPoint vertexAt(QgsVertexId id) const =0
Returns the point corresponding to a specified vertex id.
virtual QgsAbstractGeometry * segmentize(double tolerance=M_PI/180., SegmentationToleranceType toleranceType=MaximumAngle) const
Returns a version of the geometry without curves.
virtual QPainterPath asQPainterPath() const =0
Returns the geometry represented as a QPainterPath.
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
virtual int partCount() const =0
Returns count of parts contained in the geometry.