QGIS API Documentation  3.9.0-Master (224899f119)
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 : matthias@opengis.ch
8  ***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
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
41 {
42  public:
43
49  explicit QgsInternalGeometryEngine( const QgsGeometry &geometry );
50
59  QgsGeometry extrude( double x, double y ) const;
60
70  QgsGeometry poleOfInaccessibility( double precision, double *distanceFromBoundary = nullptr ) const;
71
80  QgsGeometry orthogonalize( double tolerance = 1.0E-8, int maxIterations = 1000, double angleThreshold = 15.0 ) const;
81
90  QgsGeometry densifyByCount( int extraNodesPerSegment ) const;
91
105  QgsGeometry densifyByDistance( double distance ) const;
106
121  QgsGeometry variableWidthBuffer( int segments, const std::function< std::unique_ptr< double[] >( const QgsLineString *line ) > &widthFunction ) const;
122
137  QgsGeometry taperedBuffer( double startWidth, double endWidth, int segments ) const;
138
149  QgsGeometry variableWidthBufferByM( int segments ) const;
150
151  private:
152  const QgsAbstractGeometry *mGeometry = nullptr;
153 };
154
161 class CORE_EXPORT QgsRay2D
162 {
163  public:
164
169  QgsRay2D( const QgsPointXY &origin, QgsVector direction )
170  : origin( origin )
171  , direction( direction )
172  {}
173
181  bool intersects( const QgsLineSegment2D &segment, QgsPointXY &intersectPoint ) const;
182
183  private:
184
185  QgsPointXY origin;
186  QgsVector direction;
187 };
188
190
191 // adapted for QGIS geometry classes from original work at https://github.com/trylock/visibility by trylock
192
201 class CORE_EXPORT QgsLineSegmentDistanceComparer
202 {
203  public:
204
209  explicit QgsLineSegmentDistanceComparer( const QgsPointXY &origin )
210  : mOrigin( origin )
211  {}
212
220  bool operator()( QgsLineSegment2D ab, QgsLineSegment2D cd ) const;
221
222  private:
223
224  QgsPointXY mOrigin;
225
226 };
227
228
229 // adapted for QGIS geometry classes from original work at https://github.com/trylock/visibility by trylock
230
236 class CORE_EXPORT QgsClockwiseAngleComparer
237 {
238  public:
239  explicit QgsClockwiseAngleComparer( const QgsPointXY &origin )
240  : mVertex( origin )
241  {}
242
243  bool operator()( const QgsPointXY &a, const QgsPointXY &b ) const;
244
245  private:
246
247  QgsPointXY mVertex;
248
249 };
250
252
253 #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:121
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
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...