% \iffalse % ==================================================================== % \fi % % \subsection{The \texttt{wargame.natoapp6c} \TikZ{} library} % % In this section we define the code for the Tikz library. The % library defines a number of \spec{pic} keys we can use to draw % various parts of a marker. The markers conform to NATO App~6(c) % specification. The implementation here is heavily inspired by the % package \textsf{milsymb} \cite{milsymb} available at CTAN. % % \iffalse %<*natoapp6c> % \fi % % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Debugging} % \begin{Macro}{\natoappdbglvl,\n@to@pp@dbg} % % Set the debug level, and make debug message. % % \begin{macrocode} \usetikzlibrary{wargame.util} \usetikzlibrary{calc} \usetikzlibrary{arrows.meta} \usetikzlibrary{shapes.symbols} \usetikzlibrary{positioning,intersections} \newcount\natoappdbglvl\natoappdbglvl=\wargamedbglvl \def\n@to@pp@dbg#1#2{% \ifnum#1>\natoappdbglvl\relax\else\message{^^J#2}\fi} % \end{macrocode} % \end{Macro} % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Colours} % % \begin{Macro}{\c@friendly, % \c@hostile, % \c@neutral, % \c@unknown} % % Define standard colours for marker affiliations. % % \begin{tabular}{|l|c|} % \hline % \rowcolor{headbg} % {\color{headfg}\textbf{Name}} % & {}\\ % \hline % \spec{friendly} & \tikz{\draw[fill=friendly] (0,0) rectangle(1,.2);}\\ % \spec{hostile} & \tikz{\draw[fill=hostile ] (0,0) rectangle(1,.2);}\\ % \spec{neutral} & \tikz{\draw[fill=neutral ] (0,0) rectangle(1,.2);}\\ % \spec{unknown} & \tikz{\draw[fill=unknown ] (0,0) rectangle(1,.2);}\\ % \hline % \end{tabular} % % \begin{macrocode} \definecolor{friendly}{RGB}{128, 224, 255} \definecolor{hostile}{RGB}{255, 128, 128} \definecolor{neutral}{RGB}{170, 255, 170} \definecolor{unknown}{RGB}{255, 255, 128} \tikzset{% faction/.code={% \@ifundefined{natoapp@fac}{% }{\tikzset{fill=\natoapp@fac}}}} % \end{macrocode} % \end{Macro} % % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Some dimensions} % % We define a number of dimensions which we will use in the % following. They provide a rough parameterisation of the node % shapes, but shouldn't really be changed. We have them here so that % the code uses as few hard coded numbers as possible. % % The dimensions are % \begin{itemize} % \item Installation `hat' $x$ coordinate % \item Installation `hat' height % \item Activity width of boxes % \item Height of space bar % \item Radius of the symbol % \end{itemize} % % \begin{macrocode} \newdimen\n@to@pp@inst@x\n@to@pp@inst@x=0.2cm \newdimen\n@to@pp@inst@h\n@to@pp@inst@h=0.15cm \newdimen\n@to@pp@act@w\n@to@pp@act@w=0.15cm \newdimen\n@to@pp@space@h\n@to@pp@space@h=0.1cm \newdimen\n@to@pp@r\n@to@pp@r=0.5cm % \end{macrocode} % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Some utilities} % % \begin{Macro}{\n@to@pp@isclip} % This detects if we're in a node that is being used for clipping % % \begin{macrocode} %\def\n@to@pp@cliptoken{clip} %\def\n@to@pp@isclip{FF\fi% % % \message{^^Jclip is \meaning\pgf@up@clip}% % \ifx\pgf@up@clip\n@to@pp@cliptoken} \newif\ifn@to@pp@isclip\n@to@pp@isclipfalse % \end{macrocode} % \end{Macro} % % % \begin{Macro}{\n@to@pp@saved@fill@color,\n@to@pp@saved@stroke@color} % % Macros to hold saved colours. % \begin{macrocode} \let\n@to@pp@saved@stroke@color\relax \let\n@to@pp@saved@fill@color\relax % \end{macrocode} % \end{Macro} % % \begin{Macro}{\n@to@pp@stroke@to@fill,\n@to@pp@restore@fill} % Macro to get stroke and fill colours and set the fill colour to % the stroke colour, and to restore to the old setting. This is % used by the frame shapes below to make sure that filled elements % of the frame uses the same colour as the for strokes. % % \begin{macrocode} \newcommand\n@to@pp@stroke@to@fill{% % \expandafter\let\expandafter\n@to@pp@saved@stroke@color% \csname\string\color@pgfstrokecolor\endcsname% % \expandafter\let\expandafter\n@to@pp@saved@fill@color% \csname\string\color@pgffillcolor\endcsname% % \expandafter\pgf@setfillcolor\n@to@pp@saved@stroke@color% % % \message{^^J=== Set fill to stroke color % ^^J Old fill: \meaning\n@to@pp@saved@fill@color % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color} } % \end{macrocode} % % % % \begin{macrocode} \newcommand\n@to@pp@restore@fill{% % \message{^^J=== Restore fill color % ^^J Old fill: \meaning\n@to@pp@saved@fill@color % ^^J Old stroke: \meaning\n@to@pp@saved@stroke@color} % \ifx\n@to@pp@saved@fill@color\relax\else% \expandafter\pgf@setfillcolor\n@to@pp@saved@fill@color% \fi% \global\let\n@to@pp@saved@fill@color\relax \global\let\n@to@pp@saved@stroke@color\relax } % \end{macrocode} % % We also make an environment, just to simplify the use % % \begin{macrocode} \newenvironment{n@to@pp@stroketofill}{% \pgfscope% \n@to@pp@stroke@to@fill% }{% \n@to@pp@restore@fill% \endpgfscope% } % \end{macrocode} % \end{Macro} % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Faction names as macros} % % \begin{macrocode} \def\n@to@pp@friendly{friendly} \def\n@to@pp@hostile{hostile} \def\n@to@pp@neutral{neutral} \def\n@to@pp@unknown{unknown} % \end{macrocode} % % \iffalse % -------------------------------------------------------------------- % \fi % \subsubsection{Node shapes} % % Here we define bases for all commands and affiliations. These are % defined as node shapes. This means we will render the NATO App6(c) % symbols as nodes with embedded nodes of the relevant shape. % % % % \input{natoapp6c/frames/base.dtx} % \input{natoapp6c/frames/friendly.dtx} % \input{natoapp6c/frames/hostile.dtx} % \input{natoapp6c/frames/neutral.dtx} % \input{natoapp6c/frames/unknown.dtx} % % \iffalse % -------------------------------------------------------------------- % \fi % % \input{natoapp6c/echelon.dtx} % \input{natoapp6c/text.dtx} % \input{natoapp6c/shape.dtx} % \input{natoapp6c/util.dtx} % \input{natoapp6c/weaponry.dtx} % \input{natoapp6c/symbols.dtx} % \input{natoapp6c/list.dtx} % \iffalse % % -------------------------------------------------------------------- % \fi