Skip to content
Permalink
Browse files
Always use topological editing if using avoid intersection (where pos…
…sible also to background layers). Without topological editing, it is possible to have very small gaps between the polygons
  • Loading branch information
mhugent committed Feb 18, 2013
1 parent ee96d38 commit dc074b393e800368bd0ed35b137d9dd930b73f75
Showing with 20 additions and 1 deletion.
  1. +20 −1 src/app/qgsmaptooladdfeature.cpp
@@ -273,7 +273,26 @@ void QgsMapToolAddFeature::canvasReleaseEvent( QMouseEvent * e )
{
//add points to other features to keep topology up-to-date
int topologicalEditing = QgsProject::instance()->readNumEntry( "Digitizing", "/TopologicalEditing", 0 );
if ( topologicalEditing )

//use always topological editing for avoidIntersection.
//Otherwise, no way to guarantee the geometries don't have a small gap in between.
QStringList intersectionLayers = QgsProject::instance()->readListEntry( "Digitizing", "/AvoidIntersectionsList" );
bool avoidIntersection = !intersectionLayers.isEmpty();
if ( avoidIntersection ) //try to add topological points also to background layers
{
QStringList::const_iterator lIt = intersectionLayers.constBegin();
for ( ; lIt != intersectionLayers.constEnd(); ++lIt )
{
QgsMapLayer* ml = QgsMapLayerRegistry::instance()->mapLayer( *lIt );
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( ml );
//can only add topological points if background layer is editable...
if ( vl && vl->geometryType() == QGis::Polygon && vl->isEditable() )
{
vl->addTopologicalPoints( f->geometry() );
}
}
}
else if ( topologicalEditing )
{
vlayer->addTopologicalPoints( f->geometry() );
}

0 comments on commit dc074b3

Please sign in to comment.