QGIS API Documentation  3.21.0-Master (af9a72eda6)
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 
26 class QgsPolygon;
27 
33 class CORE_EXPORT QgsSurface: public QgsAbstractGeometry
34 {
35  public:
36 
41  virtual QgsPolygon *surfaceToPolygon() const = 0 SIP_FACTORY;
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, int flags = 0 ) 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  QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() );
70  if ( flatType == QgsWkbTypes::CurvePolygon
71  || flatType == QgsWkbTypes::Polygon
72  || flatType == QgsWkbTypes::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
Abstract base class for all geometries.
virtual QgsRectangle calculateBoundingBox() const
Default calculator for the minimal bounding box for the geometry.
virtual void clearCache() const
Clears any cached parameters associated with the geometry, e.g., bounding boxes.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
virtual bool isValid(QString &error, int flags=0) const =0
Checks validity of the geometry, and returns true if the geometry is valid.
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
static const QgsSurface * cast(const QgsAbstractGeometry *geom)
Cast the geom to a QgsSurface.
Definition: qgssurface.h:64
QgsRectangle mBoundingBox
Definition: qgssurface.h:81
QString mValidityFailureReason
Definition: qgssurface.h:83
virtual QgsPolygon * surfaceToPolygon() const =0
Gets a polygon representation of this surface.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
Definition: qgswkbtypes.h:702
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76