diff --git a/libs/kimath/src/geometry/seg.cpp b/libs/kimath/src/geometry/seg.cpp index ad98c74646..30778b0be3 100644 --- a/libs/kimath/src/geometry/seg.cpp +++ b/libs/kimath/src/geometry/seg.cpp @@ -441,7 +441,7 @@ int SEG::LineDistance( const VECTOR2I& aP, bool aDetermineSide ) const ecoord dist = isqrt( dist_sq ); - return static_cast( aDetermineSide ? dist : std::abs( dist ) ); + return static_cast( aDetermineSide ? sgn( det ) * dist : std::abs( dist ) ); } diff --git a/qa/tests/libs/kimath/geometry/test_segment.cpp b/qa/tests/libs/kimath/geometry/test_segment.cpp index 441341d1ee..cb68553513 100644 --- a/qa/tests/libs/kimath/geometry/test_segment.cpp +++ b/qa/tests/libs/kimath/geometry/test_segment.cpp @@ -716,4 +716,20 @@ BOOST_AUTO_TEST_CASE( SegCreatePerpendicular ) } } +BOOST_AUTO_TEST_CASE( LineDistance ) +{ + SEG seg( { 0, 0 }, { 10, 0 } ); + + BOOST_TEST( seg.LineDistance( { 5, 0 } ) == 0 ); + BOOST_TEST( seg.LineDistance( { 5, 8 } ) == 8 ); +} + +BOOST_AUTO_TEST_CASE( LineDistanceSided ) +{ + SEG seg( { 0, 0 }, { 10, 0 } ); + + BOOST_TEST( seg.LineDistance( { 5, 8 }, true ) == 8 ); + BOOST_TEST( seg.LineDistance( { 5, -8 }, true ) == -8 ); +} + BOOST_AUTO_TEST_SUITE_END()