[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