vectorcraft/crates
Alejandro Londono 8957545c33 #893: merge Shape Builder faces in the planar map
After linesweeper 0.5 (#1028 on main), uniting the faces of a grid of
lines could split the merged strip again even with their corners shared
exactly: a sweep over seven or more faces moved shared vertices by about
1e-6 (within its eps) and the edges between faces no longer cancelled.

Faces cut by open paths now merge like closed shapes' faces already do
(FaceMerger::exact): in the planar map itself. build() is split into
map() (the graph and its faces) and build(); Map::merge traces the
boundary of the picked faces along the map's own edges, dropping the
edges between two picked faces and the loose ends inside them, so no
sweep runs on the result. FaceMerger finds each face again by a point
inside it, checks the area, and keeps the boolean union as a fallback.

Tests: the regression test merges through FaceMerger; a grid test
covers a ring with its hole, cells touching at a corner, a loose end,
and that the map path (not the fallback) produced the result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:24:44 +07:00
..
affinity Clippy 1.99: as_chunks in the Affinity raster tests 2026-10-09 23:15:36 +07:00
brush Part of gap 5: Scatter, Art and Pattern Brush Options 2026-10-10 17:48:05 +07:00
cad #1011: DXF US survey inches, yards and miles import at their size 2026-10-11 03:51:47 +07:00
color Review: palette writing keeps the swatches PaletteFormat::holds names; ROADMAP (#1110) 2026-10-11 11:33:07 +07:00
doc Review: one Selection::deselect_uneditable for the hide and lock commands; ROADMAP (#1107) 2026-10-11 11:33:05 +07:00
effects Part of gap 2: Effect › Brush Strokes (Accented Edges, Angled Strokes, Crosshatch, Dark Strokes, Ink Outlines, Spatter, Sprayed Strokes, Sumi-e) 2026-10-11 01:19:26 +07:00
engine Swatches: swatch.library.save counts only the swatches the file holds 2026-10-11 11:33:07 +07:00
eps #1102: an EPS keeps its page and stacked text strokes through its layers 2026-10-11 11:03:11 +07:00
format Fonts: missing fonts are listed when a document opens, with Find Fonts and a folder search 2026-10-10 08:42:32 +07:00
geom #1026: open filled paths are hit by their fill on every side 2026-10-11 05:30:24 +07:00
mcp Align, Reflect and Shear: object.align needs a direction; unknown choices are errors 2026-10-11 11:33:03 +07:00
metafile Part of #637: the editing data's structure read whole, colours, gradients, transparency, names, images and artboards included 2026-10-09 16:02:36 +07:00
pathops #893: merge Shape Builder faces in the planar map 2026-10-11 12:24:44 +07:00
pdf #1032: spot colours defined in Lab keep their Lab values 2026-10-11 07:06:05 +07:00
plugins Fix #832: --automation-read-root and --automation-write-root confine the MCP server's files 2026-10-10 14:27:24 +07:00
render UI.6: reconcile shared docking with native panel sets 2026-10-10 19:28:31 -06:00
svg Type: Proportional Metrics — full-width glyphs on the font's proportional widths, `palt` (#966) 2026-10-11 07:00:35 +07:00
testkit variables: fix binding lifetime, dataset editing and the missing UI to define 2026-10-10 23:34:21 +07:00
text Build: generated sources are rewritten only when they change 2026-10-11 07:13:32 +07:00
three-d M9: add live Revolve with artboard rotation and lighting controls 2026-10-10 23:44:46 +07:00
tools Gradient mesh: a fill colour recolours the point last clicked (#1050) 2026-10-11 07:13:33 +07:00
trace Image Trace: Flat Logo mode (sub-pixel edges, restored corners, true lines and circles) 2026-10-09 17:57:04 +11:00
ui-egui Fix #867: macOS file dialogs are sheets, and no dialog runs inside the event handler 2026-10-11 12:14:17 +07:00