[latex3-commits] [git/LaTeX3-latex3-latex3] master: l3draw: Transformation of points (36b1f20)
Joseph Wright
joseph.wright at morningstar2.co.uk
Sat Feb 10 21:23:24 CET 2018
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/36b1f201f76d0dd3d58d538dda0fdc1d172486ad
>---------------------------------------------------------------
commit 36b1f201f76d0dd3d58d538dda0fdc1d172486ad
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Sat Feb 10 15:43:10 2018 +0000
l3draw: Transformation of points
This is a somewhat different set up to pgf, largely as we can work
expandably. Over time this may change: need to see how things work out.
>---------------------------------------------------------------
36b1f201f76d0dd3d58d538dda0fdc1d172486ad
l3trial/l3draw/l3draw-points.dtx | 49 ++++++
l3trial/l3draw/l3draw-transforms.dtx | 186 ++++++++++++++++++++
l3trial/l3draw/l3draw.dtx | 22 +++
l3trial/l3draw/l3draw.ins | 11 +-
l3trial/l3draw/testfiles/m3draw000.tlg | 2 +
l3trial/l3draw/testfiles/m3draw002.lvt | 38 ++++
.../l3draw/testfiles/m3draw002.tlg | 31 ++--
7 files changed, 323 insertions(+), 16 deletions(-)
diff --git a/l3trial/l3draw/l3draw-points.dtx b/l3trial/l3draw/l3draw-points.dtx
index 95c0dae..3344af5 100644
--- a/l3trial/l3draw/l3draw-points.dtx
+++ b/l3trial/l3draw/l3draw-points.dtx
@@ -939,6 +939,55 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Transformations}
+%
+% \begin{macro}[rEXP]{\draw_point_transform:n}
+% \begin{macro}[rEXP]{\@@_point_transform:nnnn}
+% \begin{macro}[rEXP]{\@@_point_transform:nn}
+% Applies a transformation matrix to a point: see \texttt{l3draw-transforms}
+% for the business end. As there is only one point expression, we provide
+% a dummy one for the expansion. After that, it's the usual requirement:
+% apply the mathematics (or not!). Where possible, we avoid the relatively
+% expensive multiplication step.
+% \begin{macrocode}
+\cs_new:Npn \draw_point_transform:n #1
+ {
+ \@@_point_expand:nnN {#1} { { } { } }
+ \@@_point_transform:nnnn
+ }
+\cs_new:Npn \@@_point_transform:nnnn #1#2#3#4
+ { \@@_point_transform:nn {#1} {#2} }
+\cs_new:Npn \@@_point_transform:nn #1#2
+ {
+ \bool_if:NTF \l_@@_transformcm_active_bool
+ {
+ {
+ \fp_to_dim:n
+ {
+ \l_@@_transformcm_aa_fp * #1
+ + \l_@@_transformcm_ba_fp * #2
+ + \l_@@_transformcm_xshift_dim
+ }
+ }
+ {
+ \fp_to_dim:n
+ {
+ \l_@@_transformcm_ab_fp * #1
+ + \l_@@_transformcm_bb_fp * #2
+ + \l_@@_transformcm_yshift_dim
+ }
+ }
+ }
+ {
+ { \fp_to_dim:n { #1 + \l_@@_transformcm_xshift_dim } }
+ { \fp_to_dim:n { #2 + \l_@@_transformcm_yshift_dim } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/l3trial/l3draw/l3draw-transforms.dtx b/l3trial/l3draw/l3draw-transforms.dtx
new file mode 100644
index 0000000..050f88e
--- /dev/null
+++ b/l3trial/l3draw/l3draw-transforms.dtx
@@ -0,0 +1,186 @@
+% \iffalse meta-comment
+%
+%% File: l3draw-transforms.dtx Copyright(C) 2018 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3trial bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\RequirePackage{expl3}
+\documentclass[full]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \pkg{l3draw-transforms} package\\ Transformations^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team at latex-project.org}
+% {latex-team at latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released 2018/02/05}
+%
+% \maketitle
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3draw-transforms} implementation}
+%
+% \begin{macrocode}
+%<*initex|package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=draw>
+% \end{macrocode}
+%
+% \begin{variable}{\l_@@_transformcm_active_bool}
+% An internal flag to avoid redundant calculations.
+% \begin{macrocode}
+\bool_new:N \l_@@_transformcm_active_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}
+% {
+% \l_@@_transformcm_aa_fp, \l_@@_transformcm_ab_fp,
+% \l_@@_transformcm_ba_fp, \l_@@_transformcm_aa_fp,
+% \l_@@_transformcm_xshift_dim,
+% \l_@@_transformcm_yshift_dim
+% }
+% The active matrix itself.
+% \begin{macrocode}
+\fp_new:N \l_@@_transformcm_aa_fp
+\fp_new:N \l_@@_transformcm_ab_fp
+\fp_new:N \l_@@_transformcm_ba_fp
+\fp_new:N \l_@@_transformcm_bb_fp
+\dim_new:N \l_@@_transformcm_xshift_dim
+\dim_new:N \l_@@_transformcm_yshift_dim
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\draw_set_transform:nnnnn}
+% \begin{macro}{\@@_set_transform:nnnnnn}
+% Setting the transform matrix is straight-forward, with just a bit
+% of expansion to sort out. With the mechanism active, the identity
+% matrix is set.
+% \begin{macrocode}
+\cs_new_protected:Npn \draw_set_transform:nnnnn #1#2#3#4#5
+ {
+ \use:x
+ { \@@_set_transform:nnnnnn {#1} {#2} {#3} {#4} #5 }
+ }
+\cs_new_protected:Npn \@@_set_transform:nnnnnn #1#2#3#4#5#6
+ {
+ \fp_set:Nn \l_@@_transformcm_aa_fp {#1}
+ \fp_set:Nn \l_@@_transformcm_ab_fp {#2}
+ \fp_set:Nn \l_@@_transformcm_ba_fp {#3}
+ \fp_set:Nn \l_@@_transformcm_bb_fp {#4}
+ \dim_set:Nn \l_@@_transformcm_xshift_dim {#5}
+ \dim_set:Nn \l_@@_transformcm_yshift_dim {#6}
+ \bool_lazy_all:nTF
+ {
+ { \fp_compare_p:nNn \l_@@_transformcm_aa_fp = \c_one_fp }
+ { \fp_compare_p:nNn \l_@@_transformcm_ab_fp = \c_zero_fp }
+ { \fp_compare_p:nNn \l_@@_transformcm_ba_fp = \c_zero_fp }
+ { \fp_compare_p:nNn \l_@@_transformcm_bb_fp = \c_one_fp }
+ }
+ { \bool_set_false:N \l_@@_transformcm_active_bool }
+ { \bool_set_true:N \l_@@_transformcm_active_bool }
+ }
+\draw_set_transform:nnnnn { 1 } { 0 } { 0 } { 1 } { { 0pt } { 0pt } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\draw_add_transform:nnnnn}
+% \begin{macro}{\@@_add_transform:nnnnnn}
+% \begin{macro}{\@@_add_transform_aux:nnnnnn}
+% Much the same story for adding to an existing matrix. The part that is more
+% complex is the calculations required: everything gets passed back to
+% \cs{@@_set_transform:nnnnnn}, with pre-expansion just in case there are
+% \emph{e.g}~random values. The final step is \texttt{x}-type expanded as
+% otherwise later values affect earlier ones.
+% \begin{macrocode}
+\cs_new_protected:Npn \draw_add_transform:nnnnn #1#2#3#4#5
+ {
+ \use:x
+ { \@@_add_transform:nnnnnn {#1} {#2} {#3} {#4} #5 }
+ }
+\cs_new_protected:Npn \@@_add_transform:nnnnnn #1#2#3#4#5#6
+ {
+ \use:x
+ {
+ \@@_add_transform_aux:nnnnnn
+ { \fp_eval:n {#1} }
+ { \fp_eval:n {#2} }
+ { \fp_eval:n {#3} }
+ { \fp_eval:n {#4} }
+ { \fp_to_dim:n {#5} }
+ { \fp_to_dim:n {#6} }
+ }
+ }
+\cs_new_protected:Npn \@@_add_transform_aux:nnnnnn #1#2#3#4#5#6
+ {
+ \use:x
+ {
+ \@@_set_transform:nnnnnn
+ { #1 * \l_@@_transformcm_aa_fp + #2 * \l_@@_transformcm_ba_fp }
+ { #1 * \l_@@_transformcm_ab_fp + #2 * \l_@@_transformcm_bb_fp }
+ { #3 * \l_@@_transformcm_aa_fp + #4 * \l_@@_transformcm_ba_fp }
+ { #3 * \l_@@_transformcm_ab_fp + #4 * \l_@@_transformcm_bb_fp }
+ {
+ \exp_not:N \fp_to_dim:n
+ {
+ \l_@@_transformcm_xshift_dim
+ + \l_@@_transformcm_aa_fp * #5
+ + \l_@@_transformcm_ba_fp * #6
+ }
+ }
+ {
+ \exp_not:N \fp_to_dim:n
+ {
+ \l_@@_transformcm_yshift_dim
+ + \l_@@_transformcm_ab_fp * #5
+ + \l_@@_transformcm_bb_fp * #6
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/l3trial/l3draw/l3draw.dtx b/l3trial/l3draw/l3draw.dtx
index 5a0d6d3..e5562f2 100644
--- a/l3trial/l3draw/l3draw.dtx
+++ b/l3trial/l3draw/l3draw.dtx
@@ -150,6 +150,28 @@
% \end{syntax}
% \end{function}
%
+% \begin{function}[rEXP]{\draw_point_transform:n}
+% \begin{syntax}
+% \cs{draw_point_transform:n} \marg{point expr}
+% \end{syntax}
+% \end{function}
+%
+% \subsection{Transformations}
+%
+% \begin{function}{\draw_add_transformcm:nnnnn}
+% \begin{syntax}
+% \cs{draw_add_transformcm:nnnnn}
+% \marg{a} \marg{b} \marg{c} \marg{d} \marg{point expr}
+% \end{syntax}
+% \end{function}
+%
+% \begin{function}{\draw_set_transformcm:nnnnn}
+% \begin{syntax}
+% \cs{draw_set_transformcm:nnnnn}
+% \marg{a} \marg{b} \marg{c} \marg{d} \marg{point expr}
+% \end{syntax}
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
diff --git a/l3trial/l3draw/l3draw.ins b/l3trial/l3draw/l3draw.ins
index 48758c8..76739c8 100644
--- a/l3trial/l3draw/l3draw.ins
+++ b/l3trial/l3draw/l3draw.ins
@@ -53,11 +53,12 @@ and all files in that bundle must be distributed together.
\generate{\file{l3draw.sty}
{
- \from{l3draw.dtx} {package}
- \from{l3draw-paths.dtx} {package}
- \from{l3draw-points.dtx}{package}
- \from{l3draw-scopes.dtx}{package}
- \from{l3draw-state.dtx} {package}
+ \from{l3draw.dtx} {package}
+ \from{l3draw-paths.dtx} {package}
+ \from{l3draw-points.dtx} {package}
+ \from{l3draw-scopes.dtx} {package}
+ \from{l3draw-state.dtx} {package}
+ \from{l3draw-transforms.dtx} {package}
}
}
diff --git a/l3trial/l3draw/testfiles/m3draw000.tlg b/l3trial/l3draw/testfiles/m3draw000.tlg
index 967e789..599167b 100644
--- a/l3trial/l3draw/testfiles/m3draw000.tlg
+++ b/l3trial/l3draw/testfiles/m3draw000.tlg
@@ -19,4 +19,6 @@ Author: Joseph Wright
\g__draw_ymax_dim=\dimen...
\g__draw_ymin_dim=\dimen...
\l__draw_main_box=\box...
+\l__draw_transformcm_xshift_dim=\dimen...
+\l__draw_transformcm_yshift_dim=\dimen...
)
diff --git a/l3trial/l3draw/testfiles/m3draw002.lvt b/l3trial/l3draw/testfiles/m3draw002.lvt
new file mode 100644
index 0000000..818b89b
--- /dev/null
+++ b/l3trial/l3draw/testfiles/m3draw002.lvt
@@ -0,0 +1,38 @@
+%
+% Copyright (C) 2018 The LaTeX3 Project
+%
+
+\documentclass{minimal}
+\input{regression-test}
+
+\RequirePackage[check-declarations]{expl3}
+\ExplSyntaxOn
+\debug_on:n { deprecation }
+\ExplSyntaxOff
+
+\AUTHOR{Joseph Wright}
+\RequirePackage{l3draw}
+
+\ExplSyntaxOn
+
+\START
+
+\TEST { \draw_set_transform:nnnnn }
+ {
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ \draw_set_transform:nnnnn { 1 } { 1 } { 1 } { 1 } { { 0pt } { 0pt } }
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ \draw_set_transform:nnnnn { 1 } { 0 } { 0 } { 1 } { { 10pt } { -10pt } }
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ }
+
+\TEST { \draw_add_transform:nnnnn }
+ {
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ \draw_add_transform:nnnnn { 1 } { 1 } { 1 } { 1 } { { 0pt } { 0pt } }
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ \draw_add_transform:nnnnn { 1 } { 0 } { 0 } { 1 } { { 10pt } { -10pt } }
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
+ }
+
+\END
diff --git a/l3kernel/testfiles/m3clist006.tlg b/l3trial/l3draw/testfiles/m3draw002.tlg
similarity index 59%
copy from l3kernel/testfiles/m3clist006.tlg
copy to l3trial/l3draw/testfiles/m3draw002.tlg
index 3df01c2..f7cabc3 100644
--- a/l3kernel/testfiles/m3clist006.tlg
+++ b/l3trial/l3draw/testfiles/m3draw002.tlg
@@ -1,19 +1,28 @@
This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
-Author: Bruno Le Floch
============================================================
-TEST 1: clist_reverse:n
+TEST 1: \draw_set_transform:nnnnn
============================================================
-|| |{}|,|, |,{}| ,|{},|
-|,,, { },{ }, {},{}, |\c ,\a \b |
+> {1pt}{1pt}.
+<recently read> }
+l. ... }
+> {2pt}{2pt}.
+<recently read> }
+l. ... }
+> {11pt}{-9pt}.
+<recently read> }
+l. ... }
============================================================
============================================================
-TEST 2: clist_reverse:N
+TEST 2: \draw_add_transform:nnnnn
============================================================
-Defining \c_test_clist on line ...
-\c ,{,},{ },\a \b
-TRUE
-FALSE
-TRUE
-TRUE
+> {1pt}{1pt}.
+<recently read> }
+l. ... }
+> {2pt}{2pt}.
+<recently read> }
+l. ... }
+> {2pt}{2pt}.
+<recently read> }
+l. ... }
============================================================
More information about the latex3-commits
mailing list