[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