29 : mMapSettings( mapRenderer->mapSettings() )
30 , mSnapMode( SnapWithOneResult )
36 : mMapSettings( mapSettings )
46 int QgsSnapper::snapPoint(
const QPoint& startPoint, QList<QgsSnappingResult>& snappingResult,
const QList<QgsPoint>& excludePoints )
49 return snapMapPoint( mapCoordPoint, snappingResult, excludePoints );
54 snappingResult.clear();
56 QMultiMap<double, QgsSnappingResult> snappingResultList;
57 QMultiMap<double, QgsSnappingResult> currentResultList;
64 QList<QgsSnapper::SnapLayer>::iterator snapLayerIt;
65 for ( snapLayerIt = mSnapLayers.begin(); snapLayerIt != mSnapLayers.end(); ++snapLayerIt )
67 if ( !snapLayerIt->mLayer->hasGeometryType() )
70 currentResultList.clear();
75 if ( snapLayerIt->mLayer->snapWithContext( layerCoordPoint, tolerance,
76 currentResultList, snapLayerIt->mSnapTo ) != 0 )
82 QMultiMap<double, QgsSnappingResult>::iterator currentResultIt;
83 for ( currentResultIt = currentResultList.begin(); currentResultIt != currentResultList.end(); ++currentResultIt )
87 newResult = currentResultIt.value();
91 snappingResultList.insert( sqrt( newResult.
snappedVertex.
sqrDist( mapCoordPoint ) ), newResult );
96 cleanResultList( snappingResultList, excludePoints );
99 QMultiMap<double, QgsSnappingResult>::iterator evalIt = snappingResultList.begin();
100 if ( evalIt == snappingResultList.end() )
108 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
110 if ( evalIt.value().snappedVertexNr != -1 )
112 returnResult = evalIt.value();
113 snappingResultList.erase( evalIt );
119 snappingResult.push_back( returnResult );
128 double tolerance = 0.000001;
130 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
134 snappingResult.push_back( evalIt.value() );
142 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
144 snappingResult.push_back( evalIt.value() );
153 mSnapLayers = snapLayers;
159 mSnapMode = snapMode;
162 void QgsSnapper::cleanResultList( QMultiMap<double, QgsSnappingResult>& list,
const QList<QgsPoint>& excludeList )
const 166 QList<double> keysToRemove;
168 QMultiMap<double, QgsSnappingResult>::iterator result_it = list.begin();
169 for ( ; result_it != list.end(); ++result_it )
171 currentSnappingResult = result_it.value();
175 if ( excludeList.contains( currentResultPoint ) )
177 keysToRemove.push_back( result_it.key() );
182 QList<double>::const_iterator remove_it = keysToRemove.constBegin();
183 for ( ; remove_it != keysToRemove.constEnd(); ++remove_it )
185 list.remove( *remove_it );
QgsPoint layerToMapCoordinates(QgsMapLayer *theLayer, QgsPoint point) const
transform point coordinates from layer's CRS to output CRS
Q_DECL_DEPRECATED int snapPoint(const QPoint &startPoint, QList< QgsSnappingResult > &snappingResult, const QList< QgsPoint > &excludePoints=QList< QgsPoint >())
Does the snapping operation.
const QgsMapToPixel & mapToPixel() const
A non GUI class for rendering a map layer set onto a QPainter.
static double toleranceInMapUnits(double tolerance, QgsMapLayer *layer, const QgsMapSettings &mapSettings, UnitType units=LayerUnits)
Static function to translate tolerance value into layer units.
QgsPoint mapToLayerCoordinates(QgsMapLayer *theLayer, QgsPoint point) const
transform point coordinates from output CRS to layer's CRS
double sqrDist(double x, double y) const
Returns the squared distance between this point and x,y.
The QgsMapSettings class contains configuration for rendering of the map.
int snapMapPoint(const QgsPoint &mapCoordPoint, QList< QgsSnappingResult > &snappingResult, const QList< QgsPoint > &excludePoints=QList< QgsPoint >())
Does the snapping operation.
Represents the result of a snapping operation.
Several snapping results which have the same position are returned.
A class to represent a point.
QgsPoint beforeVertex
The layer coordinates of the vertex before snappedVertex.
QgsPoint afterVertex
The layer coordinates of the vertex after snappedVertex.
QgsPoint toMapCoordinates(int x, int y) const
int snappedVertexNr
The vertex index of snappedVertex or -1 if no such vertex number (e.g.
Only one snapping result is returned.
QgsPoint snappedVertex
The coordinates of the snapping result.
Q_DECL_DEPRECATED QgsSnapper(QgsMapRenderer *mapRender)
@ deprecated since 2.4 - use constructor with QgsMapSettings
void setSnapLayers(const QList< QgsSnapper::SnapLayer > &snapLayers)
void setSnapMode(QgsSnapper::SnappingMode snapMode)