[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.