Skip to content
Permalink
Browse files

Merge pull request #9971 from olivierdalang/node-tool-chain-add

[nodetool] chained add vertex at endpoint
  • Loading branch information
m-kuhn committed May 13, 2019
2 parents 6a3cd82 + 71a2766 commit e693e810532bb364f6e81e7a7e58d9ff0cedd95b
Showing with 33 additions and 0 deletions.
  1. +12 −0 src/app/vertextool/qgsvertextool.cpp
  2. +21 −0 tests/src/app/testqgsvertextool.cpp
@@ -2040,6 +2040,18 @@ void QgsVertexTool::moveVertex( const QgsPointXY &mapPoint, const QgsPointLocato

setHighlightedVertices( mSelectedVertices ); // update positions of existing highlighted vertices
setHighlightedVerticesVisible( true ); // time to show highlighted vertices again

// restart startDraggingAddVertexAtEndpoint right after it finishes
if ( addingAtEndpoint )
{
if ( mMouseAtEndpoint->vertexId != 0 )
{
// If we were adding at the end of the feature, we need to update the index
mMouseAtEndpoint.reset( new Vertex( mMouseAtEndpoint->layer, mMouseAtEndpoint->fid, mMouseAtEndpoint->vertexId + 1 ) );
}
// And then we just restart the drag
startDraggingAddVertexAtEndpoint( mapPoint );
}
}


@@ -387,6 +387,7 @@ void TestQgsVertexTool::testAddVertexAtEndpoint()
mouseMove( 1, 3 ); // first we need to move to the vertex
mouseClick( 1, 3 + offsetInMapUnits, Qt::LeftButton );
mouseClick( 2, 3, Qt::LeftButton );
mouseClick( 2, 3, Qt::RightButton ); // we need a right click to stop adding new nodes

QCOMPARE( mLayerLine->undoStack()->index(), 2 );
QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry(), QgsGeometry::fromWkt( "LINESTRING(2 1, 1 1, 1 3, 2 3)" ) );
@@ -401,6 +402,7 @@ void TestQgsVertexTool::testAddVertexAtEndpoint()
mouseMove( 2, 1 ); // first we need to move to the vertex
mouseClick( 2 + offsetInMapUnits, 1, Qt::LeftButton );
mouseClick( 2, 2, Qt::LeftButton );
mouseClick( 2, 2, Qt::RightButton ); // we need a right click to stop adding new nodes

QCOMPARE( mLayerLine->undoStack()->index(), 2 );
QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry(), QgsGeometry::fromWkt( "LINESTRING(2 2, 2 1, 1 1, 1 3)" ) );
@@ -409,6 +411,25 @@ void TestQgsVertexTool::testAddVertexAtEndpoint()
QCOMPARE( mLayerLine->undoStack()->index(), 1 );

QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry(), QgsGeometry::fromWkt( "LINESTRING(2 1, 1 1, 1 3)" ) );

// add three vertices at once

mouseMove( 2, 1 ); // first we need to move to the vertex
mouseClick( 2 + offsetInMapUnits, 1, Qt::LeftButton );
mouseClick( 2, 2, Qt::LeftButton );
mouseClick( 2, 3, Qt::LeftButton );
mouseClick( 2, 4, Qt::LeftButton );
mouseClick( 2, 2, Qt::RightButton ); // we need a right click to stop adding new nodes

QCOMPARE( mLayerLine->undoStack()->index(), 4 );
QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry(), QgsGeometry::fromWkt( "LINESTRING(2 4, 2 3, 2 2, 2 1, 1 1, 1 3)" ) );

mLayerLine->undoStack()->undo();
mLayerLine->undoStack()->undo();
mLayerLine->undoStack()->undo();
QCOMPARE( mLayerLine->undoStack()->index(), 1 );

QCOMPARE( mLayerLine->getFeature( mFidLineF1 ).geometry(), QgsGeometry::fromWkt( "LINESTRING(2 1, 1 1, 1 3)" ) );
}

void TestQgsVertexTool::testAddVertexDoubleClick()

0 comments on commit e693e81

Please sign in to comment.
You can’t perform that action at this time.