16#ifndef QGSGEOMETRYENGINE_H 
   17#define QGSGEOMETRYENGINE_H 
   79      NothingHappened = 1000, 
 
  291    virtual double area( QString *errorMsg = 
nullptr ) 
const = 0;
 
  292    virtual double length( QString *errorMsg = 
nullptr ) 
const = 0;
 
  305    virtual bool isValid( QString *errorMsg = 
nullptr, 
bool allowSelfTouchingHoles = 
false, 
QgsGeometry *errorLoc = 
nullptr ) 
const = 0;
 
  314    virtual bool isEmpty( QString *errorMsg ) 
const = 0;
 
  320    virtual bool isSimple( QString *errorMsg = 
nullptr ) 
const = 0;
 
  334        QVector<QgsGeometry > &newGeometries 
SIP_OUT,
 
  336        QgsPointSequence &topologyTestPoints, QString *errorMsg = 
nullptr, 
bool skipIntersectionCheck = 
false )
 const 
  338      Q_UNUSED( splitLine )
 
  339      Q_UNUSED( newGeometries )
 
  340      Q_UNUSED( topological )
 
  341      Q_UNUSED( topologyTestPoints )
 
  343      Q_UNUSED( skipIntersectionCheck )
 
  344      return MethodNotImplemented;
 
  364    bool mLogErrors = 
true;
 
  373    void logError( 
const QString &engineName, 
const QString &message )
 const 
  377        QgsDebugMsg( QStringLiteral( 
"%1 notice: %2" ).arg( engineName, message ) );
 
  378        qWarning( 
"%s exception: %s", engineName.toLocal8Bit().constData(), message.toLocal8Bit().constData() );
 
  383      : mGeometry( geometry )
 
JoinStyle
Join styles for buffers.
 
EndCapStyle
End cap styles for buffers.
 
Abstract base class for all geometries.
 
A geometry engine is a low-level representation of a QgsAbstractGeometry object, optimised for use wi...
 
virtual bool isEqual(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if this is equal to geom.
 
virtual double area(QString *errorMsg=nullptr) const =0
 
virtual ~QgsGeometryEngine()=default
 
virtual QgsGeometryEngine::EngineOperationResult splitGeometry(const QgsLineString &splitLine, QVector< QgsGeometry > &newGeometries, bool topological, QgsPointSequence &topologyTestPoints, QString *errorMsg=nullptr, bool skipIntersectionCheck=false) const
Splits this geometry according to a given line.
 
virtual void geometryChanged()=0
Should be called whenever the geometry associated with the engine has been modified and the engine mu...
 
virtual bool intersects(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom intersects this.
 
virtual QgsAbstractGeometry * symDifference(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the symmetric difference of this and geom.
 
virtual QgsAbstractGeometry * buffer(double distance, int segments, QString *errorMsg=nullptr) const =0
 
virtual QgsAbstractGeometry * offsetCurve(double distance, int segments, Qgis::JoinStyle joinStyle, double miterLimit, QString *errorMsg=nullptr) const =0
Offsets a curve.
 
virtual double distance(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Calculates the distance between this and geom.
 
void setLogErrors(bool enabled)
Sets whether warnings and errors encountered during the geometry operations should be logged.
 
virtual QgsAbstractGeometry * intersection(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the intersection of this and geom.
 
virtual bool distanceWithin(const QgsAbstractGeometry *geom, double maxdistance, QString *errorMsg=nullptr) const =0
Checks if geom is within maxdistance distance from this geometry.
 
virtual QgsAbstractGeometry * interpolate(double distance, QString *errorMsg=nullptr) const =0
 
virtual QgsAbstractGeometry * simplify(double tolerance, QString *errorMsg=nullptr) const =0
 
virtual bool isValid(QString *errorMsg=nullptr, bool allowSelfTouchingHoles=false, QgsGeometry *errorLoc=nullptr) const =0
Returns true if the geometry is valid.
 
virtual QgsPoint * pointOnSurface(QString *errorMsg=nullptr) const =0
Calculate a point that is guaranteed to be on the surface of this.
 
virtual bool touches(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom touches this.
 
virtual QgsAbstractGeometry * envelope(QString *errorMsg=nullptr) const =0
 
EngineOperationResult
Success or failure of a geometry operation.
 
@ InvalidBaseGeometry
The geometry on which the operation occurs is not valid.
 
@ InvalidInput
The input is not valid.
 
@ NodedGeometryError
Error occurred while creating a noded geometry.
 
@ EngineError
Error occurred in the geometry engine.
 
@ SplitCannotSplitPoint
Points cannot be split.
 
@ MethodNotImplemented
Method not implemented in geometry engine.
 
virtual QgsAbstractGeometry * buffer(double distance, int segments, Qgis::EndCapStyle endCapStyle, Qgis::JoinStyle joinStyle, double miterLimit, QString *errorMsg=nullptr) const =0
Buffers a geometry.
 
virtual bool isEmpty(QString *errorMsg) const =0
 
virtual bool crosses(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom crosses this.
 
virtual QgsAbstractGeometry * difference(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the difference of this and geom.
 
QgsGeometryEngine(const QgsAbstractGeometry *geometry)
 
virtual QString relate(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Returns the Dimensional Extended 9 Intersection Model (DE-9IM) representation of the relationship bet...
 
virtual bool relatePattern(const QgsAbstractGeometry *geom, const QString &pattern, QString *errorMsg=nullptr) const =0
Tests whether two geometries are related by a specified Dimensional Extended 9 Intersection Model (DE...
 
virtual bool isSimple(QString *errorMsg=nullptr) const =0
Determines whether the geometry is simple (according to OGC definition).
 
virtual QgsAbstractGeometry * convexHull(QString *errorMsg=nullptr) const =0
Calculate the convex hull of this.
 
virtual QgsAbstractGeometry * combine(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the combination of this and geom.
 
virtual bool overlaps(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom overlaps this.
 
virtual QgsAbstractGeometry * combine(const QVector< QgsAbstractGeometry * > &geomList, QString *errorMsg, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the combination of this and geometries.
 
virtual bool within(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom is within this.
 
virtual void prepareGeometry()=0
Prepares the geometry, so that subsequent calls to spatial relation methods are much faster.
 
virtual bool contains(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom contains this.
 
virtual double length(QString *errorMsg=nullptr) const =0
 
virtual QgsAbstractGeometry * combine(const QVector< QgsGeometry > &geometries, QString *errorMsg=nullptr, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const =0
Calculate the combination of this and geometries.
 
virtual QgsPoint * centroid(QString *errorMsg=nullptr) const =0
Calculates the centroid of this.
 
void logError(const QString &engineName, const QString &message) const
Logs an error message encountered during an operation.
 
virtual bool disjoint(const QgsAbstractGeometry *geom, QString *errorMsg=nullptr) const =0
Checks if geom is disjoint from this.
 
Encapsulates parameters under which a geometry operation is performed.
 
A geometry is the spatial representation of a feature.
 
Line string geometry type, with support for z-dimension and m-values.
 
Point geometry type, with support for z-dimension and m-values.
 
QVector< QgsPoint > QgsPointSequence