mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-10-27 15:01:07 -04:00
Every Auto Nest run, and every Default-engine run, recomputed each part's best-fit pairs: job snapshots are fresh objects and BestFitCache keyed its entries on Drawing reference, so the Irregular engine paid PairCatalog.Build (about half of a 118-part solve) on every run of the same drawings. BestFitCache now keeps a process-wide, bounded (512 sets, least recently used first) pool of unfiltered candidate sets keyed by the exact content of a PartGeometrySnapshot (mode and every motion value, bit for bit; PartGeometrySnapshot.ContentComparer) and the spacing. Every drawing DrawingJobMapper.CreateDrawing reconstructs from a snapshot declares that geometry (BestFitCache.ShareByGeometry), so the Irregular pairs and blocks, the cutout lattice and the Fill/Default job paths all read and fill the pool. Candidates depend on the program geometry and spacing alone, so a pooled set is the set the search would produce: benchmark layouts, costs and placements are unchanged on the synthetic nests (all engines) and on the 67-drawing, 118-part job. Failed searches are not pooled, Invalidate leaves the pool alone, Clear empties it, and a drawing whose Program is replaced stops vouching for its geometry. Same 118-part job solved twice in one benchmark process (--parallel 1): the second solve now takes 13.1 s after a 33.0 s first; before, 35.6 s after 41.8 s. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>