mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-03 14:41:37 -05:00
The band test still visited every entity pair. For boundaries of 24 or more entities, EntitySlideEvents now builds bucket indexes over each entity's perpendicular extent per enumeration (both sides for vertex rays, the line-only side for arc-to-line, the stationary curves for tangency) and visits only the bucket members, ascending, before applying the same exact band tests. Range queries merge the ascending bucket lists without repeats. Each extent is the band test's own acceptance bound widened by a reach of 2*sqrt(QuadraticSlack)*(1 + largest along-axis separation) for the quadratic tests plus a rounding term; bucket numbers are monotone in the coordinate, so a query returns a superset of the accepted entities in their original order and the emitted events are unchanged. Geometry with any coordinate that is nonfinite or beyond the band's coordinate limit is not indexed. SlideBandTests adds large random boundaries (24-160 entities) to the differential comparison against the frozen pre-filter enumeration, reruns the band-edge sweeps with decoy entities so they go through the index (including a far circle reached through the moving offset), and checks index queries directly. Mutations killed: zero reach, line extent without span slack, repeats kept by the merge or the sorted path, last bucket skipped, points just above the minimum treated as empty, curves in the line index, arc and tangency queries ignoring the radius, moving index or measurement without the moving offset. Not pinned by a test: the reach's rounding term (headroom). Measured on converted Nestbolt jobs (Default engine, hermes, quiet machine, one run each), before -> after: m-box-tool 47.1 -> 19.2 s, m-mechanical-mounting-kit 45.9 -> 27.3 s, m-mechanical-cog-washers 74.7 -> 44.2 s, m-mechanical-small-brackets 23.0 -> 16.6 s. The nine completed jobs keep identical placements.