Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgssinglegeometrycheck.cpp 3 : : -------------------------------------- 4 : : Date : 6.9.2018 5 : : Copyright : (C) 2018 by 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 : : #include "qgssinglegeometrycheck.h" 17 : : #include "qgsgeometrycheckcontext.h" 18 : : #include "qgspoint.h" 19 : : 20 : : 21 : : 22 : 3 : void QgsSingleGeometryCheck::collectErrors( const QMap<QString, QgsFeaturePool *> &featurePools, 23 : : QList<QgsGeometryCheckError *> &errors, 24 : : QStringList &messages, QgsFeedback *feedback, const LayerFeatureIds &ids ) const 25 : : { 26 : 3 : Q_UNUSED( messages ) 27 : 3 : QMap<QString, QgsFeatureIds> featureIds = ids.isEmpty() ? allLayerFeatureIds( featurePools ) : ids.toMap(); 28 : 3 : QgsGeometryCheckerUtils::LayerFeatures layerFeatures( featurePools, featureIds, compatibleGeometryTypes(), feedback, mContext ); 29 : 112 : for ( const QgsGeometryCheckerUtils::LayerFeature &layerFeature : layerFeatures ) 30 : : { 31 : 109 : const auto singleErrors = processGeometry( layerFeature.geometry() ); 32 : 149 : for ( const auto error : singleErrors ) 33 : 40 : errors.append( convertToGeometryCheckError( error, layerFeature ) ); 34 : 109 : } 35 : 3 : } 36 : : 37 : 40 : QgsGeometryCheckErrorSingle *QgsSingleGeometryCheck::convertToGeometryCheckError( QgsSingleGeometryCheckError *singleGeometryCheckError, const QgsGeometryCheckerUtils::LayerFeature &layerFeature ) const 38 : : { 39 : 40 : return new QgsGeometryCheckErrorSingle( singleGeometryCheckError, layerFeature ); 40 : 0 : } 41 : : 42 : 0 : void QgsSingleGeometryCheckError::update( const QgsSingleGeometryCheckError *other ) 43 : : { 44 : : Q_ASSERT( mCheck == other->mCheck ); 45 : 0 : mErrorLocation = other->mErrorLocation; 46 : 0 : mVertexId = other->mVertexId; 47 : 0 : mGeometry = other->mGeometry; 48 : 0 : } 49 : : 50 : 0 : bool QgsSingleGeometryCheckError::isEqual( const QgsSingleGeometryCheckError *other ) const 51 : : { 52 : 0 : return mGeometry.equals( other->mGeometry ) 53 : 0 : && mCheck == other->mCheck 54 : 0 : && mErrorLocation.equals( other->mErrorLocation ) 55 : 0 : && mVertexId == other->mVertexId; 56 : : } 57 : : 58 : 2 : bool QgsSingleGeometryCheckError::handleChanges( const QList<QgsGeometryCheck::Change> &changes ) 59 : : { 60 : 2 : Q_UNUSED( changes ) 61 : 2 : return true; 62 : : } 63 : : 64 : 0 : QString QgsSingleGeometryCheckError::description() const 65 : : { 66 : 0 : return mCheck->description(); 67 : : } 68 : : 69 : 40 : const QgsSingleGeometryCheck *QgsSingleGeometryCheckError::check() const 70 : : { 71 : 40 : return mCheck; 72 : : } 73 : : 74 : 40 : QgsGeometry QgsSingleGeometryCheckError::errorLocation() const 75 : : { 76 : 40 : return mErrorLocation; 77 : : } 78 : : 79 : 40 : QgsVertexId QgsSingleGeometryCheckError::vertexId() const 80 : : { 81 : 40 : return mVertexId; 82 : : } 83 : : 84 : 40 : QgsGeometryCheckErrorSingle::QgsGeometryCheckErrorSingle( QgsSingleGeometryCheckError *error, const QgsGeometryCheckerUtils::LayerFeature &layerFeature ) 85 : 40 : : QgsGeometryCheckError( error->check(), layerFeature, QgsPointXY( error->errorLocation().constGet()->centroid() ), error->vertexId() ) // TODO: should send geometry to QgsGeometryCheckError 86 : 40 : , mError( error ) 87 : 80 : { 88 : : 89 : 40 : } 90 : : 91 : 7 : QgsSingleGeometryCheckError *QgsGeometryCheckErrorSingle::singleError() const 92 : : { 93 : 7 : return mError; 94 : : } 95 : : 96 : 2 : bool QgsGeometryCheckErrorSingle::handleChanges( const QgsGeometryCheck::Changes &changes ) 97 : : { 98 : 2 : if ( !QgsGeometryCheckError::handleChanges( changes ) ) 99 : 0 : return false; 100 : : 101 : 2 : return mError->handleChanges( changes.value( layerId() ).value( featureId() ) ); 102 : 2 : }