29 : mMapSettings( mapRenderer->mapSettings() )
35 : mMapSettings( mapSettings )
44 int QgsSnapper::snapPoint(
const QPoint& startPoint, QList<QgsSnappingResult>& snappingResult,
const QList<QgsPoint>& excludePoints )
46 snappingResult.clear();
48 QMultiMap<double, QgsSnappingResult> snappingResultList;
49 QMultiMap<double, QgsSnappingResult> currentResultList;
56 QList<QgsSnapper::SnapLayer>::iterator snapLayerIt;
59 if ( !snapLayerIt->mLayer->hasGeometryType() )
62 currentResultList.clear();
67 if ( snapLayerIt->mLayer->snapWithContext( layerCoordPoint, tolerance,
68 currentResultList, snapLayerIt->mSnapTo ) != 0 )
74 QMultiMap<double, QgsSnappingResult>::iterator currentResultIt;
75 for ( currentResultIt = currentResultList.begin(); currentResultIt != currentResultList.end(); ++currentResultIt )
79 newResult = currentResultIt.value();
83 snappingResultList.insert( sqrt( newResult.
snappedVertex.
sqrDist( mapCoordPoint ) ), newResult );
91 QMultiMap<double, QgsSnappingResult>::iterator evalIt = snappingResultList.begin();
92 if ( evalIt == snappingResultList.end() )
100 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
102 if ( evalIt.value().snappedVertexNr != -1 )
104 returnResult = evalIt.value();
105 snappingResultList.erase( evalIt );
111 snappingResult.push_back( returnResult );
120 double tolerance = 0.000001;
122 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
126 snappingResult.push_back( evalIt.value() );
134 for ( evalIt = snappingResultList.begin(); evalIt != snappingResultList.end(); ++evalIt )
136 snappingResult.push_back( evalIt.value() );
158 QList<double> keysToRemove;
160 QMultiMap<double, QgsSnappingResult>::iterator result_it = list.begin();
161 for ( ; result_it != list.end(); ++result_it )
163 currentSnappingResult = result_it.value();
167 if ( excludeList.contains( currentResultPoint ) )
169 keysToRemove.push_back( result_it.key() );
174 QList<double>::const_iterator remove_it = keysToRemove.constBegin();
175 for ( ; remove_it != keysToRemove.constEnd(); ++remove_it )
177 list.remove( *remove_it );
const QgsMapSettings & mMapSettings
The map settings object contains information about the output coordinate system of the map and about ...
QgsPoint layerToMapCoordinates(QgsMapLayer *theLayer, QgsPoint point) const
transform point coordinates from layer's CRS to output CRS
static double toleranceInMapUnits(double tolerance, QgsMapLayer *layer, const QgsMapSettings &mapSettings, UnitType units=MapUnits)
Static function to translate tolerance value into current map unit value.
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.
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.
Represents the result of a snapping operation.
Several snapping results which have the same position are returned.
A class to represent a point geometry.
void cleanResultList(QMultiMap< double, QgsSnappingResult > &list, const QList< QgsPoint > &excludeList) const
Removes the snapping results that contains points in exclude list.
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.
QgsSnapper::SnappingMode mSnapMode
Snap mode to apply.
QList< QgsSnapper::SnapLayer > mSnapLayers
List of layers to which snapping is applied.
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)