From 13da9f52ff1030eb9c49a6bdceef676226379a22 Mon Sep 17 00:00:00 2001 From: Sandro Mani Date: Thu, 14 Jul 2016 17:10:55 +0200 Subject: [PATCH] [Geometry checker] Don't make minimal angle fix produce duplicate nodes --- .../geometry_checker/checks/qgsgeometryanglecheck.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/geometry_checker/checks/qgsgeometryanglecheck.cpp b/src/plugins/geometry_checker/checks/qgsgeometryanglecheck.cpp index 8778df88f24..22c2ad9b9ff 100644 --- a/src/plugins/geometry_checker/checks/qgsgeometryanglecheck.cpp +++ b/src/plugins/geometry_checker/checks/qgsgeometryanglecheck.cpp @@ -14,6 +14,7 @@ ***************************************************************************/ #include "qgsgeometryanglecheck.h" +#include "qgsgeometryutils.h" #include "../utils/qgsfeaturepool.h" void QgsGeometryAngleCheck::collectErrors( QList& errors, QStringList &/*messages*/, QAtomicInt* progressCounter , const QgsFeatureIds &ids ) const @@ -124,9 +125,15 @@ void QgsGeometryAngleCheck::fixError( QgsGeometryCheckError* error, int method, } else { + changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, vidx ) ); + if ( QgsGeometryUtils::sqrDistance2D( p1, p3 ) < QgsGeometryCheckPrecision::tolerance() * QgsGeometryCheckPrecision::tolerance() + && QgsGeometryCheckerUtils::canDeleteVertex( geometry, vidx.part, vidx.ring ) && + geometry->deleteVertex( error->vidx() ) ) // error->vidx points to p3 after removing p2 + { + changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, QgsVertexId( vidx.part, vidx.ring, ( vidx.vertex + 1 ) % n ) ) ); + } mFeaturePool->updateFeature( feature ); error->setFixed( method ); - changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, vidx ) ); } } else