Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgspolygon.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 QGSPOLYGON_H 19 : : #define QGSPOLYGON_H 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgis_sip.h" 23 : : #include "qgscurvepolygon.h" 24 : : 25 : : class QgsLineString; 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \class QgsPolygon 30 : : * \brief Polygon geometry type. 31 : : * \since QGIS 2.10 32 : : */ 33 : 3641 : class CORE_EXPORT QgsPolygon: public QgsCurvePolygon 34 : : { 35 : : public: 36 : : 37 : : 38 : : /** 39 : : * Constructor for an empty polygon geometry. 40 : : */ 41 : : QgsPolygon() SIP_HOLDGIL; 42 : : 43 : : /** 44 : : * Constructor for QgsPolygon, with the specified \a exterior ring and interior \a rings. 45 : : * 46 : : * Ownership of \a exterior and \a rings is transferred to the polygon. 47 : : * 48 : : * \since QGIS 3.14 49 : : */ 50 : : QgsPolygon( QgsLineString *exterior SIP_TRANSFER, const QList< QgsLineString * > &rings SIP_TRANSFER = QList< QgsLineString * >() ) SIP_HOLDGIL; 51 : : 52 : : QString geometryType() const override SIP_HOLDGIL; 53 : : QgsPolygon *clone() const override SIP_FACTORY; 54 : : void clear() override; 55 : : bool fromWkb( QgsConstWkbPtr &wkb ) override; 56 : : int wkbSize( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() ) const override; 57 : : QByteArray asWkb( QgsAbstractGeometry::WkbFlags flags = QgsAbstractGeometry::WkbFlags() ) const override; 58 : : QgsPolygon *surfaceToPolygon() const override SIP_FACTORY; 59 : : 60 : : /** 61 : : * Returns the geometry converted to the more generic curve type QgsCurvePolygon 62 : : * \returns the converted geometry. Caller takes ownership 63 : : */ 64 : : QgsCurvePolygon *toCurveType() const override SIP_FACTORY; 65 : : 66 : : void addInteriorRing( QgsCurve *ring SIP_TRANSFER ) override; 67 : : //overridden to handle LineString25D rings 68 : : void setExteriorRing( QgsCurve *ring SIP_TRANSFER ) override; 69 : : 70 : : QgsAbstractGeometry *boundary() const override SIP_FACTORY; 71 : : 72 : : /** 73 : : * Returns the distance from a point to the boundary of the polygon (either the 74 : : * exterior ring or any closer interior rings). The returned distance will be 75 : : * negative if the point lies outside the polygon. 76 : : * \since QGIS 3.0 77 : : */ 78 : : double pointDistanceToBoundary( double x, double y ) const; 79 : : 80 : : #ifndef SIP_RUN 81 : : 82 : : /** 83 : : * Cast the \a geom to a QgsPolygonV2. 84 : : * Should be used by qgsgeometry_cast<QgsPolygon *>( geometry ). 85 : : * 86 : : * \note Not available in Python. Objects will be automatically be converted to the appropriate target type. 87 : : * \since QGIS 3.0 88 : : */ 89 : 1041 : inline static const QgsPolygon *cast( const QgsAbstractGeometry *geom ) 90 : : { 91 : 1041 : if ( !geom ) 92 : 2 : return nullptr; 93 : : 94 : 1039 : QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() ); 95 : : 96 : 1039 : if ( flatType == QgsWkbTypes::Polygon 97 : 1039 : || flatType == QgsWkbTypes::Triangle ) 98 : 1036 : return static_cast<const QgsPolygon *>( geom ); 99 : 3 : return nullptr; 100 : 1041 : } 101 : : #endif 102 : : 103 : : QgsPolygon *createEmptyWithSameType() const override SIP_FACTORY; 104 : : 105 : : #ifdef SIP_RUN 106 : : SIP_PYOBJECT __repr__(); 107 : : % MethodCode 108 : : QString wkt = sipCpp->asWkt(); 109 : : if ( wkt.length() > 1000 ) 110 : : wkt = wkt.left( 1000 ) + QStringLiteral( "..." ); 111 : : QString str = QStringLiteral( "<QgsPolygon: %1>" ).arg( wkt ); 112 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 113 : : % End 114 : : #endif 115 : : 116 : : protected: 117 : : 118 : : friend class QgsCurvePolygon; 119 : : 120 : : }; 121 : : #endif // QGSPOLYGON_H