QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgsinternalgeometryengine.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsinternalgeometryengine.h - QgsInternalGeometryEngine
3 
4  ---------------------
5  begin : 13.1.2016
6  copyright : (C) 2016 by Matthias Kuhn
7  email : [email protected]
8  ***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 #ifndef QGSINTERNALGEOMETRYENGINE_H
17 #define QGSINTERNALGEOMETRYENGINE_H
18 
19 #define SIP_NO_FILE
20 
21 #include <functional>
22 
23 #include "qgspointxy.h"
24 
25 class QgsGeometry;
27 class QgsLineString;
28 class QgsLineSegment2D;
29 class QgsFeedback;
30 
42 {
43  public:
44 
50  explicit QgsInternalGeometryEngine( const QgsGeometry &geometry );
51 
60  QgsGeometry extrude( double x, double y ) const;
61 
71  QgsGeometry poleOfInaccessibility( double precision, double *distanceFromBoundary = nullptr ) const;
72 
81  QgsGeometry orthogonalize( double tolerance = 1.0E-8, int maxIterations = 1000, double angleThreshold = 15.0 ) const;
82 
91  QgsGeometry densifyByCount( int extraNodesPerSegment ) const;
92 
106  QgsGeometry densifyByDistance( double distance ) const;
107 
122  QgsGeometry variableWidthBuffer( int segments, const std::function< std::unique_ptr< double[] >( const QgsLineString *line ) > &widthFunction ) const;
123 
138  QgsGeometry taperedBuffer( double startWidth, double endWidth, int segments ) const;
139 
150  QgsGeometry variableWidthBufferByM( int segments ) const;
151 
166  static QVector< QgsPointXY > randomPointsInPolygon( const QgsGeometry &polygon, int count,
167  const std::function< bool( const QgsPointXY & ) > &acceptPoint, unsigned long seed = 0, QgsFeedback *feedback = nullptr );
168 
169  private:
170  const QgsAbstractGeometry *mGeometry = nullptr;
171 };
172 
179 class CORE_EXPORT QgsRay2D
180 {
181  public:
182 
187  QgsRay2D( const QgsPointXY &origin, QgsVector direction )
188  : origin( origin )
189  , direction( direction )
190  {}
191 
199  bool intersects( const QgsLineSegment2D &segment, QgsPointXY &intersectPoint ) const;
200 
201  private:
202 
203  QgsPointXY origin;
204  QgsVector direction;
205 };
206 
208 
209 // adapted for QGIS geometry classes from original work at https://github.com/trylock/visibility by trylock
210 
219 class CORE_EXPORT QgsLineSegmentDistanceComparer
220 {
221  public:
222 
227  explicit QgsLineSegmentDistanceComparer( const QgsPointXY &origin )
228  : mOrigin( origin )
229  {}
230 
238  bool operator()( QgsLineSegment2D ab, QgsLineSegment2D cd ) const;
239 
240  private:
241 
242  QgsPointXY mOrigin;
243 
244 };
245 
246 
247 // adapted for QGIS geometry classes from original work at https://github.com/trylock/visibility by trylock
248 
254 class CORE_EXPORT QgsClockwiseAngleComparer
255 {
256  public:
257  explicit QgsClockwiseAngleComparer( const QgsPointXY &origin )
258  : mVertex( origin )
259  {}
260 
261  bool operator()( const QgsPointXY &a, const QgsPointXY &b ) const;
262 
263  private:
264 
265  QgsPointXY mVertex;
266 
267 };
268 
270 
271 #endif // QGSINTERNALGEOMETRYENGINE_H
QgsGeometry taperedBuffer(double startWidth, double endWidth, int segments) const
Calculates a tapered width buffer for a (multi)curve geometry.
int precision
QgsInternalGeometryEngine(const QgsGeometry &geometry)
The caller is responsible that the geometry is available and unchanged for the whole lifetime of this...
QgsGeometry variableWidthBufferByM(int segments) const
Calculates a variable width buffer using the m-values from a (multi)line geometry.
QgsGeometry variableWidthBuffer(int segments, const std::function< std::unique_ptr< double[] >(const QgsLineString *line) > &widthFunction) const
Calculates a variable width buffer for a (multi)curve geometry.
QgsGeometry poleOfInaccessibility(double precision, double *distanceFromBoundary=nullptr) const
Calculates the approximate pole of inaccessibility for a surface, which is the most distant internal ...
A class to represent a 2D point.
Definition: qgspointxy.h:43
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:122
Base class for feedback objects to be used for cancellation of something running in a worker thread...
Definition: qgsfeedback.h:44
A 2D ray which extends from an origin point to an infinite distance in a given direction.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:79
static QVector< QgsPointXY > randomPointsInPolygon(const QgsGeometry &polygon, int count, const std::function< bool(const QgsPointXY &) > &acceptPoint, unsigned long seed=0, QgsFeedback *feedback=nullptr)
Returns a list of count random points generated inside a polygon geometry.
QgsGeometry densifyByDistance(double distance) const
Densifies the geometry by adding regularly placed extra nodes inside each segment so that the maximum...
Abstract base class for all geometries.
This class offers geometry processing methods.
Represents a single 2D line segment, consisting of a 2D start and end vertex only.
A class to represent a vector.
Definition: qgsvector.h:29
QgsRay2D(const QgsPointXY &origin, QgsVector direction)
Constructor for a ray starting at the given origin and extending an infinite distance in the specifie...
Line string geometry type, with support for z-dimension and m-values.
Definition: qgslinestring.h:43
QgsGeometry orthogonalize(double tolerance=1.0E-8, int maxIterations=1000, double angleThreshold=15.0) const
Attempts to orthogonalize a line or polygon geometry by shifting vertices to make the geometries angl...
QgsGeometry densifyByCount(int extraNodesPerSegment) const
Densifies the geometry by adding the specified number of extra nodes within each segment of the geome...
QgsGeometry extrude(double x, double y) const
Will extrude a line or (segmentized) curve by a given offset and return a polygon representation of i...