[QGIS Commit] r11734 - trunk/qgis/src/app
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Tue Sep 29 10:52:50 EDT 2009
Author: mhugent
Date: 2009-09-29 10:52:50 -0400 (Tue, 29 Sep 2009)
New Revision: 11734
Modified:
trunk/qgis/src/app/qgsmeasuretool.cpp
trunk/qgis/src/app/qgsmeasuretool.h
Log:
Use snapping settings of digitizing module also for measuring
Modified: trunk/qgis/src/app/qgsmeasuretool.cpp
===================================================================
--- trunk/qgis/src/app/qgsmeasuretool.cpp 2009-09-29 14:01:59 UTC (rev 11733)
+++ trunk/qgis/src/app/qgsmeasuretool.cpp 2009-09-29 14:52:50 UTC (rev 11734)
@@ -44,6 +44,7 @@
mRightMouseClicked = false;
mDialog = new QgsMeasureDialog( this );
+ mSnapper.setMapCanvas( canvas );
}
QgsMeasureTool::~QgsMeasureTool()
@@ -130,7 +131,7 @@
if ( mRightMouseClicked )
mDialog->restart();
- QgsPoint idPoint = mCanvas->getCoordinateTransform()->toMapCoordinates( e->x(), e->y() );
+ QgsPoint idPoint = snapPoint( e->pos() );
mDialog->mousePress( idPoint );
}
}
@@ -140,13 +141,8 @@
if ( !mRightMouseClicked )
{
QgsVectorLayer *vl = dynamic_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
- QgsPoint point = mCanvas->getCoordinateTransform()->toMapCoordinates( e->pos().x(), e->pos().y() );
+ QgsPoint point = snapPoint( e->pos() );
- if ( vl )
- {
- vl->snapPoint( point, QgsTolerance::defaultTolerance( vl, mCanvas->mapRenderer() ) );
- }
-
mRubberBand->movePoint( point );
mDialog->mouseMove( point );
}
@@ -156,13 +152,8 @@
void QgsMeasureTool::canvasReleaseEvent( QMouseEvent * e )
{
QgsVectorLayer *vl = dynamic_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
- QgsPoint point = mCanvas->getCoordinateTransform()->toMapCoordinates( e->pos().x(), e->pos().y() );
+ QgsPoint point = snapPoint( e->pos() );
- if ( vl )
- {
- vl->snapPoint( point, QgsTolerance::defaultTolerance( vl, mCanvas->mapRenderer() ) );
- }
-
if ( e->button() == Qt::RightButton && ( e->buttons() & Qt::LeftButton ) == 0 ) // restart
{
if ( mRightMouseClicked )
@@ -194,3 +185,16 @@
mRubberBand->addPoint( point );
mDialog->addPoint( point );
}
+
+QgsPoint QgsMeasureTool::snapPoint( const QPoint& p )
+{
+ QList<QgsSnappingResult> snappingResults;
+ if ( mSnapper.snapToBackgroundLayers( p, snappingResults ) != 0 || snappingResults.size() < 1 )
+ {
+ return mCanvas->getCoordinateTransform()->toMapCoordinates( p );
+ }
+ else
+ {
+ return snappingResults.constBegin()->snappedVertex;
+ }
+}
Modified: trunk/qgis/src/app/qgsmeasuretool.h
===================================================================
--- trunk/qgis/src/app/qgsmeasuretool.h 2009-09-29 14:01:59 UTC (rev 11733)
+++ trunk/qgis/src/app/qgsmeasuretool.h 2009-09-29 14:52:50 UTC (rev 11734)
@@ -19,6 +19,7 @@
#define QGSMEASURETOOL_H
#include "qgsmaptool.h"
+#include "qgsmapcanvassnapper.h"
class QgsDistanceArea;
class QgsMapCanvas;
@@ -89,6 +90,12 @@
// project projection
bool mWrongProjectProjection;
+ QgsMapCanvasSnapper mSnapper;
+
+ //! Returns the snapped (map) coordinate
+ //@param p (pixel) coordinate
+ QgsPoint snapPoint( const QPoint& p );
+
};
#endif
More information about the QGIS-commit
mailing list