Skip to content

Commit 208b5e3

Browse files
committedJan 20, 2015
Get rid of last snapToBackgroundLayers() calls
1 parent 30684c7 commit 208b5e3

File tree

3 files changed

+35
-70
lines changed

3 files changed

+35
-70
lines changed
 

‎src/app/nodetool/qgsmaptoolnodetool.cpp

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,21 @@
2424
#include "qgsmapcanvas.h"
2525
#include "qgsproject.h"
2626
#include "qgsrubberband.h"
27+
#include "qgssnappingutils.h"
2728
#include "qgsvectorlayer.h"
2829

2930
#include <QMouseEvent>
3031
#include <QRubberBand>
3132

33+
//! Match filter that does not accept only one particular point
34+
struct QgsExcludePointFilter : public QgsPointLocator::MatchFilter
35+
{
36+
QgsExcludePointFilter( const QgsPoint& exclPoint ) : mExclPoint( exclPoint ) {}
37+
bool acceptMatch( const QgsPointLocator::Match& match ) { return match.point() != mExclPoint; }
38+
QgsPoint mExclPoint;
39+
};
40+
41+
3242
QgsMapToolNodeTool::QgsMapToolNodeTool( QgsMapCanvas* canvas )
3343
: QgsMapToolVertexEdit( canvas )
3444
, mSelectedFeature( 0 )
@@ -256,26 +266,22 @@ void QgsMapToolNodeTool::canvasMoveEvent( QMouseEvent * e )
256266
}
257267
createMovingRubberBands();
258268

