Skip to content

Commit

Permalink
Merge pull request #9971 from olivierdalang/node-tool-chain-add
Browse files Browse the repository at this point in the history
[nodetool] chained add vertex at endpoint
  • Loading branch information
m-kuhn committed May 13, 2019
2 parents 6a3cd82 + 71a2766 commit e693e81
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/app/vertextool/qgsvertextool.cpp
Expand Up @@ -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 );
}
}


Expand Down
21 changes: 21 additions & 0 deletions tests/src/app/testqgsvertextool.cpp
Expand Up @@ -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)" ) );
Expand All @@ -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)" ) );
Expand All @@ -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()
Expand Down

0 comments on commit e693e81

Please sign in to comment.