vectorcraft/crates
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
..
brush M3.59: tints of global and spot colours, tint swatches and Global colour balance 2026-10-05 02:29:17 +07:00
color M3.84: Object > Expand dialog; gradient fills expand to a mesh or N objects 2026-10-05 03:25:33 +07:00
doc M3.84: Object > Expand dialog; gradient fills expand to a mesh or N objects 2026-10-05 03:25:33 +07:00
effects M3.63: visual bounds and clicks take in the whole stroke 2026-10-05 02:55:23 +07:00
engine M3.84: Object > Expand dialog; gradient fills expand to a mesh or N objects 2026-10-05 03:25:33 +07:00
format M3.49: each fill and stroke can overprint 2026-10-05 00:01:02 +07:00
geom M3.63: visual bounds and clicks take in the whole stroke 2026-10-05 02:55:23 +07:00
mcp Merge wp/B1 2026-10-04 21:47:07 +07:00
pathops M6.10: Boolean operations hold their area identities on almost-horizontal edges 2026-10-05 03:36:30 +07:00
pdf M3.89: a clipping path's fill paints behind the clipped art, its stroke over it 2026-10-05 03:11:04 +07:00
render M3.89: a clipping path's fill paints behind the clipped art, its stroke over it 2026-10-05 03:11:04 +07:00
svg M3.89: a clipping path's fill paints behind the clipped art, its stroke over it 2026-10-05 03:11:04 +07:00
testkit M6.10: Boolean operations hold their area identities on almost-horizontal edges 2026-10-05 03:36:30 +07:00
text M7.6: tab stops and the Tabs panel — left/center/right/decimal stops (align-on character), default stops every ½ inch, text.tabs.set/get/clear, ruler (click adds, drag moves, drag off deletes), Repeat Tab / Delete Tab / Clear All Tabs; control characters no longer draw .notdef boxes 2026-10-02 10:13:24 -04:00
tools M3.60: gradient swatches and stops linked to global and spot swatches 2026-10-05 02:29:19 +07:00
trace M12.7: Object → Create Object Mosaic… (trace::mosaic tile averages; columns/rows, new size, spacing, gray, delete raster; follows the image transform) 2026-10-02 08:16:36 -04:00
ui-egui M3.84: Object > Expand dialog; gradient fills expand to a mesh or N objects 2026-10-05 03:25:33 +07:00