29d58cc8af
test(engine): add integration smoke tests for engine refactor
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:39:51 -04:00
319eace472
refactor(engine): extract RemnantFiller for iterative remnant filling
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:33:00 -04:00
c8587929b5
refactor(engine): extract PairFiller from DefaultNestEngine
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:31:51 -04:00
a7f27480e9
refactor(engine): extract AngleCandidateBuilder from DefaultNestEngine
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:29:52 -04:00
094b1e9f00
refactor(engine): extract ShrinkFiller from StripNestEngine
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:28:24 -04:00
31dbbbeedc
refactor(engine): extract AccumulatingProgress from StripNestEngine
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 22:26:53 -04:00
909b697b78
test(geometry): add PolyLabel tests for L, C, triangle, thin rect, hole
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 20:42:49 -04:00
44657a86b8
feat(geometry): add PolyLabel algorithm with square test
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 20:40:25 -04:00
65bde123ed
fix(engine): fix remnant finder missing L-shaped and split remnants
...
Two bugs caused the remnant finder to miss valid empty regions:
1. RemoveDominated used an 80% overlap-area threshold that incorrectly
removed L-shaped remnants. A tall strip to one side would "dominate"
wide strips above/below it even though they represent different usable
space. Replaced with geometric containment check — only remove a box
if it's fully inside a larger one.
2. FindTieredRemnants split remnants at the obstacle envelope boundary,
and both pieces could fall below minDimension even though the original
remnant passed the filter (e.g., 6.6" remnant split into 5.35" + 1.25"
with minDim=5.38"). Added fallback to keep the original unsplit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 20:03:23 -04:00
51b482aefb
test: add RemnantFinder edge cases and FillScore comparison tests
...
RemnantFinder: obstacle clipping, overlapping obstacles, iterative
workflow, grid pattern, no-overlap invariant, constructor/AddObstacles.
FillScore: count-vs-density ordering, operators, Compute edge cases.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 13:02:15 -04:00
f5ab070453
test: add RemnantFinder tests (red)
2026-03-16 12:44:53 -04:00
7d198f837c
feat: add PlateProcessor orchestrator
2026-03-16 00:44:25 -04:00
6dffd8f5ad
feat: add DirectRapidPlanner with line-shape intersection check
2026-03-16 00:43:06 -04:00
29b2572f9a
feat: add IRapidPlanner, RapidPath, and SafeHeightRapidPlanner
2026-03-16 00:39:34 -04:00
c1e21abd45
feat: add PartSequencerFactory
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:36:41 -04:00
edc81ae45e
feat: add AdvancedSequencer with row grouping and serpentine
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:36:07 -04:00
7edf6ee843
feat: add LeastCodeSequencer with nearest-neighbor and 2-opt
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:35:19 -04:00
f568308d1a
feat: add EdgeStartSequencer
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:32:35 -04:00
d0351ab765
feat: add directional part sequencers (RightSide, LeftSide, BottomSide)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:27:57 -04:00
00940d1b6e
chore: rename test project to OpenNest.Tests
...
Renamed OpenNest.Engine.Tests → OpenNest.Tests (directory, .csproj,
namespaces in all .cs files). Added OpenNest.IO project reference.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 00:25:22 -04:00