mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-25 02:07:09 -06:00
Trim, Merge and Crop walk the arrangement once per input shape, and every walk tested each edge side with a coverage mask built from a winding vector with one slot per input. On 300 paths, against main: - Trim: 362 → 31 ms - Merge: 366 → 31 ms - Crop: 303 → 28 ms - Unite, Intersect, Exclude, Minus Front and Minus Back: unchanged or a little faster - Multi, the arrangement's winding, keeps only the non-zero windings as sorted (input, winding) pairs, added in place. A face is covered by a few inputs, so a test reads a few entries instead of one per input. The winding arithmetic is unchanged. - Arrangement::covered lists the inputs that cover a face (the true entries of its coverage mask). Trim, Merge, Crop, Minus Front, Minus Back, Intersect and Exclude test that list; each test's old mask form is in a comment beside it. mask() still builds the same mask for the rest. pathfinder_pinned hashes the output of all ten operations on 2, 5, 12 and 30 overlapping ellipses, rectangles and stars (even-odd and non-zero, shared keys for Merge). The 40 hashes were computed with main's dense windings, and the new code gives every one of them. A wrong Crop test fails it. The pathops suite (103 tests) passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmMmc1J8XeNLxhRihWv9cc