mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
Merge pull request #1260 from leyan/snapping_priority_2
Snapping priority to vertex in QgsSnapper
This commit is contained in:
commit
35e4350e91
@ -59,6 +59,7 @@ int QgsSnapper::snapPoint( const QPoint& startPoint, QList<QgsSnappingResult>& s
|
||||
if ( !snapLayerIt->mLayer->hasGeometryType() )
|
||||
continue;
|
||||
|
||||
currentResultList.clear();
|
||||
//transform point from map coordinates to layer coordinates
|
||||
layerCoordPoint = mMapSettings.mapToLayerCoordinates( snapLayerIt->mLayer, mapCoordPoint );
|
||||
|
||||
@ -93,31 +94,44 @@ int QgsSnapper::snapPoint( const QPoint& startPoint, QList<QgsSnappingResult>& s
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//Gives a priority to vertex snapping over segment snapping
|
||||
QgsSnappingResult returnResult = evalIt.value();
|
||||
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
|
||||
{
|
||||
if( evalIt.value().snappedVertexNr != -1 )
|
||||
{
|
||||
returnResult = evalIt.value();
|
||||
snappingResultList.erase( evalIt );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//We return the preferred result
|
||||
snappingResult.push_back( returnResult );
|
||||
|
||||
if ( mSnapMode == QgsSnapper::SnapWithOneResult )
|
||||
{
|
||||
//return only closest result
|
||||
snappingResult.push_back( evalIt.value() );
|
||||
//return only a single result, nothing more to do
|
||||
}
|
||||
else if ( mSnapMode == QgsSnapper::SnapWithResultsForSamePosition )
|
||||
{
|
||||
//take all snapping Results within a certain tolerance because rounding differences may occur
|
||||
//take all snapping results within a certain tolerance because rounding differences may occur
|
||||
double tolerance = 0.000001;
|
||||
double minDistance = evalIt.key();
|
||||
|
||||
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
|
||||
{
|
||||
if ( evalIt.key() > ( minDistance + tolerance ) )
|
||||
if ( returnResult.snappedVertex.sqrDist( evalIt.value().snappedVertex ) < tolerance*tolerance )
|
||||
{
|
||||
break;
|
||||
snappingResult.push_back( evalIt.value() );
|
||||
}
|
||||
snappingResult.push_back( evalIt.value() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else //take all results
|
||||
{
|
||||
for ( ; evalIt != snappingResultList.end(); ++evalIt )
|
||||
for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
|
||||
{
|
||||
snappingResult.push_back( evalIt.value() );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user