From 34433ae19497a2b20326425a84e28b9a01300ed3 Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Mon, 9 Oct 2017 16:31:16 +0200 Subject: [PATCH] Improve visibility of tangents tool on cadCanvasMoveEvent (compatible when CADDockWidget is enabled) --- src/app/qgsmaptoolcircle2tangentspoint.cpp | 36 ++++++++++++++--- src/app/qgsmaptoolcircle3tangents.cpp | 46 +++++++++++++++------- src/app/qgsmaptoolcircle3tangents.h | 1 + 3 files changed, 63 insertions(+), 20 deletions(-) diff --git a/src/app/qgsmaptoolcircle2tangentspoint.cpp b/src/app/qgsmaptoolcircle2tangentspoint.cpp index ced666cffc7..63717b06219 100644 --- a/src/app/qgsmaptoolcircle2tangentspoint.cpp +++ b/src/app/qgsmaptoolcircle2tangentspoint.cpp @@ -43,6 +43,8 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e { QgsPoint mapPoint( e->mapPoint() ); + EdgesOnlyFilter filter; + QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter ); QgsPointXY p1, p2; @@ -50,8 +52,6 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e { if ( mPoints.size() < 2 * 2 ) { - EdgesOnlyFilter filter; - QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter ); if ( match.isValid() ) { match.edgePoints( p1, p2 ); @@ -69,8 +69,8 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e QgsMessageBar::CRITICAL, QgisApp::instance()->messageTimeout() ); deactivate(); } - - createRadiusSpinBox(); + else + createRadiusSpinBox(); } } else if ( e->button() == Qt::RightButton ) @@ -98,14 +98,38 @@ void QgsMapToolCircle2TangentsPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e void QgsMapToolCircle2TangentsPoint::cadCanvasMoveEvent( QgsMapMouseEvent *e ) { QgsPoint mapPoint( e->mapPoint() ); - if ( mPoints.size() == 4 ) + EdgesOnlyFilter filter; + QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter ); + + if ( mPoints.size() < 2 * 2 ) { if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); + mTempRubberBand->setFillColor( QColor( 0, 0, 255 ) ); + mTempRubberBand->setStrokeColor( QColor( 0, 0, 255 ) ); + mTempRubberBand->setStrokeWidth( 2 ); mTempRubberBand->show(); } + else + mTempRubberBand->hide(); + if ( match.isValid() ) + { + QgsPointXY p1, p2; + match.edgePoints( p1, p2 ); + std::unique_ptr line( new QgsLineString() ); + + line->addVertex( QgsPoint( p1 ) ); + line->addVertex( QgsPoint( p2 ) ); + + mTempRubberBand->setGeometry( line.release() ); + mTempRubberBand->show(); + } + } + + if ( mPoints.size() == 4 ) + { QgsPoint center = QgsPoint( mCenters.at( 0 ) ); const double currentDist = mapPoint.distanceSquared( center ); for ( int i = 1; i < mCenters.size(); ++i ) @@ -248,7 +272,7 @@ void QgsMapToolCircle2TangentsPoint::radiusSpinBoxChanged( int radius ) qDeleteAll( mRubberBands ); mRubberBands.clear(); - if ( mTempRubberBand ) + if ( mPoints.size() == 4 ) { std::unique_ptr rb( new QgsMultiPolygonV2() ); for ( int i = 0; i < mCenters.size(); ++i ) diff --git a/src/app/qgsmaptoolcircle3tangents.cpp b/src/app/qgsmaptoolcircle3tangents.cpp index 14aa04931de..dd216ea6ba3 100644 --- a/src/app/qgsmaptoolcircle3tangents.cpp +++ b/src/app/qgsmaptoolcircle3tangents.cpp @@ -46,20 +46,6 @@ void QgsMapToolCircle3Tangents::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) mPoints.append( QgsPoint( p1 ) ); mPoints.append( QgsPoint( p2 ) ); } - if ( !mPoints.isEmpty() ) - { - if ( !mTempRubberBand ) - { - mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); - mTempRubberBand->show(); - } - std::unique_ptr line( new QgsLineString() ); - - line->addVertex( QgsPoint( p1 ) ); - line->addVertex( QgsPoint( p2 ) ); - - mTempRubberBand->setGeometry( line.release() ); - } } else if ( e->button() == Qt::RightButton ) { @@ -84,3 +70,35 @@ void QgsMapToolCircle3Tangents::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) } } } + +void QgsMapToolCircle3Tangents::cadCanvasMoveEvent( QgsMapMouseEvent *e ) +{ + QgsPoint mapPoint( e->mapPoint() ); + EdgesOnlyFilter filter; + QgsPointLocator::Match match = mCanvas->snappingUtils()->snapToMap( mapPoint, &filter ); + + if ( !mTempRubberBand ) + { + mTempRubberBand = createGeometryRubberBand( ( mode() == CapturePolygon ) ? QgsWkbTypes::PolygonGeometry : QgsWkbTypes::LineGeometry, true ); + mTempRubberBand->setFillColor( QColor( 0, 0, 255 ) ); + mTempRubberBand->setStrokeColor( QColor( 0, 0, 255 ) ); + mTempRubberBand->setStrokeWidth( 2 ); + mTempRubberBand->show(); + } + else + mTempRubberBand->hide(); + + if ( match.isValid() ) + { + QgsPointXY p1, p2; + match.edgePoints( p1, p2 ); + std::unique_ptr line( new QgsLineString() ); + + line->addVertex( QgsPoint( p1 ) ); + line->addVertex( QgsPoint( p2 ) ); + + mTempRubberBand->setGeometry( line.release() ); + mTempRubberBand->show(); + } + +} diff --git a/src/app/qgsmaptoolcircle3tangents.h b/src/app/qgsmaptoolcircle3tangents.h index da4930e1f0b..a159669d0db 100644 --- a/src/app/qgsmaptoolcircle3tangents.h +++ b/src/app/qgsmaptoolcircle3tangents.h @@ -28,6 +28,7 @@ class QgsMapToolCircle3Tangents: public QgsMapToolAddCircle QgsMapToolCircle3Tangents( QgsMapToolCapture *parentTool, QgsMapCanvas *canvas, CaptureMode mode = CaptureLine ); void cadCanvasReleaseEvent( QgsMapMouseEvent *e ) override; + void cadCanvasMoveEvent( QgsMapMouseEvent *e ) override; }; #endif // QGSMAPTOOLCIRCLE3TANGENTS_H