From cc85493a0ccba5125dca9e6a5e63a7c7e307d4ff Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sat, 28 Mar 2026 16:20:01 -0400 Subject: [PATCH] refactor: deduplicate EvenlyDistribute horizontal and vertical Extract shared EvenlyDistribute helper parameterized by axis, eliminating 27-line duplicate between the two methods. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.Core/Align.cs | 59 ++++++++++++------------------------------ 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/OpenNest.Core/Align.cs b/OpenNest.Core/Align.cs index 40f36e4..c419614 100644 --- a/OpenNest.Core/Align.cs +++ b/OpenNest.Core/Align.cs @@ -125,61 +125,36 @@ namespace OpenNest parts.ForEach(part => Bottom(fixedPart, part)); } - public static void EvenlyDistributeHorizontally(List parts) + public static void EvenlyDistributeHorizontally(List parts) => + EvenlyDistribute(parts, horizontal: true); + + public static void EvenlyDistributeVertically(List parts) => + EvenlyDistribute(parts, horizontal: false); + + private static void EvenlyDistribute(List parts, bool horizontal) { if (parts.Count < 3) return; var list = new List(parts); - list.Sort((p1, p2) => p1.BoundingBox.Center.X.CompareTo(p2.BoundingBox.Center.X)); + list.Sort((p1, p2) => horizontal + ? p1.BoundingBox.Center.X.CompareTo(p2.BoundingBox.Center.X) + : p1.BoundingBox.Center.Y.CompareTo(p2.BoundingBox.Center.Y)); var lastIndex = list.Count - 1; - var first = list[0]; - var last = list[lastIndex]; + var start = horizontal ? list[0].BoundingBox.Center.X : list[0].BoundingBox.Center.Y; + var end = horizontal ? list[lastIndex].BoundingBox.Center.X : list[lastIndex].BoundingBox.Center.Y; - var start = first.BoundingBox.Center.X; - var end = last.BoundingBox.Center.X; - var diff = end - start; + var spacing = (end - start) / lastIndex; - var spacing = diff / lastIndex; - - for (int i = 1; i < lastIndex; ++i) + for (var i = 1; i < lastIndex; ++i) { var part = list[i]; - var newX = start + i * spacing; - var curX = part.BoundingBox.Center.X; + var cur = horizontal ? part.BoundingBox.Center.X : part.BoundingBox.Center.Y; + var delta = start + i * spacing - cur; - part.Offset(newX - curX, 0); - } - } - - public static void EvenlyDistributeVertically(List parts) - { - if (parts.Count < 3) - return; - - var list = new List(parts); - list.Sort((p1, p2) => p1.BoundingBox.Center.Y.CompareTo(p2.BoundingBox.Center.Y)); - - var lastIndex = list.Count - 1; - - var first = list[0]; - var last = list[lastIndex]; - - var start = first.BoundingBox.Center.Y; - var end = last.BoundingBox.Center.Y; - var diff = end - start; - - var spacing = diff / lastIndex; - - for (int i = 1; i < lastIndex; ++i) - { - var part = list[i]; - var newX = start + i * spacing; - var curX = part.BoundingBox.Center.Y; - - part.Offset(0, newX - curX); + part.Offset(horizontal ? delta : 0, horizontal ? 0 : delta); } } }