diff --git a/python/gui/auto_generated/qgsadvanceddigitizingdockwidget.sip.in b/python/gui/auto_generated/qgsadvanceddigitizingdockwidget.sip.in index e2eb2584f7a6..1170bc746bf5 100644 --- a/python/gui/auto_generated/qgsadvanceddigitizingdockwidget.sip.in +++ b/python/gui/auto_generated/qgsadvanceddigitizingdockwidget.sip.in @@ -309,6 +309,15 @@ automatically populated when user clicks with left mouse button on map canvas. The last point. Helper for the CAD point list. The CAD point list is the list of points currently digitized. It contains both "normal" points and intermediate points (construction mode). + +.. versionadded:: 3.22 +%End + + QgsPoint currentPointLayerCoordinates( QgsMapLayer *layer ) const; +%Docstring +Returns the last CAD point, in a map ``layer``'s coordinates. + +.. versionadded:: 3.22 %End QgsPointXY currentPoint( bool *exists = 0 ) const /Deprecated/; diff --git a/src/gui/qgsadvanceddigitizingdockwidget.cpp b/src/gui/qgsadvanceddigitizingdockwidget.cpp index 77b6af39a86d..c0480181f490 100644 --- a/src/gui/qgsadvanceddigitizingdockwidget.cpp +++ b/src/gui/qgsadvanceddigitizingdockwidget.cpp @@ -1537,6 +1537,19 @@ QgsPoint QgsAdvancedDigitizingDockWidget::currentPointV2( bool *exist ) const return QgsPoint(); } +QgsPoint QgsAdvancedDigitizingDockWidget::currentPointLayerCoordinates( QgsMapLayer *layer ) const +{ + if ( pointsCount() > 0 && layer ) + { + QgsPoint res = mCadPointList.value( 0 ); + const QgsPointXY layerCoordinates = mMapCanvas->mapSettings().mapToLayerCoordinates( layer, res ); + res.setX( layerCoordinates.x() ); + res.setY( layerCoordinates.y() ); + return res; + } + return QgsPoint(); +} + QgsPoint QgsAdvancedDigitizingDockWidget::previousPointV2( bool *exist ) const { if ( exist ) diff --git a/src/gui/qgsadvanceddigitizingdockwidget.h b/src/gui/qgsadvanceddigitizingdockwidget.h index 375bd4201a33..b42546ccc5c5 100644 --- a/src/gui/qgsadvanceddigitizingdockwidget.h +++ b/src/gui/qgsadvanceddigitizingdockwidget.h @@ -324,9 +324,18 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private * The last point. * Helper for the CAD point list. The CAD point list is the list of points * currently digitized. It contains both "normal" points and intermediate points (construction mode). + * + * \since QGIS 3.22 */ QgsPoint currentPointV2( bool *exists = nullptr ) const; + /** + * Returns the last CAD point, in a map \a layer's coordinates. + * + * \since QGIS 3.22 + */ + QgsPoint currentPointLayerCoordinates( QgsMapLayer *layer ) const; + /** * The last point. * Helper for the CAD point list. The CAD point list is the list of points diff --git a/src/gui/qgsmaptoolcapture.cpp b/src/gui/qgsmaptoolcapture.cpp index 7496ae4e53d3..fd95020d0c58 100644 --- a/src/gui/qgsmaptoolcapture.cpp +++ b/src/gui/qgsmaptoolcapture.cpp @@ -488,7 +488,7 @@ int QgsMapToolCapture::fetchLayerPoint( const QgsPointLocator::Match &match, Qgs QgsVectorLayer *sourceLayer = match.layer(); if ( mCadDockWidget && mCadDockWidget->cadEnabled() ) { - layerPoint = mCadDockWidget->currentPointV2(); + layerPoint = mCadDockWidget->currentPointLayerCoordinates( vlayer ); return 0; } else