457 lines
22 KiB
TeX
457 lines
22 KiB
TeX
%% 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%
|
|
% |