From 81afa75da564220e676a97fc8eaa6e27c18f80f8 Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Tue, 28 Jan 2020 10:27:32 +0100 Subject: [PATCH 1/5] Fixes #25597 Allow use of Backspace key to undo vertex added --- src/app/qgsmaptooladdcircle.cpp | 22 ++++++++++++++++++++++ src/app/qgsmaptooladdellipse.cpp | 22 ++++++++++++++++++++++ src/app/qgsmaptooladdrectangle.cpp | 22 ++++++++++++++++++++++ src/app/qgsmaptooladdregularpolygon.cpp | 22 ++++++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/src/app/qgsmaptooladdcircle.cpp b/src/app/qgsmaptooladdcircle.cpp index 6eed5059c029..7ed06c077748 100644 --- a/src/app/qgsmaptooladdcircle.cpp +++ b/src/app/qgsmaptooladdcircle.cpp @@ -52,6 +52,28 @@ void QgsMapToolAddCircle::keyPressEvent( QKeyEvent *e ) if ( mParentTool ) mParentTool->keyPressEvent( e ); } + + if ( e && e->key() == Qt::Key_Backspace ) + { + if ( mPoints.size() == 1 ) + { + + if ( mTempRubberBand ) + { + delete mTempRubberBand; + mTempRubberBand = nullptr; + } + + mPoints.clear(); + } + else if ( mPoints.size() > 1 ) + { + mPoints.removeLast(); + + } + if ( mParentTool ) + mParentTool->keyPressEvent( e ); + } } void QgsMapToolAddCircle::keyReleaseEvent( QKeyEvent *e ) diff --git a/src/app/qgsmaptooladdellipse.cpp b/src/app/qgsmaptooladdellipse.cpp index bc1ebf4298a0..a37e6e70ba71 100644 --- a/src/app/qgsmaptooladdellipse.cpp +++ b/src/app/qgsmaptooladdellipse.cpp @@ -52,6 +52,28 @@ void QgsMapToolAddEllipse::keyPressEvent( QKeyEvent *e ) if ( mParentTool ) mParentTool->keyPressEvent( e ); } + + if ( e && e->key() == Qt::Key_Backspace ) + { + if ( mPoints.size() == 1 ) + { + + if ( mTempRubberBand ) + { + delete mTempRubberBand; + mTempRubberBand = nullptr; + } + + mPoints.clear(); + } + else if ( mPoints.size() > 1 ) + { + mPoints.removeLast(); + + } + if ( mParentTool ) + mParentTool->keyPressEvent( e ); + } } void QgsMapToolAddEllipse::keyReleaseEvent( QKeyEvent *e ) diff --git a/src/app/qgsmaptooladdrectangle.cpp b/src/app/qgsmaptooladdrectangle.cpp index b150c0081ae4..7b3941e0b23a 100644 --- a/src/app/qgsmaptooladdrectangle.cpp +++ b/src/app/qgsmaptooladdrectangle.cpp @@ -53,6 +53,28 @@ void QgsMapToolAddRectangle::keyPressEvent( QKeyEvent *e ) if ( mParentTool ) mParentTool->keyPressEvent( e ); } + + if ( e && e->key() == Qt::Key_Backspace ) + { + if ( mPoints.size() == 1 ) + { + + if ( mTempRubberBand ) + { + delete mTempRubberBand; + mTempRubberBand = nullptr; + } + + mPoints.clear(); + } + else if ( mPoints.size() > 1 ) + { + mPoints.removeLast(); + + } + if ( mParentTool ) + mParentTool->keyPressEvent( e ); + } } void QgsMapToolAddRectangle::keyReleaseEvent( QKeyEvent *e ) diff --git a/src/app/qgsmaptooladdregularpolygon.cpp b/src/app/qgsmaptooladdregularpolygon.cpp index 0f194818156e..469db947118d 100644 --- a/src/app/qgsmaptooladdregularpolygon.cpp +++ b/src/app/qgsmaptooladdregularpolygon.cpp @@ -72,6 +72,28 @@ void QgsMapToolAddRegularPolygon::keyPressEvent( QKeyEvent *e ) if ( mParentTool ) mParentTool->keyPressEvent( e ); } + + if ( e && e->key() == Qt::Key_Backspace ) + { + if ( mPoints.size() == 1 ) + { + + if ( mTempRubberBand ) + { + delete mTempRubberBand; + mTempRubberBand = nullptr; + } + + mPoints.clear(); + } + else if ( mPoints.size() > 1 ) + { + mPoints.removeLast(); + + } + if ( mParentTool ) + mParentTool->keyPressEvent( e ); + } } void QgsMapToolAddRegularPolygon::keyReleaseEvent( QKeyEvent *e ) From 775e630f0f3f70503d4f11cdc5d439c4d476aa3b Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Tue, 28 Jan 2020 10:28:50 +0100 Subject: [PATCH 2/5] Unfocus regular polygon widget --- src/app/qgsmaptooladdregularpolygon.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/qgsmaptooladdregularpolygon.cpp b/src/app/qgsmaptooladdregularpolygon.cpp index 469db947118d..6cb58c42df03 100644 --- a/src/app/qgsmaptooladdregularpolygon.cpp +++ b/src/app/qgsmaptooladdregularpolygon.cpp @@ -48,7 +48,6 @@ void QgsMapToolAddRegularPolygon::createNumberSidesSpinBox() mNumberSidesSpinBox->setPrefix( tr( "Number of sides: " ) ); mNumberSidesSpinBox->setValue( mNumberSides ); QgisApp::instance()->addUserInputWidget( mNumberSidesSpinBox.get() ); - mNumberSidesSpinBox->setFocus( Qt::TabFocusReason ); } void QgsMapToolAddRegularPolygon::deleteNumberSidesSpinBox() From ae7c9b7cebcf734cd22022fbc506669d8771d9aa Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Tue, 28 Jan 2020 10:47:16 +0100 Subject: [PATCH 3/5] While I'm here, unallow to add useless points --- src/app/qgsmaptoolcircle2points.cpp | 3 ++- src/app/qgsmaptoolcirclecenterpoint.cpp | 3 ++- src/app/qgsmaptoolellipsecenterpoint.cpp | 3 ++- src/app/qgsmaptoolellipseextent.cpp | 3 ++- src/app/qgsmaptoolellipsefoci.cpp | 3 ++- src/app/qgsmaptoolrectanglecenter.cpp | 3 ++- src/app/qgsmaptoolrectangleextent.cpp | 3 ++- src/app/qgsmaptoolregularpolygon2points.cpp | 3 ++- src/app/qgsmaptoolregularpolygoncentercorner.cpp | 3 ++- src/app/qgsmaptoolregularpolygoncenterpoint.cpp | 3 ++- 10 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/app/qgsmaptoolcircle2points.cpp b/src/app/qgsmaptoolcircle2points.cpp index 51f9cc119b62..ce72bc077de9 100644 --- a/src/app/qgsmaptoolcircle2points.cpp +++ b/src/app/qgsmaptoolcircle2points.cpp @@ -34,7 +34,8 @@ void QgsMapToolCircle2Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolcirclecenterpoint.cpp b/src/app/qgsmaptoolcirclecenterpoint.cpp index 7c350a8a119f..d9b429c707e4 100644 --- a/src/app/qgsmaptoolcirclecenterpoint.cpp +++ b/src/app/qgsmaptoolcirclecenterpoint.cpp @@ -34,7 +34,8 @@ void QgsMapToolCircleCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolellipsecenterpoint.cpp b/src/app/qgsmaptoolellipsecenterpoint.cpp index eff730411dd0..5cdbcab202a3 100644 --- a/src/app/qgsmaptoolellipsecenterpoint.cpp +++ b/src/app/qgsmaptoolellipsecenterpoint.cpp @@ -34,7 +34,8 @@ void QgsMapToolEllipseCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolellipseextent.cpp b/src/app/qgsmaptoolellipseextent.cpp index 0639c41450eb..1f1274923c54 100644 --- a/src/app/qgsmaptoolellipseextent.cpp +++ b/src/app/qgsmaptoolellipseextent.cpp @@ -36,7 +36,8 @@ void QgsMapToolEllipseExtent::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolellipsefoci.cpp b/src/app/qgsmaptoolellipsefoci.cpp index 1ba6b4a16e3e..36d054f18c74 100644 --- a/src/app/qgsmaptoolellipsefoci.cpp +++ b/src/app/qgsmaptoolellipsefoci.cpp @@ -35,7 +35,8 @@ void QgsMapToolEllipseFoci::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 2 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolrectanglecenter.cpp b/src/app/qgsmaptoolrectanglecenter.cpp index 0fc664337de1..dd1ef59b73f8 100644 --- a/src/app/qgsmaptoolrectanglecenter.cpp +++ b/src/app/qgsmaptoolrectanglecenter.cpp @@ -38,7 +38,8 @@ void QgsMapToolRectangleCenter::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolrectangleextent.cpp b/src/app/qgsmaptoolrectangleextent.cpp index 30079a01079e..60dd78498efe 100644 --- a/src/app/qgsmaptoolrectangleextent.cpp +++ b/src/app/qgsmaptoolrectangleextent.cpp @@ -36,7 +36,8 @@ void QgsMapToolRectangleExtent::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() && !mTempRubberBand ) { diff --git a/src/app/qgsmaptoolregularpolygon2points.cpp b/src/app/qgsmaptoolregularpolygon2points.cpp index dbd9c621dcaf..0bb49f4a0786 100644 --- a/src/app/qgsmaptoolregularpolygon2points.cpp +++ b/src/app/qgsmaptoolregularpolygon2points.cpp @@ -41,7 +41,8 @@ void QgsMapToolRegularPolygon2Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() ) { diff --git a/src/app/qgsmaptoolregularpolygoncentercorner.cpp b/src/app/qgsmaptoolregularpolygoncentercorner.cpp index a2a5658bd3bc..d6e87d28d09b 100644 --- a/src/app/qgsmaptoolregularpolygoncentercorner.cpp +++ b/src/app/qgsmaptoolregularpolygoncentercorner.cpp @@ -39,7 +39,8 @@ void QgsMapToolRegularPolygonCenterCorner::cadCanvasReleaseEvent( QgsMapMouseEve if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() ) { diff --git a/src/app/qgsmaptoolregularpolygoncenterpoint.cpp b/src/app/qgsmaptoolregularpolygoncenterpoint.cpp index 238e689f16f2..2ba3f9c0778e 100644 --- a/src/app/qgsmaptoolregularpolygoncenterpoint.cpp +++ b/src/app/qgsmaptoolregularpolygoncenterpoint.cpp @@ -38,7 +38,8 @@ void QgsMapToolRegularPolygonCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEven if ( e->button() == Qt::LeftButton ) { - mPoints.append( point ); + if ( mPoints.size() < 1 ) + mPoints.append( point ); if ( !mPoints.isEmpty() ) { From 290870b81109df13eb84ac56fa29f7249cbdae96 Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Tue, 28 Jan 2020 11:12:44 +0100 Subject: [PATCH 4/5] add tests --- tests/src/app/testqgsmaptoolcircle.cpp | 84 +++++++++++ tests/src/app/testqgsmaptoolellipse.cpp | 130 ++++++++++++++++++ tests/src/app/testqgsmaptoolrectangle.cpp | 118 ++++++++++++++++ .../src/app/testqgsmaptoolregularpolygon.cpp | 81 +++++++++++ 4 files changed, 413 insertions(+) diff --git a/tests/src/app/testqgsmaptoolcircle.cpp b/tests/src/app/testqgsmaptoolcircle.cpp index c0472226bcf7..85dd8d067bb1 100644 --- a/tests/src/app/testqgsmaptoolcircle.cpp +++ b/tests/src/app/testqgsmaptoolcircle.cpp @@ -40,8 +40,11 @@ class TestQgsMapToolCircle : public QObject void cleanupTestCase(); void testCircleFrom2Points(); + void testCircleFrom2PointsWithDeletedVertex(); void testCircleFrom3Points(); + void testCircleFrom3PointsWithDeletedVertex(); void testCircleFromCenterPoint(); + void testCircleFromCenterPointWithDeletedVertex(); private: QgisApp *mQgisApp = nullptr; @@ -105,6 +108,33 @@ void TestQgsMapToolCircle::testCircleFrom2Points() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolCircle::testCircleFrom2PointsWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 333 ); + mLayer->startEditing(); + + QgsMapToolCircle2Points mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 0, 2 ); + utils.mouseClick( 0, 2, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "CompoundCurveZ (CircularStringZ (0 2 333, 1 1 333, 0 0 333, -1 1 333, 0 2 333))"; + QCOMPARE( f.geometry().asWkt(), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolCircle::testCircleFrom3Points() { QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); @@ -130,6 +160,33 @@ void TestQgsMapToolCircle::testCircleFrom3Points() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolCircle::testCircleFrom3PointsWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); + mLayer->startEditing(); + + QgsMapToolCircle3Points mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 2, Qt::LeftButton ); + utils.mouseMove( 1, 1 ); + utils.mouseClick( 1, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "CompoundCurveZ (CircularStringZ (0 2 111, 1 1 111, 0 0 111, -1 1 111, 0 2 111))"; + QCOMPARE( f.geometry().asWkt(), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolCircle::testCircleFromCenterPoint() { QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); @@ -154,5 +211,32 @@ void TestQgsMapToolCircle::testCircleFromCenterPoint() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolCircle::testCircleFromCenterPointWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); + mLayer->startEditing(); + + QgsMapToolCircleCenterPoint mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 0, 2 ); + utils.mouseClick( 0, 2, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "CompoundCurveZ (CircularStringZ (0 2 222, 2 0 222, 0 -2 222, -2 0 222, 0 2 222))"; + QCOMPARE( f.geometry().asWkt(), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + QGSTEST_MAIN( TestQgsMapToolCircle ) #include "testqgsmaptoolcircle.moc" diff --git a/tests/src/app/testqgsmaptoolellipse.cpp b/tests/src/app/testqgsmaptoolellipse.cpp index 0d6dcacf41ec..d2aaf58aa8a8 100644 --- a/tests/src/app/testqgsmaptoolellipse.cpp +++ b/tests/src/app/testqgsmaptoolellipse.cpp @@ -42,9 +42,13 @@ class TestQgsMapToolEllipse : public QObject void cleanupTestCase(); void testEllipseFromCenterAndPoint(); + void testEllipseFromCenterAndPointWithDeletedVertex(); void testEllipseFromCenterAnd2Points(); + void testEllipseFromCenterAnd2PointsWithDeletedVertex(); void testEllipseFromExtent(); + void testEllipseFromExtentWithDeletedVertex(); void testEllipseFromFoci(); + void testEllipseFromFociWithDeletedVertex(); private: QgisApp *mQgisApp = nullptr; @@ -112,6 +116,37 @@ void TestQgsMapToolEllipse::testEllipseFromCenterAndPoint() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolEllipse::testEllipseFromCenterAndPointWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 333 ); + mLayer->startEditing(); + + QgsMapToolEllipseCenterPoint mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 1, -1 ); + utils.mouseClick( 1, -1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = f.geometry().asWkt().replace( "LineStringZ (", "" ).replace( ")", "" ); + QgsPointSequence pts = QgsGeometryUtils::pointsFromWKT( wkt, true, false ); + + for ( const QgsPoint &pt : pts ) + { + QCOMPARE( pt.z(), ( double )333 ); + } + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolEllipse::testEllipseFromCenterAnd2Points() { @@ -143,6 +178,38 @@ void TestQgsMapToolEllipse::testEllipseFromCenterAnd2Points() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolEllipse::testEllipseFromCenterAnd2PointsWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); + mLayer->startEditing(); + + QgsMapToolEllipseCenter2Points mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseClick( 0, 1, Qt::LeftButton ); + utils.mouseMove( 0, -1 ); + utils.mouseClick( 0, -1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = f.geometry().asWkt().replace( "LineStringZ (", "" ).replace( ")", "" ); + QgsPointSequence pts = QgsGeometryUtils::pointsFromWKT( wkt, true, false ); + + for ( const QgsPoint &pt : pts ) + { + QCOMPARE( pt.z(), ( double )111 ); + } + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolEllipse::testEllipseFromExtent() { QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); @@ -172,6 +239,37 @@ void TestQgsMapToolEllipse::testEllipseFromExtent() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolEllipse::testEllipseFromExtentWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); + mLayer->startEditing(); + + QgsMapToolEllipseExtent mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 2 ); + utils.mouseClick( 2, 2, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = f.geometry().asWkt().replace( "LineStringZ (", "" ).replace( ")", "" ); + QgsPointSequence pts = QgsGeometryUtils::pointsFromWKT( wkt, true, false ); + + for ( const QgsPoint &pt : pts ) + { + QCOMPARE( pt.z(), ( double )222 ); + } + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolEllipse::testEllipseFromFoci() { QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 444 ); @@ -202,5 +300,37 @@ void TestQgsMapToolEllipse::testEllipseFromFoci() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolEllipse::testEllipseFromFociWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 444 ); + mLayer->startEditing(); + + QgsMapToolEllipseFoci mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseClick( 0, 2, Qt::LeftButton ); + utils.mouseMove( 0, -1 ); + utils.mouseClick( 0, -1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = f.geometry().asWkt().replace( "LineStringZ (", "" ).replace( ")", "" ); + QgsPointSequence pts = QgsGeometryUtils::pointsFromWKT( wkt, true, false ); + + for ( const QgsPoint &pt : pts ) + { + QCOMPARE( pt.z(), ( double )444 ); + } + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + QGSTEST_MAIN( TestQgsMapToolEllipse ) #include "testqgsmaptoolellipse.moc" diff --git a/tests/src/app/testqgsmaptoolrectangle.cpp b/tests/src/app/testqgsmaptoolrectangle.cpp index 993175f91556..ec477bc883c5 100644 --- a/tests/src/app/testqgsmaptoolrectangle.cpp +++ b/tests/src/app/testqgsmaptoolrectangle.cpp @@ -41,9 +41,13 @@ class TestQgsMapToolRectangle : public QObject void cleanupTestCase(); void testRectangleFromCenter(); + void testRectangleFromCenterWithDeletedVertex(); void testRectangleFromExtent(); + void testRectangleFromExtentWithDeletedVertex(); void testRectangleFrom3PointsDistance(); + void testRectangleFrom3PointsDistanceWithDeletedVertex(); void testRectangleFrom3PointsProjected(); + void testRectangleFrom3PointsProjectedWithDeletedVertex(); private: QgisApp *mQgisApp = nullptr; @@ -109,6 +113,34 @@ void TestQgsMapToolRectangle::testRectangleFromCenter() QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRectangle::testRectangleFromCenterWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 333 ); + mLayer->startEditing(); + + QgsMapToolRectangleCenter mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + // QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (-2 -1 333, -2 1 333, 2 1 333, 2 -1 333, -2 -1 333)"; + QgsLineString line; + line.fromWkt( wkt ); + QVERIFY( static_cast( f.geometry().get() )->equals( line ) ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolRectangle::testRectangleFromExtent() { QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); @@ -134,6 +166,34 @@ void TestQgsMapToolRectangle::testRectangleFromExtent() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRectangle::testRectangleFromExtentWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); + mLayer->startEditing(); + + QgsMapToolRectangleExtent mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + // QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (0 0 222, 0 1 222, 2 1 222, 2 0 222, 0 0 222)"; + QgsLineString line; + line.fromWkt( wkt ); + QVERIFY( static_cast( f.geometry().get() )->equals( line ) ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolRectangle::testRectangleFrom3PointsDistance() { @@ -162,6 +222,35 @@ void TestQgsMapToolRectangle::testRectangleFrom3PointsDistance() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRectangle::testRectangleFrom3PointsDistanceWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); + mLayer->startEditing(); + + QgsMapToolRectangle3Points mapTool( mParentTool, mCanvas, QgsMapToolRectangle3Points::DistanceMode ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 0 ); + utils.mouseClick( 3, 0, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 2, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + // QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (0 0 111, 2 0 111, 2 1 111, 0 1 111, 0 0 111)"; + QgsLineString line; + line.fromWkt( wkt ); + QVERIFY( static_cast( f.geometry().get() )->equals( line ) ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} void TestQgsMapToolRectangle::testRectangleFrom3PointsProjected() { @@ -190,5 +279,34 @@ void TestQgsMapToolRectangle::testRectangleFrom3PointsProjected() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRectangle::testRectangleFrom3PointsProjectedWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); + mLayer->startEditing(); + + QgsMapToolRectangle3Points mapTool( mParentTool, mCanvas, QgsMapToolRectangle3Points::ProjectedMode ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 0 ); + utils.mouseClick( 3, 0, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 2, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + // QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (0 0 111, 2 0 111, 2 1 111, 0 1 111, 0 0 111)"; + QgsLineString line; + line.fromWkt( wkt ); + QVERIFY( static_cast( f.geometry().get() )->equals( line ) ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} QGSTEST_MAIN( TestQgsMapToolRectangle ) #include "testqgsmaptoolrectangle.moc" diff --git a/tests/src/app/testqgsmaptoolregularpolygon.cpp b/tests/src/app/testqgsmaptoolregularpolygon.cpp index 1afcea2c69e3..5122ae88fc2d 100644 --- a/tests/src/app/testqgsmaptoolregularpolygon.cpp +++ b/tests/src/app/testqgsmaptoolregularpolygon.cpp @@ -41,8 +41,11 @@ class TestQgsMapToolRegularPolygon : public QObject void cleanupTestCase(); void testRegularPolygonFrom2Points(); + void testRegularPolygonFrom2PointsWithDeletedVertex(); void testRegularPolygonFromCenterAndPoint(); + void testRegularPolygonFromCenterAndPointWithDeletedVertex(); void testRegularPolygonFromCenterAndCroner(); + void testRegularPolygonFromCenterAndCronerWithDeletedVertex(); private: QgisApp *mQgisApp = nullptr; @@ -105,6 +108,32 @@ void TestQgsMapToolRegularPolygon::testRegularPolygonFrom2Points() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRegularPolygon::testRegularPolygonFrom2PointsWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 333 ); + mLayer->startEditing(); + + QgsMapToolRegularPolygon2Points mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (0 0 333, 2 1 333, 4 0 333, 4 -2 333, 2 -3 333, 0 -2 333, 0 0 333)"; + QCOMPARE( f.geometry().asWkt( 0 ), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndPoint() { @@ -129,6 +158,32 @@ void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndPoint() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndPointWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 222 ); + mLayer->startEditing(); + + QgsMapToolRegularPolygonCenterPoint mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (1 2 222, 3 0 222, 1 -2 222, -1 -2 222, -3 0 222, -1 2 222, 1 2 222)"; + QCOMPARE( f.geometry().asWkt( 0 ), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndCroner() { @@ -153,6 +208,32 @@ void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndCroner() mLayer->rollBack(); QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); } +void TestQgsMapToolRegularPolygon::testRegularPolygonFromCenterAndCronerWithDeletedVertex() +{ + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 111 ); + mLayer->startEditing(); + + QgsMapToolRegularPolygonCenterCorner mapTool( mParentTool, mCanvas ); + mCanvas->setMapTool( &mapTool ); + + TestQgsMapToolAdvancedDigitizingUtils utils( &mapTool ); + utils.mouseClick( 4, 1, Qt::LeftButton ); + utils.keyClick( Qt::Key_Backspace ); + utils.mouseClick( 0, 0, Qt::LeftButton ); + utils.mouseMove( 2, 1 ); + utils.mouseClick( 2, 1, Qt::RightButton ); + QgsFeatureId newFid = utils.newFeatureId(); + + QCOMPARE( mLayer->featureCount(), ( long )1 ); + QgsFeature f = mLayer->getFeature( newFid ); + + QString wkt = "LineStringZ (2 1 111, 2 -1 111, 0 -2 111, -2 -1 111, -2 1 111, 0 2 111, 2 1 111)"; + QCOMPARE( f.geometry().asWkt( 0 ), wkt ); + + mLayer->rollBack(); + QgsSettings().setValue( QStringLiteral( "/qgis/digitizing/default_z_value" ), 0 ); +} + QGSTEST_MAIN( TestQgsMapToolRegularPolygon ) #include "testqgsmaptoolregularpolygon.moc" From 5f6fcfcee84316dc357cfdfa05ebc3c9e6e361dd Mon Sep 17 00:00:00 2001 From: lbartoletti Date: Mon, 3 Feb 2020 07:20:02 +0100 Subject: [PATCH 5/5] replace mPoints.size() < 1 by mPoints.empty() and fix logic with rubber band --- src/app/qgsmaptoolcircle2points.cpp | 4 ++-- src/app/qgsmaptoolcirclecenterpoint.cpp | 4 ++-- src/app/qgsmaptoolellipsecenterpoint.cpp | 4 ++-- src/app/qgsmaptoolellipseextent.cpp | 4 ++-- src/app/qgsmaptoolellipsefoci.cpp | 2 +- src/app/qgsmaptoolrectanglecenter.cpp | 4 ++-- src/app/qgsmaptoolrectangleextent.cpp | 4 ++-- src/app/qgsmaptoolregularpolygon2points.cpp | 13 +++++-------- src/app/qgsmaptoolregularpolygoncentercorner.cpp | 13 +++++-------- 9 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/app/qgsmaptoolcircle2points.cpp b/src/app/qgsmaptoolcircle2points.cpp index ce72bc077de9..31008163e964 100644 --- a/src/app/qgsmaptoolcircle2points.cpp +++ b/src/app/qgsmaptoolcircle2points.cpp @@ -34,10 +34,10 @@ void QgsMapToolCircle2Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.isEmpty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolcirclecenterpoint.cpp b/src/app/qgsmaptoolcirclecenterpoint.cpp index d9b429c707e4..a7772d473da0 100644 --- a/src/app/qgsmaptoolcirclecenterpoint.cpp +++ b/src/app/qgsmaptoolcirclecenterpoint.cpp @@ -34,10 +34,10 @@ void QgsMapToolCircleCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolellipsecenterpoint.cpp b/src/app/qgsmaptoolellipsecenterpoint.cpp index 5cdbcab202a3..7bb79643c07b 100644 --- a/src/app/qgsmaptoolellipsecenterpoint.cpp +++ b/src/app/qgsmaptoolellipsecenterpoint.cpp @@ -34,10 +34,10 @@ void QgsMapToolEllipseCenterPoint::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolellipseextent.cpp b/src/app/qgsmaptoolellipseextent.cpp index 1f1274923c54..a3367daad989 100644 --- a/src/app/qgsmaptoolellipseextent.cpp +++ b/src/app/qgsmaptoolellipseextent.cpp @@ -36,10 +36,10 @@ void QgsMapToolEllipseExtent::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolellipsefoci.cpp b/src/app/qgsmaptoolellipsefoci.cpp index 36d054f18c74..71b1b466a638 100644 --- a/src/app/qgsmaptoolellipsefoci.cpp +++ b/src/app/qgsmaptoolellipsefoci.cpp @@ -38,7 +38,7 @@ void QgsMapToolEllipseFoci::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( mPoints.size() < 2 ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolrectanglecenter.cpp b/src/app/qgsmaptoolrectanglecenter.cpp index dd1ef59b73f8..368c3b10623c 100644 --- a/src/app/qgsmaptoolrectanglecenter.cpp +++ b/src/app/qgsmaptoolrectanglecenter.cpp @@ -38,10 +38,10 @@ void QgsMapToolRectangleCenter::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolrectangleextent.cpp b/src/app/qgsmaptoolrectangleextent.cpp index 60dd78498efe..6cde94687fe8 100644 --- a/src/app/qgsmaptoolrectangleextent.cpp +++ b/src/app/qgsmaptoolrectangleextent.cpp @@ -36,10 +36,10 @@ void QgsMapToolRectangleExtent::cadCanvasReleaseEvent( QgsMapMouseEvent *e ) if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() && !mTempRubberBand ) + if ( !mTempRubberBand ) { mTempRubberBand = createGeometryRubberBand( mLayerType, true ); mTempRubberBand->show(); diff --git a/src/app/qgsmaptoolregularpolygon2points.cpp b/src/app/qgsmaptoolregularpolygon2points.cpp index 0bb49f4a0786..d96f9d6930ff 100644 --- a/src/app/qgsmaptoolregularpolygon2points.cpp +++ b/src/app/qgsmaptoolregularpolygon2points.cpp @@ -41,18 +41,15 @@ void QgsMapToolRegularPolygon2Points::cadCanvasReleaseEvent( QgsMapMouseEvent *e if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() ) + if ( !mTempRubberBand ) { - if ( !mTempRubberBand ) - { - mTempRubberBand = createGeometryRubberBand( mLayerType, true ); - mTempRubberBand->show(); + mTempRubberBand = createGeometryRubberBand( mLayerType, true ); + mTempRubberBand->show(); - createNumberSidesSpinBox(); - } + createNumberSidesSpinBox(); } } else if ( e->button() == Qt::RightButton ) diff --git a/src/app/qgsmaptoolregularpolygoncentercorner.cpp b/src/app/qgsmaptoolregularpolygoncentercorner.cpp index d6e87d28d09b..410a9d6b749f 100644 --- a/src/app/qgsmaptoolregularpolygoncentercorner.cpp +++ b/src/app/qgsmaptoolregularpolygoncentercorner.cpp @@ -39,18 +39,15 @@ void QgsMapToolRegularPolygonCenterCorner::cadCanvasReleaseEvent( QgsMapMouseEve if ( e->button() == Qt::LeftButton ) { - if ( mPoints.size() < 1 ) + if ( mPoints.empty() ) mPoints.append( point ); - if ( !mPoints.isEmpty() ) + if ( !mTempRubberBand ) { - if ( !mTempRubberBand ) - { - mTempRubberBand = createGeometryRubberBand( mLayerType, true ); - mTempRubberBand->show(); + mTempRubberBand = createGeometryRubberBand( mLayerType, true ); + mTempRubberBand->show(); - createNumberSidesSpinBox(); - } + createNumberSidesSpinBox(); } } else if ( e->button() == Qt::RightButton )