[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