Skip to content

Commit 3c69849

Browse files
committed
Snap to all visible layers with default vertex search tolerance (but to vertex and segment)
1 parent d7941b1 commit 3c69849

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/app/qgsmaptooloffsetcurve.cpp

+33-3
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@ void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent * e )
4141

4242
//get selected features or snap to nearest feature if no selection
4343
QgsVectorLayer* layer = currentVectorLayer();
44-
if ( !layer )
44+
if ( !mCanvas || !layer )
4545
{
4646
return;
4747
}
4848

49+
50+
QgsMapRenderer* renderer = mCanvas->mapRenderer();
51+
QgsSnapper snapper( renderer );
52+
configureSnapper( snapper );
4953
QList<QgsSnappingResult> snapResults;
50-
QgsMapCanvasSnapper snapper( mCanvas );
51-
snapper.snapToBackgroundLayers( e->pos(), snapResults );
54+
snapper.snapPoint( e->pos(), snapResults );
5255
if ( snapResults.size() > 0 )
5356
{
5457
QgsFeature fet;
@@ -358,3 +361,30 @@ QgsGeometry* QgsMapToolOffsetCurve::linestringFromPolygon( QgsGeometry* featureG
358361

359362
return 0;
360363
}
364+
365+
void QgsMapToolOffsetCurve::configureSnapper( QgsSnapper& s )
366+
{
367+
//use default vertex snap tolerance to all visible layers, but always to vertex and segment
368+
QList<QgsSnapper::SnapLayer> snapLayers;
369+
if ( mCanvas )
370+
{
371+
QList<QgsMapLayer*> layerList = mCanvas->layers();
372+
QList<QgsMapLayer*>::const_iterator layerIt = layerList.constBegin();
373+
for ( ; layerIt != layerList.constEnd(); ++layerIt )
374+
{
375+
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( *layerIt );
376+
if ( vl )
377+
{
378+
QgsSnapper::SnapLayer sl;
379+
sl.mLayer = vl;
380+
QSettings settings;
381+
sl.mTolerance = settings.value( "/qgis/digitizing/search_radius_vertex_edit", 10 ).toDouble();
382+
sl.mUnitType = ( QgsTolerance::UnitType ) settings.value( "/qgis/digitizing/default_snapping_tolerance_unit", 0 ).toInt();
383+
sl.mSnapTo = QgsSnapper::SnapToVertexAndSegment;
384+
snapLayers.push_back( sl );
385+
}
386+
}
387+
}
388+
s.setSnapLayers( snapLayers );
389+
s.setSnapMode( QgsSnapper::SnapWithOneResult );
390+
}

src/app/qgsmaptooloffsetcurve.h

+2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class QgsMapToolOffsetCurve: public QgsMapToolEdit
6565
void setOffsetForRubberBand( double offset, bool leftSide );
6666
/**Creates a linestring from the polygon ring containing the snapped vertex. Caller takes ownership of the created object*/
6767
QgsGeometry* linestringFromPolygon( QgsGeometry* featureGeom, int vertex );
68+
/**Sets snapping with default vertex search tolerance to all layers (to vertex and segment)*/
69+
void configureSnapper( QgsSnapper& s );
6870
};
6971

7072
#endif // QGSMAPTOOLOFFSETCURVE_H

0 commit comments

Comments
 (0)