/*************************************************************************** qgsmaptoolrectangleextent.cpp - map tool for adding rectangle from extent --------------------- begin : July 2017 copyright : (C) 2017 by Loïc Bartoletti email : lbartoletti at tuxfamily dot org *************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "qgsmaptoolrectangleextent.h" #include "qgsgeometryrubberband.h" #include "qgsgeometryutils.h" #include "qgsmapcanvas.h" #include "qgspoint.h" #include <QMouseEvent> #include <memory> QgsMapToolRectangleExtent::QgsMapToolRectangleExtent( QgsMapToolCapture *parentTool, QgsMapCanvas *canvas, CaptureMode mode ) : QgsMapToolAddRectangle( parentTool, canvas, mode ) { } void QgsMapToolRectangleExtent::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) { QgsPoint mapPoint( e->mapPoint() ); if ( e->button() == Qt::LeftButton ) { mPoints.append( mapPoint ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); mTempRubberBand->show(); } } else if ( e->button() == Qt::RightButton ) { deactivate(); if ( mParentTool ) { mParentTool->canvasReleaseEvent( e ); } } } void QgsMapToolRectangleExtent::cadCanvasMoveEvent( QgsMapMouseEvent *e ) { QgsPoint mapPoint( e->mapPoint() ); if ( mTempRubberBand ) { switch ( mPoints.size() ) { case 1: { if ( qgsDoubleNear( mCanvas->rotation(), 0.0 ) ) { mRectangle = QgsRectangle( mPoints.at( 0 ), mapPoint ); mTempRubberBand->setGeometry( QgsMapToolAddRectangle::rectangleToPolygon( ) ); } else { emit messageEmitted( tr( "Cannot use this tool when the map canvas is rotated" ), QgsMessageBar::WARNING ); mPoints.clear(); break; } } break; default: break; } } }