Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmultipolygon.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 QGSMULTIPOLYGON_H 17 : : #define QGSMULTIPOLYGON_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include "qgsmultisurface.h" 22 : : 23 : : class QgsPolygon; 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \class QgsMultiPolygon 28 : : * \brief Multi polygon geometry collection. 29 : : * \since QGIS 2.10 30 : : */ 31 : 1743 : class CORE_EXPORT QgsMultiPolygon: public QgsMultiSurface 32 : : { 33 : : public: 34 : : 35 : : /** 36 : : * Constructor for an empty multipolygon geometry. 37 : : */ 38 : : QgsMultiPolygon() SIP_HOLDGIL; 39 : : 40 : : 41 : : #ifndef SIP_RUN 42 : : 43 : : /** 44 : : * Returns the polygon with the specified \a index. 45 : : * 46 : : * \since QGIS 3.16 47 : : */ 48 : : QgsPolygon *polygonN( int index ); 49 : : #else 50 : : 51 : : /** 52 : : * Returns the polygon with the specified \a index. 53 : : * 54 : : * An IndexError will be raised if no polygon with the specified index exists. 55 : : * 56 : : * \since QGIS 3.16 57 : : */ 58 : : SIP_PYOBJECT polygonN( int index ) SIP_TYPEHINT( QgsPolygon ); 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->polygonN( a0 ), sipType_QgsPolygon, NULL ); 68 : : } 69 : : % End 70 : : #endif 71 : : 72 : : #ifndef SIP_RUN 73 : : 74 : : /** 75 : : * Returns the polygon with the specified \a index. 76 : : * 77 : : * \note Not available in Python bindings 78 : : * 79 : : * \since QGIS 3.16 80 : : */ 81 : : const QgsPolygon *polygonN( int index ) const; 82 : : #endif 83 : : 84 : : QString geometryType() const override SIP_HOLDGIL; 85 : : void clear() override; 86 : : QgsMultiPolygon *clone() const override SIP_FACTORY; 87 : : bool fromWkt( const QString &wkt ) override; 88 : : QDomElement asGml2( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override; 89 : : QDomElement asGml3( QDomDocument &doc, int precision = 17, const QString &ns = "gml", QgsAbstractGeometry::AxisOrder axisOrder = QgsAbstractGeometry::AxisOrder::XY ) const override; 90 : : json asJsonObject( int precision = 17 ) const override SIP_SKIP; 91 : : bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override; 92 : : bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override; 93 : : 94 : : /** 95 : : * Returns the geometry converted to the more generic curve type QgsMultiSurface 96 : : * \returns the converted geometry. Caller takes ownership 97 : : */ 98 : : QgsMultiSurface *toCurveType() const override SIP_FACTORY; 99 : : 100 : : QgsAbstractGeometry *boundary() const override SIP_FACTORY; 101 : : #ifndef SIP_RUN 102 : : 103 : : /** 104 : : * Cast the \a geom to a QgsMultiPolygonV2. 105 : : * Should be used by qgsgeometry_cast<QgsMultiPolygon *>( geometry ). 106 : : * 107 : : * \note Not available in Python. Objects will be automatically be converted to the appropriate target type. 108 : : * \since QGIS 3.0 109 : : */ 110 : 6 : inline static const QgsMultiPolygon *cast( const QgsAbstractGeometry *geom ) 111 : : { 112 : 6 : if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::MultiPolygon ) 113 : 5 : return static_cast<const QgsMultiPolygon *>( geom ); 114 : 1 : return nullptr; 115 : 6 : } 116 : : #endif 117 : : 118 : : QgsMultiPolygon *createEmptyWithSameType() const override SIP_FACTORY; 119 : : 120 : : #ifdef SIP_RUN 121 : : SIP_PYOBJECT __repr__(); 122 : : % MethodCode 123 : : QString wkt = sipCpp->asWkt(); 124 : : if ( wkt.length() > 1000 ) 125 : : wkt = wkt.left( 1000 ) + QStringLiteral( "..." ); 126 : : QString str = QStringLiteral( "<QgsMultiPolygon: %1>" ).arg( wkt ); 127 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 128 : : % End 129 : : #endif 130 : : 131 : : protected: 132 : : 133 : : bool wktOmitChildType() const override; 134 : : }; 135 : : 136 : : // clazy:excludeall=qstring-allocations 137 : : 138 : : #endif // QGSMULTIPOLYGON_H