From bf3ec2f6894ccd9255243e1fa40d2b56d6ddcd5b Mon Sep 17 00:00:00 2001 From: Johannes Wolf <519002+johannes-wolf@users.noreply.github.com> Date: Wed, 21 Feb 2024 18:04:07 +0100 Subject: [PATCH] canvas: Change default transform to remove z (#505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the default transformation matrix to have z coordinates of zero after transformation. This is actually a fix, as the final 2D projection should not have a z-value other than zero. With this change, anchors in 3D space become 2D and thus elements like rect, Bézier or Catmull, … will correctly work when using them with anchors to 3D elements. Intersection between 3D elements will also work (in 2D space). See: #502 and #493. --- CHANGES.md | 1 + src/canvas.typ | 21 +++++++++++++++------ tests/decorations/path/ref/1.png | Bin 98268 -> 100028 bytes 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b03ebb97..14479ea9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ ## Misc - The `hide` function now support an additional `bounds:` parameter to enable canvas bounds adjustment for hidden elements +- The default transformation matrix changed ## Libs ### Plot diff --git a/src/canvas.typ b/src/canvas.typ index 0d59f03e..77f89035 100644 --- a/src/canvas.typ +++ b/src/canvas.typ @@ -8,7 +8,13 @@ #import util: typst-length -/// Sets up a canvas for drawing on. +/// Sets up a canvas for drawing on. +/// +/// The default transformation matrix of the canvas is set to: +/// $mat(1,0,0.5,0; +/// 0,-1,-0.5,0; +/// 0,0,0,0; +/// 0,0,0,1)$ /// /// - length (length,ratio): Used to specify what 1 coordinate unit is. If given a ratio, that ratio is relative to the containing elements width! /// - body (none,array,element): A code block in which functions from `draw.typ` have been called. @@ -41,11 +47,14 @@ prev: (pt: (0, 0, 0)), em-size: measure(box(width: 1em, height: 1em), st), style: styles.default, - // Current transform - transform: matrix.mul-mat( - matrix.transform-shear-z(.5), - matrix.transform-scale((x: 1, y: -1, z: 1)), - ), + // Current transformation matrix, a lhs coordinate system + // where z is sheared by a half x and y. + // +x = right, +y = up, +z = 1/2 (right + up) + transform: + ((1, 0,+.5, 0), + (0,-1,-.5, 0), + (0, 0, .0, 0), + (0, 0, .0, 1)), // Nodes, stores anchors and paths nodes: (:), // group stack diff --git a/tests/decorations/path/ref/1.png b/tests/decorations/path/ref/1.png index 263aa30e4014be5b4eff29d1bb55d557c81aaaa9..77c61a2bdc3e5a289c061428b53a323a5a963d8d 100644 GIT binary patch delta 15002 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 AQUCw| delta 13168 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