From b7d7f5135b9e58f2fe6a934417063c5ace7ea19a Mon Sep 17 00:00:00 2001 From: MotherBoardMage Date: Sun, 25 Jan 2026 20:57:45 +0000 Subject: [PATCH 1/2] fix: solidify_stroke node now applies transformations before calculating the stroke --- node-graph/nodes/vector/src/vector_nodes.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/node-graph/nodes/vector/src/vector_nodes.rs b/node-graph/nodes/vector/src/vector_nodes.rs index 778b9eeab5..1a2f581f6e 100644 --- a/node-graph/nodes/vector/src/vector_nodes.rs +++ b/node-graph/nodes/vector/src/vector_nodes.rs @@ -1154,8 +1154,12 @@ async fn solidify_stroke(_: impl Ctx, content: Table) -> Table { // 0.25 is balanced between performace and accuracy of the curve. const STROKE_TOLERANCE: f64 = 0.25; - for path in bezpaths { - let solidified = kurbo::stroke(path, &stroke_style, &stroke_options, STROKE_TOLERANCE); + for mut path in bezpaths { + path.apply_affine(Affine::new(stroke.transform.to_cols_array())); + + let mut solidified = kurbo::stroke(path, &stroke_style, &stroke_options, STROKE_TOLERANCE); + solidified.apply_affine(Affine::new(stroke.transform.inverse().to_cols_array())); + result.append_bezpath(solidified); } From dca9ee9ac5bd47fc443b8ca6486f09d4b6a28aa7 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Fri, 13 Feb 2026 23:02:31 -0800 Subject: [PATCH 2/2] Check for non-invertible transform Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- node-graph/nodes/vector/src/vector_nodes.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/node-graph/nodes/vector/src/vector_nodes.rs b/node-graph/nodes/vector/src/vector_nodes.rs index 1a2f581f6e..dfa2cfd42d 100644 --- a/node-graph/nodes/vector/src/vector_nodes.rs +++ b/node-graph/nodes/vector/src/vector_nodes.rs @@ -1158,7 +1158,9 @@ async fn solidify_stroke(_: impl Ctx, content: Table) -> Table { path.apply_affine(Affine::new(stroke.transform.to_cols_array())); let mut solidified = kurbo::stroke(path, &stroke_style, &stroke_options, STROKE_TOLERANCE); - solidified.apply_affine(Affine::new(stroke.transform.inverse().to_cols_array())); + if stroke.transform.matrix2.determinant() != 0. { + solidified.apply_affine(Affine::new(stroke.transform.inverse().to_cols_array())); + } result.append_bezpath(solidified); }