QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
qgssurface.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssurface.h
3 --------------
4 begin : September 2014
5 copyright : (C) 2014 by Marco Hugentobler
6 email : marco at sourcepole dot ch
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSSURFACE_H
19#define QGSSURFACE_H
20
21#include "qgis_core.h"
22#include "qgis_sip.h"
23#include "qgsabstractgeometry.h"
24#include "qgsrectangle.h"
25
26class QgsPolygon;
27
33class CORE_EXPORT QgsSurface: public QgsAbstractGeometry
34{
35 public:
36
42
43 QgsRectangle boundingBox() const override
44 {
45 if ( mBoundingBox.isNull() )
46 {
47 mBoundingBox = calculateBoundingBox();
48 }
49 return mBoundingBox;
50 }
51
52 bool isValid( QString &error SIP_OUT, Qgis::GeometryValidityFlags flags = Qgis::GeometryValidityFlags() ) const override;
53
54
55#ifndef SIP_RUN
56
64 inline static const QgsSurface *cast( const QgsAbstractGeometry *geom )
65 {
66 if ( !geom )
67 return nullptr;
68
69 const Qgis::WkbType flatType = QgsWkbTypes::flatType( geom->wkbType() );
70 if ( flatType == Qgis::WkbType::CurvePolygon
71 || flatType == Qgis::WkbType::Polygon
72 || flatType == Qgis::WkbType::Triangle )
73 return static_cast<const QgsSurface *>( geom );
74 return nullptr;
75 }
76#endif
77 protected:
78
79 void clearCache() const override;
80
82 mutable bool mHasCachedValidity = false;
83 mutable QString mValidityFailureReason;
84};
85
86#endif // QGSSURFACE_H
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:155
@ Polygon
Polygon.
@ Triangle
Triangle.
@ CurvePolygon
CurvePolygon.
Abstract base class for all geometries.
virtual QgsRectangle calculateBoundingBox() const
Default calculator for the minimal bounding box for the geometry.
virtual bool isValid(QString &error, Qgis::GeometryValidityFlags flags=Qgis::GeometryValidityFlags()) const =0
Checks validity of the geometry, and returns true if the geometry is valid.
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
Qgis::WkbType wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
Polygon geometry type.
Definition: qgspolygon.h:34
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Surface geometry type.
Definition: qgssurface.h:34
QgsRectangle boundingBox() const override
Returns the minimal bounding box for the geometry.
Definition: qgssurface.h:43
QgsRectangle mBoundingBox
Definition: qgssurface.h:81
static const QgsSurface * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsSurface.
Definition: qgssurface.h:64
QString mValidityFailureReason
Definition: qgssurface.h:83
virtual QgsPolygon * surfaceToPolygon() const =0
Gets a polygon representation of this surface.
static Qgis::WkbType flatType(Qgis::WkbType type) SIP_HOLDGIL
Returns the flat type for a WKB type.
Definition: qgswkbtypes.h:629
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76