summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/wargame/source/util/tikz.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/wargame/source/util/tikz.dtx')
-rw-r--r--macros/latex/contrib/wargame/source/util/tikz.dtx196
1 files changed, 196 insertions, 0 deletions
diff --git a/macros/latex/contrib/wargame/source/util/tikz.dtx b/macros/latex/contrib/wargame/source/util/tikz.dtx
new file mode 100644
index 0000000000..fa31a7b58c
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/util/tikz.dtx
@@ -0,0 +1,196 @@
+% \iffalse
+% --------------------------------------------------------------------
+% <*utils>
+% \fi
+%
+% \subsubsection{Other Tikz utilities}
+%
+% \begin{TikzKey}{tikz/reverseclip}
+%
+% A reverse clipping path. This is used to cut out stuff outside of
+% path defined.
+%
+% \begin{macrocode}
+\tikzstyle{reverseclip}=[insert path={(current bounding box.north east) --
+ (current bounding box.south east) --
+ (current bounding box.south west) --
+ (current bounding box.north west) --
+ (current bounding box.north east)}]
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{tikz/clip even odd rule}
+% A reverse clipping path
+%
+% \begin{macrocode}
+\tikzset{
+ clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \begin{TikzKey}{tikz/invclip}
+%
+% Inverse clipping. This should be an option \emph{after} the path to
+% do the inverse clipping by. This works by adding a \emph{large}
+% (page) path to the current path, and then use that as clipping.
+%
+% \begin{macrocode}
+\tikzset{
+ invclip/.style={
+ clip,insert path=
+ [clip even odd rule]{
+ [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
+ }
+ },
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{save clip}
+%
+% An option for use with sub-elements of NATO App 6(c) or chit
+% nodes. This will save the current path as a clipping path for the
+% next paths to be drawn in the sub-element
+%
+% \begin{macrocode}
+\newif\ifwg@s@ve\wg@s@vefalse
+\tikzset{
+ save clip/.is choice,
+ save clip/true/.code={\global\wg@s@vetrue},
+ save clip/false/.code={\global\wg@s@vefalse},
+ save clip/.default={true},
+ save clip/.initial={false},
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{scale line widths}
+%
+% Scales any line width specified in the node options.
+%
+% Use like
+%
+% \begin{verbatim}
+% \tikzset{
+% some/.style={
+% scale line widths,
+% line width=1pt}
+% }
+% \end{verbatim}
+%
+% Note that the order is important.
+%
+% \begin{macrocode}
+% Save pgf rounded corners macro
+% \let\wg@pgfsetcornersarced\pgfsetcornersarced
+\def\wg@setcornersarched#1{%
+ \ifx|#1|\else%
+ \edef\pgf@corner@arc{{#1}{#1}}%
+ \pgf@arccornerstrue%
+ \ifdim#1=0pt%
+ \pgf@arccornersfalse%
+ \fi\fi}
+\newdimen\wg@lw@scaled\wg@lw@scaled=1pt
+\def\wg@getscale{%
+ \pgfgettransformentries{%
+ \wg@jaca}{%
+ \wg@jacb}{%
+ \wg@jacc}{%
+ \wg@jacd}{%
+ \wg@tmp}{%
+ \wg@tmp}%
+ \pgfmathsetmacro{\wg@jac}{sqrt(abs(\wg@jaca*\wg@jacd-\wg@jacb*\wg@jacc))}%
+ \wg@dbg{4}{Scale is \wg@jac}
+ \xdef\wg@scale{\wg@jac}}
+\def\wg@scaled#1{%
+ \wg@getscale%
+ \wg@dbg{4}{Scaling #1 by \wg@scale}
+ \pgfmathsetmacro{\wg@tmp}{\wg@scale*#1}%
+ \xdef\wg@tmp{\wg@tmp}%
+ \xdef\wg@lw@scale{\wg@tmp}%
+ \wg@dbg{4}{Scaled #1 -> \wg@tmp}}
+%% \message{^^JRounded corners: \meaning\pgfsetcornersarced}
+\tikzset{
+ %% Get current scale and store in \wg@scale
+ get scale/.code={\wg@getscale},
+ scale line widths/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \wg@scaled{##1}
+ \wg@lw@scaled=\wg@tmp pt
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw@scaled}}%
+ \wg@dbg{4}{Added scaled option \wg@tmp}
+ \pgfmathsetlength\pgflinewidth{\wg@tmp pt}
+ \wg@dbg{4}{Did set line width \wg@tmp pt}
+ }
+ },
+ scale rounded corners/.style={%
+ /utils/exec=\def\pgfsetcornersarced##1{%
+ \pgf@process{##1}%
+ \pgf@xa=\pgf@x%
+ \wg@scaled{\the\pgf@xa}%
+ % \tikz@addoption{\wg@setcornersarched{\wg@tmp pt}}%
+ \wg@dbg{4}{Scaled rounded corners: \the\pgf@xa -> \wg@tmp}%
+ \wg@setcornersarched{\wg@tmp pt}%
+ }
+ },
+ relative line width/.style={%
+ /utils/exec=\def\tikz@semiaddlinewidth##1{%
+ \wg@dbg{4}{Relative line width #1 times ##1}%
+ \pgfmathsetmacro{\wg@lv}{#1*##1}%
+ \tikz@addoption{\pgfsetlinewidth{\wg@lw pt}}%
+ \pgfmathsetlength\pgflinewidth{\wg@lw pt}}}
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{sub pic actions}
+%
+% This is key that propagates actions to sub pictures of pictures.
+% The normal \texttt{pic actions} cannot be used as it causes an
+% infinite loop.
+%
+% \begin{macrocode}
+\tikzset{
+ sub pic actions/.code={%
+ \tikz@picmode%
+ \edef\opts{%
+ \iftikz@mode@draw draw,\else draw=none,\fi
+ \iftikz@mode@fill fill\else fill=none\fi}
+ \wg@dbg{5}{^^JSub Mode: \meaning\tikz@picmode \meaning\opts}
+ \pgfset{/tikz/.cd}
+ \pgfkeysalsofrom{\opts}
+ }}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% \begin{TikzKey}{wg/debug show}
+%
+% Show debugging information
+%
+% \begin{macrocode}
+\tikzset{
+ wg/debug show/.code={%
+ \extractcolorspec{pgfstrokecolor}{\wg@tmp@fg}
+ \def\wg@tmp@bg{none}
+ \@ifundefinedcolor{pgffillcolor}{}{
+ \extractcolorspec{pgffillcolor}{\wg@tmp@bg}}
+ \begingroup
+ \tikz@mode
+ \wargamedbglvl=#1
+ \wg@dbg{3}{Drawing with w/stroke `\wg@tmp@fg'
+ (\tikz@strokecolor,\iftikz@mode@draw\else not\space\fi drawing)
+ and fill `\wg@tmp@bg' (\tikz@fillcolor,\iftikz@mode@fill\else
+ not\space\fi filling)}
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \end{TikzKey}
+%
+%
+% \iffalse
+% --------------------------------------------------------------------
+% </utils>
+% \fi