16#ifndef QGSABSTRACTGEOMETRYV2 
   17#define QGSABSTRACTGEOMETRYV2 
   30#include "json_fwd.hpp" 
   31using namespace nlohmann;
 
   84    if ( qgsgeometry_cast<QgsPoint *>( sipCpp ) != 
nullptr )
 
   85      sipType = sipType_QgsPoint;
 
   86    else if ( qgsgeometry_cast<QgsLineString *>( sipCpp ) != 
nullptr )
 
   87      sipType = sipType_QgsLineString;
 
   88    else if ( qgsgeometry_cast<QgsCircularString *>( sipCpp ) != 
nullptr )
 
   89      sipType = sipType_QgsCircularString;
 
   90    else if ( qgsgeometry_cast<QgsCompoundCurve *>( sipCpp ) != 
nullptr )
 
   91      sipType = sipType_QgsCompoundCurve;
 
   92    else if ( qgsgeometry_cast<QgsTriangle *>( sipCpp ) != 
nullptr )
 
   93      sipType = sipType_QgsTriangle;
 
   94    else if ( qgsgeometry_cast<QgsPolygon *>( sipCpp ) != 
nullptr )
 
   95      sipType = sipType_QgsPolygon;
 
   96    else if ( qgsgeometry_cast<QgsCurvePolygon *>( sipCpp ) != 
nullptr )
 
   97      sipType = sipType_QgsCurvePolygon;
 
   98    else if ( qgsgeometry_cast<QgsMultiPoint *>( sipCpp ) != 
nullptr )
 
   99      sipType = sipType_QgsMultiPoint;
 
  100    else if ( qgsgeometry_cast<QgsMultiLineString *>( sipCpp ) != 
nullptr )
 
  101      sipType = sipType_QgsMultiLineString;
 
  102    else if ( qgsgeometry_cast<QgsMultiPolygon *>( sipCpp ) != 
nullptr )
 
  103      sipType = sipType_QgsMultiPolygon;
 
  104    else if ( qgsgeometry_cast<QgsMultiSurface *>( sipCpp ) != 
nullptr )
 
  105      sipType = sipType_QgsMultiSurface;
 
  106    else if ( qgsgeometry_cast<QgsMultiCurve *>( sipCpp ) != 
nullptr )
 
  107      sipType = sipType_QgsMultiCurve;
 
  108    else if ( qgsgeometry_cast<QgsGeometryCollection *>( sipCpp ) != 
nullptr )
 
  109      sipType = sipType_QgsGeometryCollection;
 
  135    Q_ENUM( SegmentationToleranceType )
 
  179    virtual 
void clear() = 0;
 
  192    virtual 
int dimension() const = 0;
 
  199    virtual QString geometryType() const = 0;
 
  213    QString wktTypeStr() 
const;
 
  265    virtual bool fromWkt( 
const QString &wkt ) = 0;
 
  275      FlagExportTrianglesAsPolygons = 1 << 0, 
 
  276      FlagExportNanAsDoubleMin = 1 << 1, 
 
  278    Q_DECLARE_FLAGS( WkbFlags, WkbFlag )
 
  388    virtual 
void transform( const QTransform &t, 
double zTranslate = 0.0, 
double zScale = 1.0,
 
  389                            double mTranslate = 0.0, 
double mScale = 1.0 ) = 0;
 
  395    virtual 
void draw( QPainter &p ) const = 0;
 
  405    virtual QPainterPath asQPainterPath() const = 0;
 
  443    virtual 
int nCoordinates() const;
 
  464                                   int *
leftOf SIP_OUT = 
nullptr, 
double epsilon = 4 * std::numeric_limits<
double>::epsilon() ) const = 0;
 
  509    virtual 
double length() const;
 
  523    virtual 
double perimeter() const;
 
  537    virtual 
double area() const;
 
  547    virtual 
double segmentLength( 
QgsVertexId startVertex ) const = 0;
 
  555    virtual 
