From aae655913082e04475a98ac046bf9b4e664bf764 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Thu, 23 Aug 2018 10:46:02 +0200 Subject: [PATCH] Allow disabling snapping on maptools --- .../qgsmaptooladvanceddigitizing.sip.in | 14 ++++++++++++++ src/gui/qgsmaptooladvanceddigitizing.cpp | 16 +++++++++++++--- src/gui/qgsmaptooladvanceddigitizing.h | 16 ++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/python/gui/auto_generated/qgsmaptooladvanceddigitizing.sip.in b/python/gui/auto_generated/qgsmaptooladvanceddigitizing.sip.in index 3da3915d3ba..8754c4fee99 100644 --- a/python/gui/auto_generated/qgsmaptooladvanceddigitizing.sip.in +++ b/python/gui/auto_generated/qgsmaptooladvanceddigitizing.sip.in @@ -149,6 +149,20 @@ canvasMoveEvent is triggered and it's not hidden by the cad's construction mode. :param e: Mouse events prepared by the cad system +%End + + bool snapToGridEnabled() const; +%Docstring +Enables or disables snap to grid of mouse events. + +.. versionadded:: 3.4 +%End + + void setSnapToGridEnabled( bool snapToGridEnabled ); +%Docstring +Enables or disables snap to grid of mouse events. + +.. versionadded:: 3.4 %End }; diff --git a/src/gui/qgsmaptooladvanceddigitizing.cpp b/src/gui/qgsmaptooladvanceddigitizing.cpp index a1fd537f520..1941fe55d7a 100644 --- a/src/gui/qgsmaptooladvanceddigitizing.cpp +++ b/src/gui/qgsmaptooladvanceddigitizing.cpp @@ -40,7 +40,7 @@ void QgsMapToolAdvancedDigitizing::canvasPressEvent( QgsMapMouseEvent *e ) } QgsVectorLayer *layer = currentVectorLayer(); - if ( layer ) + if ( mSnapToGridEnabled && layer ) { e->snapToGrid( layer->geometryOptions().geometryPrecision, layer->crs() ); } @@ -80,7 +80,7 @@ void QgsMapToolAdvancedDigitizing::canvasReleaseEvent( QgsMapMouseEvent *e ) } QgsVectorLayer *layer = currentVectorLayer(); - if ( layer ) + if ( mSnapToGridEnabled && layer ) { e->snapToGrid( layer->geometryOptions().geometryPrecision, layer->crs() ); } @@ -105,7 +105,7 @@ void QgsMapToolAdvancedDigitizing::canvasMoveEvent( QgsMapMouseEvent *e ) } QgsVectorLayer *layer = currentVectorLayer(); - if ( layer ) + if ( mSnapToGridEnabled && layer ) { e->snapToGrid( layer->geometryOptions().geometryPrecision, layer->crs() ); } @@ -133,3 +133,13 @@ void QgsMapToolAdvancedDigitizing::cadPointChanged( const QgsPointXY &point ) QMouseEvent *ev = new QMouseEvent( QEvent::MouseMove, mCanvas->mouseLastXY(), Qt::NoButton, Qt::NoButton, Qt::NoModifier ); qApp->postEvent( mCanvas->viewport(), ev ); // event queue will delete the event when processed } + +bool QgsMapToolAdvancedDigitizing::snapToGridEnabled() const +{ + return mSnapToGridEnabled; +} + +void QgsMapToolAdvancedDigitizing::setSnapToGridEnabled( bool snapToGridEnabled ) +{ + mSnapToGridEnabled = snapToGridEnabled; +} diff --git a/src/gui/qgsmaptooladvanceddigitizing.h b/src/gui/qgsmaptooladvanceddigitizing.h index a3fba96435a..732ab407f9a 100644 --- a/src/gui/qgsmaptooladvanceddigitizing.h +++ b/src/gui/qgsmaptooladvanceddigitizing.h @@ -140,6 +140,20 @@ class GUI_EXPORT QgsMapToolAdvancedDigitizing : public QgsMapToolEdit */ virtual void cadCanvasMoveEvent( QgsMapMouseEvent *e ) { Q_UNUSED( e ) } + /** + * Enables or disables snap to grid of mouse events. + * + * \since QGIS 3.4 + */ + bool snapToGridEnabled() const; + + /** + * Enables or disables snap to grid of mouse events. + * + * \since QGIS 3.4 + */ + void setSnapToGridEnabled( bool snapToGridEnabled ); + private slots: /** @@ -159,6 +173,8 @@ class GUI_EXPORT QgsMapToolAdvancedDigitizing : public QgsMapToolEdit bool mAdvancedDigitizingAllowed = true; //! Whether to snap mouse cursor to map before passing coordinates to cadCanvas*Event() bool mAutoSnapEnabled = true; + //! Whether to snap to grid before passing coordinates to cadCanvas*Event() + bool mSnapToGridEnabled = true; }; #endif // QGSMAPTOOLADVANCEDDIGITIZE_H