Browse Source

SHAPE_ARC: fix polyline conversion when radius=0

Prevent a divide-by-zero bug in SHAPE_ARC::ConvertToPolyline.

When the radius is zero, just use the initial angle (it makes
no different anyway, the result is the centre point, which is
the start point.
pull/15/head
John Beard 7 years ago
parent
commit
e312e2b286
  1. 6
      common/geometry/shape_arc.cpp
  2. 6
      qa/common/geometry/test_shape_arc.cpp

6
common/geometry/shape_arc.cpp

@ -256,7 +256,11 @@ const SHAPE_LINE_CHAIN SHAPE_ARC::ConvertToPolyline( double aAccuracy ) const
for( int i = 0; i <= n ; i++ )
{
double a = sa + m_centralAngle * (double) i / (double) n;
double a = sa;
if( n != 0 )
sa += m_centralAngle * (double) i / (double) n;
double x = c.x + r * cos( a * M_PI / 180.0 );
double y = c.y + r * sin( a * M_PI / 180.0 );

6
qa/common/geometry/test_shape_arc.cpp

@ -314,10 +314,8 @@ bool ArePolylinePointsNearCircle(
return GEOM_TEST::ArePointsNearCircle( points, aCentre, aRad, aTolEnds );
}
#ifdef HAVE_EXPECTED_FAILURES
// Failure in zero-radius case
BOOST_AUTO_TEST_CASE( ArcToPolyline, *boost::unit_test::expected_failures( 1 ) )
BOOST_AUTO_TEST_CASE( ArcToPolyline )
{
const std::vector<ARC_TO_POLYLINE_CASE> cases = {
{
@ -373,7 +371,5 @@ BOOST_AUTO_TEST_CASE( ArcToPolyline, *boost::unit_test::expected_failures( 1 ) )
}
}
#endif // HAVE_EXPECTED_FAILURES
BOOST_AUTO_TEST_SUITE_END()
Loading…
Cancel
Save