Skip to content

Commit ff18324

Browse files
committedMar 22, 2014
modification of snapPoint
1 parent 1088c26 commit ff18324

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed
 

‎src/core/qgssnapper.cpp

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ int QgsSnapper::snapPoint( const QPoint& startPoint, QList<QgsSnappingResult>& s
5959
if ( !snapLayerIt->mLayer->hasGeometryType() )
6060
continue;
6161

62+
currentResultList.clear();
6263
//transform point from map coordinates to layer coordinates
6364
layerCoordPoint = mMapSettings.mapToLayerCoordinates( snapLayerIt->mLayer, mapCoordPoint );
6465

@@ -93,31 +94,44 @@ int QgsSnapper::snapPoint( const QPoint& startPoint, QList<QgsSnappingResult>& s
9394
return 0;
9495
}
9596

97+
98+
//Gives a priority to vertex snapping over segment snapping
99+
QgsSnappingResult returnResult = evalIt.value();
100+
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
101+
{
102+
if( evalIt.value().snappedVertexNr != -1 )
103+
{
104+
returnResult = evalIt.value();
105+
snappingResultList.erase( evalIt );
106+
break;
107+
}
108+
}
109+
110+
//We return the preferred result
111+
snappingResult.push_back( returnResult );
112+
96113
if ( mSnapMode == QgsSnapper::SnapWithOneResult )
97114
{
98-
//return only closest result
99-
snappingResult.push_back( evalIt.value() );
115+
//return only a single result, nothing more to do
100116
}
101117
else if ( mSnapMode == QgsSnapper::SnapWithResultsForSamePosition )
102118
{
103-
//take all snapping Results within a certain tolerance because rounding differences may occur
119+
//take all snapping results within a certain tolerance because rounding differences may occur
104120
double tolerance = 0.000001;
105-
double minDistance = evalIt.key();
106121

107122
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
108123
{
109-
if ( evalIt.key() > ( minDistance + tolerance ) )
124+
if ( returnResult.snappedVertex.sqrDist( evalIt.value().snappedVertex ) < tolerance*tolerance )
110125
{
111-
break;
126+
snappingResult.push_back( evalIt.value() );
112127
}
113-
snappingResult.push_back( evalIt.value() );
114128
}
115129

116130
}
117131

118132
else //take all results
119133
{
120-
for ( ; evalIt != snappingResultList.end(); ++evalIt )
134+
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
121135
{
122136
snappingResult.push_back( evalIt.value() );
123137
}

0 commit comments

Comments
 (0)
Please sign in to comment.