refactor: consolidate HasOverlappingParts into FillHelpers
StripeFiller and FillExtents had identical 24-line overlap detection methods; move to FillHelpers and delegate from both callers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using OpenNest.Engine.Strategies;
|
||||||
using OpenNest.Geometry;
|
using OpenNest.Geometry;
|
||||||
using OpenNest.Math;
|
using OpenNest.Math;
|
||||||
using System;
|
using System;
|
||||||
@@ -411,30 +412,7 @@ namespace OpenNest.Engine.Fill
|
|||||||
part.BoundingBox.Bottom >= workArea.Bottom - Tolerance.Epsilon;
|
part.BoundingBox.Bottom >= workArea.Bottom - Tolerance.Epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool HasOverlappingParts(List<Part> parts)
|
private static bool HasOverlappingParts(List<Part> parts) =>
|
||||||
{
|
FillHelpers.HasOverlappingParts(parts);
|
||||||
for (var i = 0; i < parts.Count; i++)
|
|
||||||
{
|
|
||||||
var b1 = parts[i].BoundingBox;
|
|
||||||
|
|
||||||
for (var j = i + 1; j < parts.Count; j++)
|
|
||||||
{
|
|
||||||
var b2 = parts[j].BoundingBox;
|
|
||||||
|
|
||||||
var overlapX = System.Math.Min(b1.Right, b2.Right)
|
|
||||||
- System.Math.Max(b1.Left, b2.Left);
|
|
||||||
var overlapY = System.Math.Min(b1.Top, b2.Top)
|
|
||||||
- System.Math.Max(b1.Bottom, b2.Bottom);
|
|
||||||
|
|
||||||
if (overlapX <= Tolerance.Epsilon || overlapY <= Tolerance.Epsilon)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (parts[i].Intersects(parts[j], out _))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -481,33 +481,6 @@ public class StripeFiller
|
|||||||
return axis == NestDirection.Horizontal ? box.Width : box.Length;
|
return axis == NestDirection.Horizontal ? box.Width : box.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
private static bool HasOverlappingParts(List<Part> parts) =>
|
||||||
/// Checks if any pair of parts geometrically overlap. Uses bounding box
|
FillHelpers.HasOverlappingParts(parts);
|
||||||
/// pre-filtering for performance, then falls back to shape intersection.
|
|
||||||
/// </summary>
|
|
||||||
private static bool HasOverlappingParts(List<Part> parts)
|
|
||||||
{
|
|
||||||
for (var i = 0; i < parts.Count; i++)
|
|
||||||
{
|
|
||||||
var b1 = parts[i].BoundingBox;
|
|
||||||
|
|
||||||
for (var j = i + 1; j < parts.Count; j++)
|
|
||||||
{
|
|
||||||
var b2 = parts[j].BoundingBox;
|
|
||||||
|
|
||||||
var overlapX = System.Math.Min(b1.Right, b2.Right)
|
|
||||||
- System.Math.Max(b1.Left, b2.Left);
|
|
||||||
var overlapY = System.Math.Min(b1.Top, b2.Top)
|
|
||||||
- System.Math.Max(b1.Bottom, b2.Bottom);
|
|
||||||
|
|
||||||
if (overlapX <= Tolerance.Epsilon || overlapY <= Tolerance.Epsilon)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (parts[i].Intersects(parts[j], out _))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,5 +109,35 @@ namespace OpenNest.Engine.Strategies
|
|||||||
var fallback = fillFunc(other);
|
var fallback = fillFunc(other);
|
||||||
return fallback ?? new List<Part>();
|
return fallback ?? new List<Part>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if any pair of parts geometrically overlap. Uses bounding box
|
||||||
|
/// pre-filtering for performance, then falls back to shape intersection.
|
||||||
|
/// </summary>
|
||||||
|
internal static bool HasOverlappingParts(List<Part> parts)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < parts.Count; i++)
|
||||||
|
{
|
||||||
|
var b1 = parts[i].BoundingBox;
|
||||||
|
|
||||||
|
for (var j = i + 1; j < parts.Count; j++)
|
||||||
|
{
|
||||||
|
var b2 = parts[j].BoundingBox;
|
||||||
|
|
||||||
|
var overlapX = System.Math.Min(b1.Right, b2.Right)
|
||||||
|
- System.Math.Max(b1.Left, b2.Left);
|
||||||
|
var overlapY = System.Math.Min(b1.Top, b2.Top)
|
||||||
|
- System.Math.Max(b1.Bottom, b2.Bottom);
|
||||||
|
|
||||||
|
if (overlapX <= Tolerance.Epsilon || overlapY <= Tolerance.Epsilon)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (parts[i].Intersects(parts[j], out _))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user