Skip to content

Commit 9bd7212

Browse files
committed
Fix missing cases and push
1 parent eb292c9 commit 9bd7212

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

src/core/geometry/qgsgeometryutils.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,28 @@ bool QgsGeometryUtils::segmentIntersection( const QgsPoint &p1, const QgsPoint &
285285
inter == p2;
286286
return true;
287287
}
288+
289+
double x, y;
290+
if ( qgsDoubleNear( QgsGeometryUtils::sqrDistToLine( p1.x(), p1.y(), q1.x(), q1.y(), q2.x(), q2.y(), x, y, tolerance ), 0.0, tolerance ) )
291+
{
292+
inter == p1;
293+
return true;
294+
}
295+
else if ( qgsDoubleNear( QgsGeometryUtils::sqrDistToLine( p2.x(), p2.y(), q1.x(), q1.y(), q2.x(), q2.y(), x, y, tolerance ), 0.0, tolerance ) )
296+
{
297+
inter == p2;
298+
return true;
299+
}
300+
else if ( qgsDoubleNear( QgsGeometryUtils::sqrDistToLine( q1.x(), q1.y(), p1.x(), p1.y(), p2.x(), p2.y(), x, y, tolerance ), 0.0, tolerance ) )
301+
{
302+
inter == q1;
303+
return true;
304+
}
305+
else if ( qgsDoubleNear( QgsGeometryUtils::sqrDistToLine( q2.x(), q2.y(), p1.x(), p1.y(), p2.x(), p2.y(), x, y, tolerance ), 0.0, tolerance ) )
306+
{
307+
inter == q2;
308+
return true;
309+
}
288310
}
289311

290312
double lambdav = QgsVector( inter.x() - p1.x(), inter.y() - p1.y() ) * v;

tests/src/core/testqgsgeometryutils.cpp

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,10 +707,42 @@ void TestQgsGeometryUtils::testSegmentIntersection()
707707
QVERIFY( isIntersect );
708708
QVERIFY( inter == QgsPoint( 0, 2 ) );
709709
inter = QgsPoint();
710-
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), QgsPoint( 0, 5 ), QgsPoint( 1, 5 ), inter, isIntersect, epsilon, true );
710+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 2 ), QgsPoint( 1, 5 ), QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), inter, isIntersect, epsilon, true );
711711
QVERIFY( intersection );
712712
QVERIFY( isIntersect );
713-
QVERIFY( inter == QgsPoint( 0, 5 ) );
713+
QVERIFY( inter == QgsPoint( 0, 2 ) );
714+
715+
inter = QgsPoint();
716+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 1, 5 ), QgsPoint( 0, 2 ), QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), inter, isIntersect, epsilon );
717+
QVERIFY( !intersection );
718+
QVERIFY( isIntersect );
719+
QVERIFY( inter == QgsPoint( 0, 2 ) );
720+
inter = QgsPoint();
721+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 1, 5 ), QgsPoint( 0, 2 ), QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), inter, isIntersect, epsilon, true );
722+
QVERIFY( intersection );
723+
QVERIFY( isIntersect );
724+
QVERIFY( inter == QgsPoint( 0, 2 ) );
725+
726+
inter = QgsPoint();
727+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), QgsPoint( 0, 2 ), QgsPoint( 1, 5 ), inter, isIntersect, epsilon );
728+
QVERIFY( !intersection );
729+
QVERIFY( isIntersect );
730+
QVERIFY( inter == QgsPoint( 0, 2 ) );
731+
inter = QgsPoint();
732+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), QgsPoint( 0, 2 ), QgsPoint( 1, 5 ), inter, isIntersect, epsilon, true );
733+
QVERIFY( intersection );
734+
QVERIFY( isIntersect );
735+
QVERIFY( inter == QgsPoint( 0, 2 ) );
736+
737+
inter = QgsPoint();
738+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), QgsPoint( 1, 5 ), QgsPoint( 0, 2 ), inter, isIntersect, epsilon );
739+
QVERIFY( !intersection );
740+
QVERIFY( isIntersect );
741+
QVERIFY( inter == QgsPoint( 0, 2 ) );
742+
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, 0 ), QgsPoint( 0, 5 ), QgsPoint( 1, 5 ), QgsPoint( 0, 2 ), inter, isIntersect, epsilon, true );
743+
QVERIFY( intersection );
744+
QVERIFY( isIntersect );
745+
QVERIFY( inter == QgsPoint( 0, 2 ) );
714746
// normal
715747
inter = QgsPoint();
716748
intersection = QgsGeometryUtils::segmentIntersection( QgsPoint( 0, -5 ), QgsPoint( 0, 5 ), QgsPoint( 2, 0 ), QgsPoint( -1, 0 ), inter, isIntersect, epsilon );

0 commit comments

Comments
 (0)