diff --git a/OpenNest.Core/Converters/ConvertGeometry.cs b/OpenNest.Core/Converters/ConvertGeometry.cs index 6620025..728c2ae 100644 --- a/OpenNest.Core/Converters/ConvertGeometry.cs +++ b/OpenNest.Core/Converters/ConvertGeometry.cs @@ -1,5 +1,6 @@ using OpenNest.CNC; using OpenNest.Geometry; +using OpenNest.Math; using System.Collections.Generic; namespace OpenNest.Converters @@ -86,7 +87,16 @@ namespace OpenNest.Converters lastpt = endpt; - pgm.ArcTo(endpt, arc.Center, arc.IsReversed ? RotationType.CW : RotationType.CCW); + var sweep = System.Math.Abs(arc.SweepAngle()); + if (sweep < Tolerance.Epsilon || sweep.IsEqualTo(Angle.TwoPI)) + { + pgm.LineTo(endpt); + } + else + { + pgm.ArcTo(endpt, arc.Center, arc.IsReversed ? RotationType.CW : RotationType.CCW); + } + return lastpt; } diff --git a/OpenNest.Core/Geometry/EllipseConverter.cs b/OpenNest.Core/Geometry/EllipseConverter.cs index 9642520..005d0fd 100644 --- a/OpenNest.Core/Geometry/EllipseConverter.cs +++ b/OpenNest.Core/Geometry/EllipseConverter.cs @@ -173,7 +173,11 @@ namespace OpenNest.Geometry if (maxDev <= tolerance) { - results.Add(CreateArc(arcCenter, radius, center, semiMajor, semiMinor, rotation, t0, t1)); + var arc = CreateArc(arcCenter, radius, center, semiMajor, semiMinor, rotation, t0, t1); + if (arc.SweepAngle() < Tolerance.Epsilon) + results.Add(new Line(p0, p1)); + else + results.Add(arc); } else {