[latex3-commits] [git/LaTeX3-latex3-latex3] master: Transformation shortcuts (6717ab9)

Joseph Wright joseph.wright at morningstar2.co.uk
Thu Feb 22 09:52:37 CET 2018


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/6717ab9615367e76170d0b87484a33e5535327a8

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

commit 6717ab9615367e76170d0b87484a33e5535327a8
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Thu Feb 22 08:52:37 2018 +0000

    Transformation shortcuts


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

6717ab9615367e76170d0b87484a33e5535327a8
 l3experimental/l3draw/l3draw-transforms.dtx   |   55 ++++++++++++++++++
 l3experimental/l3draw/l3draw.dtx              |   74 ++++++++++++++++++++-----
 l3experimental/l3draw/testfiles/m3draw002.lvt |   52 +++++++++++++++--
 l3experimental/l3draw/testfiles/m3draw002.tlg |   68 +++++++++++++++++++++--
 4 files changed, 225 insertions(+), 24 deletions(-)

diff --git a/l3experimental/l3draw/l3draw-transforms.dtx b/l3experimental/l3draw/l3draw-transforms.dtx
index 63fbbd9..8940599 100644
--- a/l3experimental/l3draw/l3draw-transforms.dtx
+++ b/l3experimental/l3draw/l3draw-transforms.dtx
@@ -291,6 +291,61 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}
+%   {\draw_transform_scale:n, \draw_transform_xscale:n, \draw_transform_yscale:n}
+% \begin{macro}
+%   {\draw_transform_shift:n, \draw_transform_xshift:n, \draw_transform_yshift:n}
+% \begin{macro}
+%   {\draw_transform_xslant:n, \draw_transform_yslant:n}
+%   Lots of shortcuts.
+%    \begin{macrocode}
+\cs_new_protected:Npn \draw_transform_scale:n #1
+  { \draw_transform_concat:nnnnn { #1 } { 0 } { 0 } { #1 } { 0 , 0 } }
+\cs_new_protected:Npn \draw_transform_xscale:n #1
+  { \draw_transform_concat:nnnnn { #1 } { 0 } { 0 } { 1 } { 0 , 0 } }
+\cs_new_protected:Npn \draw_transform_yscale:n #1
+  { \draw_transform_concat:nnnnn { 1 } { 0 } { 0 } { #1 } { 0 , 0 } }
+\cs_new_protected:Npn \draw_transform_shift:n #1
+  { \draw_transform_concat:nnnnn { 1 } { 0 } { 0 } { 1 } {#1} }
+\cs_new_protected:Npn \draw_transform_xshift:n #1
+  { \draw_transform_concat:nnnnn { 1 } { 0 } { 0 } { 1 } { #1 , 0 } }
+\cs_new_protected:Npn \draw_transform_yshift:n #1
+  { \draw_transform_concat:nnnnn { 1 } { 0 } { 0 } { 1 } { 0 , #1 } }
+\cs_new_protected:Npn \draw_transform_xslant:n #1
+  { \draw_transform_concat:nnnnn { 1 } { 0 } { #1 } { 1 } { 0 , 0 } }
+\cs_new_protected:Npn \draw_transform_yslant:n #1
+  { \draw_transform_concat:nnnnn { 1 } { #1 } { 0 } { 1 } { 0 , 0 } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\draw_transform_rotate:n}
+% \begin{macro}
+%   {
+%     \@@_transform_rotate:n, \@@_transform_rotate:f,
+%     \@@_transform_rotate:nn, \@@_transform_rotate:ff
+%   } 
+%   Slightly more involved: evaluate the angle only once, and the sine and
+%   cosine only once.
+%    \begin{macrocode}
+\cs_new_protected:Npn \draw_transform_rotate:n #1
+  { \@@_transform_rotate:f { \fp_eval:n {#1} } }
+\cs_new_protected:Npn \@@_transform_rotate:n #1
+  {
+    \@@_transform_rotate:ff 
+      { \fp_eval:n { cosd(#1) } }
+      { \fp_eval:n { sind(#1) } }
+  }
+\cs_generate_variant:Nn \@@_transform_rotate:n { f }
+\cs_new_protected:Npn \@@_transform_rotate:nn #1#2
+  { \draw_transform_concat:nnnnn {#1} {#2} { -#2 } { #1 } { 0 , 0 } }
+\cs_generate_variant:Nn \@@_transform_rotate:nn { ff }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</initex|package>
 %    \end{macrocode}
diff --git a/l3experimental/l3draw/l3draw.dtx b/l3experimental/l3draw/l3draw.dtx
index fbfcdd7..5bdfabd 100644
--- a/l3experimental/l3draw/l3draw.dtx
+++ b/l3experimental/l3draw/l3draw.dtx
@@ -539,11 +539,14 @@
 % may be adjusted using \cs{driver_draw_transformcm:nnnnnn}: note that this
 % is transparent to the drawing code so is not tracked.
 %
-% \begin{function}{\draw_transform_reset:}
+% \begin{function}{\draw_transform:nnnnn}
 %   \begin{syntax}
-%     \cs{draw_transform_reset:}
+%     \cs{draw_transform:nnnnn}
+%       \Arg{a} \Arg{b} \Arg{c} \Arg{d} \Arg{vector}
 %   \end{syntax}
-%   Resets the matrix to the identity.
+%   Applies the transformation matrix specified, over-writing any existing
+%   matrix. The transformation is made up of a matrix \meta{a}, \meta{b},
+%   \meta{c} and \meta{d}, and a shift by the \meta{vector}.
 % \end{function}
 %
 % \begin{function}{\draw_transform_concat:nnnnn}
@@ -556,16 +559,6 @@
 %   \meta{d}, and a shift by the \meta{vector}.
 % \end{function}
 %
-% \begin{function}{\draw_transform:nnnnn}
-%   \begin{syntax}
-%     \cs{draw_transform:nnnnn}
-%       \Arg{a} \Arg{b} \Arg{c} \Arg{d} \Arg{vector}
-%   \end{syntax}
-%   Applies the transformation matrix specified, over-writing any existing
-%   matrix. The transformation is made up of a matrix \meta{a}, \meta{b},
-%   \meta{c} and \meta{d}, and a shift by the \meta{vector}.
-% \end{function}
-%
 % \begin{function}{\draw_transform_triangle:nnn}
 %   \begin{syntax}
 %     \cs{draw_transform_triangle:nnn}
@@ -576,6 +569,54 @@
 %   \meta{point2}, respectively.
 % \end{function}
 %
+% \begin{function}{\draw_transform_rotate:n}
+%   \begin{syntax}
+%     \cs{draw_transform_rotate:n} \Arg{angle}
+%   \end{syntax}
+%   Applies a roation by the \meta{angle}, measured anti-clockwise in degrees.
+%   This rotation is \emph{additional} to any prevailing transformation.
+% \end{function}
+%
+% \begin{function}
+%   {
+%     \draw_transform_scale:n,
+%     \draw_transform_xscale:n,
+%     \draw_transform_xscale:n
+%   }
+%   \begin{syntax}
+%     \cs{draw_transform_scale:n} \Arg{scale}
+%   \end{syntax}
+%   Applies the \meta{scale} in either $x$ or $y$ (or both).
+%   This scale is \emph{added} to any prevailing transformation.
+% \end{function}
+%
+% \begin{function}
+%   {
+%     \draw_transform_shift:n,
+%     \draw_transform_xshift:n,
+%     \draw_transform_yshift:n
+%   }
+%   \begin{syntax}
+%     \cs{draw_transform_shift:n} \Arg{vector}
+%     \cs{draw_transform_xshift:n} \Arg{xshift}
+%   \end{syntax}
+%   Applies a shift of the \meta{vector} in $(x, y)$ or an \meta{xshift} or
+%   \meta{yshift}, as appropriate. This shift is \emph{added} to any prevailing
+%   transformation.
+% \end{function}
+%
+% \begin{function}
+%   {
+%     \draw_transform_xslant:n,
+%     \draw_transform_yslant:n
+%   }
+%   \begin{syntax}
+%     \cs{draw_transform_xslant:n} \Arg{slant}
+%   \end{syntax}
+%   Applies the \meta{slant} (a factor) in either $x$ or $y$.
+%   This slant is \emph{added} to any prevailing transformation.
+% \end{function}
+%
 % \begin{function}{\draw_transform_invert:}
 %   \begin{syntax}
 %     \cs{draw_transform_invert:}
@@ -584,6 +625,13 @@
 %   shift vector.
 % \end{function}
 %
+% \begin{function}{\draw_transform_reset:}
+%   \begin{syntax}
+%     \cs{draw_transform_reset:}
+%   \end{syntax}
+%   Resets the matrix to the identity.
+% \end{function}
+%
 % \end{documentation}
 %
 % \begin{implementation}
diff --git a/l3experimental/l3draw/testfiles/m3draw002.lvt b/l3experimental/l3draw/testfiles/m3draw002.lvt
index 7918c85..b09de97 100644
--- a/l3experimental/l3draw/testfiles/m3draw002.lvt
+++ b/l3experimental/l3draw/testfiles/m3draw002.lvt
@@ -35,6 +35,52 @@
     \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
   }
 
+\TEST { \draw_transform_triangle: }
+  {
+    \draw_transform_triangle:nnn { 0cm , 0cm } { 1cm , 1cm } { -1cm , 1cm }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 0.5 , 0.5 } }
+  }
+
+\TEST { \draw_transform_rotate:n }
+  {
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_rotate:n { 30 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { ( 1 , 1 ) } }
+    \draw_transform_rotate:n { -45 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+  }
+
+\TEST { \draw_transform_scale:n }
+  {
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_scale:n { 2 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { ( 1 , 1 ) } }
+    \draw_transform_xscale:n { 2 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_yscale:n { 1/3 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+  }
+
+\TEST { \draw_transform_shift:n }
+  {
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_shift:n { 10pt, 10pt }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { ( 1 , 1 ) } }
+    \draw_transform_xshift:n { -5pt }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_yshift:n { 12pt }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+  }
+
+\TEST { \draw_transform_slant:n }
+  {
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 1 , 1 } }
+    \draw_transform_xslant:n { 2 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { ( 1 , 1 ) } }
+    \draw_transform_yslant:n { 3 }
+    \exp_args:Nx \tl_show:n { \draw_point_transform:n { ( 1 , 1 ) } }
+  }
+
 \TEST { \draw_transform_invert: }
   {
     \draw_transform:nnnnn { 1 } { 0 } { 1 } { 1 } { 10pt , 0pt }
@@ -44,12 +90,6 @@
     \exp_args:Nx \tl_show:n { \draw_point_transform:n { \l_tmpa_tl } }
   }
 
-\TEST { \draw_transform_triangle: }
-  {
-    \draw_transform_triangle:nnn { 0cm , 0cm } { 1cm , 1cm } { -1cm , 1cm }
-    \exp_args:Nx \tl_show:n { \draw_point_transform:n { 0.5 , 0.5 } }
-  }
-
 \TEST { \draw_transform_reset: }
   {
     \draw_transform:nnnnn { 1 } { 0 } { 1 } { 1 } { 10pt , 0pt }
diff --git a/l3experimental/l3draw/testfiles/m3draw002.tlg b/l3experimental/l3draw/testfiles/m3draw002.tlg
index 8acf7ef..560a4e5 100644
--- a/l3experimental/l3draw/testfiles/m3draw002.tlg
+++ b/l3experimental/l3draw/testfiles/m3draw002.tlg
@@ -27,24 +27,82 @@ l. ...  }
 l. ...  }
 ============================================================
 ============================================================
-TEST 3: \draw_transform_invert: 
+TEST 3: \draw_transform_triangle: 
 ============================================================
-> \l_tmpa_tl=12pt,1pt.
+> 0pt,28.4527559055118pt.
 <recently read> }
 l. ...  }
+============================================================
+============================================================
+TEST 4: \draw_transform_rotate:n 
+============================================================
 > 1pt,1pt.
 <recently read> }
 l. ...  }
+> 0.3660254037844386pt,1.366025403784439pt.
+<recently read> }
+l. ...  }
+> 1.224744871391589pt,0.7071067811865476pt.
+<recently read> }
+l. ...  }
 ============================================================
 ============================================================
-TEST 4: \draw_transform_triangle: 
+TEST 5: \draw_transform_scale:n 
 ============================================================
-> 0pt,28.4527559055118pt.
+> 1pt,1pt.
+<recently read> }
+l. ...  }
+> 2pt,2pt.
+<recently read> }
+l. ...  }
+> 4pt,2pt.
+<recently read> }
+l. ...  }
+> 4pt,0.6666666666666666pt.
+<recently read> }
+l. ...  }
+============================================================
+============================================================
+TEST 6: \draw_transform_shift:n 
+============================================================
+> 1pt,1pt.
+<recently read> }
+l. ...  }
+> 11pt,11pt.
+<recently read> }
+l. ...  }
+> 6pt,11pt.
+<recently read> }
+l. ...  }
+> 6pt,23pt.
+<recently read> }
+l. ...  }
+============================================================
+============================================================
+TEST 7: \draw_transform_slant:n 
+============================================================
+> 1pt,1pt.
+<recently read> }
+l. ...  }
+> 3pt,1pt.
+<recently read> }
+l. ...  }
+> 9pt,4pt.
+<recently read> }
+l. ...  }
+============================================================
+============================================================
+TEST 8: \draw_transform_invert: 
+============================================================
+> \l_tmpa_tl=12pt,1pt.
+<recently read> }
+l. ...  }
+> 1pt,1pt.
 <recently read> }
 l. ...  }
 ============================================================
 ============================================================
-TEST 5: \draw_transform_reset: 
+TEST 9: \draw_transform_reset: 
 ============================================================
 > 1pt,1pt.
 <recently read> }





More information about the latex3-commits mailing list