16 #ifndef QGSABSTRACTGEOMETRYV2 17 #define QGSABSTRACTGEOMETRYV2 23 #include "qgis_core.h" 62 if ( qgsgeometry_cast<QgsPoint *>( sipCpp ) !=
nullptr )
63 sipType = sipType_QgsPoint;
64 else if ( qgsgeometry_cast<QgsLineString *>( sipCpp ) !=
nullptr )
65 sipType = sipType_QgsLineString;
66 else if ( qgsgeometry_cast<QgsCircularString *>( sipCpp ) !=
nullptr )
67 sipType = sipType_QgsCircularString;
68 else if ( qgsgeometry_cast<QgsCompoundCurve *>( sipCpp ) !=
nullptr )
69 sipType = sipType_QgsCompoundCurve;
70 else if ( qgsgeometry_cast<QgsTriangle *>( sipCpp ) !=
nullptr )
71 sipType = sipType_QgsTriangle;
72 else if ( qgsgeometry_cast<QgsPolygon *>( sipCpp ) !=
nullptr )
73 sipType = sipType_QgsPolygon;
74 else if ( qgsgeometry_cast<QgsCurvePolygon *>( sipCpp ) !=
nullptr )
75 sipType = sipType_QgsCurvePolygon;
76 else if ( qgsgeometry_cast<QgsMultiPoint *>( sipCpp ) !=
nullptr )
77 sipType = sipType_QgsMultiPoint;
78 else if ( qgsgeometry_cast<QgsMultiLineString *>( sipCpp ) !=
nullptr )
79 sipType = sipType_QgsMultiLineString;
80 else if ( qgsgeometry_cast<QgsMultiPolygon *>( sipCpp ) !=
nullptr )
81 sipType = sipType_QgsMultiPolygon;
82 else if ( qgsgeometry_cast<QgsMultiSurface *>( sipCpp ) !=
nullptr )
83 sipType = sipType_QgsMultiSurface;
84 else if ( qgsgeometry_cast<QgsMultiCurve *>( sipCpp ) !=
nullptr )
85 sipType = sipType_QgsMultiCurve;
86 else if ( qgsgeometry_cast<QgsGeometryCollection *>( sipCpp ) !=
nullptr )
87 sipType = sipType_QgsGeometryCollection;
148 virtual void clear() = 0;
161 virtual int dimension()
const = 0;
168 virtual QString geometryType()
const = 0;
182 QString wktTypeStr()
const;
223 virtual bool fromWkt(
const QString &wkt ) = 0;
235 virtual QByteArray asWkb()
const = 0;
245 virtual QString asWkt(
int precision = 17 )
const = 0;
258 virtual QDomElement asGml2( QDomDocument &doc,
int precision = 17,
const QString &ns =
"gml",
AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY )
const = 0;
271 virtual QDomElement asGml3( QDomDocument &doc,
int precision = 17,
const QString &ns =
"gml",
AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY )
const = 0;
281 virtual QString asJson(
int precision = 17 )
const = 0;
303 virtual void transform(
const QTransform &t,
double zTranslate = 0.0,
double zScale = 1.0,
304 double mTranslate = 0.0,
double mScale = 1.0 ) = 0;
310 virtual void draw( QPainter &p )
const = 0;
322 virtual int vertexNumberFromVertexId(
QgsVertexId id )
const = 0;
348 virtual int nCoordinates()
const;
369 int *
leftOf SIP_OUT =
nullptr,
double epsilon = 4 * std::numeric_limits<double>::epsilon() )
const = 0;
400 virtual bool deleteVertex(
QgsVertexId position ) = 0;
407 virtual double length()
const;
414 virtual double perimeter()
const;
421 virtual double area()
const;
427 virtual double segmentLength(
QgsVertexId startVertex )
const = 0;
435 virtual bool isEmpty()
const;
440 virtual bool hasCurvedSegments()
const;
499 virtual bool removeDuplicateNodes(
double epsilon = 4 * std::numeric_limits<double>::epsilon(),
bool useZValues =
false ) = 0;
508 virtual double vertexAngle(
QgsVertexId vertex )
const = 0;
513 virtual int vertexCount(
int part = 0,
int ring = 0 )
const = 0;
518 virtual int ringCount(
int part = 0 )
const = 0;
525 virtual int partCount()
const = 0;
535 virtual bool addZValue(
double zValue = 0 ) = 0;
545 virtual bool addMValue(
double mValue = 0 ) = 0;
554 virtual bool dropZValue() = 0;
563 virtual bool dropMValue() = 0;
571 virtual void swapXy() = 0;
591 virtual void filterVertices(
const std::function<
bool(
const QgsPoint & ) > &filter );
607 virtual void transformVertices(
const std::function<
QgsPoint(
const QgsPoint & ) > &transform );
641 int partNumber()
const;
711 int partNumber()
const;
891 virtual bool hasChildGeometries()
const;
912 virtual QgsPoint childPoint(
int index )
const;
931 virtual void clearCache()
const;
933 friend class TestQgsGeometry;
961 bool isValid()
const {
return part >= 0 && ring >= 0 && vertex >= 0; }
965 return part == other.
part && ring == other.
ring && vertex == other.
vertex;
969 return part != other.
part || ring != other.
ring || vertex != other.
vertex;
973 return part >= 0 && o.
part == part;
977 return partEqual( o ) && ( ring >= 0 && o.
ring == ring );
981 return ringEqual( o ) && ( vertex >= 0 && o.
ring == ring );
985 return ( part >= 0 && part < geom->partCount() ) &&
987 ( vertex < 0 || vertex < geom->vertexCount( part, ring ) );
1001 return const_cast<T
>(
reinterpret_cast<T
>( 0 )->cast( geom ) );
1022 , i( g->vertices_begin() )
1023 , n( g->vertices_end() )
1030 return g && g->vertices_end() != i;
1044 if ( sipCpp->hasNext() )
1045 sipRes = sipConvertFromType(
new QgsPoint( sipCpp->next() ), sipType_QgsPoint, Py_None );
1047 PyErr_SetString( PyExc_StopIteration,
"" );
1071 , i( g->parts_begin() )
1072 , n( g->parts_end() )
1079 return g && g->parts_end() != i;
1093 if ( sipCpp->hasNext() )
1094 sipRes = sipConvertFromType( sipCpp->next(), sipType_QgsAbstractGeometry, NULL );
1096 PyErr_SetString( PyExc_StopIteration,
"" );
1121 , i( g->const_parts_begin() )
1122 , n( g->const_parts_end() )
1129 return g && g->const_parts_end() != i;
1143 if ( sipCpp->hasNext() )
1144 sipRes = sipConvertFromType( const_cast< QgsAbstractGeometry * >( sipCpp->next() ), sipType_QgsAbstractGeometry, NULL );
1146 PyErr_SetString( PyExc_StopIteration,
"" );
1156 #endif //QGSABSTRACTGEOMETRYV2 bool isMeasure() const
Returns true if the geometry contains m values.
A rectangle specified with double values.
Java-style iterator for traversal of parts of a geometry.
QgsVertexId(int _part=-1, int _ring=-1, int _vertex=-1, VertexType _type=SegmentVertex)
virtual int childCount() const
Returns number of child geometries (for geometries with child geometries) or child points (for geomet...
bool operator!=(const_part_iterator other) const
Java-style iterator for traversal of vertices of a geometry.
Multi point geometry collection.
bool isValid() const
Returns true if the vertex id is valid.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
QVector< QgsRingSequence > QgsCoordinateSequence
Java-style iterator for const traversal of parts of a geometry.
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
virtual QgsAbstractGeometry * childGeometry(int index) const
Returns pointer to child geometry (for geometries with child geometries - i.e.
The part_iterator class provides STL-style iterator for const references to geometry parts...
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
bool operator!=(const vertex_iterator &other) const
#define SIP_TYPEHINT(type)
static bool hasZ(Type type)
Tests whether a WKB type contains the z-dimension.
bool vertexEqual(QgsVertexId o) const
bool operator!=(QgsVertexId other) const
bool hasNext() const
Find out whether there are more parts.
QgsVertexIterator(const QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
Perform transforms between map coordinates and device coordinates.
Type
The WKB type describes the number of dimensions a geometry has.
QgsGeometryPartIterator(QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
Utility class for identifying a unique vertex within a geometry.
The part_iterator class provides STL-style iterator for geometry parts.
vertex_iterator vertices_end() const
Returns STL-style iterator pointing to the imaginary vertex after the last vertex of the geometry...
T qgsgeometry_cast(const QgsAbstractGeometry *geom)
Multi curve geometry collection.
virtual int ringCount(int part=0) const =0
Returns the number of rings of which this geometry is built.
Abstract base class for curved geometry type.
Abstract base class for all geometries.
The vertex_iterator class provides STL-style iterator for vertices.
QgsWkbTypes::Type wkbType() const
Returns the WKB type of the geometry.
Point geometry type, with support for z-dimension and m-values.
AxisOrder
Axis order for GML generation.
QgsGeometryConstPartIterator(const QgsAbstractGeometry *geometry)
Constructs iterator for the given geometry.
double closestSegment(const QgsPolylineXY &pl, const QgsPointXY &pt, int &vertexAfter, double epsilon)
QVector< QgsPoint > QgsPointSequence
bool operator==(QgsVertexId other) const
QVector< QgsPointSequence > QgsRingSequence
bool partEqual(QgsVertexId o) const
bool ringEqual(QgsVertexId o) const
const_part_iterator const_parts_begin() const
Returns STL-style iterator pointing to the const first part of the geometry.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
static bool hasM(Type type)
Tests whether a WKB type contains m values.
QgsMargins operator*(const QgsMargins &margins, double factor)
Returns a QgsMargins object that is formed by multiplying each component of the given margins by fact...
Custom exception class for Coordinate Reference System related exceptions.
vertex_iterator vertices_begin() const
Returns STL-style iterator pointing to the first vertex of the geometry.
bool hasNext() const
Find out whether there are more vertices.
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
bool operator!=(part_iterator other) const
part_iterator parts_begin()
Returns STL-style iterator pointing to the first part of the geometry.
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'. Negativ values mean left a...
bool isValid(const QgsAbstractGeometry *geom) const
bool hasNext() const
Find out whether there are more parts.