mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-29 12:17:14 -06:00
Bending flattens every path it maps: warp_path runs kurbo::flatten and emits SubPath::polyline, so a circle tile is drawn as a polygon. That shows in the live stroke, not only after Expand Brush Strokes, and it happens even on a perfectly straight path where the tile needs nothing more than an affine. Bending is only non-linear where the track bends. On a straight run the arc-length map and the normal offset are both linear, so affine_fit derives the affine from three corners of the art and then checks it against a five by five grid, including those corners. Within the tolerance the flattening would have used, the art is transformed instead, which keeps its Beziers. Outside it, nothing changes: the old path runs and the result is what it was. Strokes are scaled by the same factor the bent path uses rather than by the affine's own, so curves are the only thing this changes. Corner tiles already took this route, which is why they kept their curves while the tiles between them did not. Two existing tests moved with it, both because they read anchor counts that only held while straight runs were flattened: pattern_places_corner_tiles told corner tiles from side tiles by "four anchors", true only because the side rectangles arrived as polylines. It now tells them apart by a kept handle, which is what actually distinguishes an ellipse from a rectangle, and additionally asserts the side tiles keep their own four anchors. pattern_output_is_capped_across_subpaths_not_only_per_run counted on sixteen tracks passing the #3594 anchor budget. A tile is about four times cheaper in anchors now, so the budget engages later; the test derives how many tracks it needs from what one costs.