29#include <QGlobalStatic>
31#include "moc_qgsmapcanvastracer.cpp"
38 , mMessageBar( messageBar )
41 sTracers()->insert( canvas,
this );
50 connect( canvas, &QObject::destroyed,
this, [
this]() { mCanvas =
nullptr; } );
59 sTracers->remove( mCanvas );
64 return sTracers->value( canvas,
nullptr );
69 Q_UNUSED( addingVertex )
75 mMessageBar->popWidget( mLastMessage );
76 mLastMessage =
nullptr;
82 message = tr(
"Disabled - there are too many features displayed. Try zooming in or disable some layers." );
91 message = tr(
"Tracing may not work correctly. Please check topology of the input layers." );
94 if ( message.isEmpty() )
98 mMessageBar->pushItem( mLastMessage );
103 setDestinationCrs( mCanvas->mapSettings().destinationCrs(), mCanvas->mapSettings().transformContext() );
108 QList<QgsVectorLayer *>
layers;
109 const QList<QgsMapLayer *> visibleLayers = mCanvas->mapSettings().layers(
true );
111 switch ( mCanvas->snappingUtils()->config().mode() )
116 QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
117 if ( vl && visibleLayers.contains( vl ) )
123 const auto constVisibleLayers = visibleLayers;
134 const auto constLayers = mCanvas->snappingUtils()->layers();
137 if ( visibleLayers.contains( cfg.layer ) )
147void QgsMapCanvasTracer::onCurrentLayerChanged()
@ Warning
Warning message.
@ Info
Information message.
@ ActiveLayer
On the active layer.
@ AdvancedConfiguration
On a per layer configuration basis.
@ AllLayers
On all vector layers.
QgsMapCanvasTracer(QgsMapCanvas *canvas, QgsMessageBar *messageBar=nullptr)
Create tracer associated with a particular map canvas, optionally message bar for reporting.
void reportError(PathError err, bool addingVertex)
Report a path finding error to the user.
static QgsMapCanvasTracer * tracerForCanvas(QgsMapCanvas *canvas)
Retrieve instance of this class associated with given canvas (if any).
void configure() override
Sets configuration from current snapping settings and canvas settings.
~QgsMapCanvasTracer() override
Map canvas is a class for displaying all GIS data types on a canvas.
void extentsChanged()
Emitted when the extents of the map change.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
QgsSnappingUtils * snappingUtils() const
Returns snapping utility class that is associated with map canvas.
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.
Base class for all map layer types.
Represents an item shown within a QgsMessageBar widget.
A bar for displaying non-blocking messages to the user.
static int defaultMessageTimeout(Qgis::MessageLevel level=Qgis::MessageLevel::NoLevel)
Returns the default timeout in seconds for timed messages of the specified level.
Contains information about the context of a rendering operation.
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
static const QgsSettingsEntryInteger * settingsDigitizingTracingMaxFeatureCount
Settings entry digitizing tracing max feature count.
void configChanged(const QgsSnappingConfig &snappingConfig)
Emitted when the snapping settings object changes.
void setMaxFeatureCount(int count)
Gets maximum possible number of features in graph. If the number is exceeded, graph is not created.
void setRenderContext(const QgsRenderContext *renderContext)
Sets the renderContext used for tracing only on visible features.
bool hasTopologyProblem() const
Whether there was an error during graph creation due to noding exception, indicating some input data ...
void setExtent(const QgsRectangle &extent)
Sets extent to which graph's features will be limited (empty extent means no limit).
PathError
Possible errors that may happen when calling findShortestPath().
@ ErrTooManyFeatures
Max feature count threshold was reached while reading features.
void setLayers(const QList< QgsVectorLayer * > &layers)
Sets layers used for tracing.
void invalidateGraph()
Destroy the existing graph structure if any (de-initialize).
QList< QgsVectorLayer * > layers() const
Gets layers used for tracing.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets the crs and transform context used for tracing.
Represents a vector layer which manages a vector based dataset.
QHash< QgsMapCanvas *, QgsMapCanvasTracer * > TracerCanvasHash
Q_GLOBAL_STATIC(TracerCanvasHash, sTracers)
Configures how a certain layer should be handled in a snapping operation.