Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmultisurface.h 3 : : ------------------------------------------------------------------- 4 : : Date : 28 Oct 2014 5 : : Copyright : (C) 2014 by Marco Hugentobler 6 : : email : marco.hugentobler at sourcepole dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSMULTISURFACE_H 17 : : #define QGSMULTISURFACE_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include "qgsgeometrycollection.h" 22 : : 23 : : 24 : : class QgsSurface; 25 : : 26 : : /** 27 : : * \ingroup core 28 : : * \class QgsMultiSurface 29 : : * \brief Multi surface geometry collection. 30 : : * \since QGIS 2.10 31 : : */ 32 : 1400 : class CORE_EXPORT QgsMultiSurface: public QgsGeometryCollection 33 : : { 34 : : public: 35 : : 36 : : /** 37 : : * Constructor for an empty multisurface geometry. 38 : : */ 39 : : QgsMultiSurface() SIP_HOLDGIL; 40 : : 41 : : #ifndef SIP_RUN 42 : : 43 : : /** 44 : : * Returns the surface with the specified \a index. 45 : : * 46 : : * \since QGIS 3.16 47 : : */ 48 : : QgsSurface *surfaceN( int index ); 49 : : #else 50 : : 51 : : /** 52 : : * Returns the surface with the specified \a index. 53 : : * 54 : : * An IndexError will be raised if no surface with the specified index exists. 55 : : * 56 : : * \since QGIS 3.16 57 : : */ 58 : : SIP_PYOBJECT surfaceN( int index ) SIP_TYPEHINT( QgsSurface ); 59 : : % MethodCode 60 : : if ( a0 < 0 || a0 >= sipCpp->numGeometries() ) 61 : : { 62 : : PyErr_SetString( PyExc_IndexError, QByteArray::number( a0 ) ); 63 : : sipIsErr = 1; 64 : : } 65 : : else 66 : : { 67 : : return sipConvertFromType( sipCpp->surfaceN( a0 ), sipType_QgsSurface, NULL ); 68 : : } 69 : : % End 70 : : #endif 71 : : 72 : : #ifndef SIP_RUN 73 : : 74 : : /** 75 : : * Returns the surface with the specified \a index. 76 : : * 77 : : * \note Not available in Python bindings 78 : : * 79 : : * \since QGIS 3.16 80 : : */ 81 : : const QgsSurface *surfaceN( int index ) const; 82 : : #endif 83 : : 84 : : QString geometryType() const override SIP_HOLDGIL; 85 : : void clear() override; 86 : : QgsMultiSurface *clone() const override SIP_FACTORY; 87 : : QgsMultiSurface *toCurveType() const override SIP_FACTORY; 88 : : bool fromWkt( const QString &wkt ) override; 89 : : QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override; 90 : : QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override; 91 : : json asJsonObject( int precision = 17 ) const override SIP_SKIP; 92 : : bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override; 93 : : bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override; 94 : : QgsAbstractGeometry *boundary() const override SIP_FACTORY; 95 : : 96 : : #ifndef SIP_RUN 97 : : 98 : : /** 99 : : * Cast the \a geom to a QgsMultiSurface. 100 : : * Should be used by qgsgeometry_cast<QgsMultiSurface *>( geometry ). 101 : : * 102 : : * \note Not available in Python. Objects will be automatically be converted to the appropriate target type. 103 : : * \since QGIS 3.0 104 : : */ 105 : 117 : inline static const QgsMultiSurface *cast( const QgsAbstractGeometry *geom ) 106 : : { 107 : 117 : if ( !geom ) 108 : 1 : return nullptr; 109 : : 110 : 116 : QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() ); 111 : : 112 : 116 : if ( flatType == QgsWkbTypes::MultiSurface 113 : 116 : || flatType == QgsWkbTypes::MultiPolygon ) 114 : 12 : return static_cast<const QgsMultiSurface *>( geom ); 115 : 104 : return nullptr; 116 : 117 : } 117 : : #endif 118 : : 119 : : QgsMultiSurface *createEmptyWithSameType() const override SIP_FACTORY; 120 : : 121 : : }; 122 : : 123 : : // clazy:excludeall=qstring-allocations 124 : : 125 : : #endif // QGSMULTISURFACE_H