bool isEmpty() const;
 
  560    virtual 
bool hasCurvedSegments() const;
 
  632    virtual 
bool removeDuplicateNodes( 
double epsilon = 4 * std::numeric_limits<
double>::epsilon(), 
bool useZValues = false ) = 0;
 
  646    virtual 
int vertexCount( 
int part = 0, 
int ring = 0 ) const = 0;
 
  651    virtual 
int ringCount( 
int part = 0 ) const = 0;
 
  658    virtual 
int partCount() const = 0;
 
  668    virtual 
bool addZValue( 
double zValue = 0 ) = 0;
 
  678    virtual 
bool addMValue( 
double mValue = 0 ) = 0;
 
  687    virtual 
bool dropZValue() = 0;
 
  696    virtual 
bool dropMValue() = 0;
 
  704    virtual 
void swapXy() = 0;
 
  711    virtual 
bool convertTo( 
Qgis::WkbType type );
 
  744    virtual 
bool isValid( QString &error 
SIP_OUT, 
Qgis::GeometryValidityFlags flags = 
Qgis::GeometryValidityFlags() ) const = 0;
 
  772    virtual void filterVertices( 
const std::function< 
bool( 
const QgsPoint & ) > &filter );
 
  788    virtual void transformVertices( 
const std::function< 
QgsPoint( 
const QgsPoint & ) > &transform );
 
  822        int partNumber() 
const;
 
  849    part_iterator parts_end();
 
  892        int partNumber() 
const;
 
  917    const_part_iterator const_parts_end() 
const;
 
  942        std::array<Level, 3> levels;  
 
 1077    int sortIndex() 
const;
 
 1096    virtual bool hasChildGeometries() 
const;
 
 1117    virtual QgsPoint childPoint( 
int index ) 
const;
 
 1136    virtual void clearCache() 
const;
 
 1138    friend class TestQgsGeometry;
 
 1147  return const_cast<T
>( std::remove_pointer<T>::type::cast( geom ) );
 
 1168      , i( g->vertices_begin() )
 
 1169      , n( g->vertices_end() )
 
 1176      return g && g->vertices_end() != i;
 
 1190    if ( sipCpp->hasNext() )
 
 1191      sipRes = sipConvertFromType( new 
QgsPoint( sipCpp->next() ), sipType_QgsPoint, Py_None );
 
 1193      PyErr_SetString( PyExc_StopIteration, "" );
 
 1217      , i( g->parts_begin() )
 
 1218      , n( g->parts_end() )
 
 1225      return g && g->parts_end() != i;
 
 1239    if ( sipCpp->hasNext() )
 
 1240      sipRes = sipConvertFromType( sipCpp->next(), sipType_QgsAbstractGeometry, NULL );
 
 1242      PyErr_SetString( PyExc_StopIteration, "" );
 
 1267      , i( g->const_parts_begin() )
 
 1268      , n( g->const_parts_end() )
 
 1275      return g && g->const_parts_end() != i;
 
 1289    if ( sipCpp->hasNext() )
 
 1290      sipRes = sipConvertFromType( const_cast< 
QgsAbstractGeometry * >( sipCpp->next() ), sipType_QgsAbstractGeometry, NULL );
 
 1292      PyErr_SetString( PyExc_StopIteration, "" );
 
The Qgis class provides global constants for use throughout the application.
 
WkbType
The WKB type describes the number of dimensions a geometry has.
 
The part_iterator class provides STL-style iterator for const references to geometry parts.
 
bool operator!=(const_part_iterator other) const
 
const_part_iterator()=default
Create invalid iterator.
 
The part_iterator class provides STL-style iterator for geometry parts.
 
part_iterator()=default
Create invalid iterator.
 
bool operator!=(part_iterator other) const
 
The vertex_iterator class provides STL-style iterator for vertices.
 
vertex_iterator()=default
Create invalid iterator.
 
bool operator!=(const vertex_iterator &other) const
 
