From 5d6e018b81d44812ec5a18aaa78d225c4e67479a Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Tue, 7 Apr 2026 22:38:23 -0400 Subject: [PATCH] fix: preserve circle rotation direction through geometry round-trip Circle.Rotation was lost in three places, causing reversed circles to still offset inward instead of outward: - ConvertGeometry.AddCircle hardcoded CCW instead of using circle.Rotation - ConvertProgram.AddArcMove created Circle without setting Rotation from arc - Shape.OffsetOutward/OffsetInward copied Circle without setting Rotation Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.Core/Converters/ConvertGeometry.cs | 2 +- OpenNest.Core/Converters/ConvertProgram.cs | 2 +- OpenNest.Core/Geometry/Shape.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenNest.Core/Converters/ConvertGeometry.cs b/OpenNest.Core/Converters/ConvertGeometry.cs index 25c616a..6620025 100644 --- a/OpenNest.Core/Converters/ConvertGeometry.cs +++ b/OpenNest.Core/Converters/ConvertGeometry.cs @@ -97,7 +97,7 @@ namespace OpenNest.Converters if (startpt != lastpt) pgm.MoveTo(startpt); - pgm.ArcTo(startpt, circle.Center, RotationType.CCW); + pgm.ArcTo(startpt, circle.Center, circle.Rotation); lastpt = startpt; return lastpt; diff --git a/OpenNest.Core/Converters/ConvertProgram.cs b/OpenNest.Core/Converters/ConvertProgram.cs index c1a8cc7..e0e2404 100644 --- a/OpenNest.Core/Converters/ConvertProgram.cs +++ b/OpenNest.Core/Converters/ConvertProgram.cs @@ -106,7 +106,7 @@ namespace OpenNest.Converters var layer = ConvertLayer(arcMove.Layer); if (startAngle.IsEqualTo(endAngle)) - geometry.Add(new Circle(center, radius) { Layer = layer, Color = layer.Color }); + geometry.Add(new Circle(center, radius) { Layer = layer, Color = layer.Color, Rotation = arcMove.Rotation }); else geometry.Add(new Arc(center, radius, startAngle, endAngle, arcMove.Rotation == RotationType.CW) { Layer = layer, Color = layer.Color }); diff --git a/OpenNest.Core/Geometry/Shape.cs b/OpenNest.Core/Geometry/Shape.cs index 65314fd..6e35f1c 100644 --- a/OpenNest.Core/Geometry/Shape.cs +++ b/OpenNest.Core/Geometry/Shape.cs @@ -605,7 +605,7 @@ namespace OpenNest.Geometry copy.Entities.Add(new Arc(a.Center, a.Radius, a.EndAngle, a.StartAngle, !a.IsReversed) { Layer = a.Layer }); break; case Circle c: - copy.Entities.Add(new Circle(c.Center, c.Radius) { Layer = c.Layer }); + copy.Entities.Add(new Circle(c.Center, c.Radius) { Layer = c.Layer, Rotation = RotationType.CW }); break; } } @@ -640,7 +640,7 @@ namespace OpenNest.Geometry copy.Entities.Add(new Arc(a.Center, a.Radius, a.EndAngle, a.StartAngle, !a.IsReversed) { Layer = a.Layer }); break; case Circle c: - copy.Entities.Add(new Circle(c.Center, c.Radius) { Layer = c.Layer }); + copy.Entities.Add(new Circle(c.Center, c.Radius) { Layer = c.Layer, Rotation = RotationType.CCW }); break; } }