bool QgsGeometrySelfIntersectionCheckError::handleChanges( const QgsGeometryCheck::Changes &changes ) { if ( !QgsGeometryCheckError::handleChanges( changes ) ) { return false; } Q_FOREACH ( const QgsGeometryCheck::Change &change, changes.value( featureId() ) ) { if ( change.vidx.vertex == mInter.segment1 || change.vidx.vertex == mInter.segment1 + 1 || change.vidx.vertex == mInter.segment2 || change.vidx.vertex == mInter.segment2 + 1 ) { return false; } else if ( change.vidx.vertex >= 0 ) { if ( change.vidx.vertex < mInter.segment1 ) { mInter.segment1 += change.type == QgsGeometryCheck::ChangeAdded ? 1 : -1; } if ( change.vidx.vertex < mInter.segment2 ) { mInter.segment2 += change.type == QgsGeometryCheck::ChangeAdded ? 1 : -1; } } } return true; }
bool QgsGeometryCheckError::handleChanges( const QgsGeometryCheck::Changes &changes ) { if ( status() == StatusObsolete ) { return false; } for ( const QgsGeometryCheck::Change &change : changes.value( layerId() ).value( featureId() ) ) { if ( change.what == QgsGeometryCheck::ChangeFeature ) { if ( change.type == QgsGeometryCheck::ChangeRemoved ) { return false; } else if ( change.type == QgsGeometryCheck::ChangeChanged ) { // If the check is checking the feature at geometry nodes level, the // error almost certainly invalid after a geometry change. In the other // cases, it might likely still be valid. return mCheck->getCheckType() != QgsGeometryCheck::FeatureNodeCheck; } } else if ( change.what == QgsGeometryCheck::ChangePart ) { if ( mVidx.part == change.vidx.part ) { return false; } else if ( mVidx.part > change.vidx.part ) { mVidx.part += change.type == QgsGeometryCheck::ChangeAdded ? 1 : -1; } } else if ( change.what == QgsGeometryCheck::ChangeRing ) { if ( mVidx.partEqual( change.vidx ) ) { if ( mVidx.ring == change.vidx.ring ) { return false; } else if ( mVidx.ring > change.vidx.ring ) { mVidx.ring += change.type == QgsGeometryCheck::ChangeAdded ? 1 : -1; } } } else if ( change.what == QgsGeometryCheck::ChangeNode ) { if ( mVidx.ringEqual( change.vidx ) ) { if ( mVidx.vertex == change.vidx.vertex ) { return false; } else if ( mVidx.vertex > change.vidx.vertex ) { mVidx.vertex += change.type == QgsGeometryCheck::ChangeAdded ? 1 : -1; } } } } return true; }