Skip to content

Commit

Permalink
Use snapping settings of digitizing module also for measuring
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osgeo.org/qgis/trunk@11734 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
mhugent committed Sep 29, 2009
1 parent bc05a2c commit aa3442e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
30 changes: 17 additions & 13 deletions src/app/qgsmeasuretool.cpp
Expand Up @@ -44,6 +44,7 @@ QgsMeasureTool::QgsMeasureTool( QgsMapCanvas* canvas, bool measureArea )
mRightMouseClicked = false;

mDialog = new QgsMeasureDialog( this );
mSnapper.setMapCanvas( canvas );
}

QgsMeasureTool::~QgsMeasureTool()
Expand Down Expand Up @@ -130,7 +131,7 @@ void QgsMeasureTool::canvasPressEvent( QMouseEvent * e )
if ( mRightMouseClicked )
mDialog->restart();

QgsPoint idPoint = mCanvas->getCoordinateTransform()->toMapCoordinates( e->x(), e->y() );
QgsPoint idPoint = snapPoint( e->pos() );
mDialog->mousePress( idPoint );
}
}
Expand All @@ -140,12 +141,7 @@ void QgsMeasureTool::canvasMoveEvent( QMouseEvent * e )
if ( !mRightMouseClicked )
{
QgsVectorLayer *vl = dynamic_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
QgsPoint point = mCanvas->getCoordinateTransform()->toMapCoordinates( e->pos().x(), e->pos().y() );

if ( vl )
{
vl->snapPoint( point, QgsTolerance::defaultTolerance( vl, mCanvas->mapRenderer() ) );
}
QgsPoint point = snapPoint( e->pos() );

mRubberBand->movePoint( point );
mDialog->mouseMove( point );
Expand All @@ -156,12 +152,7 @@ void QgsMeasureTool::canvasMoveEvent( QMouseEvent * e )
void QgsMeasureTool::canvasReleaseEvent( QMouseEvent * e )
{
QgsVectorLayer *vl = dynamic_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
QgsPoint point = mCanvas->getCoordinateTransform()->toMapCoordinates( e->pos().x(), e->pos().y() );

if ( vl )
{
vl->snapPoint( point, QgsTolerance::defaultTolerance( vl, mCanvas->mapRenderer() ) );
}
QgsPoint point = snapPoint( e->pos() );

if ( e->button() == Qt::RightButton && ( e->buttons() & Qt::LeftButton ) == 0 ) // restart
{
Expand Down Expand Up @@ -194,3 +185,16 @@ void QgsMeasureTool::addPoint( QgsPoint &point )
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;
}
}
7 changes: 7 additions & 0 deletions src/app/qgsmeasuretool.h
Expand Up @@ -19,6 +19,7 @@
#define QGSMEASURETOOL_H

#include "qgsmaptool.h"
#include "qgsmapcanvassnapper.h"

class QgsDistanceArea;
class QgsMapCanvas;
Expand Down Expand Up @@ -89,6 +90,12 @@ class QgsMeasureTool : public QgsMapTool
// project projection
bool mWrongProjectProjection;

QgsMapCanvasSnapper mSnapper;

//! Returns the snapped (map) coordinate
//@param p (pixel) coordinate
QgsPoint snapPoint( const QPoint& p );

};

#endif

0 comments on commit aa3442e

Please sign in to comment.