@@ -63,6 +63,7 @@ class TestQgsNodeTool : public QObject
63
63
void testMoveMultipleVertices ();
64
64
void testMoveVertexTopo ();
65
65
void testDeleteVertexTopo ();
66
+ void testActiveLayerPriority ();
66
67
67
68
private:
68
69
QPoint mapToScreen ( double mapX, double mapY )
@@ -532,5 +533,50 @@ void TestQgsNodeTool::testDeleteVertexTopo()
532
533
QgsProject::instance ()->setTopologicalEditing ( false );
533
534
}
534
535
536
+ void TestQgsNodeTool::testActiveLayerPriority ()
537
+ {
538
+ // check that features from current layer get priority when picking points
539
+
540
+ // create a temporary line layer that has a common vertex with existing line layer at (1, 1)
541
+ QgsVectorLayer *layerLine2 = new QgsVectorLayer ( " LineString?crs=EPSG:27700" , " layer line 2" , " memory" );
542
+ QVERIFY ( layerLine2->isValid () );
543
+ QgsPolyline line1;
544
+ line1 << QgsPointXY ( 0 , 1 ) << QgsPointXY ( 1 , 1 ) << QgsPointXY ( 1 , 0 );
545
+ QgsFeature lineF1;
546
+ lineF1.setGeometry ( QgsGeometry::fromPolyline ( line1 ) );
547
+ layerLine2->startEditing ();
548
+ layerLine2->addFeature ( lineF1 );
549
+ QgsFeatureId fidLineF1 = lineF1.id ();
550
+ QCOMPARE ( layerLine2->featureCount (), ( long )1 );
551
+ QgsProject::instance ()->addMapLayer ( layerLine2 );
552
+ mCanvas ->setLayers ( QList<QgsMapLayer *>() << mLayerLine << mLayerPolygon << mLayerPoint << layerLine2 );
553
+
554
+ // make one layer active and check its vertex is used
555
+
556
+ mCanvas ->setCurrentLayer ( mLayerLine );
557
+
558
+ mouseClick ( 1 , 1 , Qt::LeftButton );
559
+ mouseClick ( 0 , 0 , Qt::LeftButton );
560
+
561
+ QCOMPARE ( mLayerLine ->getFeature ( mFidLineF1 ).geometry (), QgsGeometry::fromWkt ( " LINESTRING(2 1, 0 0, 1 3)" ) );
562
+ QCOMPARE ( layerLine2->getFeature ( fidLineF1 ).geometry (), QgsGeometry::fromWkt ( " LINESTRING(0 1, 1 1, 1 0)" ) );
563
+ mLayerLine ->undoStack ()->undo ();
564
+
565
+ // make the other layer active and check its vertex is used
566
+
567
+ mCanvas ->setCurrentLayer ( layerLine2 );
568
+
569
+ mouseClick ( 1 , 1 , Qt::LeftButton );
570
+ mouseClick ( 0 , 0 , Qt::LeftButton );
571
+
572
+ QCOMPARE ( mLayerLine ->getFeature ( mFidLineF1 ).geometry (), QgsGeometry::fromWkt ( " LINESTRING(2 1, 1 1, 1 3)" ) );
573
+ QCOMPARE ( layerLine2->getFeature ( fidLineF1 ).geometry (), QgsGeometry::fromWkt ( " LINESTRING(0 1, 0 0, 1 0)" ) );
574
+ layerLine2->undoStack ()->undo ();
575
+
576
+ // get rid of the temporary layer
577
+ mCanvas ->setLayers ( QList<QgsMapLayer *>() << mLayerLine << mLayerPolygon << mLayerPoint );
578
+ QgsProject::instance ()->removeMapLayer ( layerLine2 );
579
+ }
580
+
535
581
QGSTEST_MAIN ( TestQgsNodeTool )
536
582
#include " testqgsnodetool.moc"
0 commit comments