mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-07 00:15:48 -04:00
Always use topological editing if using avoid intersection (where possible also to background layers). Without topological editing, it is possible to have very small gaps between the polygons
This commit is contained in:
parent
ee96d381e2
commit
dc074b393e
@ -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() );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user