mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-25 10:17:02 -06:00
regions() made one linesweeper contour pass per distinct coverage mask, and each pass walks the whole arrangement, so finding the regions cost masks x segments. Two crossing blends make thousands of both: the Ribbons example's EPS export never finished, and Flatten Transparency, the Flattener Preview, Divide, Shape Builder and Live Paint slowed down the same way on dense art. The masks now go into batches whose faces share no vertex (a greedy colouring of the masks meeting at each vertex), one contour pass per batch. A face's contours are walked as in its own mask's pass, since no other face of the batch touches it; each contour's mask is the one of its batch at its first point (a vertex of the arrangement), and contours group under the nearest enclosing contour of the same mask, as grouped() does in that mask's pass. The regions come out identical, in the same order. Fixes #173. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U9TrG4w49oSRYbP3cqxA3D