From ec5eff4884e344afae2e3d2fa127bd443f1e9333 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Fri, 6 Mar 2026 18:56:27 -0500 Subject: [PATCH] perf: reduce arc segments for push distance calculation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ToPolygon() defaults to 1000 segments per arc, causing ~33k line segments and O(n*m) slowdown. Use 36 segments (10° resolution) which is more than sufficient for push distance accuracy. Co-Authored-By: Claude Opus 4.6 --- OpenNest.Core/Helper.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenNest.Core/Helper.cs b/OpenNest.Core/Helper.cs index d4ab5a9..a6b31f5 100644 --- a/OpenNest.Core/Helper.cs +++ b/OpenNest.Core/Helper.cs @@ -739,6 +739,8 @@ namespace OpenNest return pts.Count > 0; } + private const int PushArcSegments = 36; + public static List GetPartLines(Part part) { var entities = ConvertProgram.ToGeometry(part.Program); @@ -747,7 +749,7 @@ namespace OpenNest foreach (var shape in shapes) { - var polygon = shape.ToPolygon(); + var polygon = shape.ToPolygon(PushArcSegments); polygon.Offset(part.Location); lines.AddRange(polygon.ToLines()); } @@ -768,7 +770,7 @@ namespace OpenNest if (offsetEntity == null) continue; - var polygon = offsetEntity.ToPolygon(); + var polygon = offsetEntity.ToPolygon(PushArcSegments); polygon.Offset(part.Location); lines.AddRange(polygon.ToLines()); }