Abstract base class for all geometries.
 
virtual bool fromWkb(QgsConstWkbPtr &wkb)=0
Sets the geometry from a WKB string.
 
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
 
virtual QgsAbstractGeometry * boundary() const =0
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
 
vertex_iterator vertices_end() const
Returns STL-style iterator pointing to the imaginary vertex after the last vertex of the geometry.
 
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
 
virtual int childCount() const
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
 
AxisOrder
Axis order for GML generation.
 
virtual QgsAbstractGeometry * createEmptyWithSameType() const =0
Creates a new geometry with the same class and same WKB type as the original and transfers ownership.
 
virtual bool fromWkt(const QString &wkt)=0
Sets the geometry from a WKT string.
 
virtual void normalize()=0
Reorganizes the geometry into a normalized form (or "canonical" form).
 
vertex_iterator vertices_begin() const
Returns STL-style iterator pointing to the first vertex of the geometry.
 
virtual QgsAbstractGeometry * childGeometry(int index) const
Returns pointer to child geometry (for geometries with child geometries - i.e.
 
const_part_iterator const_parts_begin() const
Returns STL-style iterator pointing to the const first part of the geometry.
 
virtual int compareToSameClass(const QgsAbstractGeometry *other) const =0
Compares to an other geometry of the same class, and returns a integer for sorting of the two geometr...
 
part_iterator parts_begin()
Returns STL-style iterator pointing to the first part of the geometry.
 
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
 
Custom exception class for Coordinate Reference System related exceptions.
 
Abstract base class for curved geometry type.
 
Base class for feedback objects to be used for cancellation of something running in a worker thread.
 
Java-style iterator for const traversal of parts of a geometry.
 
QgsGeometryConstPartIterator(const QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
 
QgsGeometryConstPartIterator()=default
Constructor for QgsGeometryConstPartIterator.
 
bool hasNext() const SIP_HOLDGIL
Find out whether there are more parts.
 
Java-style iterator for traversal of parts of a geometry.
 
QgsGeometryPartIterator()=default
Constructor for QgsGeometryPartIterator.
 
bool hasNext() const SIP_HOLDGIL
Find out whether there are more parts.
 
QgsGeometryPartIterator(QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
 
Perform transforms between map coordinates and device coordinates.
 
Multi curve geometry collection.
 
Multi point geometry collection.
 
Point geometry type, with support for z-dimension and m-values.
 
A rectangle specified with double values.
 
Java-style iterator for traversal of vertices of a geometry.
 
bool hasNext() const
Find out whether there are more vertices.
 
QgsVertexIterator()=default
Constructor for QgsVertexIterator.
 
QgsVertexIterator(const QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
 
static bool hasZ(Qgis::WkbType type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
 
static bool hasM(Qgis::WkbType type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
 
double ANALYSIS_EXPORT leftOf(const QgsPoint &thepoint, const QgsPoint *p1, const QgsPoint *p2)
Returns whether 'thepoint' is left or right of the line from 'p1' to 'p2'. Negative values mean left ...
 
CORE_EXPORT QgsMeshVertex centroid(const QgsMeshFace &face, const QVector< QgsMeshVertex > &vertices)
Returns the centroid of the face.
 
#define SIP_TYPEHINT(type)
 
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
 
#define SIP_THROW(name,...)
 
T qgsgeometry_cast(const QgsAbstractGeometry *geom)
 
QVector< QgsRingSequence > QgsCoordinateSequence
 
QVector< QgsPointSequence > QgsRingSequence
 
QVector< QgsPoint > QgsPointSequence
 
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
 
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
 
QgsMargins operator*(const QgsMargins &margins, double factor)
Returns a QgsMargins object that is formed by multiplying each component of the given margins by fact...
 
double closestSegment(const QgsPolylineXY &pl, const QgsPointXY &pt, int &vertexAfter, double epsilon)
 
Utility class for identifying a unique vertex within a geometry.