vectorcraft/crates/pathops/src
bflatastic be7006ccf5 M6.10: Boolean operations hold their area identities on almost-horizontal edges
The sweep compares a curve with another segment over a y-span shorter than
its tolerance by bounding boxes only, so an edge rising by less than that
tolerance (e.g. a rectangle edge cut through a circle's cap, whose computed
intersection end sits ~1e-12 off the horizontal) was mis-ordered and the
result lost a corner: xor/difference/area disagreed by up to 10%. Every
sweep input now snaps on-curve y values within the tolerance to one level
(handles follow and are levelled with their anchor), so such edges become
exact horizontals, which the sweep handles exactly.

- tests/regressions.rs: the six minimal failures found by the properties,
  the root cause in isolation, and the self-crossing "star" polygon.
- The star-polygon strategy rejected no angular step of half a turn or
  more, so it sometimes drew self-crossing polygons (the shoelace failure).
- Property suites run from a fixed seed (PROPTEST_CASES / PROPTEST_RNG_SEED
  still override), so CI cannot fail at random.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 03:36:30 +07:00
..
boolean.rs M6.10: Boolean operations hold their area identities on almost-horizontal edges 2026-10-05 03:36:30 +07:00
edit.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
fit.rs M0: workspace skeleton — geom, color, doc, render, text, pathops, svg, tools, engine 2026-09-30 05:53:29 -04:00
lib.rs M3.37: Outline Stroke and the live Outline Stroke effect outline strokes as the canvas paints them 2026-10-04 22:53:58 +07:00
offset.rs M6.10: Boolean operations hold their area identities on almost-horizontal edges 2026-10-05 03:36:30 +07:00
pathfinder.rs M6.10: Boolean operations hold their area identities on almost-horizontal edges 2026-10-05 03:36:30 +07:00