summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex')
-rw-r--r--graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex96
1 files changed, 96 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex
new file mode 100644
index 0000000000..4d962ccb1c
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/pgflibrarytransformations.mirror.code.tex
@@ -0,0 +1,96 @@
+% Copyright 2022 by Qrrbrbirlbel
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+\def\pgftransformxmirror#1{
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared
+ \pgf@xa\pgfmathresult pt\relax
+ \multiply\pgf@xa2
+ \pgftransformcm{-1}{0}{0}{1}{\pgfqpoint{\pgf@xa}{0pt}}%
+ \else
+ \pgftransformmirror{\pgfqpointxy{\pgfmathresult}{0}}{\pgfpointadd{\pgfqpointxy{\pgfmathresult}{0}}{\pgfqpointxy{0}{1}}}%
+ \fi
+}
+\def\pgftransformymirror#1{
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared
+ \pgf@ya\pgfmathresult pt\relax
+ \multiply\pgf@ya2
+ \pgftransformcm{1}{0}{0}{-1}{\pgfqpoint{0pt}{\pgf@ya}}%
+ \else
+ \edef\pgf@marshal{\noexpand\pgftransformmirror{\noexpand\pgfqpointxy{0}{\pgfmathresult}}%
+ {\noexpand\pgfpointadd{\noexpand\pgfqpointxy{0}{\pgfmathresult}}{\noexpand\pgfqpointxy{1}{0}}}}%
+ \pgf@marshal
+ \fi}
+\def\pgftransformmirror#1#2{%
+ \pgfextract@process\pgf@tempa{#1}%
+ \pgfpointnormalised{\pgfpointdiff{\pgf@tempa}{#2}}%
+ \pgf@xa=\pgf@sys@tonumber\pgf@y\pgf@x
+ \pgf@xb=\pgf@sys@tonumber\pgf@x\pgf@x
+ \pgf@yb=\pgf@sys@tonumber\pgf@y\pgf@y
+ \multiply\pgf@xa2
+ \pgf@xc=-\pgf@yb\advance\pgf@xc\pgf@xb
+ \pgf@yc=-\pgf@xb\advance\pgf@yc\pgf@yb
+ \edef\pgf@temp{{\the\pgf@xc}{+\the\pgf@xa}{+\the\pgf@xa}{+\the\pgf@yc}}%
+ \expandafter\pgf@transformcm\pgf@temp{\pgf@tempa}%
+ \pgftransformshift{\pgfpointscale{-1}{\pgf@tempa}}%
+}
+
+\def\pgfqtransformmirror#1{%
+ \pgfpointnormalised{#1}%
+ \pgf@xa=\pgf@sys@tonumber\pgf@y\pgf@x
+ \pgf@xb=\pgf@sys@tonumber\pgf@x\pgf@x
+ \pgf@yb=\pgf@sys@tonumber\pgf@y\pgf@y
+ \multiply\pgf@xa2
+ \pgf@xc=-\pgf@yb\advance\pgf@xc\pgf@xb
+ \pgf@yc=-\pgf@xb\advance\pgf@yc\pgf@yb
+ \edef\pgf@temp{{\the\pgf@xc}{+\the\pgf@xa}{+\the\pgf@xa}{+\the\pgf@yc}}%
+ \expandafter\pgf@transformcm\pgf@temp{\pgfpointorigin}%
+}
+
+% Using existant transformation (shift, rotate, yscale=-1, rotate back, shift back)
+\def\pgftransformxMirror#1{
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared
+ \pgf@xa\pgfmathresult pt\relax
+ \multiply\pgf@xa2
+ \pgftransformcm{-1}{0}{0}{1}{\pgfqpoint{\pgf@xa}{0pt}}%
+ \else
+ \pgftransformMirror{\pgfqpointxy{\pgfmathresult}{0}}{\pgfpointadd{\pgfqpointxy{\pgfmathresult}{0}}{\pgfqpointxy{0}{1}}}%
+ \fi
+}
+\def\pgftransformyMirror#1{
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared
+ \pgf@ya\pgfmathresult pt\relax
+ \multiply\pgf@ya2
+ \pgftransformcm{1}{0}{0}{-1}{\pgfqpoint{0pt}{\pgf@ya}}%
+ \else
+ \edef\pgf@marshal{\noexpand\pgftransformMirror{\noexpand\pgfqpointxy{0}{\pgfmathresult}}%
+ {\noexpand\pgfpointadd{\noexpand\pgfqpointxy{0}{\pgfmathresult}}{\noexpand\pgfqpointxy{1}{0}}}}%
+ \pgf@marshal
+ \fi}
+
+\def\pgftransformMirror#1#2{%
+ \pgfextract@process\pgf@tempa{#1}%
+ \pgfmathanglebetweenpoints{\pgf@tempa}{#2}%
+ \let\pgf@temp\pgfmathresult
+ \pgftransformshift{\pgf@tempa}%
+ \pgftransformrotate{\pgf@temp}%
+ \pgftransformyscale{-1}%
+ \pgftransformrotate{-\pgf@temp}%
+ \pgftransformshift{\pgfqpointscale{-1}{\pgf@tempa}}%
+}
+
+\def\pgfqtransformMirror#1{%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{#1}%
+ \let\pgf@temp\pgfmathresult
+ \pgftransformrotate{\pgf@temp}%
+ \pgftransformyscale{-1}%
+ \pgftransformrotate{-\pgf@temp}%
+}
+\endinput \ No newline at end of file