259-
QList<QgsSnappingResult> snapResults;
260-
QgsPoint posMapCoord = snapPointFromResults( snapResults, e->pos() );
261-
mPosMapCoordBackup = posMapCoord;
269+
mPosMapCoordBackup = toMapCoordinates( e->pos() );
262270
}
263271
else
264272
{
265273
// move rubberband
266-
QList<QgsSnappingResult> snapResults;
267-
mSnapper.snapToBackgroundLayers( e->pos(), snapResults, QList<QgsPoint>() << mClosestMapVertex );
268-
269-
// get correct coordinates to move to
270-
QgsPoint posMapCoord = snapPointFromResults( snapResults, e->pos() );
271-
272-
QgsPoint pressMapCoords;
273-
if ( snapResults.size() > 0 )
274+
QgsPoint posMapCoord, pressMapCoords;
275+
QgsExcludePointFilter excludePointFilter( mClosestMapVertex );
276+
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( e->pos(), &excludePointFilter );
277+
if ( match.isValid() )
274278
{
279+
posMapCoord = match.point();
275280
pressMapCoords = mClosestMapVertex;
276281
}
277282
else
278283
{
284+
posMapCoord = toMapCoordinates( e->pos() );
279285
pressMapCoords = toMapCoordinates( mPressCoordinates );
280286
}
281287

@@ -544,27 +550,33 @@ void QgsMapToolNodeTool::canvasReleaseEvent( QMouseEvent * e )
544550
if ( mMoving )
545551
{
546552
mMoving = false;
553+
QgsPoint releaseMapCoords, pressMapCoords;
547554

548-
QList<QgsSnappingResult> snapResults;
549-
mSnapper.snapToBackgroundLayers( e->pos(), snapResults, QList<QgsPoint>() << mClosestMapVertex );
550-
551-
QgsPoint releaseLayerCoords = toLayerCoordinates( vlayer, snapPointFromResults( snapResults, e->pos() ) );
555+
QgsExcludePointFilter excludePointFilter( mClosestMapVertex );
556+
QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( e->pos(), &excludePointFilter );
552557

553-
QgsPoint pressLayerCoords;
554-
if ( snapResults.size() > 0 )
558+
if ( match.isValid() )
559+
{
560+
releaseMapCoords = match.point();
561+
pressMapCoords = mClosestMapVertex;
562+
}
563+
else
555564
{
556-
pressLayerCoords = toLayerCoordinates( vlayer, mClosestMapVertex );
565+
releaseMapCoords = toMapCoordinates( e->pos() );
566+
pressMapCoords = toMapCoordinates( mPressCoordinates );
567+
}
557568

569+
QgsPoint releaseLayerCoords = toLayerCoordinates( vlayer, releaseMapCoords );
570+
QgsPoint pressLayerCoords = toLayerCoordinates( vlayer, pressMapCoords );
571+
572+
if ( match.isValid() )
573+
{
558574
int topologicalEditing = QgsProject::instance()->readNumEntry( "Digitizing", "/TopologicalEditing", 0 );
559575
if ( topologicalEditing )
560576
{
561-
insertSegmentVerticesForSnap( snapResults, vlayer );
577+
addTopologicalPoints( QList<QgsPoint>() << releaseMapCoords );
562578
}
563579
}
564-
else
565-
{
566-
pressLayerCoords = toLayerCoordinates( vlayer, mPressCoordinates );
567-
}
568580

569581
mSelectedFeature->moveSelectedVertexes( releaseLayerCoords - pressLayerCoords );
570582
mCanvas->refresh();

‎src/app/qgsmaptooledit.cpp

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,6 @@ QgsMapToolEdit::~QgsMapToolEdit()
3232
{
3333
}
3434

35-
int QgsMapToolEdit::insertSegmentVerticesForSnap( const QList<QgsSnappingResult>& snapResults, QgsVectorLayer* editedLayer )
36-
{
37-
QgsPoint layerPoint;
38-
39-
if ( !editedLayer || !editedLayer->isEditable() )
40-
{
41-
return 1;
42-
}
43-
44-
//transform snaping coordinates to layer crs first
45-
QList<QgsSnappingResult> transformedSnapResults = snapResults;
46-
QList<QgsSnappingResult>::iterator it = transformedSnapResults.begin();
47-
for ( ; it != transformedSnapResults.constEnd(); ++it )
48-
{
49-
QgsPoint layerPoint = toLayerCoordinates( editedLayer, it->snappedVertex );
50-
it->snappedVertex = layerPoint;
51-
}
52-
53-
return editedLayer->insertSegmentVerticesForSnap( transformedSnapResults );
54-
}
55-
56-
QgsPoint QgsMapToolEdit::snapPointFromResults( const QList<QgsSnappingResult>& snapResults, const QPoint& screenCoords )
57-
{
58-
if ( snapResults.size() < 1 )
59-
{
60-
return toMapCoordinates( screenCoords );
61-
}
62-
else
63-
{
64-
return snapResults.constBegin()->snappedVertex;
65-
}
66-
}
6735

6836
QgsRubberBand* QgsMapToolEdit::createRubberBand( QGis::GeometryType geometryType, bool alternativeBand )
6937
{

‎src/app/qgsmaptooledit.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,6 @@ class APP_EXPORT QgsMapToolEdit: public QgsMapToolAdvancedDigitizing
3131
virtual bool isEditTool() override { return true; }
3232

3333
protected:
34-
/**Inserts vertices to the snapped segments of the editing layer.
35-
This is useful for topological editing if snap to segment is enabled.
36-
@param snapResults results collected from the snapping operation
37-
@param editedLayer pointer to the editing layer
38-
@return 0 in case of success*/
39-
int insertSegmentVerticesForSnap( const QList<QgsSnappingResult>& snapResults, QgsVectorLayer* editedLayer );
40-
41-
/**Extracts a single snapping point from a set of snapping results.
42-
This is useful for snapping operations that just require a position to snap to and not all the
43-
snapping results. If the list is empty, the screen coordinates are transformed into map coordinates and returned
44-
@param snapResults results collected from the snapping operation.
45-
@return the snapped point in map coordinates
46-
CADTODO to be removed
47-
*/
48-
QgsPoint snapPointFromResults( const QList<QgsSnappingResult>& snapResults, const QPoint& screenCoords );
4934

5035
/** Creates a rubber band with the color/line width from
5136
* the QGIS settings. The caller takes ownership of the

0 commit comments

Comments
 (0)
Please sign in to comment.