[latex3-commits] [git/LaTeX3-latex3-latex3] master: l3draw: Inverse transforms (c1fc99f)
Joseph Wright
joseph.wright at morningstar2.co.uk
Sat Feb 10 23:16:12 CET 2018
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/c1fc99fa2e7cbd18c570d8f932fd7aa22f464acb
>---------------------------------------------------------------
commit c1fc99fa2e7cbd18c570d8f932fd7aa22f464acb
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Sat Feb 10 20:59:25 2018 +0000
l3draw: Inverse transforms
Along with some clearer naming.
>---------------------------------------------------------------
c1fc99fa2e7cbd18c570d8f932fd7aa22f464acb
l3trial/l3draw/l3draw-points.dtx | 14 +++---
l3trial/l3draw/l3draw-transforms.dtx | 85 ++++++++++++++++++++++++++------
l3trial/l3draw/l3draw.dtx | 18 ++++---
l3trial/l3draw/testfiles/m3draw001.lvt | 14 +++---
l3trial/l3draw/testfiles/m3draw002.lvt | 21 +++++---
l3trial/l3draw/testfiles/m3draw002.tlg | 14 +++++-
6 files changed, 122 insertions(+), 44 deletions(-)
diff --git a/l3trial/l3draw/l3draw-points.dtx b/l3trial/l3draw/l3draw-points.dtx
index 3344af5..52580bd 100644
--- a/l3trial/l3draw/l3draw-points.dtx
+++ b/l3trial/l3draw/l3draw-points.dtx
@@ -839,16 +839,16 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\draw_set_xvec:n, \draw_set_yvec:n, \draw_set_zvec:n}
+% \begin{macro}{\draw_xvec_set:n, \draw_yvec_set:n, \draw_zvec_set:n}
% \begin{macro}{\@@_set_vec:nn}
% \begin{macro}{\@@_set_vec:nnn}
% Calculate the underlying position and store it.
% \begin{macrocode}
-\cs_new_protected:Npn \draw_set_xvec:n #1
+\cs_new_protected:Npn \draw_xvec_set:n #1
{ \@@_set_vec:nn { x } {#1} }
-\cs_new_protected:Npn \draw_set_yvec:n #1
+\cs_new_protected:Npn \draw_yvec_set:n #1
{ \@@_set_vec:nn { y } {#1} }
-\cs_new_protected:Npn \draw_set_zvec:n #1
+\cs_new_protected:Npn \draw_zvec_set:n #1
{ \@@_set_vec:nn { z } {#1} }
\cs_new_protected:Npn \@@_set_vec:nn #1#2
{
@@ -866,9 +866,9 @@
%
% Initialise the vectors.
% \begin{macrocode}
-\draw_set_xvec:n { { 1cm } { 0cm } }
-\draw_set_yvec:n { { 0cm } { 1cm } }
-\draw_set_zvec:n { { -0.385cm } { -0.385cm } }
+\draw_xvec_set:n { { 1cm } { 0cm } }
+\draw_yvec_set:n { { 0cm } { 1cm } }
+\draw_zvec_set:n { { -0.385cm } { -0.385cm } }
% \end{macrocode}
%
% \begin{macro}[rEXP]{\draw_point_vec_coord:nn}
diff --git a/l3trial/l3draw/l3draw-transforms.dtx b/l3trial/l3draw/l3draw-transforms.dtx
index 050f88e..3798229 100644
--- a/l3trial/l3draw/l3draw-transforms.dtx
+++ b/l3trial/l3draw/l3draw-transforms.dtx
@@ -83,18 +83,18 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\draw_set_transform:nnnnn}
-% \begin{macro}{\@@_set_transform:nnnnnn}
+% \begin{macro}{\draw_transform_set:nnnnn}
+% \begin{macro}{\@@_transform_set: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
+\cs_new_protected:Npn \draw_transform_set:nnnnn #1#2#3#4#5
{
\use:x
- { \@@_set_transform:nnnnnn {#1} {#2} {#3} {#4} #5 }
+ { \@@_transform_set:nnnnnn {#1} {#2} {#3} {#4} #5 }
}
-\cs_new_protected:Npn \@@_set_transform:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \@@_transform_set:nnnnnn #1#2#3#4#5#6
{
\fp_set:Nn \l_@@_transformcm_aa_fp {#1}
\fp_set:Nn \l_@@_transformcm_ab_fp {#2}
@@ -112,31 +112,31 @@
{ \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 } }
+\draw_transform_set: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}
+% \begin{macro}{\draw_transform_add:nnnnn}
+% \begin{macro}{\@@_transform_add:nnnnnn}
+% \begin{macro}{\@@_transform_add_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
+% \cs{@@_transform_set: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
+\cs_new_protected:Npn \draw_transform_add:nnnnn #1#2#3#4#5
{
\use:x
- { \@@_add_transform:nnnnnn {#1} {#2} {#3} {#4} #5 }
+ { \@@_transform_add:nnnnnn {#1} {#2} {#3} {#4} #5 }
}
-\cs_new_protected:Npn \@@_add_transform:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \@@_transform_add:nnnnnn #1#2#3#4#5#6
{
\use:x
{
- \@@_add_transform_aux:nnnnnn
+ \@@_transform_add_aux:nnnnnn
{ \fp_eval:n {#1} }
{ \fp_eval:n {#2} }
{ \fp_eval:n {#3} }
@@ -145,11 +145,11 @@
{ \fp_to_dim:n {#6} }
}
}
-\cs_new_protected:Npn \@@_add_transform_aux:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \@@_transform_add_aux:nnnnnn #1#2#3#4#5#6
{
\use:x
{
- \@@_set_transform:nnnnnn
+ \@@_transform_set: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 }
@@ -177,6 +177,59 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\draw_transform_invert:}
+% \begin{macro}{\@@_transform_invert:n, \@@_transform_invert:f}
+% Standard mathematics: calculate the inverse matrix and use that, then
+% undo the shifts.
+% \begin{macrocode}
+\cs_new_protected:Npn \draw_transform_invert:
+ {
+ \bool_if:NT \l_@@_transformcm_active_bool
+ {
+ \@@_tranform_invert:f
+ {
+ \fp_eval:n
+ {
+ 1 /
+ (
+ \l_@@_transformcm_aa_fp * \l_@@_transformcm_bb_fp
+ - \l_@@_transformcm_ab_fp * \l_@@_transformcm_ba_fp
+ )
+ }
+ }
+ }
+ \dim_set:Nn \l_@@_transformcm_xshift_dim
+ {
+ \fp_to_dim:n
+ {
+ -\l_@@_transformcm_xshift_dim * \l_@@_transformcm_aa_fp
+ -\l_@@_transformcm_yshift_dim * \l_@@_transformcm_ba_fp
+ }
+ }
+ \dim_set:Nn \l_@@_transformcm_yshift_dim
+ {
+ \fp_to_dim:n
+ {
+ -\l_@@_transformcm_xshift_dim * \l_@@_transformcm_ab_fp
+ -\l_@@_transformcm_yshift_dim * \l_@@_transformcm_bb_fp
+ }
+ }
+ }
+\cs_new_protected:Npn \@@_tranform_invert:n #1
+ {
+ \fp_set:Nn \l_@@_transformcm_aa_fp
+ { \l_@@_transformcm_bb_fp * #1 }
+ \fp_set:Nn \l_@@_transformcm_ab_fp
+ { -\l_@@_transformcm_ab_fp * #1 }
+ \fp_set:Nn \l_@@_transformcm_ba_fp
+ { -\l_@@_transformcm_ba_fp * #1 }
+ \fp_set:Nn \l_@@_transformcm_bb_fp
+ { \l_@@_transformcm_aa_fp * #1 }
+ }
+\cs_generate_variant:Nn \@@_tranform_invert:n { f }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/l3trial/l3draw/l3draw.dtx b/l3trial/l3draw/l3draw.dtx
index e5562f2..8514ec5 100644
--- a/l3trial/l3draw/l3draw.dtx
+++ b/l3trial/l3draw/l3draw.dtx
@@ -98,9 +98,9 @@
% \end{syntax}
% \end{function}
%
-% \begin{function}{\draw_set_xvec:n, \draw_set_yvec:n, \draw_set_zvec:n}
+% \begin{function}{\draw_\1vec_set:n, \draw_\1vec_set:n, \draw_\1vec_set:n}
% \begin{syntax}
-% \cs{draw_set_xvec:n} \marg{point expr}
+% \cs{draw_\1vec_set:n} \marg{point expr}
% \end{syntax}
% \end{function}
%
@@ -158,20 +158,26 @@
%
% \subsection{Transformations}
%
-% \begin{function}{\draw_add_transformcm:nnnnn}
+% \begin{function}{\draw_transform_add:nnnnn}
% \begin{syntax}
-% \cs{draw_add_transformcm:nnnnn}
+% \cs{draw_transform_add:nnnnn}
% \marg{a} \marg{b} \marg{c} \marg{d} \marg{point expr}
% \end{syntax}
% \end{function}
%
-% \begin{function}{\draw_set_transformcm:nnnnn}
+% \begin{function}{\draw_transform_set:nnnnn}
% \begin{syntax}
-% \cs{draw_set_transformcm:nnnnn}
+% \cs{draw_transform_set:nnnnn}
% \marg{a} \marg{b} \marg{c} \marg{d} \marg{point expr}
% \end{syntax}
% \end{function}
%
+% \begin{function}{\draw_transform_invert:}
+% \begin{syntax}
+% \cs{draw_transform_invert:}
+% \end{syntax}
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
diff --git a/l3trial/l3draw/testfiles/m3draw001.lvt b/l3trial/l3draw/testfiles/m3draw001.lvt
index 6d0c3e2..fd5bd85 100644
--- a/l3trial/l3draw/testfiles/m3draw001.lvt
+++ b/l3trial/l3draw/testfiles/m3draw001.lvt
@@ -143,17 +143,17 @@
\TEST { \draw_set_<axis>vec:n }
{
\exp_args:Nx \tl_show:n { \draw_point_vec_coord:nnn { 1 } { 1 } { 1 } }
- \draw_set_xvec:n { { 1cm } { 1cm } }
+ \draw_xvec_set:n { { 1cm } { 1cm } }
\exp_args:Nx \tl_show:n { \draw_point_vec_coord:nnn { 1 } { 1 } { 1 } }
- \draw_set_yvec:n { { 1cm } { 1cm } }
+ \draw_yvec_set:n { { 1cm } { 1cm } }
\exp_args:Nx \tl_show:n { \draw_point_vec_coord:nnn { 1 } { 1 } { 1 } }
- \draw_set_zvec:n { { 1cm } { 1cm } }
+ \draw_zvec_set:n { { 1cm } { 1cm } }
\exp_args:Nx \tl_show:n { \draw_point_vec_coord:nnn { 1 } { 1 } { 1 } }
}
\OMIT
- \draw_set_xvec:n { { 1cm } { 1cm } }
- \draw_set_yvec:n { { 0cm } { 1cm } }
+ \draw_xvec_set:n { { 1cm } { 1cm } }
+ \draw_yvec_set:n { { 0cm } { 1cm } }
\TIMO
\TESTEXP { \draw_point_vec_coord:nn }
@@ -168,8 +168,8 @@
}
\OMIT
- \draw_set_xvec:n { { 1cm } { 0cm } }
- \draw_set_yvec:n { { 0cm } { 1cm } }
+ \draw_xvec_set:n { { 1cm } { 0cm } }
+ \draw_yvec_set:n { { 0cm } { 1cm } }
\TIMO
\TESTEXP { \draw_point_vec_coord:nnn }
diff --git a/l3trial/l3draw/testfiles/m3draw002.lvt b/l3trial/l3draw/testfiles/m3draw002.lvt
index 818b89b..bdc2cc9 100644
--- a/l3trial/l3draw/testfiles/m3draw002.lvt
+++ b/l3trial/l3draw/testfiles/m3draw002.lvt
@@ -17,22 +17,31 @@
\START
-\TEST { \draw_set_transform:nnnnn }
+\TEST { \draw_transform_set:nnnnn }
{
\exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
- \draw_set_transform:nnnnn { 1 } { 1 } { 1 } { 1 } { { 0pt } { 0pt } }
+ \draw_transform_set: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 } }
+ \draw_transform_set:nnnnn { 1 } { 0 } { 0 } { 1 } { { 10pt } { -10pt } }
\exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
}
-\TEST { \draw_add_transform:nnnnn }
+\TEST { \draw_transform_add:nnnnn }
{
\exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
- \draw_add_transform:nnnnn { 1 } { 1 } { 1 } { 1 } { { 0pt } { 0pt } }
+ \draw_transform_add: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 } }
+ \draw_transform_add:nnnnn { 1 } { 0 } { 0 } { 1 } { { 10pt } { -10pt } }
\exp_args:Nx \tl_show:n { \draw_point_transform:n { { 1 } { 1 } } }
}
+\TEST { \draw_transform_invert: }
+ {
+ \draw_transform_set:nnnnn { 1 } { 0 } { 1 } { 1 } { { 10pt } { 0pt } }
+ \tl_set:Nx \l_tmpa_tl { \draw_point_transform:n { { 1 } { 1 } } }
+ \tl_show:N \l_tmpa_tl
+ \draw_transform_invert:
+ \exp_args:Nx \tl_show:n { \draw_point_transform:n { \l_tmpa_tl } }
+ }
+
\END
diff --git a/l3trial/l3draw/testfiles/m3draw002.tlg b/l3trial/l3draw/testfiles/m3draw002.tlg
index f7cabc3..7088c36 100644
--- a/l3trial/l3draw/testfiles/m3draw002.tlg
+++ b/l3trial/l3draw/testfiles/m3draw002.tlg
@@ -1,7 +1,7 @@
This is a generated file for the LaTeX (2e + expl3) validation system.
Don't change this file in any respect.
============================================================
-TEST 1: \draw_set_transform:nnnnn
+TEST 1: \draw_transform_set:nnnnn
============================================================
> {1pt}{1pt}.
<recently read> }
@@ -14,7 +14,7 @@ l. ... }
l. ... }
============================================================
============================================================
-TEST 2: \draw_add_transform:nnnnn
+TEST 2: \draw_transform_add:nnnnn
============================================================
> {1pt}{1pt}.
<recently read> }
@@ -26,3 +26,13 @@ l. ... }
<recently read> }
l. ... }
============================================================
+============================================================
+TEST 3: \draw_transform_invert:
+============================================================
+> \l_tmpa_tl={12pt}{1pt}.
+<recently read> }
+l. ... }
+> {1pt}{1pt}.
+<recently read> }
+l. ... }
+============================================================
More information about the latex3-commits
mailing list