diff --git a/src/core/geometry/qgsgeos.cpp b/src/core/geometry/qgsgeos.cpp index 869a900b1e6..b90b3116362 100644 --- a/src/core/geometry/qgsgeos.cpp +++ b/src/core/geometry/qgsgeos.cpp @@ -2344,7 +2344,7 @@ static geos::unique_ptr _mergeLinestrings( const GEOSGeometry *line1, const GEOS return nullptr; bool intersectionAtOrigLineEndpoint = - ( intersectionPoint.x() == x1 && intersectionPoint.y() == y1 ) || + ( intersectionPoint.x() == x1 && intersectionPoint.y() == y1 ) != ( intersectionPoint.x() == x2 && intersectionPoint.y() == y2 ); bool intersectionAtReshapeLineEndpoint = ( intersectionPoint.x() == rx1 && intersectionPoint.y() == ry1 ) || diff --git a/tests/src/python/test_qgsgeometry.py b/tests/src/python/test_qgsgeometry.py index 100c5190b0d..26480a2b054 100644 --- a/tests/src/python/test_qgsgeometry.py +++ b/tests/src/python/test_qgsgeometry.py @@ -2334,6 +2334,18 @@ class TestQgsGeometry(unittest.TestCase): wkt = g.asWkt() assert compareWkt(expWkt, wkt), "testReshape failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt) + # Test reshape a polygon with a line starting or ending at the polygon's first vertex, no change expexted + g = QgsGeometry.fromWkt('Polygon ((0 0, 1 0, 1 1, 0 1, 0 0))') + expWkt = g.asWkt() + g.reshapeGeometry(QgsLineString([QgsPoint(0, 0), QgsPoint(-1, -1)])) + assert compareWkt(g.asWkt(), expWkt), "testReshape failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt) + + # Test reshape a polygon with a line starting or ending at the polygon's first vertex + g = QgsGeometry.fromWkt('Polygon ((0 0, 1 0, 1 1, 0 1, 0 0))') + g.reshapeGeometry(QgsLineString([QgsPoint(0, 0), QgsPoint(0.5, 0.5), QgsPoint(0, 1)])) + expWkt = 'Polygon ((0 0, 1 0, 1 1, 0 1, 0.5 0.5, 0 0))' + assert compareWkt(g.asWkt(), expWkt), "testReshape failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt) + # Test reshape a line from first/last vertex g = QgsGeometry.fromWkt('LineString (0 0, 5 0, 5 1)') # extend start