QgsMapMouseEvent::QgsMapMouseEvent( QgsMapToolAdvancedDigitizing* mapTool, QgsPoint point, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QEvent::Type eventType, SnappingMode mode ) : QMouseEvent( eventType, mapToPixelCoordinates( mapTool->canvas(), point ), mapTool->canvas()->mapToGlobal( mapToPixelCoordinates( mapTool->canvas(), point ) ), button, button, modifiers ) , mMapPoint( point ) , mOriginalPoint( point ) , mMapTool( mapTool ) , mSnapMatch( QgsPointLocator::Match() ) , mSnappingMode( mode ) { snapPoint(); }
QgsPoint QgsMapMouseEvent::snapPoint( SnappingMode snappingMode ) { // Use cached result if ( mSnappingMode == snappingMode ) return mMapPoint; mSnappingMode = snappingMode; if ( snappingMode == NoSnapping ) { mMapPoint = mOriginalMapPoint; mPixelPoint = pos(); return mMapPoint; } QgsSnappingUtils* snappingUtils = mMapCanvas->snappingUtils(); QgsSnappingUtils::SnapToMapMode canvasMode = snappingUtils->snapToMapMode(); if ( snappingMode == SnapAllLayers ) { int type; double tolerance; QgsTolerance::UnitType unit; snappingUtils->defaultSettings( type, tolerance, unit ); snappingUtils->setSnapToMapMode( QgsSnappingUtils::SnapAllLayers ); snappingUtils->setDefaultSettings( QgsPointLocator::Vertex | QgsPointLocator::Edge, tolerance, unit ); mSnapMatch = snappingUtils->snapToMap( mMapPoint ); snappingUtils->setSnapToMapMode( canvasMode ); snappingUtils->setDefaultSettings( type, tolerance, unit ); } else { mSnapMatch = snappingUtils->snapToMap( mMapPoint ); } if ( mSnapMatch.isValid() ) { mMapPoint = mSnapMatch.point(); mPixelPoint = mapToPixelCoordinates( mMapPoint ); } else { mMapPoint = mOriginalMapPoint; mPixelPoint = pos(); } return mMapPoint; }
void QgsMapMouseEvent::setMapPoint( const QgsPoint& point ) { mMapPoint = point; mPixelPoint = mapToPixelCoordinates( point ); }