@@ -1339,6 +1339,10 @@ void TestQgsGeometry::lineStringV2()
1339
1339
QVERIFY ( qgsDoubleNear ( l21.pointN ( 0 ).y (), -39.722 , 0.001 ) );
1340
1340
QVERIFY ( qgsDoubleNear ( l21.pointN ( 1 ).x (), 176.959 , 0.001 ) );
1341
1341
QVERIFY ( qgsDoubleNear ( l21.pointN ( 1 ).y (), -38.798 , 0.001 ) );
1342
+ QVERIFY ( qgsDoubleNear ( l21.boundingBox ().xMinimum (), 175.771 , 0.001 ) );
1343
+ QVERIFY ( qgsDoubleNear ( l21.boundingBox ().yMinimum (), -39.722 , 0.001 ) );
1344
+ QVERIFY ( qgsDoubleNear ( l21.boundingBox ().xMaximum (), 176.959 , 0.001 ) );
1345
+ QVERIFY ( qgsDoubleNear ( l21.boundingBox ().yMaximum (), -38.798 , 0.001 ) );
1342
1346
1343
1347
// 3d CRS transform
1344
1348
QgsLineStringV2 l22;
@@ -1373,7 +1377,7 @@ void TestQgsGeometry::lineStringV2()
1373
1377
l23.transform ( qtr );
1374
1378
QCOMPARE ( l23.pointN ( 0 ), QgsPointV2 ( QgsWKBTypes::PointZM, 2 , 6 , 3 , 4 ) );
1375
1379
QCOMPARE ( l23.pointN ( 1 ), QgsPointV2 ( QgsWKBTypes::PointZM, 22 , 36 , 13 , 14 ) );
1376
-
1380
+ QCOMPARE ( l23. boundingBox (), QgsRectangle ( 2 , 6 , 22 , 36 ) );
1377
1381
1378
1382
// insert vertex
1379
1383
@@ -1784,7 +1788,12 @@ void TestQgsGeometry::lineStringV2()
1784
1788
QCOMPARE ( l34.centroid (), QgsPointV2 ( 10 , 5 ) );
1785
1789
l34.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 0 , 9 ) << QgsPointV2 ( 2 , 9 ) << QgsPointV2 ( 2 , 0 ) );
1786
1790
QCOMPARE ( l34.centroid (), QgsPointV2 ( 1 , 4.95 ) );
1787
-
1791
+ // linestring with 0 length segment
1792
+ l34.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 0 , 9 ) << QgsPointV2 ( 2 , 9 ) << QgsPointV2 ( 2 , 9 ) << QgsPointV2 ( 2 , 0 ) );
1793
+ QCOMPARE ( l34.centroid (), QgsPointV2 ( 1 , 4.95 ) );
1794
+ // linestring with 0 total length segment
1795
+ l34.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 5 , 4 ) << QgsPointV2 ( 5 , 4 ) << QgsPointV2 ( 5 , 4 ) );
1796
+ QCOMPARE ( l34.centroid (), QgsPointV2 ( 5 , 4 ) );
1788
1797
1789
1798
// closest segment
1790
1799
QgsLineStringV2 l35;
@@ -1837,10 +1846,80 @@ void TestQgsGeometry::lineStringV2()
1837
1846
l36.sumUpArea ( area );
1838
1847
QVERIFY ( qgsDoubleNear ( area, 7.0 ) );
1839
1848
1840
- // boundingBox
1841
-
1849
+ // boundingBox - test that bounding box is updated after every modification to the line string
1850
+ QgsLineStringV2 l37;
1851
+ QVERIFY ( l37.boundingBox ().isNull () );
1852
+ l37.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 5 , 10 ) << QgsPointV2 ( 10 , 15 ) );
1853
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( 5 , 10 , 10 , 15 ) );
1854
+ l37.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( -5 , -10 ) << QgsPointV2 ( -6 , -10 ) << QgsPointV2 ( -5.5 , -9 ) );
1855
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -6 , -10 , -5 , -9 ) );
1856
+ // setXAt
1857
+ l37.setXAt ( 2 , -4 );
1858
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -6 , -10 , -4 , -9 ) );
1859
+ // setYAt
1860
+ l37.setYAt ( 1 , -15 );
1861
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -6 , -15 , -4 , -9 ) );
1862
+ // append
1863
+ toAppend.reset ( new QgsLineStringV2 () );
1864
+ toAppend->setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 1 , 2 ) << QgsPointV2 ( 4 , 0 ) );
1865
+ l37.append ( toAppend.data () );
1866
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -6 , -15 , 4 , 2 ) );
1867
+ l37.addVertex ( QgsPointV2 ( 6 , 3 ) );
1868
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -6 , -15 , 6 , 3 ) );
1869
+ l37.clear ();
1870
+ QVERIFY ( l37.boundingBox ().isNull () );
1871
+ l37.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 5 , 10 ) << QgsPointV2 ( 10 , 15 ) );
1872
+ wkb = toAppend->asWkb ( size );
1873
+ l37.fromWkb ( wkb );
1874
+ delete wkb;
1875
+ wkb = 0 ;
1876
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( 1 , 0 , 4 , 2 ) );
1877
+ l37.fromWkt ( QString ( " LineString( 1 5, 3 4, 6 3 )" ) );
1878
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( 1 , 3 , 6 , 5 ) );
1879
+ l37.insertVertex ( QgsVertexId ( 0 , 0 , 1 ), QgsPointV2 ( -1 , 7 ) );
1880
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -1 , 3 , 6 , 7 ) );
1881
+ l37.moveVertex ( QgsVertexId ( 0 , 0 , 1 ), QgsPointV2 ( -3 , 10 ) );
1882
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( -3 , 3 , 6 , 10 ) );
1883
+ l37.deleteVertex ( QgsVertexId ( 0 , 0 , 1 ) );
1884
+ QCOMPARE ( l37.boundingBox (), QgsRectangle ( 1 , 3 , 6 , 5 ) );
1842
1885
1843
1886
// angle
1887
+ QgsLineStringV2 l38;
1888
+ ( void )l38.vertexAngle ( QgsVertexId () ); // just want no crash
1889
+ ( void )l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ); // just want no crash
1890
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) );
1891
+ ( void )l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ); // just want no crash, any answer is meaningless
1892
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 1 , 0 ) );
1893
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 1.5708 , 0.0001 ) );
1894
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 1.5708 , 0.0001 ) );
1895
+ ( void )l38.vertexAngle ( QgsVertexId ( 0 , 0 , 2 ) ); // no crash
1896
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 0 , 1 ) );
1897
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 0.0 ) );
1898
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 0.0 ) );
1899
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 1 , 0 ) << QgsPointV2 ( 0 , 0 ) );
1900
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 4.71239 , 0.0001 ) );
1901
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 4.71239 , 0.0001 ) );
1902
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 1 ) << QgsPointV2 ( 0 , 0 ) );
1903
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 3.1416 , 0.0001 ) );
1904
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 3.1416 , 0.0001 ) );
1905
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 1 , 0 ) << QgsPointV2 ( 1 , 1 ) );
1906
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 1.5708 , 0.0001 ) );
1907
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 0.7854 , 0.0001 ) );
1908
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 2 ) ), 0.0 , 0.0001 ) );
1909
+ l38.setPoints ( QList< QgsPointV2 >() << QgsPointV2 ( 0 , 0 ) << QgsPointV2 ( 0.5 , 0 ) << QgsPointV2 ( 1 , 0 )
1910
+ << QgsPointV2 ( 2 , 1 ) << QgsPointV2 ( 1 , 2 ) << QgsPointV2 ( 0 , 2 ) );
1911
+ ( void )l38.vertexAngle ( QgsVertexId ( 0 , 0 , 20 ) );
1912
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 1.5708 , 0.0001 ) );
1913
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 1 ) ), 1.5708 , 0.0001 ) );
1914
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 2 ) ), 1.17809 , 0.00001 ) );
1915
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 3 ) ), 0.0 , 0.00001 ) );
1916
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 4 ) ), 5.10509 , 0.00001 ) );
1917
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 5 ) ), 4.71239 , 0.00001 ) );
1918
+ // closed line string
1919
+ l38.close ();
1920
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 5 ) ), 3.92699 , 0.00001 ) );
1921
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 0 ) ), 2.35619 , 0.00001 ) );
1922
+ QVERIFY ( qgsDoubleNear ( l38.vertexAngle ( QgsVertexId ( 0 , 0 , 6 ) ), 2.35619 , 0.00001 ) );
1844
1923
1845
1924
}
1846
1925
0 commit comments