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 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 * \throws IndexError 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 */ cast(const QgsAbstractGeometry * geom)110 inline static const QgsMultiPolygon *cast( const QgsAbstractGeometry *geom ) 111 { 112 if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::MultiPolygon ) 113 return static_cast<const QgsMultiPolygon *>( geom ); 114 return nullptr; 115 } 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 139