Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsgeometrymissingvertexcheck.h 3 : : --------------------- 4 : : begin : September 2018 5 : : copyright : (C) 2018 Matthias Kuhn 6 : : email : matthias@opengis.ch 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 : : #define SIP_NO_FILE 17 : : 18 : : #ifndef QGSGEOMETRYMISSINGVERTEXCHECK_H 19 : : #define QGSGEOMETRYMISSINGVERTEXCHECK_H 20 : : 21 : : #include "qgsgeometrycheck.h" 22 : : #include "qgsgeometrycheckerror.h" 23 : : 24 : : class QgsCurvePolygon; 25 : : 26 : : /** 27 : : * \ingroup analysis 28 : : * 29 : : * \brief A geometry check error for a missing vertex. 30 : : * 31 : : * Includes additional details about the bounding box of the error, 32 : : * centered on the missing error location and scaled by taking neighbouring 33 : : * vertices into account. 34 : : * 35 : : * \since QGIS 3.8 36 : : */ 37 : 0 : class ANALYSIS_EXPORT QgsGeometryMissingVertexCheckError : public QgsGeometryCheckError 38 : : { 39 : : public: 40 : : 41 : : /** 42 : : * Create a new missing vertex check error. 43 : : */ 44 : : QgsGeometryMissingVertexCheckError( const QgsGeometryCheck *check, 45 : : const QgsGeometryCheckerUtils::LayerFeature &layerFeature, 46 : : const QgsPointXY &errorLocation, 47 : : QgsVertexId vidx = QgsVertexId(), 48 : : const QVariant &value = QVariant(), 49 : : ValueType valueType = ValueOther ); 50 : : 51 : : QgsRectangle affectedAreaBBox() const override; 52 : : 53 : : /** 54 : : * Set the bounding box of the affected area. 55 : : * 56 : : * \since QGIS 3.8 57 : : */ 58 : : void setAffectedAreaBBox( const QgsRectangle &affectedAreaBBox ); 59 : : 60 : : QMap<QString, QgsFeatureIds> involvedFeatures() const override; 61 : : 62 : : /** 63 : : * The two involved features, that share a common boundary but not all common 64 : : * vertices on this boundary. 65 : : * 66 : : * \since QGIS 3.8 67 : : */ 68 : : void setInvolvedFeatures( const QMap<QString, QgsFeatureIds> &involvedFeatures ); 69 : : 70 : : QIcon icon() const override; 71 : : 72 : : private: 73 : : QgsRectangle mAffectedAreaBBox; 74 : : QMap<QString, QgsFeatureIds> mInvolvedFeatures; 75 : : }; 76 : : 77 : : /** 78 : : * \ingroup analysis 79 : : * 80 : : * \brief A topology check for missing vertices. 81 : : * 82 : : * Any vertex which is on the border of another polygon but no corresponding vertex 83 : : * can be found on the other polygon will be reported as an error. 84 : : * 85 : : * \since QGIS 3.4 86 : : */ 87 : 1 : class ANALYSIS_EXPORT QgsGeometryMissingVertexCheck : public QgsGeometryCheck 88 : : { 89 : 0 : Q_DECLARE_TR_FUNCTIONS( QgsGeometryMissingVertexCheck ) 90 : : 91 : : public: 92 : : 93 : : /** 94 : : * The available resolutions for missing vertex check. 95 : : */ 96 : : enum ResolutionMethod 97 : : { 98 : : NoChange, //!< Do nothing 99 : : AddMissingVertex //!< Add the missing vertex 100 : : }; 101 : 0 : Q_ENUM( ResolutionMethod ) 102 : : 103 : : /** 104 : : * Creates a new missing vertex geometry check with \a context and the provided \a geometryCheckConfiguration. 105 : : */ 106 : : explicit QgsGeometryMissingVertexCheck( const QgsGeometryCheckContext *context, const QVariantMap &geometryCheckConfiguration ); 107 : : void collectErrors( const QMap<QString, QgsFeaturePool *> &featurePools, QList<QgsGeometryCheckError *> &errors, QStringList &messages, QgsFeedback *feedback, const LayerFeatureIds &ids = LayerFeatureIds() ) const override; 108 : : void fixError( const QMap<QString, QgsFeaturePool *> &featurePools, QgsGeometryCheckError *error, int method, const QMap<QString, int> &mergeAttributeIndices, Changes &changes ) const override; 109 : : Q_DECL_DEPRECATED QStringList resolutionMethods() const override; 110 : : 111 : : QString description() const override; 112 : : QString id() const override; 113 : : QList<QgsWkbTypes::GeometryType> compatibleGeometryTypes() const override; 114 : : QgsGeometryCheck::Flags flags() const override; 115 : : QgsGeometryCheck::CheckType checkType() const override; 116 : : 117 : : ///@cond private 118 : : static QList<QgsWkbTypes::GeometryType> factoryCompatibleGeometryTypes() SIP_SKIP; 119 : : static bool factoryIsCompatible( QgsVectorLayer *layer ) SIP_SKIP; 120 : : static QString factoryDescription() SIP_SKIP; 121 : : static QString factoryId() SIP_SKIP; 122 : : static QgsGeometryCheck::Flags factoryFlags() SIP_SKIP; 123 : : static QgsGeometryCheck::CheckType factoryCheckType() SIP_SKIP; 124 : : ///@endcond 125 : : 126 : : private: 127 : : void processPolygon( const QgsCurvePolygon *polygon, QgsFeaturePool *featurePool, QList<QgsGeometryCheckError *> &errors, const QgsGeometryCheckerUtils::LayerFeature &layerFeature, QgsFeedback *feedback ) const; 128 : : 129 : : QgsRectangle contextBoundingBox( const QgsCurvePolygon *polygon, const QgsVertexId &vertexId, const QgsPoint &point ) const; 130 : : }; 131 : : 132 : : 133 : : 134 : : #endif // QGSGEOMETRYMISSINGVERTEXCHECK_H