Skip to content

Commit 13da9f5

Browse files
committedJul 14, 2016
[Geometry checker] Don't make minimal angle fix produce duplicate nodes
1 parent 0e30ed8 commit 13da9f5

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed
 

‎src/plugins/geometry_checker/checks/qgsgeometryanglecheck.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
***************************************************************************/
1515

1616
#include "qgsgeometryanglecheck.h"
17+
#include "qgsgeometryutils.h"
1718
#include "../utils/qgsfeaturepool.h"
1819

1920
void QgsGeometryAngleCheck::collectErrors( QList<QgsGeometryCheckError*>& errors, QStringList &/*messages*/, QAtomicInt* progressCounter , const QgsFeatureIds &ids ) const
@@ -124,9 +125,15 @@ void QgsGeometryAngleCheck::fixError( QgsGeometryCheckError* error, int method,
124125
}
125126
else
126127
{
128+
changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, vidx ) );
129+
if ( QgsGeometryUtils::sqrDistance2D( p1, p3 ) < QgsGeometryCheckPrecision::tolerance() * QgsGeometryCheckPrecision::tolerance()
130+
&& QgsGeometryCheckerUtils::canDeleteVertex( geometry, vidx.part, vidx.ring ) &&
131+
geometry->deleteVertex( error->vidx() ) ) // error->vidx points to p3 after removing p2
132+
{
133+
changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, QgsVertexId( vidx.part, vidx.ring, ( vidx.vertex + 1 ) % n ) ) );
134+
}
127135
mFeaturePool->updateFeature( feature );
128136
error->setFixed( method );
129-
changes[error->featureId()].append( Change( ChangeNode, ChangeRemoved, vidx ) );
130137
}
131138
}
132139
else

0 commit comments

Comments
 (0)
Please sign in to comment.