QGIS API Documentation  3.6.0-Noosa (5873452)
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 
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:106
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...