[latex3-commits] [latex3/latex3] main: Apply transformation matrix to drawing shifts (90a096335)

github at latex-project.org github at latex-project.org
Fri Dec 15 19:24:08 CET 2023


Repository : https://github.com/latex3/latex3
On branch  : main
Link       : https://github.com/latex3/latex3/commit/90a0963356b4c1fc2c30ab29f01f1a03ce77a643

>---------------------------------------------------------------

commit 90a0963356b4c1fc2c30ab29f01f1a03ce77a643
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Dec 15 18:24:08 2023 +0000

    Apply transformation matrix to drawing shifts


>---------------------------------------------------------------

90a0963356b4c1fc2c30ab29f01f1a03ce77a643
 l3experimental/CHANGELOG.md                   |  3 +++
 l3experimental/l3draw/l3draw-transforms.dtx   | 38 ++++++++++++++++++++++-----
 l3experimental/l3draw/l3draw.dtx              |  3 ++-
 l3experimental/l3draw/testfiles/m3draw002.lvt | 11 ++++++++
 l3experimental/l3draw/testfiles/m3draw002.tlg |  6 +++++
 5 files changed, 54 insertions(+), 7 deletions(-)

diff --git a/l3experimental/CHANGELOG.md b/l3experimental/CHANGELOG.md
index 309472d33..bdf35287a 100644
--- a/l3experimental/CHANGELOG.md
+++ b/l3experimental/CHANGELOG.md
@@ -7,6 +7,9 @@ this project uses date-based 'snapshot' version identifiers.
 
 ## [Unreleased]
 
+### Changed
+- Apply transformation matrix to drawing shifts
+
 ### Fixed
 - Remove a stray scaling in `\draw_path_rectangle:nn` (issue \#1386)
 
diff --git a/l3experimental/l3draw/l3draw-transforms.dtx b/l3experimental/l3draw/l3draw-transforms.dtx
index 8115e1c4f..733b9df14 100644
--- a/l3experimental/l3draw/l3draw-transforms.dtx
+++ b/l3experimental/l3draw/l3draw-transforms.dtx
@@ -154,10 +154,7 @@
       { \@@_transform_shift_absolute:nn } {#1}
   }
 \cs_new_protected:Npn \@@_transform_shift_absolute:nn #1#2
-  {
-    \dim_set:Nn \l_@@_xshift_dim {#1}
-    \dim_set:Nn \l_@@_yshift_dim {#2}
-  }
+  { \@@_transform_shift:nnnn { 0pt } { 0pt } {#1} {#2} }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -199,8 +196,10 @@
   }
 \cs_new_protected:Npn \@@_transform_shift:nn #1#2
   {
-    \dim_set:Nn \l_@@_xshift_dim { \l_@@_xshift_dim + #1 }
-    \dim_set:Nn \l_@@_yshift_dim { \l_@@_yshift_dim + #2 }
+    \@@_transform_shift:nnnn
+      \l_@@_xshift_dim
+      \l_@@_yshift_dim
+      {#1} {#2}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -208,6 +207,33 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}{\@@_transform_shift:nnnn}
+%   Apply the current transformation matrix to the shift, then store
+%   the resulting values: we may or may not have a none-zero starting
+%   point here.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_transform_shift:nnnn #1#2#3#4
+  {
+    \dim_set:Nn \l_@@_xshift_dim
+      {
+        \fp_to_dim:n
+          {
+            #1 +
+            ( #3 * \l_@@_matrix_a_fp + #4 * \l_@@_matrix_b_fp )
+          }
+      }
+    \dim_set:Nn \l_@@_yshift_dim
+      {
+        \fp_to_dim:n
+          {
+            #2 +
+            ( #3 * \l_@@_matrix_c_fp + #4 * \l_@@_matrix_d_fp )
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\draw_transform_matrix_invert:}
 % \begin{macro}{\@@_transform_invert:n, \@@_transform_invert:f}
 % \begin{macro}{\draw_transform_shift_invert:}
diff --git a/l3experimental/l3draw/l3draw.dtx b/l3experimental/l3draw/l3draw.dtx
index e0cbdff3d..a4ad36c4f 100644
--- a/l3experimental/l3draw/l3draw.dtx
+++ b/l3experimental/l3draw/l3draw.dtx
@@ -1046,7 +1046,8 @@
 %   \end{syntax}
 %   Applies the transformation \meta{vector} to points.
 %   The basic applies the vector in addition to those active; the
-%   |absolute| version overwrites any active vector.
+%   |absolute| version overwrites any active vector. Any active
+%   transformation matrix is applied to the shifts each time they are adjusted.
 %   This assignment is local.
 % \end{function}
 %
diff --git a/l3experimental/l3draw/testfiles/m3draw002.lvt b/l3experimental/l3draw/testfiles/m3draw002.lvt
index 7074509a0..bc70649c8 100644
--- a/l3experimental/l3draw/testfiles/m3draw002.lvt
+++ b/l3experimental/l3draw/testfiles/m3draw002.lvt
@@ -69,6 +69,17 @@
     \tl_show:e { \draw_point_transform:n { 1 , 1 } }
     \draw_transform_yshift:n { 12pt }
     \tl_show:e { \draw_point_transform:n { 1 , 1 } }
+    \OMIT
+    \draw_transform_shift_reset:
+    \draw_transform_scale:n { 2 }
+    \TIMO
+    \draw_transform_shift:n { 10pt, 10pt }
+    \tl_show:e { \draw_point_transform:n { 0 , 0 } }
+    \OMIT
+    \draw_transform_scale:n { 2 }
+    \TIMO
+    \draw_transform_shift:n { 10pt, 10pt }
+    \tl_show:e { \draw_point_transform:n { 0 , 0 } }
   }
 
 \TEST { \draw_transform_shift_absolute:n }
diff --git a/l3experimental/l3draw/testfiles/m3draw002.tlg b/l3experimental/l3draw/testfiles/m3draw002.tlg
index 2b7a287e6..f0c35e237 100644
--- a/l3experimental/l3draw/testfiles/m3draw002.tlg
+++ b/l3experimental/l3draw/testfiles/m3draw002.tlg
@@ -77,6 +77,12 @@ l. ...  }
 > 6pt,23pt.
 <recently read> }
 l. ...  }
+> 20pt,20pt.
+<recently read> }
+l. ...  }
+> 60pt,60pt.
+<recently read> }
+l. ...  }
 ============================================================
 ============================================================
 TEST 7: \draw_transform_shift_absolute:n 





More information about the latex3-commits mailing list.