From eb9aec19d809bda9a4c2d39fc9255f0faf72e705 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Tue, 2 Jun 2026 08:54:26 -0400 Subject: [PATCH] pathfinder: Unite / Subtract / Intersect / Exclude on shape selection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Boolean ops on 2+ selected shape layers, backed by the vendored polygon-clipping library (29 KB minified, MIT) loaded from src/vendor/. Adds a new "Pathfinder" details block in the sidebar under Align & distribute. - Unite combines all selected shapes into one outline. - Subtract removes upper shapes from the bottom-most shape. - Intersect keeps only the overlapping region. - Exclude keeps only the non-overlapping regions (XOR). Pipeline: each selected layer's pen path is sampled to a polygon (16 samples per Bézier segment, in world inches), the chosen op runs, and the result is rebuilt as a new pen layer that inherits the bottom-most input layer's z-order, target, fill and stroke — matching Illustrator's Pathfinder convention. Non-pen primitives (rect, circle, etc.) are auto-converted to pen paths first. Limitations baked in: - Rotated layers aren't supported yet (we'd need to rotate the sampled polygon before clipping). The op refuses with a toast. - Curves are flattened — the result is a polygon approximation with `fill-rule: evenodd` so multi-ring outputs (donut from a subtraction) render correctly. The renderer learned to honor shape.fillRule for this commit. - Multi-polygon results stay rendered correctly but only the first polygon's outer ring is preserved in pen.nodes, so Direct Select editing post-op is partial. --- src/index.html | 184 ++++++++++++++++++++++++++++- src/vendor/polygon-clipping.min.js | 24 ++++ 2 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 src/vendor/polygon-clipping.min.js diff --git a/src/index.html b/src/index.html index ad47620..3f3f74e 100644 --- a/src/index.html +++ b/src/index.html @@ -3746,6 +3746,19 @@ + +
+ Pathfinder +

Boolean ops on 2+ selected shape layers. Result is a polygon approximation (curves get flattened). Non-pen primitives are auto-converted; rotated shapes aren’t supported yet.

+
+ + +
+
+ + +
+

Click a layer to select it. Shift/Ctrl/Cmd-click to select multiple layers, then drag any selected layer to move the set together. Text layers are editable in place.

@@ -4919,6 +4932,7 @@ +