Skip to content

Commit

Permalink
[Geometry checker] Don't make minimal angle fix produce duplicate nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
manisandro committed Jul 14, 2016
1 parent 0e30ed8 commit 13da9f5
Showing 1 changed file with 8 additions and 1 deletion.
Expand Up @@ -14,6 +14,7 @@
***************************************************************************/

#include "qgsgeometryanglecheck.h"
#include "qgsgeometryutils.h"
#include "../utils/qgsfeaturepool.h"

void QgsGeometryAngleCheck::collectErrors( QList<QgsGeometryCheckError*>& errors, QStringList &/*messages*/, QAtomicInt* progressCounter , const QgsFeatureIds &ids ) const
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 13da9f5

Please sign in to comment.