summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex')
-rw-r--r--graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex457
1 files changed, 457 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex b/graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex
new file mode 100644
index 0000000000..8ba0aeaa1b
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-trackschematic/tikzlibrarytrackschematic.vehicles.code.tex
@@ -0,0 +1,457 @@
+%% symbol library for TikZ track schematics
+%
+% Copyright (c) 2018 - 2020, Martin Scheidt (ISC license)
+%
+% Permission to use, copy, modify, and/or distribute this file for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+%
+\ProvidesFileRCS{tikzlibrarytrackschematic.vehicles.code.tex}%
+%
+%%%%%%%%%%%%%%%
+% Requirements
+%%%%%%%%%%%%%%%
+\RequirePackage{tikz,etoolbox,lmodern}%
+\usetikzlibrary{calc}%
+%
+% https://tex.stackexchange.com/questions/56353/extract-x-y-coordinate-of-an-arbitrary-point-on-curve-in-tikz
+\providecommand{\gettikzxy}[3]{%
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax%
+ \edef#2{\the\pgf@x}%
+ \edef#3{\the\pgf@y}%
+}%
+%
+\ifdeflength{\objectlength}{}{% Not defined, so define it!
+ \newlength{\objectlength}%
+}%
+\setlength{\objectlength}{4cm}%
+%
+%%%%%%%%%%%%%%%
+% tikz keys for multiple use
+%%%%%%%%%%%%%%%
+\pgfkeys{%
+ /tikz/trackschematic/.is family,%
+ /tikz/trackschematic/.cd,%
+ %% color foreground
+ foreground/.store in=\foreground,%
+ foreground=black,% DEFAULT
+ /tikz/foreground/.forward to=/tikz/trackschematic/foreground,%
+ %% color background
+ background/.store in=\background,%
+ background=white,% DEFAULT
+ /tikz/background/.forward to=/tikz/trackschematic/background,%
+ %% face
+ face/.value required,% forward OR backward
+ face/.store in=\face,%
+ /tikz/face/.forward to=/tikz/trackschematic/face,%
+ /tikz/forward/.code={\pgfkeys{/tikz/trackschematic/face=forward}},%
+ /tikz/backward/.code={\pgfkeys{/tikz/trackschematic/face=backward}},%
+ /tikz/bidirectional/.code={\pgfkeys{/tikz/trackschematic/face=bidirectional}},%
+ %% operation
+ operation mode/.store in=\operationmode,% manual, automatic OR undefined
+ operation mode=none,% DEFAULT
+ /tikz/operation/.forward to=/tikz/trackschematic/operation mode,%
+ %% length
+ length/.store in=\objectlength,% default length 4cm
+ /tikz/length/.forward to=/tikz/trackschematic/length,%
+ %% label
+ shift label/.store in=\labelcoord,% (coord)
+ shift label=(none),% DEFAULT
+ /tikz/shift label/.forward to=/tikz/trackschematic/shift label,%
+}%
+%
+%%%%%%%%%%%%%%%
+% commands
+%%%%%%%%%%%%%%%
+%
+%% command: parked vehicles
+\newcommand\parkedvehicles{}% just for safety
+\def\parkedvehicles[#1]#2(#3)#4(#5){% \parkedvehicles[options] at (coord) label (name);
+ \pic[parked,operation=undefined,#1] at (#3) {vehicles={#2/#4/#5}}% symbol
+}%
+%% command: shunting movements
+\newcommand\shunting{}% just for safety
+\def\shunting[#1]#2(#3)#4(#5){% \shunting[options] at (coord) label (name);
+ \pic[shunting mode,operation=undefined,#1] at (#3) {vehicles={#2/#4/#5}}% symbol
+}%
+%% command: train run
+\newcommand\train{}% just for safety
+\def\train[#1]#2(#3)#4(#5){% \train[options] at (coord) label (name);
+ \pic[train mode,operation=undefined,#1] at (#3) {vehicles={#2/#4/#5}}% symbol
+}%
+%
+%%%%%%%%%%%%%%%
+% tikz keys
+%%%%%%%%%%%%%%%
+\pgfkeys{%
+ /tikz/trackschematic/vehicles/.is family,%
+ /tikz/trackschematic/vehicles/.cd,%
+ %% parked vehicles
+ parked/.value forbidden,%
+ parked/.code={\settoggle{is_parked}{true}},%
+ /tikz/parked/.forward to=/tikz/trackschematic/vehicles/parked,%
+ %% shunting mode
+ shunting mode/.value forbidden,%
+ shunting mode/.code={\settoggle{in_shunting_mode}{true}},%
+ /tikz/shunting mode/.forward to=/tikz/trackschematic/vehicles/shunting mode,%
+ %% shunting movement
+ movement/.value forbidden,%
+ movement/.code={\settoggle{is_shunting}{true}},%
+ /tikz/movement/.forward to=/tikz/trackschematic/vehicles/movement,%
+ %% train mode
+ train mode/.value forbidden,%
+ train mode/.code={\settoggle{in_train_mode}{true}},%
+ /tikz/train mode/.forward to=/tikz/trackschematic/vehicles/train mode,%
+ %% ghost train
+ ghost train/.value forbidden,%
+ ghost train/.code={\settoggle{train_is_a_ghost}{true}},%
+ /tikz/ghost/.forward to=/tikz/trackschematic/vehicles/ghost train,%
+ %% train run
+ run/.store in=\trainrun,% slow, normal, fast OR none
+ run=none,% DEFAULT
+ /tikz/run/.forward to=/tikz/trackschematic/vehicles/run,%
+ %% label
+ label align/.store in=\labelalign,% (coord)
+ label align=center,% DEFAULT
+ /tikz/label align/.forward to=/tikz/trackschematic/vehicles/label align,%
+ %% train bend
+ bend right at/.store in=\bendrightcoord,% (coord)
+ bend right at=(none),% DEFAULT
+ /tikz/bend right at/.forward to=/tikz/trackschematic/vehicles/bend right at,%
+ bend left at/.store in=\bendleftcoord,% (coord)
+ bend left at=(none),% DEFAULT
+ /tikz/bend left at/.forward to=/tikz/trackschematic/vehicles/bend left at,%
+}%
+% options
+\newtoggle{is_parked}\settoggle{is_parked}{false}%
+\newtoggle{in_shunting_mode}\settoggle{in_shunting_mode}{false}%
+\newtoggle{is_shunting}\settoggle{is_shunting}{false}%
+\newtoggle{in_train_mode}\settoggle{in_train_mode}{false}%
+\newtoggle{train_is_a_ghost}\settoggle{train_is_a_ghost}{false}%
+\newtoggle{bend}\settoggle{bend}{false}%
+\newtoggle{double_bend}\settoggle{double_bend}{false}%
+%
+%%%%%%%%%%%%%%%
+% symbol definition
+%%%%%%%%%%%%%%%
+%
+\tikzset{%
+ pics/vehicles/.default=,%
+ pics/vehicles/.style args={#1/#2/#3}{code={%
+ %% settings
+ \def\coordcommand{#1}% beware of leading and tailing spaces!
+ \def\labelcommand{#2}% beware of leading and tailing spaces!
+ \def\labelcontent{#3}%
+ %% bend
+ % determine number of bends and
+ % find front and back bend from head to tail
+ \ifdefstring{\bendrightcoord}{(none)}{}{% initialize if NOT default
+ \gettikzxy{\bendrightcoord}{\bendrightX}{\bendrightY}%
+ \settoggle{bend}{true}%
+ \ifdefstring{\face}{forward}{%
+ \pgfmathsetlengthmacro\forwardbendX{\bendrightX}%
+ \pgfmathsetlengthmacro\forwardbendY{\bendrightY}%
+ \pgfmathsetlengthmacro\bendlength{\objectlength + \bendrightX}%
+ \pgfmathsetmacro\forwardbendTYPE{1}%
+ }{% face backward
+ \pgfmathsetlengthmacro\backwardbendX{\bendrightX}%
+ \pgfmathsetlengthmacro\backwardbendY{\bendrightY}%
+ \pgfmathsetlengthmacro\bendlength{\objectlength - \bendrightX}%
+ \pgfmathsetmacro\backwardbendTYPE{1}%
+ }% END \ifdefstring{\face}{forward}
+ }%
+ \ifdefstring{\bendleftcoord}{(none)}{}{% initialize if NOT default
+ \gettikzxy{\bendleftcoord}{\bendleftX}{\bendleftY}%
+ \iftoggle{bend}{%
+ \settoggle{double_bend}{true}%
+ \ifdefstring{\face}{forward}{%
+ \ifdimcomp{\bendrightX}{>}{\bendleftX}{%
+ \pgfmathsetlengthmacro\forwardbendX{\bendrightX}%
+ \pgfmathsetmacro\forwardbendTYPE{1}%
+ \pgfmathsetlengthmacro\backwardbendX{\bendleftX}%
+ \pgfmathsetlengthmacro\backwardbendY{\bendleftY}%
+ \pgfmathsetmacro\backwardbendTYPE{-1}%
+ }{% {\bendrightX}{<}{\bendleftX}
+ \pgfmathsetlengthmacro\forwardbendX{\bendleftX}%
+ \pgfmathsetmacro\forwardbendTYPE{-1}%
+ \pgfmathsetlengthmacro\backwardbendX{\bendrightX}%
+ \pgfmathsetlengthmacro\backwardbendY{\bendrightY}%
+ \pgfmathsetmacro\backwardbendTYPE{1}
+ }%
+ }{% face backward
+ \ifdimcomp{\bendrightX}{<}{\bendleftX}{%
+ \pgfmathsetlengthmacro\backwardbendX{\bendrightX}%
+ \pgfmathsetmacro\backwardbendTYPE{-1}%
+ \pgfmathsetlengthmacro\forwardbendX{\bendleftX}%
+ \pgfmathsetlengthmacro\forwardbendY{\bendleftY}%
+ \pgfmathsetmacro\forwardbendTYPE{1}%
+ }{% {\bendrightX}{>}{\bendleftX}
+ \pgfmathsetlengthmacro\backwardbendX{\bendleftX}%
+ \pgfmathsetmacro\backwardbendTYPE{1}%
+ \pgfmathsetlengthmacro\forwardbendX{\bendrightX}%
+ \pgfmathsetlengthmacro\forwardbendY{\bendrightY}%
+ \pgfmathsetmacro\forwardbendTYPE{-1}%
+ }%
+ }%
+ }{% NOT double bend
+ \settoggle{bend}{true}%
+ \ifdefstring{\face}{forward}{%
+ \pgfmathsetlengthmacro\forwardbendX{\bendleftX}%
+ \pgfmathsetlengthmacro\forwardbendY{\bendleftY}%
+ \pgfmathsetlengthmacro\bendlength{\objectlength + \bendleftX}%
+ \pgfmathsetmacro\forwardbendTYPE{-1}%
+ }{% face backward
+ \pgfmathsetlengthmacro\backwardbendX{\bendleftX}%
+ \pgfmathsetlengthmacro\backwardbendY{\bendleftY}%
+ \pgfmathsetlengthmacro\bendlength{\objectlength - \bendleftX}%
+ \pgfmathsetmacro\backwardbendTYPE{-1}%
+ }% END \ifdefstring{\face}{forward}
+ }%
+ }%
+ %%
+ %% calculation of vehicle coordinates
+ %%
+ %% backward bend forward bend
+ %% (ts-b-b1) (ts-b-f1)
+ %% (ts-v-4)•_______•_______•_______•(ts-v-1)
+ %% / \
+ %% backward (ts-v-r)• label•(ts-v-l) •(ts-v-f) forward
+ %% \_______ _______ _______/
+ %% (ts-v-3)• • • •(ts-v-2)
+ %% (ts-b-b2) (ts-b-f2)
+ %%
+ \iftoggle{is_parked}{% vehicle parked
+ \coordinate (ts-v-1) at ($ 0.5*(\objectlength,0) + (0, 0.3)$);%
+ \coordinate (ts-v-2) at ($ 0.5*(\objectlength,0) + (0,-0.3)$);%
+ \coordinate (ts-v-3) at ($-0.5*(\objectlength,0) + (0,-0.3)$);%
+ \coordinate (ts-v-4) at ($-0.5*(\objectlength,0) + (0, 0.3)$);%
+ \coordinate (ts-v-f) at ($ 0.5*(\objectlength,0) + (0, 0 )$);%
+ \coordinate (ts-v-r) at ($-0.5*(\objectlength,0) + (0, 0 )$);%
+ \iftoggle{bend}{% currently not supported for parked vehicles
+ % \coordinate (ts-b-f1) at (ts-v-1);%
+ % \coordinate (ts-b-f2) at (ts-v-2);%
+ % \coordinate (ts-b-b1) at (ts-v-4);%
+ % \coordinate (ts-b-b2) at (ts-v-3);%
+ }{% NOT bend
+ \coordinate (ts-b-f1) at (ts-v-1);%
+ \coordinate (ts-b-f2) at (ts-v-2);%
+ \coordinate (ts-b-b1) at (ts-v-4);%
+ \coordinate (ts-b-b2) at (ts-v-3);%
+ }%
+ \ifdefstring{\labelcoord}{(none)}{%
+ \coordinate (ts-v-l) at (0,0);%
+ }{% initialize if NOT default
+ \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+ \coordinate (ts-v-l) at (\labelcoordX,\labelcoordY);%
+ }%
+ }{% vehicle NOT parked
+ \ifdefstring{\face}{forward}{% face
+ \pgfmathsetmacro{\facefactor}{1}%
+ \coordinate (ts-v-1) at (-0.3, 0.3);%
+ \coordinate (ts-v-2) at (-0.3,-0.3);%
+ \coordinate (ts-v-f) at (0,0);%
+ \iftoggle{double_bend}{%
+ \coordinate (ts-v-3) at ($(-\objectlength,-0.3) + (0,\backwardbendY)$);%
+ \coordinate (ts-v-4) at ($(-\objectlength, 0.3) + (0,\backwardbendY)$);%
+ \coordinate (ts-v-r) at ($(-\objectlength, 0 ) + (0,\backwardbendY)$);%
+ \coordinate (ts-b-f1) at ($( \forwardbendX, 0.3) + \forwardbendTYPE*(-0.1,0)$);%
+ \coordinate (ts-b-f2) at ($( \forwardbendX,-0.3) + \forwardbendTYPE*( 0.1,0)$);%
+ \coordinate (ts-b-b1) at ($(\backwardbendX, 0.3) + \backwardbendTYPE*( 0.1,0) + (0,\backwardbendY)$);%
+ \coordinate (ts-b-b2) at ($(\backwardbendX,-0.3) + \backwardbendTYPE*(-0.1,0) + (0,\backwardbendY)$);%
+ }{% NOT double bend
+ \iftoggle{bend}{%
+ \coordinate (ts-b-f1) at ($( \forwardbendX, 0.3) + \forwardbendTYPE*(-0.1,0)$);%
+ \coordinate (ts-b-f2) at ($( \forwardbendX,-0.3) + \forwardbendTYPE*( 0.1,0)$);%
+ \coordinate (ts-b-b1) at (ts-b-f1);%
+ \coordinate (ts-b-b2) at (ts-b-f2);%
+ \coordinate (ts-v-3) at ($(-\objectlength,-0.2) + \forwardbendTYPE*(0,-\bendlength) + \forwardbendTYPE*( 0.2,0)$);%
+ \coordinate (ts-v-4) at ($(-\objectlength, 0.2) + \forwardbendTYPE*(0,-\bendlength) + \forwardbendTYPE*(-0.2,0)$);%
+ \coordinate (ts-v-r) at ($(-\objectlength, 0 ) + \forwardbendTYPE*(0,-\bendlength)$);%
+ }{% NOT bend
+ \coordinate (ts-b-f1) at (ts-v-1);%
+ \coordinate (ts-b-f2) at (ts-v-2);%
+ \coordinate (ts-v-3) at ($(-\objectlength,0) + (0,-0.3)$);%
+ \coordinate (ts-v-4) at ($(-\objectlength,0) + (0, 0.3)$);%
+ \coordinate (ts-b-b1) at (ts-v-4);%
+ \coordinate (ts-b-b2) at (ts-v-3);%
+ \coordinate (ts-v-r) at ($(-\objectlength,0)$);%
+ }%
+ }%
+ }{%
+ \ifdefstring{\face}{backward}{% face
+ \pgfmathsetmacro{\facefactor}{-1}%
+ \coordinate (ts-v-3) at (0.3,-0.3);%
+ \coordinate (ts-v-4) at (0.3, 0.3);%
+ \coordinate (ts-v-r) at (0,0);%
+ \iftoggle{double_bend}{%
+ \coordinate (ts-v-1) at ($( \objectlength, 0.3) + (0,\forwardbendY)$);%
+ \coordinate (ts-v-2) at ($( \objectlength,-0.3) + (0,\forwardbendY)$);%
+ \coordinate (ts-v-f) at ($( \objectlength, 0 ) + (0,\forwardbendY)$);%
+ \coordinate (ts-b-f1) at ($( \forwardbendX, 0.3) + \forwardbendTYPE*( 0.1,0) + (0,\forwardbendY)$);%
+ \coordinate (ts-b-f2) at ($( \forwardbendX,-0.3) + \forwardbendTYPE*(-0.1,0) + (0,\forwardbendY)$);%
+ \coordinate (ts-b-b1) at ($(\backwardbendX, 0.3) + \backwardbendTYPE*(-0.1,0)$);%
+ \coordinate (ts-b-b2) at ($(\backwardbendX,-0.3) + \backwardbendTYPE*( 0.1,0)$);%
+ }{% NOT double bend
+ \iftoggle{bend}{%
+ \coordinate (ts-b-b1) at ($( \backwardbendX, 0.3) + \backwardbendTYPE*( 0.1,0)$);%
+ \coordinate (ts-b-b2) at ($( \backwardbendX,-0.3) + \backwardbendTYPE*(-0.1,0)$);%
+ \coordinate (ts-b-f1) at (ts-b-b1);%
+ \coordinate (ts-b-f2) at (ts-b-b2);%
+ \coordinate (ts-v-1) at ($( \objectlength, 0.2) + \backwardbendTYPE*(0,-\bendlength) + \backwardbendTYPE*( 0.2,0)$);%
+ \coordinate (ts-v-2) at ($( \objectlength,-0.2) + \backwardbendTYPE*(0,-\bendlength) + \backwardbendTYPE*(-0.2,0)$);%
+ \coordinate (ts-v-f) at ($( \objectlength, 0 ) + \backwardbendTYPE*(0,-\bendlength)$);%
+ }{% NOT bend
+ \coordinate (ts-b-b1) at (ts-v-4);%
+ \coordinate (ts-b-b2) at (ts-v-3);%
+ \coordinate (ts-v-1) at ($(\objectlength,0) + (0, 0.3)$);%
+ \coordinate (ts-v-2) at ($(\objectlength,0) + (0,-0.3)$);%
+ \coordinate (ts-b-f1) at (ts-v-1);%
+ \coordinate (ts-b-f2) at (ts-v-2);%
+ \coordinate (ts-v-f) at ($(\objectlength,0)$);%
+ }%
+ }%
+ }{% error message
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/face}{“forward“ OR “backward“ as key required}}%
+ }%
+ }% end \ifdefstring{\face}
+ %% label coord for NOT parked
+ \ifdefstring{\labelcoord}{(none)}{%
+ \coordinate (ts-v-l) at ($\facefactor*-0.5*(\objectlength,0) + (0,0)$);%
+ }{% initialize if NOT default
+ \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+ \coordinate (ts-v-l) at (\labelcoordX,\labelcoordY);%
+ }%
+ }%
+ %
+ %% vehicle style
+ \iftoggle{in_train_mode}{% train mode
+ \iftoggle{train_is_a_ghost}{% ghost train
+ \tikzset{every path/.style={draw=\foreground, line width=0.8pt, dashed}};%
+ \coordinate (ts-v-l) at ($(ts-v-l) + (0,0.16)$);%
+ }{% normal train
+ \tikzset{every path/.style={draw=\foreground, line width=1pt, fill=\background}};%
+ }%
+ }{% shunting mode
+ \tikzset{every path/.style={draw=\foreground, double, double distance=0.5mm, line width=0.3pt, fill=\background}};%
+ }%
+ %
+ %% arrow shapes
+ \iftoggle{is_shunting}{% arrow for shunting
+ \iftoggle{in_shunting_mode}{% shunting mode
+ \fill[draw=none,fill=\background] ($\facefactor*(-0.3, 0.3)$) --%
+ ($\facefactor*(-0.1, 0.3)$) --%
+ ($\facefactor*( 0.2, 0 )$) --%
+ ($\facefactor*(-0.1,-0.3)$) --%
+ ($\facefactor*(-0.3,-0.3)$) -- cycle;% \background fill
+ \path[line cap=rect,fill=none] ($\facefactor*(-0.1, 0.3)$) --%
+ ($\facefactor*( 0.2, 0 )$) --%
+ ($\facefactor*(-0.1,-0.3)$);% arrow shape
+ }{% train mode
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/vehicle/movement}{movement can only be combined with shunting}}%
+ }%
+ }{}% end \iftoggle{shunting_movement}
+ \ifdefstring{\trainrun}{none}{}{% arrow for train
+ \iftoggle{in_train_mode}{% train mode
+ \ifdefstring{\trainrun}{slow}{%
+ \fill[draw=none,fill=\background] ($\facefactor*(-0.3, 0.3)$) --%
+ ($\facefactor*(-0.1, 0.3)$) --%
+ ($\facefactor*( 0.2, 0 )$) --%
+ ($\facefactor*(-0.1,-0.3)$) --%
+ ($\facefactor*(-0.3,-0.3)$) -- cycle;% \background fill
+ \path[fill=none] ($\facefactor*(-0.15, 0.3)$) --%
+ ($\facefactor*(-0.1 , 0.3)$) --%
+ ($\facefactor*( 0.2 , 0 )$) --%
+ ($\facefactor*(-0.1 ,-0.3)$) --%
+ ($\facefactor*(-0.15,-0.3)$);% arrow shape
+ }{%
+ \ifdefstring{\trainrun}{normal}{%
+ \fill[draw=none,fill=\background] ($\facefactor*(-0.3, 0.3)$) --%
+ ($\facefactor*( 0.1, 0.3)$) --%
+ ($\facefactor*( 0.4, 0 )$) --%
+ ($\facefactor*( 0.1,-0.3)$) --%
+ ($\facefactor*(-0.3,-0.3)$) -- cycle;% \background fill
+ \path[fill=none] ($\facefactor*(-0.15, 0.3)$) --%
+ ($\facefactor*(-0.1 , 0.3)$) --%
+ ($\facefactor*( 0.2 , 0 )$) --%
+ ($\facefactor*(-0.1 ,-0.3)$) --%
+ ($\facefactor*(-0.15,-0.3)$);% arrow shape part 1
+ \path[fill=none] ($\facefactor*( 0.05, 0.3)$) --%
+ ($\facefactor*( 0.1 , 0.3)$) --%
+ ($\facefactor*( 0.4 , 0 )$) --%
+ ($\facefactor*( 0.1 ,-0.3)$) --%
+ ($\facefactor*( 0.05,-0.3)$);% arrow shape part 2
+ %
+ }{%
+ \ifdefstring{\trainrun}{fast}{%
+ \fill[draw=none,fill=\background] ($\facefactor*(-0.3, 0.3)$) --%
+ ($\facefactor*( 0.3, 0.3)$) --%
+ ($\facefactor*( 0.6, 0 )$) --%
+ ($\facefactor*( 0.3,-0.3)$) --%
+ ($\facefactor*(-0.3,-0.3)$) -- cycle;% \background fill
+ \path[fill=none] ($\facefactor*(-0.15, 0.3)$) --%
+ ($\facefactor*(-0.1 , 0.3)$) --%
+ ($\facefactor*( 0.2 , 0 )$) --%
+ ($\facefactor*(-0.1 ,-0.3)$) --%
+ ($\facefactor*(-0.15,-0.3)$);% arrow shape part 1
+ \path[fill=none] ($\facefactor*( 0.05, 0.3)$) --%
+ ($\facefactor*( 0.1 , 0.3)$) --%
+ ($\facefactor*( 0.4 , 0 )$) --%
+ ($\facefactor*( 0.1 ,-0.3)$) --%
+ ($\facefactor*( 0.05,-0.3)$);% arrow shape part 2
+ \path[fill=none] ($\facefactor*( 0.25, 0.3)$) --%
+ ($\facefactor*( 0.3 , 0.3)$) --%
+ ($\facefactor*( 0.6 , 0 )$) --%
+ ($\facefactor*( 0.3 ,-0.3)$) --%
+ ($\facefactor*( 0.25,-0.3)$);% arrow shape part 3
+ %
+ }{%error message
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/vehicles/run}{“normal“, “slow“, “fast“ OR “none“ as key required}}%
+ }%
+ }%
+ }%
+ }{% shunting mode
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/vehicle/run}{run can only be combined with train}}%
+ }% end \iftoggle{in_train_mode}
+ }% end \ifdefstring{\trainrun}{none} % end arrow shapes
+ %
+ %% vehicle shape
+ \path (ts-v-1) -- (ts-v-f) -- (ts-v-2) -- (ts-b-f2) -- (ts-b-b2) -- (ts-v-3) -- (ts-v-r) -- (ts-v-4) -- (ts-b-b1) -- (ts-b-f1) -- cycle;% vehicle shape
+ %
+ %% operated
+ \iftoggle{is_parked}{}{% vehicle NOT parked
+ \ifdefstring{\operationmode}{manual}{%
+ \path[draw=none, fill=\foreground] ($\facefactor*(-0.4,0)$) circle (0.15);% dot
+ \coordinate (ts-v-l) at ($(ts-v-l) + \facefactor*(-0.25,0)$);%
+ }{
+ \ifdefstring{\operationmode}{automatic}{%
+ \path[draw=none, fill=\foreground] ($\facefactor*(-0.15,0)$) -- ++($\facefactor*(-0.15,0) +(0,0.15)$) -- ++(0,-0.3) -- cycle;% triangle
+ \coordinate (ts-v-l) at ($(ts-v-l) + \facefactor*(-0.15,0)$);%
+ }{%
+ \ifdefstring{\operationmode}{undefined}{}{%
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/operation}{“manual“, “automatic“ OR “undefined“ as key required}}%
+ }%
+ }% end automatically_operated
+ }% end manually_operated
+ }%
+ %
+ %% label
+ \ifdefstring{\labelcontent}{}{}{% label NOT empty
+ \ifdefstring{\labelalign}{center}{% label align default
+ \def\labelanchor{center}
+ }{% label align NOT default
+ \ifdefstring{\labelalign}{left}{% label align left
+ \def\labelanchor{east}
+ }{%
+ \ifdefstring{\labelalign}{right}{% label align left
+ \def\labelanchor{west}
+ }{% NOT center, left, or right
+ \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/label align}{“center“, “left“ OR “right“ as key required}}%
+ }% \ifdefstring{\labelalign}{right}
+ }% \ifdefstring{\labelalign}{left}
+ }% \ifdefstring{\labelalign}{center}
+ \node[text=\foreground,anchor=\labelanchor,align=\labelalign] at (ts-v-l) {\footnotesize\emph{\labelcontent}};% label
+ }%
+ }},%
+}%
+%
+%%%%%%%%%%%%%%%
+\endinput%
+% \ No newline at end of file