@@ -1134,6 +1134,15 @@ void TestQgsGeometry::point()
1134
1134
QCOMPARE( p.z(), 3.3 );
1135
1135
QCOMPARE( p.m(), 4.4 );
1136
1136
QCOMPARE( p.wkbType(), QgsWkbTypes::PointZM );
1137
+
1138
+ // filter vertex
1139
+ p = QgsPoint( 1.1, 2.2, 3.3, 4.4, QgsWkbTypes::PointZM );
1140
+ p.filterVertices( []( const QgsPoint & )-> bool { return false; } );
1141
+ QCOMPARE( p.x(), 1.1 );
1142
+ QCOMPARE( p.y(), 2.2 );
1143
+ QCOMPARE( p.z(), 3.3 );
1144
+ QCOMPARE( p.m(), 4.4 );
1145
+ QCOMPARE( p.wkbType(), QgsWkbTypes::PointZM );
1137
1146
}
1138
1147
1139
1148
void TestQgsGeometry::circularString()
@@ -2608,6 +2617,17 @@ void TestQgsGeometry::circularString()
2608
2617
swapLine.setPoints( QgsPointSequence() << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 11, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) );
2609
2618
swapLine.swapXy();
2610
2619
QCOMPARE( swapLine.asWkt(), QStringLiteral( "CircularStringZM (2 11 3 4, 12 11 13 14, 12 111 23 24)" ) );
2620
+
2621
+ // filter vertex
2622
+ QgsCircularString filterLine;
2623
+ auto filter = []( const QgsPoint & point )-> bool
2624
+ {
2625
+ return point.x() < 5;
2626
+ };
2627
+ filterLine.filterVertices( filter ); // no crash
2628
+ filterLine.setPoints( QgsPointSequence() << QgsPoint( 1, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 4, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) );
2629
+ filterLine.filterVertices( filter );
2630
+ QCOMPARE( filterLine.asWkt( 2 ), QStringLiteral( "CircularStringZM (1 2 3 4, 4 12 13 14)" ) );
2611
2631
}
2612
2632
2613
2633
@@ -4508,6 +4528,17 @@ void TestQgsGeometry::lineString()
4508
4528
swapLine.setPoints( QgsPointSequence() << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 11, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) );
4509
4529
swapLine.swapXy();
4510
4530
QCOMPARE( swapLine.asWkt( 2 ), QStringLiteral( "LineStringZM (2 11 3 4, 12 11 13 14, 12 111 23 24)" ) );
4531
+
4532
+ // filter vertex
4533
+ QgsLineString filterLine;
4534
+ auto filter = []( const QgsPoint & point )-> bool
4535
+ {
4536
+ return point.x() < 5;
4537
+ };
4538
+ filterLine.filterVertices( filter ); // no crash
4539
+ filterLine.setPoints( QgsPointSequence() << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 1, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 4, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) );
4540
+ filterLine.filterVertices( filter );
4541
+ QCOMPARE( swapLine.asWkt( 2 ), QStringLiteral( "LineStringZM (2 11 3 4, 12 11 13 14, 12 111 23 24)" ) );
4511
4542
}
4512
4543
4513
4544
void TestQgsGeometry::polygon()
@@ -6268,6 +6299,25 @@ void TestQgsGeometry::polygon()
6268
6299
swapPolygon.addInteriorRing( swapLine.clone() );
6269
6300
swapPolygon.swapXy();
6270
6301
QCOMPARE( swapPolygon.asWkt( 2 ), QStringLiteral( "PolygonZM ((11 2 3 4, 11 12 13 14, 11 22 23 24, 11 2 3 4),(2 1 5 6, 2.01 11.01 15 16, 2.01 11 25 26, 2 11 5 6, 2 1 5 6))" ) );
6302
+
6303
+ // filter vertex
6304
+ QgsPolygon filterPolygon;
6305
+ auto filter = []( const QgsPoint & point )-> bool
6306
+ {
6307
+ return point.x() > 5;
6308
+ };
6309
+ filterPolygon.filterVertices( filter ); // no crash
6310
+ QgsLineString filterPolygonRing;
6311
+ filterPolygonRing.setPoints( QgsPointSequence() << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 4, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 11, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 11, 22, 23, 24, QgsWkbTypes::PointZM ) << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) );
6312
+ filterPolygon.setExteriorRing( filterPolygonRing.clone() );
6313
+ filterPolygon.filterVertices( filter );
6314
+ QCOMPARE( filterPolygon.asWkt(), QStringLiteral( "PolygonZM ((11 2 3 4, 11 12 13 14, 11 22 23 24, 11 2 3 4))" ) );
6315
+ filterPolygonRing.setPoints( QgsPointSequence() << QgsPoint( 10, 2, 5, 6, QgsWkbTypes::PointZM ) << QgsPoint( 4, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 11.01, 2.01, 15, 16, QgsWkbTypes::PointZM ) << QgsPoint( 11, 2.01, 25, 26, QgsWkbTypes::PointZM ) << QgsPoint( 11, 2, 5, 6, QgsWkbTypes::PointZM ) << QgsPoint( 10, 2, 5, 6, QgsWkbTypes::PointZM ) );
6316
+ filterPolygon.addInteriorRing( filterPolygonRing.clone() );
6317
+ filterPolygonRing.setPoints( QgsPointSequence() << QgsPoint( 1, 2, 5, 6, QgsWkbTypes::PointZM ) << QgsPoint( 11.01, 2.01, 15, 16, QgsWkbTypes::PointZM ) << QgsPoint( 11, 2.01, 25, 26, QgsWkbTypes::PointZM ) << QgsPoint( 1, 2, 5, 6, QgsWkbTypes::PointZM ) );
6318
+ filterPolygon.addInteriorRing( filterPolygonRing.clone() );
6319
+ filterPolygon.filterVertices( filter );
6320
+ QCOMPARE( filterPolygon.asWkt( 2 ), QStringLiteral( "PolygonZM ((11 2 3 4, 11 12 13 14, 11 22 23 24, 11 2 3 4),(10 2 5 6, 11.01 2.01 15 16, 11 2.01 25 26, 11 2 5 6, 10 2 5 6))" ) );
6271
6321
}
6272
6322
6273
6323
void TestQgsGeometry::triangle()
@@ -11037,6 +11087,23 @@ void TestQgsGeometry::compoundCurve()
11037
11087
swapCurve.swapXy();
11038
11088
QCOMPARE( swapCurve.asWkt(), QStringLiteral( "CompoundCurveZM (CircularStringZM (11 2 3 4, 11 12 13 14, 111 12 23 24),(111 12 23 24, 122 22 33 34))" ) );
11039
11089
11090
+ // filter vertices
11091
+ auto filter = []( const QgsPoint & point )-> bool
11092
+ {
11093
+ return point.x() > 5;
11094
+ };
11095
+ QgsCompoundCurve filterCurve;
11096
+ filterCurve.filterVertices( filter ); //no crash
11097
+ nodeLine.setPoints( QgsPointSequence() << QgsPoint( 1, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 11, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 11, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) << QgsPoint( 1, 2, 3, 4, QgsWkbTypes::PointZM ) );
11098
+ filterCurve.addCurve( nodeLine.clone() );
11099
+ filterCurve.filterVertices( filter );
11100
+ QCOMPARE( filterCurve.asWkt(), QStringLiteral( "CompoundCurveZM (CircularStringZM (11 2 3 4, 11 12 13 14, 111 12 23 24))" ) );
11101
+ QgsLineString lsFilter;
11102
+ lsFilter.setPoints( QgsPointSequence() << QgsPoint( 12, 111, 23, 24, QgsWkbTypes::PointZM ) << QgsPoint( 22, 122, 33, 34, QgsWkbTypes::PointZM ) << QgsPoint( 1, 111, 23, 24, QgsWkbTypes::PointZM ) );
11103
+ filterCurve.addCurve( lsFilter.clone() );
11104
+ filterCurve.filterVertices( filter );
11105
+ QCOMPARE( filterCurve.asWkt(), QStringLiteral( "CompoundCurveZM (CircularStringZM (11 2 3 4, 11 12 13 14, 111 12 23 24),(12 111 23 24, 22 122 33 34))" ) );
11106
+
11040
11107
}
11041
11108
11042
11109
void TestQgsGeometry::multiPoint()
@@ -15427,6 +15494,23 @@ void TestQgsGeometry::geometryCollection()
15427
15494
swapCollect.addGeometry( swapLine.clone() );
15428
15495
swapCollect.swapXy();
15429
15496
QCOMPARE( swapCollect.asWkt( 2 ), QStringLiteral( "GeometryCollection (LineStringZM (11 2 3 4, 11 12 13 14, 111 12 23 24),LineStringZM (2 11 5 6, 1.99 11.01 15 16, 2.01 11.02 25 26))" ) );
15497
+
15498
+ // filter vertices
15499
+ QgsGeometryCollection filterCollect;
15500
+ auto filter = []( const QgsPoint & point )-> bool
15501
+ {
15502
+ return point.x() > 5;
15503
+ };
15504
+ QgsLineString filterLine;
15505
+ filterCollect.filterVertices( filter ); // no crash
15506
+ filterLine.setPoints( QgsPointSequence() << QgsPoint( 1, 2, 3, 4, QgsWkbTypes::PointZM ) << QgsPoint( 11, 12, 13, 14, QgsWkbTypes::PointZM ) << QgsPoint( 111, 12, 23, 24, QgsWkbTypes::PointZM ) );
15507
+ filterCollect.addGeometry( filterLine.clone() );
15508
+ filterCollect.filterVertices( filter );
15509
+ QCOMPARE( filterCollect.asWkt(), QStringLiteral( "GeometryCollection (LineStringZM (11 12 13 14, 111 12 23 24))" ) );
15510
+ filterLine.setPoints( QgsPointSequence() << QgsPoint( 11, 2, 5, 6, QgsWkbTypes::PointZM ) << QgsPoint( 1.01, 1.99, 15, 16, QgsWkbTypes::PointZM ) << QgsPoint( 11.02, 2.01, 25, 26, QgsWkbTypes::PointZM ) );
15511
+ filterCollect.addGeometry( filterLine.clone() );
15512
+ filterCollect.filterVertices( filter );
15513
+ QCOMPARE( filterCollect.asWkt( 2 ), QStringLiteral( "GeometryCollection (LineStringZM (11 12 13 14, 111 12 23 24),LineStringZM (11 2 5 6, 11.02 2.01 25 26))" ) );
15430
15514
}
15431
15515
15432
15516
void TestQgsGeometry::fromQgsPointXY()
0 commit comments