30 : mMapCanvas( canvas )
69 const QList<QgsPoint>& excludePoints )
78 if ( topologicalEditing == 0 )
101 if ( snappingTol < 0 )
111 QList<QgsSnapper::SnapLayer> snapLayers;
112 snapLayers.append( snapLayer );
134 if ( topologicalEditing == 0 )
136 if ( intersectionSnapping == 0 )
141 else if ( intersectionSnapping == 0 )
151 bool snappingDefinedInProject, ok;
158 if ( !( layerIdList.size() == enabledList.size() &&
159 layerIdList.size() == toleranceList.size() &&
160 layerIdList.size() == toleranceUnitList.size() &&
161 layerIdList.size() == snapToList.size() ) )
167 QList<QgsSnapper::SnapLayer> snapLayers;
171 if ( snappingDefinedInProject )
174 QStringList::const_iterator layerIt( layerIdList.constBegin() );
175 QStringList::const_iterator tolIt( toleranceList.constBegin() );
176 QStringList::const_iterator tolUnitIt( toleranceUnitList.constBegin() );
177 QStringList::const_iterator snapIt( snapToList.constBegin() );
178 QStringList::const_iterator enabledIt( enabledList.constBegin() );
179 for ( ; layerIt != layerIdList.constEnd(); ++layerIt, ++tolIt, ++tolUnitIt, ++snapIt, ++enabledIt )
181 if ( *enabledIt !=
"enabled" )
192 snapLayer.
mLayer = vlayer;
199 if ( *snapIt ==
"to_vertex" )
203 else if ( *snapIt ==
"to_segment" )
213 snapLayers.append( snapLayer );
224 if ( !currentVectorLayer )
227 snapLayer.
mLayer = currentVectorLayer;
231 QString defaultSnapString = settings.value(
"/qgis/digitizing/default_snap_mode",
"off" ).toString();
232 if ( defaultSnapString ==
"to segment" )
236 else if ( defaultSnapString ==
"to vertex and segment" )
240 else if ( defaultSnapString ==
"to vertex" )
253 snapLayers.append( snapLayer );
261 if ( intersectionSnapping != 1 )
264 QList<QgsSnappingResult> segments;
265 QList<QgsSnappingResult> points;
266 for ( QList<QgsSnappingResult>::const_iterator it = results.constBegin();
267 it != results.constEnd();
270 if ( it->snappedVertexNr == -1 )
273 segments.push_back( *it );
278 points.push_back( *it );
282 if ( segments.length() < 2 )
285 QList<QgsSnappingResult> myResults;
287 for ( QList<QgsSnappingResult>::const_iterator oSegIt = segments.constBegin();
288 oSegIt != segments.constEnd();
291 QgsDebugMsg( QString::number( oSegIt->beforeVertexNr ) );
293 QVector<QgsPoint> vertexPoints;
294 vertexPoints.append( oSegIt->beforeVertex );
295 vertexPoints.append( oSegIt->afterVertex );
299 for ( QList<QgsSnappingResult>::iterator iSegIt = segments.begin();
300 iSegIt != segments.end();
303 QVector<QgsPoint> vertexPoints;
304 vertexPoints.append( iSegIt->beforeVertex );
305 vertexPoints.append( iSegIt->afterVertex );
311 iSegIt->snappedVertex = intersectionPoint->
asPoint();
312 myResults.append( *iSegIt );
317 if ( myResults.length() > 0 )
static double defaultTolerance(QgsMapLayer *layer, QgsMapRenderer *renderer)
Static function to get default tolerance value for a layer.
int snapToCurrentLayer(const QPoint &p, QList< QgsSnappingResult > &results, QgsSnapper::SnappingType snap_to, double snappingTol=-1, const QList< QgsPoint > &excludePoints=QList< QgsPoint >())
Does a snap to the current layer.
Base class for all map layer types.
QgsSnapper * mSnapper
The object which does the snapping operations.
int snapPoint(const QPoint &startPoint, QList< QgsSnappingResult > &snappingResult, const QList< QgsPoint > &excludePoints=QList< QgsPoint >())
Does the snapping operation.
double mTolerance
The snapping tolerances for the layers, always in source coordinate systems of the layer...
All results within the given layer tolerances are returned.
static double vertexSearchRadius(QgsMapLayer *layer, QgsMapRenderer *renderer)
Static function to get vertex tolerance value for a layer.
UnitType
Type of unit of tolerance value from settings.
QGis::GeometryType type()
Returns type of the vector.
A non GUI class for rendering a map layer set onto a QPainter.
QgsTolerance::UnitType mUnitType
What unit is used for tolerance.
int readNumEntry(const QString &scope, const QString &key, int def=0, bool *ok=0) const
Map canvas is a class for displaying all GIS data types on a canvas.
QgsSnapper::SnappingType mSnapTo
What snapping type to use (snap to segment or to vertex)
SnappingType
Snap to vertex, to segment or both.
QStringList readListEntry(const QString &scope, const QString &key, QStringList def=QStringList(), bool *ok=0) const
key value accessors
int snapToBackgroundLayers(const QPoint &p, QList< QgsSnappingResult > &results, const QList< QgsPoint > &excludePoints=QList< QgsPoint >())
Snaps to the background layers.
A class that allows advanced snapping operations on a set of vector layers.
Several snapping results which have the same position are returned.
QgsGeometry * intersection(QgsGeometry *geometry)
Returns a geometry representing the points shared by this geometry and other.
QgsMapCanvas * mMapCanvas
Pointer to the map canvas.
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
Only one snapping result is returned.
bool hasGeometryType() const
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
static QgsMapLayerRegistry * instance()
Returns the instance pointer, creating the object on the first call.
static QgsProject * instance()
access to canonical QgsProject instance
QgsMapRenderer * mapRenderer()
QgsVectorLayer * mLayer
The layer to which snapping is applied.
static QgsGeometry * fromPolyline(const QgsPolyline &polyline)
construct geometry from a polyline
QgsMapLayer * mapLayer(QString theLayerId)
Retrieve a pointer to a loaded layer by id.
void setSnapLayers(const QList< QgsSnapper::SnapLayer > &snapLayers)
QgsPoint asPoint() const
return contents of the geometry as a point if wkbType is WKBPoint, otherwise returns [0...
Represents a vector layer which manages a vector based data sets.
void setMapCanvas(QgsMapCanvas *canvas)
void setSnapMode(QgsSnapper::SnappingMode snapMode)