QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsmapcanvassnappingutils.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmapcanvassnappingutils.cpp
3 ---------------------
4 begin : December 2014
5 copyright : (C) 2014 by Martin Dobias
6 email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16
17#include "qgsmapcanvas.h"
18#include "qgsvectorlayer.h"
20
21#include <QApplication>
22#include <QProgressDialog>
23
25 : QgsSnappingUtils( parent, QgsSettingsRegistryCore::settingsDigitizingSnapInvisibleFeature.value() )
26 , mCanvas( canvas )
27
28{
29 connect( canvas, &QgsMapCanvas::extentsChanged, this, &QgsMapCanvasSnappingUtils::canvasMapSettingsChanged );
30 connect( canvas, &QgsMapCanvas::destinationCrsChanged, this, &QgsMapCanvasSnappingUtils::canvasMapSettingsChanged );
31 connect( canvas, &QgsMapCanvas::layersChanged, this, &QgsMapCanvasSnappingUtils::canvasMapSettingsChanged );
32 connect( canvas, &QgsMapCanvas::currentLayerChanged, this, &QgsMapCanvasSnappingUtils::canvasCurrentLayerChanged );
33 connect( canvas, &QgsMapCanvas::transformContextChanged, this, &QgsMapCanvasSnappingUtils::canvasTransformContextChanged );
34 connect( canvas, &QgsMapCanvas::mapToolSet, this, &QgsMapCanvasSnappingUtils::canvasMapToolChanged );
35 canvasMapSettingsChanged();
36 canvasCurrentLayerChanged();
37}
38
39void QgsMapCanvasSnappingUtils::canvasMapSettingsChanged()
40{
41 setMapSettings( mCanvas->mapSettings() );
43}
44
45void QgsMapCanvasSnappingUtils::canvasTransformContextChanged()
46{
47 // can't trust any of our previous locators, as we don't know exactly how datum transform changes would affect these
49 setMapSettings( mCanvas->mapSettings() );
50}
51
52void QgsMapCanvasSnappingUtils::canvasCurrentLayerChanged()
53{
54 setCurrentLayer( qobject_cast<QgsVectorLayer *>( mCanvas->currentLayer() ) );
55}
56
57void QgsMapCanvasSnappingUtils::canvasMapToolChanged()
58{
60}
61
63{
64 QApplication::setOverrideCursor( Qt::WaitCursor );
65 mProgress = new QProgressDialog( tr( "Indexing data…" ), QString(), 0, count, mCanvas->topLevelWidget() );
66 mProgress->setWindowModality( Qt::WindowModal );
67}
68
70{
71 if ( !mProgress )
72 return;
73
74 mProgress->setValue( index );
75 if ( index == mProgress->maximum() )
76 {
77 delete mProgress;
78 mProgress = nullptr;
79 QApplication::restoreOverrideCursor();
80 }
81}
QgsMapCanvasSnappingUtils(QgsMapCanvas *canvas, QObject *parent=nullptr)
Construct map canvas snapping utils object.
void prepareIndexProgress(int index) override
Called when finished indexing a layer with snapToMap. When index == count the indexing is complete.
void prepareIndexStarting(int count) override
Called when starting to index with snapToMap - can be overridden and e.g. progress dialog can be prov...
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:90
void extentsChanged()
Emitted when the extents of the map change.
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
void destinationCrsChanged()
Emitted when map CRS has changed.
void transformContextChanged()
Emitted when the canvas transform context is changed.
void layersChanged()
Emitted when a new set of layers has been received.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
QgsSettingsRegistryCore is used for settings introspection and collects all QgsSettingsEntry instance...
static const QgsSettingsEntryBool settingsDigitizingSnapInvisibleFeature
Settings entry digitizing snap invisible feature.
This class has all the configuration of snapping and can return answers to snapping queries.
void setMapSettings(const QgsMapSettings &settings)
Assign current map settings to the utils - used for conversion between screen coords to map coords.
void clearAllLocators()
Deletes all existing locators (e.g. when destination CRS has changed and we need to reindex)
void setCurrentLayer(QgsVectorLayer *layer)
Sets current layer so that if mode is SnapCurrentLayer we know which layer to use.
void setEnableSnappingForInvisibleFeature(bool enable)
Set if invisible features must be snapped or not.