perf(fill): remove discarded extents pitch geometry

This commit is contained in:
aj
2026-09-25 19:52:19 -04:00
parent cec7396da6
commit 6efa6b1117
8 changed files with 961 additions and 20 deletions
+23 -20
View File
@@ -117,29 +117,32 @@ namespace OpenNest.Engine.Fill
{
var column = new List<Part> { (Part)pair.Part1.Clone(), (Part)pair.Part2.Clone() };
// Find geometry-aware copy distance for the pair vertically.
var boundary1 = new PartBoundary(pair.Part1, halfSpacing);
var boundary2 = new PartBoundary(pair.Part2, halfSpacing);
// Compute vertical copy distance using bounding boxes as starting point,
// then slide down to find true geometry distance.
var pairHeight = pair.Bbox.Width;
var testOffset = new Vector(0, pairHeight);
var copyDistance = pairHeight + partSpacing;
// Create test parts for slide distance measurement.
var testPart1 = pair.Part1.CloneAtOffset(testOffset);
var testPart2 = pair.Part2.CloneAtOffset(testOffset);
// For finite valid geometry and nonnegative spacing, the legacy helper returns
// pairHeight + partSpacing on negative/no-hit slides. Otherwise minSlide >= 0,
// so Max(pairHeight - minSlide, pairHeight + partSpacing) is the same pitch.
// Public callers do not validate spacing; retain legacy work/behavior outside
// that domain rather than changing its results or exceptions.
if (!double.IsFinite(partSpacing) || partSpacing < 0 || !double.IsFinite(pairHeight))
{
var boundary1 = new PartBoundary(pair.Part1, halfSpacing);
var boundary2 = new PartBoundary(pair.Part2, halfSpacing);
var testOffset = new Vector(0, pairHeight);
var testPart1 = pair.Part1.CloneAtOffset(testOffset);
var testPart2 = pair.Part2.CloneAtOffset(testOffset);
// Find minimum distance from test pair sliding down toward original pair.
var copyDistance = FindVerticalCopyDistance(
pair.Part1,
pair.Part2,
testPart1,
testPart2,
boundary1,
boundary2,
pairHeight
);
copyDistance = FindVerticalCopyDistance(
pair.Part1,
pair.Part2,
testPart1,
testPart2,
boundary1,
boundary2,
pairHeight
);
}
if (copyDistance <= 0)
return column;
+1
View File
@@ -23,6 +23,7 @@ namespace OpenNest.Engine.Fill
public PartBoundary(Part part, double spacing)
{
PerfCounters.CountPartBoundaryPreparation();
var entities = ConvertProgram
.ToGeometry(part.Program)
.Where(e => e.Layer == SpecialLayers.Cut)