diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tikz-network/tikz-network.sty | 1392 |
1 files changed, 1392 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tikz-network/tikz-network.sty b/Master/texmf-dist/tex/latex/tikz-network/tikz-network.sty new file mode 100644 index 00000000000..497f34fa2c2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-network/tikz-network.sty @@ -0,0 +1,1392 @@ +% ============================================================================ +% File : tikz-network.sty -- Library for plotting networks in TikZ +% Author : Juergen Hackl <hackl.j@gmx.at> +% Creation : 2017-02-28 +% Time-stamp: <Mon 2018-07-30 11:26 juergen> +% Version : 1.0 (2018-07-30) +% +% Copyright (c) 2018 Juergen Hackl <hackl.j@gmx.at> +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% ============================================================================ + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tikz-network}[2018/07/30 tikz-network v1.0] + +%============================================================================= +% Used packages +%============================================================================= +\RequirePackage{etex} +\RequirePackage{xifthen} +\RequirePackage{xkeyval}[2005/11/25] +\RequirePackage{tikz} +\RequirePackage{datatool} +\RequirePackage{graphicx} +\usetikzlibrary{arrows} +\usetikzlibrary{positioning} +\usetikzlibrary{3d} +\usetikzlibrary{fit} +\usetikzlibrary{calc} +\usetikzlibrary{backgrounds} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.geometric} +%============================================================================= + + +%============================================================================= +% Predefined variables +%============================================================================= + +%<---------------------------------------------------------------------------> +% Vertex +%<---------------------------------------------------------------------------> +\definecolor{vertexfill}{HTML}{abd7e6} +\newcommand*{\DefaultUnit}{cm} +\newcommand*{\DistanceScale}{1} +\newcommand*{\VertexShape}{circle} +\newcommand*{\VertexInnerSep}{2pt} +\newcommand*{\VertexOuterSep}{0pt} +\newcommand*{\VertexMinSize}{0.6\DefaultUnit} +\newcommand*{\VertexLineWidth}{1pt} +\newcommand*{\VertexLineColor}{black} +\newcommand*{\VertexLineOpacity}{1} +\newcommand*{\VertexTextColor}{black} +\newcommand*{\VertexFillColor}{vertexfill} +\newcommand*{\VertexFillOpacity}{1} +\newcommand*{\VertexTextFont}{\scriptsize}%\tiny} +\newcommand*{\VertexTextRotation}{0} +\newcommand*{\VertexTextOpacity}{1} + +%<---------------------------------------------------------------------------> +% Edge +%<---------------------------------------------------------------------------> +\newcommand*{\EdgeArrow}{-latex} +\newcommand*{\EdgeLineWidth}{1.5pt} +\newcommand*{\EdgeColor}{black!75} +\newcommand*{\EdgeOpacity}{1} +\newcommand*{\EdgeTextFillColor}{white} +\newcommand*{\EdgeTextFillOpacity}{1} +\newcommand*{\EdgeInnerSep}{0pt} +\newcommand*{\EdgeOuterSep}{1pt} +\newcommand*{\EdgeTextRotation}{0} +\newcommand*{\EdgeTextOpacity}{1} +\newcommand*{\EdgeTextFont}{\scriptsize} + + +%<---------------------------------------------------------------------------> +% Plane +%<---------------------------------------------------------------------------> +\newcommand*{\PlaneLineWidth}{1.5pt} +\newcommand*{\PlaneLineColor}{black} +\newcommand*{\PlaneLineOpacity}{1} +\newcommand*{\PlaneGridLineWidth}{.5pt} +\newcommand*{\PlaneGridColor}{black} +\newcommand*{\PlaneGridOpacity}{.5} +\newcommand*{\PlaneFillColor}{vertexfill} +\newcommand*{\PlaneFillOpacity}{.3} +\newcommand*{\PlaneWidth}{5\DefaultUnit} +\newcommand*{\PlaneHeight}{5\DefaultUnit} + + +%<---------------------------------------------------------------------------> +% Text +%<---------------------------------------------------------------------------> + +\newcommand*{\TextInnerSep}{2pt} +\newcommand*{\TextOuterSep}{0pt} +\newcommand*{\TextFont}{\normalsize} +\newcommand*{\TextColor}{black} +\newcommand*{\TextRotation}{0} +\newcommand*{\TextOpacity}{1} + + +%<---------------------------------------------------------------------------> +% Network +%<---------------------------------------------------------------------------> +\newcommand*{\NetworkLayerDistance}{-2} +\newcommand*{\xAngle}{-12} +\newcommand*{\xLength}{1} +\newcommand*{\yAngle}{37} +\newcommand*{\yLength}{1} +\newcommand*{\zAngle}{90} +\newcommand*{\zLength}{1} + + +\tikzset{edge canvas/.style={}} + +\tikzset{multilayer 2d/.style={y={(0:1cm)},x={(90:1cm)},z={(90:0cm)},every + node/.append style={transform shape},}} + + +\def\Origin{\draw [->] (0,0,0) -- (2,0,0) node [at end, right] {$y$}; +\draw [->] (0,0,0) -- (0,2,0) node [at end, right] {$x$}; +\draw [->] (0,0,0) -- (0,0,2) node [at end, left] {$z$};} + + +%============================================================================= +% Predefined Styles +%============================================================================= + +%<---------------------------------------------------------------------------> +% Init Default Vertex Style +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {DVS} {Shape}{} +\define@cmdkey [NW] {DVS} {MinSize}{} +\define@cmdkey [NW] {DVS} {LineWidth}{} +\define@cmdkey [NW] {DVS} {LineColor}{} +\define@cmdkey [NW] {DVS} {LineOpacity}{} +\define@cmdkey [NW] {DVS} {FillColor}{} +\define@cmdkey [NW] {DVS} {FillOpacity}{} +\define@cmdkey [NW] {DVS} {TextColor}{} +\define@cmdkey [NW] {DVS} {TextFont}{} +\define@cmdkey [NW] {DVS} {TextRotation}{} +\define@cmdkey [NW] {DVS} {TextOpacity}{} +\define@cmdkey [NW] {DVS} {InnerSep}{} +\define@cmdkey [NW] {DVS} {OuterSep}{} +\presetkeys [NW] {DVS} {Shape = \VertexShape, + MinSize = \VertexMinSize, + LineWidth = \VertexLineWidth, + LineColor = \VertexLineColor, + FillColor = \VertexFillColor, + LineOpacity = \VertexLineOpacity, + FillOpacity = \VertexFillOpacity, + InnerSep = \VertexInnerSep, + OuterSep = \VertexOuterSep, + TextColor = \VertexTextColor, + TextRotation = \VertexTextRotation, + TextOpacity = \VertexTextOpacity, + TextFont = \VertexTextFont}{} + +%<---------------------------------------------------------------------------> +% Init Default Edge Style +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {DES} {Arrow}{} +\define@cmdkey [NW] {DES} {LineWidth}{} +\define@cmdkey [NW] {DES} {Color}{} +\define@cmdkey [NW] {DES} {Opacity}{} +\define@cmdkey [NW] {DES} {TextFillColor}{} +\define@cmdkey [NW] {DES} {TextFillOpacity}{} +\define@cmdkey [NW] {DES} {TextFont}{} +\define@cmdkey [NW] {DES} {TextRotation}{} +\define@cmdkey [NW] {DES} {TextOpacity}{} +\define@cmdkey [NW] {DES} {InnerSep}{} +\define@cmdkey [NW] {DES} {OuterSep}{} +\presetkeys [NW] {DES} {Arrow = \EdgeArrow, + LineWidth = \EdgeLineWidth, + Color = \EdgeColor, + Opacity = \EdgeOpacity, + TextFillColor = \EdgeTextFillColor, + TextFillOpacity = \EdgeTextFillOpacity, + InnerSep = \EdgeInnerSep, + OuterSep = \EdgeOuterSep, + TextRotation = \EdgeTextRotation, + TextOpacity = \EdgeTextOpacity, + TextFont = \EdgeTextFont}{} + + +%<---------------------------------------------------------------------------> +% Init Default Plane Style +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {DPS} {LineWidth}{} +\define@cmdkey [NW] {DPS} {LineColor}{} +\define@cmdkey [NW] {DPS} {LineOpacity}{} +\define@cmdkey [NW] {DPS} {GridLineWidth}{} +\define@cmdkey [NW] {DPS} {GridColor}{} +\define@cmdkey [NW] {DPS} {GridOpacity}{} +\define@cmdkey [NW] {DPS} {FillColor}{} +\define@cmdkey [NW] {DPS} {FillOpacity}{} +\presetkeys [NW] {DPS} {LineWidth = \PlaneLineWidth, + LineColor = \PlaneLineColor, + LineOpacity = \PlaneLineOpacity, + GridLineWidth = \PlaneGridLineWidth, + GridColor = \PlaneGridColor, + GridOpacity = \PlaneGridOpacity, + FillColor = \PlaneFillColor, + FillOpacity = \PlaneFillOpacity}{} + + +%<---------------------------------------------------------------------------> +% Init Default Text Style +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {DTS} {InnerSep}{} +\define@cmdkey [NW] {DTS} {OuterSep}{} +\define@cmdkey [NW] {DTS} {TextFont}{} +\define@cmdkey [NW] {DTS} {TextColor}{} +\define@cmdkey [NW] {DTS} {TextRotation}{} +\define@cmdkey [NW] {DTS} {TextOpacity}{} +\presetkeys [NW] {DTS} {InnerSep = \TextInnerSep, + OuterSep = \TextOuterSep, + TextFont = \TextFont, + TextColor = \TextColor, + TextRotation = \TextRotation, + TextOpacity = \TextOpacity}{} + + + +%<---------------------------------------------------------------------------> +% Init Default Coordinates 3D +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {COS} {xAngle}{} +\define@cmdkey [NW] {COS} {xLength}{} +\define@cmdkey [NW] {COS} {yAngle}{} +\define@cmdkey [NW] {COS} {yLength}{} +\define@cmdkey [NW] {COS} {zAngle}{} +\define@cmdkey [NW] {COS} {zLength}{} +\presetkeys [NW] {COS} {xAngle = \xAngle, + xLength = \xLength, + yAngle = \yAngle, + yLength = \yLength, + zAngle = \zAngle, + zLength = \zLength}{} + +%<---------------------------------------------------------------------------> +% Default Style +%<---------------------------------------------------------------------------> +\newcommand*{\SetVertexStyle}[1][]{\NW@SetVertexStyleDefault[#1]}% +\def\NW@SetVertexStyleDefault[#1]{% +\setkeys[NW]{DVS}{#1}% +\tikzset{VertexStyle/.style = {draw, + shape = \cmdNW@DVS@Shape, + color = \cmdNW@DVS@LineColor, + fill = \cmdNW@DVS@FillColor, + inner sep = \cmdNW@DVS@InnerSep, + outer sep = \cmdNW@DVS@OuterSep, + minimum size = \cmdNW@DVS@MinSize, + line width = \cmdNW@DVS@LineWidth, + font = \cmdNW@DVS@TextFont, + fill opacity = \cmdNW@DVS@FillOpacity, + draw opacity = \cmdNW@DVS@LineOpacity}} +\tikzset{LabelStyle/.style={ \cmdNW@DVS@TextColor, + font = \cmdNW@DVS@TextFont, + rotate = \cmdNW@DVS@TextRotation, + opacity = \cmdNW@DVS@TextOpacity,}} +}% + +\newcommand*{\SetEdgeStyle}[1][]{\NW@SetEdgeStyleDefault[#1]}% +\def\NW@SetEdgeStyleDefault[#1]{% +\setkeys[NW]{DES}{#1}% +\tikzset{EdgeStyle/.style = {\cmdNW@DES@Arrow, + line width = \cmdNW@DES@LineWidth, + color = \cmdNW@DES@Color, + opacity = \cmdNW@DES@Opacity}} +\tikzset{EdgeLabelStyle/.style={circle, + fill = \cmdNW@DES@TextFillColor, + fill opacity = \cmdNW@DES@TextFillOpacity, + inner sep = \cmdNW@DES@InnerSep, + outer sep = \cmdNW@DES@OuterSep, + rotate = \cmdNW@DES@TextRotation, + text opacity = \cmdNW@DES@TextOpacity, + font = \cmdNW@DES@TextFont}} +}% + + +\newcommand*{\SetPlaneStyle}[1][]{\NW@SetPlaneStyleDefault[#1]}% +\def\NW@SetPlaneStyleDefault[#1]{% +\setkeys[NW]{DPS}{#1}% +\tikzset{PlaneBorderStyle/.style = {draw, + line width = \cmdNW@DPS@LineWidth, + color = \cmdNW@DPS@LineColor, + draw opacity = \cmdNW@DPS@LineOpacity}} +\tikzset{PlaneFillStyle/.style = { + fill = \cmdNW@DPS@FillColor, + fill opacity = \cmdNW@DPS@FillOpacity}} +\tikzset{PlaneGridStyle/.style = {draw, + line width = \cmdNW@DPS@GridLineWidth, + color = \cmdNW@DPS@GridColor, + opacity = \cmdNW@DPS@GridOpacity}} +}% + + +\newcommand*{\SetTextStyle}[1][]{\NW@SetTextStyleDefault[#1]}% +\def\NW@SetTextStyleDefault[#1]{% +\setkeys[NW]{DTS}{#1}% +\tikzset{TextStyle/.style = {inner sep = \cmdNW@DTS@InnerSep, + outer sep = \cmdNW@DTS@OuterSep, + color = \cmdNW@DTS@TextColor, + rotate = \cmdNW@DTS@TextRotation, + text opacity = \cmdNW@DTS@TextOpacity, + font = \cmdNW@DTS@TextFont}} +}% + + +\tikzset{ + multilayer/.code={% + \ifthenelse{\equal{#1}{3d}}{ + \tikzset{edge canvas/.style={canvas is yx plane at z=0}} + \tikzset{multilayer 3d} + }{ + \tikzset{edge canvas/.style={}} + \tikzset{multilayer 2d} + } + }, + } + + + +\newcommand*{\SetCoordinates}[1][]{\NW@SetCoordinates[#1]}% +\def\NW@SetCoordinates[#1]{% +\setkeys[NW]{COS}{#1}% +\tikzset{multilayer 3d/.style={ + y={(\cmdNW@COS@xAngle:\cmdNW@COS@xLength \DefaultUnit)}, + x={(\cmdNW@COS@yAngle:\cmdNW@COS@yLength \DefaultUnit)}, + z={(\cmdNW@COS@zAngle:\cmdNW@COS@zLength \DefaultUnit)}, + every node/.append style={transform shape}, + }} +%\tikzset{edge canvas/.style={canvas is yx plane at z=0}} +}% + + +%<---------------------------------------------------------------------------> +% Apply default settings +%<---------------------------------------------------------------------------> + +\SetCoordinates +\SetVertexStyle +\SetEdgeStyle +\SetPlaneStyle +\SetTextStyle + +%<---------------------------------------------------------------------------> +% Redefine settings +%<---------------------------------------------------------------------------> + +\newcommand*{\SetLayerDistance}[1]{\renewcommand{\NetworkLayerDistance}{#1}} +\newcommand*{\SetDefaultUnit}[1]{\renewcommand{\DefaultUnit}{#1}} +\newcommand*{\SetDistanceScale}[1]{\renewcommand{\DistanceScale}{#1}} +\newcommand*{\SetPlaneWidth}[1]{\renewcommand{\PlaneWidth}{#1}} +\newcommand*{\SetPlaneHeight}[1]{\renewcommand{\PlaneHeight}{#1}} +\newcommand*{\EdgesInBG}{\presetkeys [NW] {edge} {NotInBG = false}{}} +\newcommand*{\EdgesNotInBG}{\presetkeys [NW] {edge} {NotInBG = true}{}} + +%============================================================================= +% Vertex and Edge creation +%============================================================================= + +%<---------------------------------------------------------------------------> +% Init Vertex +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {vertex} {x}{} +\define@cmdkey [NW] {vertex} {y}{} +\define@cmdkey [NW] {vertex} {label}{} +\define@cmdkey [NW] {vertex} {size}{} +\define@cmdkey [NW] {vertex} {color}{} +\define@cmdkey [NW] {vertex} {opacity}{} +\define@cmdkey [NW] {vertex} {style}{} +\define@cmdkey [NW] {vertex} {layer}{} +\define@cmdkey [NW] {vertex} {shape}{} +\define@cmdkey [NW] {vertex} {fontsize}{} +\define@cmdkey [NW] {vertex} {fontcolor}{} +\define@cmdkey [NW] {vertex} {fontscale}{} +\define@boolkey [NW] {vertex} {RGB}[true]{} +\define@boolkey [NW] {vertex} {IdAsLabel}[true]{} +\define@boolkey [NW] {vertex} {NoLabel}[true]{} +\define@boolkey [NW] {vertex} {Math}[true]{} +\define@boolkey [NW] {vertex} {Network}[true]{} +\define@boolkey [NW] {vertex} {Pseudo}[true]{} +\define@cmdkey [NW] {vertex} {distance}{} +\define@cmdkey [NW] {vertex} {position}{} +\presetkeys [NW] {vertex} {Network = false,}{} + + +%<---------------------------------------------------------------------------> +% Vertex +%<---------------------------------------------------------------------------> +\newcommand*{\Vertex}[1][]{\@vertex[#1]}% +\def\@vertex[#1]#2{% + \setkeys[NW]{vertex}{#1}% + % Check if Vertex is used in a network, if so no default settings are + % necessary, otherwise default settings are applied. + \ifNW@vertex@Network + \cmdNW@vertex@opacity + \else + \setkeys[NW]{vertex}{x = {0}, + y = {0}, + label = {}, + size = {}, + color = {}, + opacity = {}, + layer = {}, + shape = {}, + style = {}, + fontsize = {}, + fontcolor = {}, + fontscale = {}, + NoLabel = false, + IdAsLabel = false, + Math = false, + RGB = false, + Pseudo = false, + distance = {0}, + position = {center},} + \setkeys[NW]{vertex}{#1}% + \fi + \@@vertex{#2}% +} +\def\@@vertex#1{% + \def\vstyle{VertexStyle} + \begin{scope} + % [ + % scale=1,yshift=0,every node/.append style={yslant=0.5,xslant=-1},yslant=0.5,xslant=-1 + % ] + % If option NoLabel is true, no labels are printed in the network + \ifNW@vertex@NoLabel + \def\vertex@L{}% + \def\vertex@Name{}% + \else + % if IdAsLabel is true, the label of the vertex is equal to the vertex id + \ifNW@vertex@IdAsLabel + \def\vertex@Name{#1} + \def\vertex@L{\vertex@Name} + % Otherwise the label is equal to the label if it is non empty + \else + \ifthenelse{\not\equal{\cmdNW@vertex@label}{}}{ + \def\vertex@L{\cmdNW@vertex@label} + \def\vertex@Name{#1} + }{ + \def\vertex@Name{#1} + \def\vertex@L{} + } + \fi + \fi + % Check if Math is true, if so the label will be in math mode + \ifNW@vertex@Math + \def\vertex@Label{$\vertex@L$}% + \else + \def\vertex@Label{\vertex@L}% + \fi + % Check if the size of the vertex is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@vertex@size}{}}{ + \tikzset{LocalVertexSize/.style={minimum size = \cmdNW@vertex@size + \DefaultUnit}} + }{ + \tikzset{LocalVertexSize/.style={}} + } + % Check if the font size of the vertex label is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@vertex@fontsize}{}}{ + \tikzset{LocalVertexFontSize/.style={font = \cmdNW@vertex@fontsize}} + }{ + \tikzset{LocalVertexFontSize/.style={}} + } + % Check if the font scale of the vertex label is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@vertex@fontscale}{}}{ + \tikzset{LocalVertexFontScale/.style={scale = \cmdNW@vertex@fontscale}} + }{ + \tikzset{LocalVertexFontScale/.style={}} + } + % Check if the opacity of the vertex is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@vertex@opacity}{}}{ + \tikzset{LocalVertexOpacity/.style={fill opacity = \cmdNW@vertex@opacity}} + }{ + \tikzset{LocalVertexOpacity/.style={}} + } + % Check if the shape of the vertex is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@vertex@shape}{}}{ + \tikzset{LocalVertexShape/.style={shape = \cmdNW@vertex@shape}} + }{ + \tikzset{LocalVertexShape/.style={}} + } + % Check if the color of the vertex is redefined, if so the new style is + % used. If the option RGB is true, RGB values can be used to define the + % color of the vertex entered in the form {R,G,B}. If RGB is not true the + % default colors of tikz can be used (e.g. blue!50!green) + \ifNW@vertex@RGB + \ifthenelse{\not\equal{\cmdNW@vertex@color}{}}{ + \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@vertex@color} + \tikzset{LocalVertexFill/.style={fill = LocalColor}} + }{ + \tikzset{LocalVertexFill/.style={}} + } + \ifthenelse{\not\equal{\cmdNW@vertex@fontcolor}{}}{ + \pgfutil@definecolor{LocalFontColor}{RGB}{\cmdNW@vertex@fontcolor} + \tikzset{LocalVertexFontColor/.style={color = LocalFontColor}} + }{ + \tikzset{LocalVertexFontColor/.style={}} + } + \else + \ifthenelse{\not\equal{\cmdNW@vertex@color}{}}{ + \tikzset{LocalVertexFill/.style={fill = \cmdNW@vertex@color}} + }{ + \tikzset{LocalVertexFill/.style={}} + } + \ifthenelse{\not\equal{\cmdNW@vertex@fontcolor}{}}{ + \tikzset{LocalVertexFontColor/.style={color = \cmdNW@vertex@fontcolor}} + }{ + \tikzset{LocalVertexFontColor/.style={}} + } + + \fi + % Define empty style for the vertex + \ifNW@vertex@Pseudo + \tikzset{LocalPseudo/.style={opacity = 0}} + \else + \tikzset{LocalPseudo/.style={}} + \fi + % Define local style for the label + \tikzset{LocalLabel/.style={label = {[LabelStyle, LocalVertexFontColor, + LocalVertexFontSize, LocalVertexFontScale, label + distance=\cmdNW@vertex@distance]\cmdNW@vertex@position:\vertex@Label}}} + \ifthenelse{\equal{\cmdNW@vertex@layer}{}}{ + \protected@edef\@tempa{% + \noexpand\node[\vstyle,LocalVertexSize,LocalVertexOpacity,LocalVertexFill,LocalVertexShape,LocalLabel,\cmdNW@vertex@style,LocalPseudo](#1)% + at (\cmdNW@vertex@x*\DistanceScale\DefaultUnit,\cmdNW@vertex@y*\DistanceScale\DefaultUnit){}}% + \@tempa; + }{ + \begin{scope}[canvas is yx plane at z=(\cmdNW@vertex@layer-1)*\NetworkLayerDistance] + \protected@edef\@tempa{% + \noexpand\node[\vstyle,LocalVertexSize,LocalVertexOpacity,LocalVertexFill,LocalVertexShape,LocalLabel,\cmdNW@vertex@style,LocalPseudo](#1)% + at (\cmdNW@vertex@x*\DistanceScale\DefaultUnit,\cmdNW@vertex@y*\DistanceScale\DefaultUnit){}}% + \@tempa; + \end{scope} + } + \end{scope} +} + +%<---------------------------------------------------------------------------> +% Init Edge +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {edge} {label}{} +\define@cmdkey [NW] {edge} {lw}{} +\define@cmdkey [NW] {edge} {color}{} +\define@cmdkey [NW] {edge} {opacity}{} +\define@cmdkey [NW] {edge} {style}{} +\define@cmdkey [NW] {edge} {fontcolor}{} +\define@cmdkey [NW] {edge} {fontsize}{} +\define@cmdkey [NW] {edge} {fontscale}{} +\define@boolkey [NW] {edge} {RGB}[true]{} +\define@boolkey [NW] {edge} {Math}[true]{} +\define@boolkey [NW] {edge} {Direct}[true]{} +\define@boolkey [NW] {edge} {Network}[true]{} +\define@cmdkey [NW] {edge} {bend}{} +\define@cmdkey [NW] {edge} {position}{} +\define@cmdkey [NW] {edge} {distance}{} +\define@cmdkey [NW] {edge} {loopsize}{} +\define@cmdkey [NW] {edge} {loopposition}{} +\define@cmdkey [NW] {edge} {loopshape}{} +\define@boolkey [NW] {edge} {NotInBG}[true]{} +\define@cmdkey [NW] {edge} {path}{} +\presetkeys [NW] {edge} {Network = false,}{} +% NotInBG = false,}{} + +%<---------------------------------------------------------------------------> +% Edge +%<---------------------------------------------------------------------------> +\newcommand*{\Edge}[1][]{\@edge[#1]}% +\def\@edge[#1](#2)(#3){% + \setkeys[NW]{edge}{#1}% + % Check if Vertex is used in a network, if so no default settings are + % necessary, otherwise default settings are applied. + \ifNW@edge@Network + \else + \setkeys[NW]{edge}{label = {}, + lw = {}, + path = {}, + color = {}, + opacity = {}, + style = {}, + fontcolor = {}, + fontsize = {}, + fontscale = {}, + RGB = false, + Math = false, + Direct = false, + NotInBG = false, + bend = {0}, + loopsize = {1\DefaultUnit}, + position = {}, + loopposition= {0}, + loopshape = {90}, + distance = {.5}} + \setkeys[NW]{edge}{#1}% + \fi + \def\estyle{EdgeStyle} + % + \ifNW@edge@NotInBG + \tikzset{EdgeInBG/.style={}} + \else + \tikzset{EdgeInBG/.style={on background layer}} + \fi + \begin{scope}[edge canvas,EdgeInBG] + % [ + % scale=1,yshift=0,every node/.append style={yslant=0.5,xslant=-1},yslant=0.5,xslant=-1 + % ] + % Check if Direct is true, if so use default arrow style + \ifNW@edge@Direct + \tikzset{LocalArrow/.style={}} + \else + \tikzset{LocalArrow/.style={-}} + \fi + % Check if the line width of the vertex is redefined, if so the new style is + % used + \ifthenelse{\not\equal{\cmdNW@edge@lw}{}}{ + \tikzset{LocalEdgeLW/.style={line width = \cmdNW@edge@lw}} + }{ + \tikzset{LocalEdgeLW/.style={}} + } + % Check if the opacity of the vertex is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@edge@opacity}{}}{ + \tikzset{LocalEdgeOpacity/.style={opacity = \cmdNW@edge@opacity}} + \tikzset{LocalTextOpacity/.style={text opacity = \cmdNW@edge@opacity}} + }{ + \tikzset{LocalEdgeOpacity/.style={}} + \tikzset{LocalTextOpacity/.style={}} + } + % Check if the font size of the edge is redefined, if so the new style is + % used + \ifthenelse{\not\equal{\cmdNW@edge@fontsize}{}}{ + \tikzset{LocalEdgeFontSize/.style={font = \cmdNW@edge@fontsize}} + }{ + \tikzset{LocalEdgeFontSize/.style={}} + } + % Check if the font scale of the edge is redefined, if so the new style is + % used + \ifthenelse{\not\equal{\cmdNW@edge@fontscale}{}}{ + \tikzset{LocalEdgeFontScale/.style={scale = \cmdNW@edge@fontscale}} + }{ + \tikzset{LocalEdgeFontScale/.style={}} + } + % Check if the color of the vertex is redefined, if so the new style is + % used. If the option RGB is true, RGB values can be used to define the + % color of the vertex entered in the form {R,G,B}. If RGB is not true the + % default colors of tikz can be used (e.g. blue!50!green) + \ifNW@edge@RGB + \ifthenelse{\not\equal{\cmdNW@edge@color}{}}{ + \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@edge@color} + \tikzset{LocalEdgeColor/.style={color = LocalColor}} + }{ + \tikzset{LocalEdgeColor/.style={}} + } + \ifthenelse{\not\equal{\cmdNW@edge@fontcolor}{}}{ + \pgfutil@definecolor{LocalFontColor}{RGB}{\cmdNW@edge@fontcolor} + \tikzset{LocalEdgeFontColor/.style={text = LocalFontColor}} + }{ + \tikzset{LocalEdgeFontColor/.style={}} + } + + \else + \ifthenelse{\not\equal{\cmdNW@edge@color}{}}{ + \tikzset{LocalEdgeColor/.style={color = \cmdNW@edge@color}} + }{ + \tikzset{LocalEdgeColor/.style={}} + } + \ifthenelse{\not\equal{\cmdNW@edge@fontcolor}{}}{ + \tikzset{LocalEdgeFontColor/.style={text = \cmdNW@edge@fontcolor}} + }{ + \tikzset{LocalEdgeFontColor/.style={}} + } + + \fi + % Check if Math is true, if so the label will be in math mode + \ifNW@edge@Math + \def\edge@L{$\cmdNW@edge@label$}% + \else + \def\edge@L{\cmdNW@edge@label}% + \fi + % Check if a label is assigned, if so create a label variable + \ifthenelse{\not\equal{\cmdNW@edge@label}{}}{ \def\edge@Label{node[EdgeLabelStyle,LocalTextOpacity,LocalEdgeFontColor,LocalEdgeFontSize,LocalEdgeFontScale,pos=\cmdNW@edge@distance,\cmdNW@edge@position]{\edge@L}} + }{ + \def\edge@Label{} + } + % Check if it is a self loop or a normal edge + % Normal edge + \ifthenelse{\not\equal{#2}{#3}}{ + \ifthenelse{\not\equal{\cmdNW@edge@path}{}}{ + \def\edge@pts{}% + \@for\tmp:=\cmdNW@edge@path\do{ + \edef\edge@pts{\edge@pts (\tmp) --} + } + \protected@edef\@tempa{% + \noexpand\draw[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style] (#2) -- \edge@pts (#3)} \@tempa; + }{ + \protected@edef\@tempa{% + \noexpand\path[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style] (#2) edge [bend left = \cmdNW@edge@bend] \edge@Label (#3)}% + \@tempa; + } + }{% Self loop + \protected@edef\@tempa{% + \noexpand\path[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style] + (#2) edge [in=-\cmdNW@edge@loopshape/2+\cmdNW@edge@loopposition,out=\cmdNW@edge@loopshape/2+\cmdNW@edge@loopposition,loop,distance=\cmdNW@edge@loopsize,] \edge@Label (#3)}% + \@tempa; + } + \end{scope} +} + + +%============================================================================= +% Vertices and Edges creation +%============================================================================= + +%<---------------------------------------------------------------------------> +% Init Vertices +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {vertices} {layer}{} +\define@cmdkey [NW] {vertices} {size}{} +\define@cmdkey [NW] {vertices} {color}{} +\define@cmdkey [NW] {vertices} {opacity}{} +\define@cmdkey [NW] {vertices} {style}{} +\define@cmdkey [NW] {vertices} {shape}{} +\define@boolkey [NW] {vertices} {RGB}[true]{} +\define@boolkey [NW] {vertices} {IdAsLabel}[true]{} +\define@boolkey [NW] {vertices} {NoLabel}[true]{} +\define@boolkey [NW] {vertices} {Math}[true]{} +\define@boolkey [NW] {vertices} {Pseudo}[true]{} +\presetkeys [NW] {vertices} {layer = {}, + opacity = {}, + size = {}, + color = {}, + style = {}, + shape = {}, + RGB = false, + IdAsLabel = false, + NoLabel = false, + Math = false, + Pseudo = false,}{} + +\newcommand*{\setkeysexpanded}[2]{% + \expandafter\setkeysexpandedaux\expandafter{#2}{#1}} +\newcommand*{\setkeysexpandedaux}[2]{% + \setkeys[NW]{#2}{#1}} + +% \newcommand*{\setkeysexpandedx}[2]{% +% \expandafter\setkeysexpandedauxx\expandafter{#2}{#1}} +% \newcommand*{\setkeysexpandedauxx}[2]{% +% \setkeys[NW]{#2}{#1}} + + + +%<---------------------------------------------------------------------------> +% Vertices +%<---------------------------------------------------------------------------> +\newcommand*{\Vertices}[1][]{\@vertices[#1]}% +\def\@vertices[#1]#2{% + \setkeys[NW]{vertices}{#1}% + \@@vertices{#2}% +} +\def\@@vertices#1{% + % Check if data base already exist + \DTLifdbexists{#1}{}{ + % create dummy data base to store name + \DTLnewdb{#1} + % delete existing vertices data base + \DTLifdbexists{vertices}{ + \DTLgdeletedb{vertices} + }{} + % Load data file for vertices + \DTLloaddb[noheader=false]{vertices}{#1} + } + % Define variables to store option values + \def\vertex@Options{}% + \def\vertex@id{}% + \def\vertex@rgbValues{}% + % Go through each row and create vertices + \DTLforeach*{vertices}{}{% + % reset storage variable to default values + \edef\vertex@Options{x=0,y=0,label={},size={},color={},fontcolor={},fontsize={},fontscale={}, + opacity={},layer={},style={},NoLabel=false,IdAsLabel=false, + Math=false,RGB=false,Pseudo=false,distance={0},position={center},shape={},}% + \edef\vertex@rgbValues{}% + % Go through each row element + \DTLforeachkeyinrow{\thisValue}{ + \DTLifeq{\dtlkey}{id}{ + % Assign vertex id to storage variable + \edef\vertex@id{\thisValue}% + }{ + \DTLifeq{\dtlkey}{R}{ + \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,} + }{ + \DTLifeq{\dtlkey}{G}{ + \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,} + }{ + \DTLifeq{\dtlkey}{B}{ + \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,} + }{ + % Assign option to storage variable + \edef\vertex@Options{\vertex@Options \dtlkey=\thisValue,} + }}}} + } + % Add general settings for the Vertex + % NoLabel + \ifNW@vertices@NoLabel + \edef\vertex@Options{\vertex@Options NoLabel=true,} + \fi + % Pseudo + \ifNW@vertices@Pseudo + \edef\vertex@Options{\vertex@Options Pseudo=true,} + \fi + % IdAsLabel + \ifNW@vertices@IdAsLabel + \edef\vertex@Options{\vertex@Options IdAsLabel=true,} + \fi + % Math + \ifNW@vertices@Math + \edef\vertex@Options{\vertex@Options Math=true,} + \fi + % RGB + \ifNW@vertices@RGB + \edef\vertex@Options{\vertex@Options RGB=true,color={\vertex@rgbValues},} + \fi + % opacity + \ifthenelse{\not\equal{\cmdNW@vertices@opacity}{}} + { + \edef\vertex@Options{\vertex@Options opacity=\cmdNW@vertices@opacity,} + }{} + % size + \ifthenelse{\not\equal{\cmdNW@vertices@size}{}} + { + \edef\vertex@Options{\vertex@Options size=\cmdNW@vertices@size,} + }{} + % shape + \ifthenelse{\not\equal{\cmdNW@vertices@shape}{}} + { + \edef\vertex@Options{\vertex@Options shape=\cmdNW@vertices@shape,} + }{} + % color + \ifthenelse{\not\equal{\cmdNW@vertices@color}{}} + { + \edef\vertex@Options{\vertex@Options color=\cmdNW@vertices@color,} + }{} + \ifthenelse{\not\equal{\cmdNW@vertices@style}{}}{ + \edef\vertex@Options{\vertex@Options style={\cmdNW@vertices@style},} + }{} + % Apply settings for the Vertex + \setkeysexpanded{vertex}{\vertex@Options}% + \ifthenelse{\not\equal{\cmdNW@vertices@layer}{}}{ + \ifthenelse{\equal{\cmdNW@vertices@layer}{\cmdNW@vertex@layer}}{ + \Vertex[Network]{\vertex@id} + }{} + }{ + \Vertex[Network]{\vertex@id} + } + % Create Vertex + } +% Delete data base +% \DTLgdeletedb{#1} +} + +%<---------------------------------------------------------------------------> +% Init Edges +%<---------------------------------------------------------------------------> +\def\myvariable{\KeySettingCommand{false}} +\define@cmdkey [NW] {edges} {layer}{} +\define@cmdkey [NW] {edges} {vertices}{} +\define@cmdkey [NW] {edges} {style}{} +\define@cmdkey [NW] {edges} {lw}{} +\define@cmdkey [NW] {edges} {color}{} +\define@cmdkey [NW] {edges} {opacity}{} +\define@boolkey [NW] {edges} {RGB}[true]{} +\define@boolkey [NW] {edges} {Math}[true]{} +\define@boolkey [NW] {edges} {Direct}[true]{} +\define@boolkey [NW] {edges} {NoLabel}[true]{} +\define@boolkey [NW] {edges} {NotInBG}[true]{} +\presetkeys [NW] {edges} {layer = {}, + vertices = {}, + style = {}, + lw = {}, + color = {}, + opacity = {}, + RGB = false, + Math = false, + Direct = false, + NoLabel = false, + NotInBG = false,}{} + +\newcommand{\shortcut}[1]{% + \@tempswafalse + \@for\next:=#1\do + {\if@tempswa+\else\@tempswatrue\fi\textbf{\next}}% +} + +\newcounter{LayerCounter} + + +\newcommand\myfunc[1]{\setcounter{LayerCounter}{0}\@for\tmp:=#1\do{ +\stepcounter{LayerCounter} +\arabic{LayerCounter}-a-\textbf{\tmp}} +} + + +%<---------------------------------------------------------------------------> +% Edges +%<---------------------------------------------------------------------------> +\newcommand*{\Edges}[1][]{\@edges[#1]}% +\def\@edges[#1]#2{% + \setkeys[NW]{edges}{#1}% + \@@edges{#2}% +} +\def\@@edges#1{% +\begin{scope} + % Check if data base already exist + \DTLifdbexists{#1}{}{ + % create dummy data base to store name + \DTLnewdb{#1} + % delete existing vertices data base + \DTLifdbexists{edges}{ + \DTLgdeletedb{edges} + }{} + % Load data file for vertices + \DTLloaddb[noheader=false]{edges}{#1} + } + + % % Load data file for vertices + % \DTLloaddb[noheader=false]{#1}{#1} + % Define variables to store option values + \def\edge@Options{}% + \def\edge@u{}% + \def\edge@v{}% + \def\edge@u@layer{}% + \def\edge@v@layer{}% + \def\edge@rgbValues{}% + \def\u@layer{}% + \def\v@layer{}% + % + % Assign where the edges are drawn from to + \ifthenelse{\not\equal{\cmdNW@edges@layer}{}}{ + % set layer count back to 0 + \setcounter{LayerCounter}{0} + \@for\tmp:=\cmdNW@edges@layer\do{ + \stepcounter{LayerCounter} + \ifthenelse{\value{LayerCounter}=1}{ + \edef\u@layer{\tmp}% + }{ + \edef\v@layer{\tmp}% + } + } + }{} + % Go through each row and create edges + \DTLforeach*{edges}{}{% + % reset storage variable to default values + \edef\edge@Options{label = {}, lw = {}, color = {}, opacity = {}, style = + {}, RGB = false, Math = false, Direct = false, NotInBG = false, bend = {0}, loopsize = + {1\DefaultUnit}, position = {}, loopposition = {0}, loopshape = {90}, + distance = {.5}, path = {}, fontcolor = {}, fontsize = {}, fontscale ={},} + \edef\edge@rgbValues{}% + % Go through each row element + \DTLforeachkeyinrow{\thisValue}{ + \DTLifeq{\dtlkey}{u}{ + % Assign edge id to storage variable + \edef\edge@u{\thisValue}% + }{ + \DTLifeq{\dtlkey}{v}{ + \edef\edge@v{\thisValue}% + }{ + \DTLifeq{\dtlkey}{R}{ + \edef\edge@rgbValues{\edge@rgbValues \thisValue,} + }{ + \DTLifeq{\dtlkey}{G}{ + \edef\edge@rgbValues{\edge@rgbValues \thisValue,} + }{ + \DTLifeq{\dtlkey}{B}{ + \edef\edge@rgbValues{\edge@rgbValues \thisValue,} + }{ + % Assign option to storage variable + \edef\edge@Options{\edge@Options \dtlkey=\thisValue,} + }}}}} + } + % Add general settings for the Edges + % NoLabel + \ifNW@edges@NoLabel + \edef\edge@Options{\edge@Options label={},} + \fi + % Direct + \ifNW@edges@Direct + \edef\edge@Options{\edge@Options Direct=true,} + \fi + % Math + \ifNW@edges@Math + \edef\edge@Options{\edge@Options Math=true,} + \fi + % RGB + \ifNW@edges@RGB + \edef\edge@Options{\edge@Options RGB=true,color={\edge@rgbValues},} + \fi + \ifthenelse{\not\equal{\cmdNW@edges@style}{}}{ + \edef\edge@Options{\edge@Options style={\cmdNW@edges@style},} + }{} + % lw + \ifthenelse{\not\equal{\cmdNW@edges@lw}{}} + { + \edef\edge@Options{\edge@Options lw=\cmdNW@edges@lw,} + }{} + % color + \ifthenelse{\not\equal{\cmdNW@edges@color}{}} + { + \edef\edge@Options{\edge@Options color=\cmdNW@edges@color,} + }{} + % opacity + \ifthenelse{\not\equal{\cmdNW@edges@opacity}{}} + { + \edef\edge@Options{\edge@Options opacity=\cmdNW@edges@opacity,} + }{} + % NoLabel + \ifNW@edges@NotInBG + \edef\edge@Options{\edge@Options NotInBG=true,} + \fi + % Apply settings for the Edge + \setkeysexpanded{edge}{\edge@Options}% + % Create Edge + \ifthenelse{\equal{\cmdNW@edges@layer}{}}{ + \Edge[Network](\edge@u)(\edge@v) + }{ + \ifthenelse{\not\equal{\cmdNW@edges@vertices}{}}{ + \DTLifdbexists{vertices}{ + \DTLgdeletedb{vertices} + }{} + % Load data file for vertices + \DTLloaddb[noheader=false]{vertices}{\cmdNW@edges@vertices} + }{} + % find assigned layer to the used vertices + \DTLforeach*{vertices}{\id=id,\layer=layer}{% + \ifthenelse{\equal{\id}{\edge@u}}{ + \edef\edge@u@layer{\layer}% + \dtlbreak + }{} + } + \DTLforeach*{vertices}{\id=id,\layer=layer}{% + \ifthenelse{\equal{\id}{\edge@v}}{ + \edef\edge@v@layer{\layer}% + \dtlbreak + }{} + } + % if the edge is an intra layer edge + \ifthenelse{\equal{\u@layer}{\v@layer}}{ + \ifthenelse{\equal{\u@layer}{\edge@u@layer}}{ + \ifthenelse{\equal{\v@layer}{\edge@v@layer}}{ + \Edge[Network](\edge@u)(\edge@v) + }{} + }{} + }{ + \ifthenelse{\equal{\u@layer}{\edge@u@layer}}{ + \ifthenelse{\equal{\v@layer}{\edge@v@layer}}{ + \Edge[Network](\edge@u)(\edge@v) + }{} + }{} + \ifthenelse{\equal{\v@layer}{\edge@u@layer}}{ + \ifthenelse{\equal{\u@layer}{\edge@v@layer}}{ + \Edge[Network](\edge@u)(\edge@v) + }{} + }{} + + } + + } + } +\end{scope} +% Delete data base +% \DTLgdeletedb{#1} +} + + +%<---------------------------------------------------------------------------> +% Init Layer +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {layer} {layer}{} +\define@cmdkey [NW] {layer} {z}{} +\define@cmdkey [NW] {layer} {opacity}{} +\presetkeys [NW] {layer} {layer = {1}, + opacity = {}, + z = {},}{} + +%<---------------------------------------------------------------------------> +% Layer +%<---------------------------------------------------------------------------> +%\def\@layer{canvas is yx plane at z=-3,} + +\def\@layer[#1]#2{ +\setkeys[NW]{layer}{#1} +\ifthenelse{\not\equal{\cmdNW@layer@z}{}}{ + \tikzset{LocalLayerZ/.style={canvas is yx plane at z=\cmdNW@layer@z}} +}{ + \tikzset{LocalLayerZ/.style={canvas is yx plane at z=(\cmdNW@layer@layer-1)*\NetworkLayerDistance}} +} +\ifthenelse{\not\equal{\cmdNW@layer@opacity}{}}{ + \tikzset{LocalLayerOpacity/.style={fill opacity = \cmdNW@layer@opacity}} +}{ + \tikzset{LocalLayerOpacity/.style={}} +} +\begin{scope}[LocalLayerZ,LocalLayerOpacity] +} +%\newcommand*{\Layer}[1][]{\@layer[#1]}% +\newenvironment{Layer}[1][]{\@layer[#1]1}{\end{scope}} +%\def\@layer[#1]#2{} +% \newcommand*{\Edges}[1][]{\@edges[#1]}% +% \def\@edges[#1]#2{% +% \setkeys[NW]{edges}{#1}% +% \@@edges{#2}% +% } +% \def\@@edges#1{% + + + +%<---------------------------------------------------------------------------> +% Init Plane +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {plane} {x}{} +\define@cmdkey [NW] {plane} {y}{} +\define@cmdkey [NW] {plane} {width}{} +\define@cmdkey [NW] {plane} {height}{} +\define@cmdkey [NW] {plane} {color}{} +\define@cmdkey [NW] {plane} {opacity}{} +\define@cmdkey [NW] {plane} {style}{} +\define@cmdkey [NW] {plane} {layer}{} +\define@cmdkey [NW] {plane} {grid}{} +\define@cmdkey [NW] {plane} {image}{} +\define@boolkey [NW] {plane} {RGB}[true]{} +\define@boolkey [NW] {plane} {InBG}[true]{} +\define@boolkey [NW] {plane} {NoFill}[true]{} +\define@boolkey [NW] {plane} {NoBorder}[true]{} +\define@boolkey [NW] {plane} {ImageAndFill}[true]{} +\presetkeys [NW] {plane} {x = {0}, + y = {0}, + width = {\PlaneWidth}, + height = {\PlaneHeight}, + color = {}, + opacity = {}, + style = {}, + layer = {1}, + grid = {}, + image = {}, + RGB = false, + InBG = false, + NoFill = false, + NoBorder= false, + ImageAndFill= false,}{} + + +%<---------------------------------------------------------------------------> +% Plane +%<---------------------------------------------------------------------------> +\newcommand*{\Plane}[1][]{\@plane[#1]}% +\def\@plane[#1]{% + \setkeys[NW]{plane}{#1}% + \ifNW@plane@ImageAndFill + \setkeys[NW]{plane}{#1}% + \else + \ifthenelse{\not\equal{\cmdNW@plane@image}{}}{ + \setkeys[NW]{plane}{#1,NoFill} + }{} + \fi + \@@plane% +} +\def\@@plane{% + % Draw Plane on the Background layer + \ifNW@plane@InBG + \tikzset{InBGStyle/.style={on background layer}} + \else + \tikzset{InBGStyle/.style={}} + \fi + \begin{scope}[InBGStyle] + % Check if the color of the plane is redefined, if so the new style is + % used. If the option RGB is true, RGB values can be used to define the + % color of the plane entered in the form {R,G,B}. If RGB is not true the + % default colors of tikz can be used (e.g. blue!50!green) + \ifNW@plane@RGB + \ifthenelse{\not\equal{\cmdNW@plane@color}{}}{ + \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@plane@color} + \tikzset{LocalPlaneFill/.style={fill = LocalColor}} + }{ + \tikzset{LocalPlaneFill/.style={}} + } + \else + \ifthenelse{\not\equal{\cmdNW@plane@color}{}}{ + \tikzset{LocalPlaneFill/.style={fill = \cmdNW@plane@color}} + }{ + \tikzset{LocalPlaneFill/.style={}} + } + \fi + % Check if the opacity of the plane is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@plane@opacity}{}}{ + \tikzset{LocalPlaneOpacity/.style={fill opacity = \cmdNW@plane@opacity}} + }{ + \tikzset{LocalPlaneOpacity/.style={}} + } + \begin{scope}[canvas is yx plane at z=(\cmdNW@plane@layer-1)*\NetworkLayerDistance] + % Draw the fill of the Plane + \ifNW@plane@NoFill + \else + \protected@edef\@tempa{% + \noexpand\fill[PlaneFillStyle,LocalPlaneFill,LocalPlaneOpacity](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale) + rectangle ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}% + \@tempa; + \fi + % Draw image on the Plane + \ifthenelse{\not\equal{\cmdNW@plane@image}{}}{ + %\protected@edef\@tempa{% + %\noexpand + \node[inner sep=0pt,LocalPlaneOpacity] at + ($(\cmdNW@plane@width/2,\cmdNW@plane@height/2)+(\cmdNW@plane@x,\cmdNW@plane@y)$) + {\includegraphics[width=\cmdNW@plane@width\DefaultUnit,height=\cmdNW@plane@height\DefaultUnit]{\cmdNW@plane@image}}; + %}% + %\@tempa; + }{} + % Draw grid on the Plane + \ifthenelse{\not\equal{\cmdNW@plane@grid}{}}{ + \protected@edef\@tempa{% + \noexpand\draw[PlaneGridStyle,step=\cmdNW@plane@grid*\DistanceScale](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale) + grid ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}% + \@tempa; + }{} + % Draw the border of the Plane + \ifNW@plane@NoBorder + \else + \protected@edef\@tempa{% + \noexpand\draw[PlaneBorderStyle,\cmdNW@plane@style](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale) + rectangle ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}% + \@tempa; + \fi + \end{scope} +\end{scope} +} + + +%<---------------------------------------------------------------------------> +% Init Text +%<---------------------------------------------------------------------------> +\define@cmdkey [NW] {text} {x}{} +\define@cmdkey [NW] {text} {y}{} +\define@cmdkey [NW] {text} {layer}{} +\define@cmdkey [NW] {text} {color}{} +\define@cmdkey [NW] {text} {opacity}{} +\define@cmdkey [NW] {text} {rotation}{} +\define@cmdkey [NW] {text} {fontsize}{} +\define@cmdkey [NW] {text} {anchor}{} +\define@cmdkey [NW] {text} {position}{} +\define@cmdkey [NW] {text} {distance}{} +\define@cmdkey [NW] {text} {style}{} +\define@cmdkey [NW] {text} {width}{} +\define@boolkey [NW] {text} {RGB}[true]{} +\presetkeys [NW] {text} {x = {0}, + y = {0}, + layer = {}, + color = {}, + opacity = {}, + fontsize = {}, + anchor = {}, + position = {}, + rotation = {}, + distance = {0\DefaultUnit}, + style = {}, + width = {}, + RGB = false,}{} + + +%<---------------------------------------------------------------------------> +% Text +%<---------------------------------------------------------------------------> +\newcommand*{\Text}[1][]{\@text[#1]}% +\def\@text[#1]#2{% + \setkeys[NW]{text}{#1}% + \@@text{#2}% +} +\def\@@text#1{% + % Check if the color of the text is redefined, if so the new style is + % used. If the option RGB is true, RGB values can be used to define the + % color of the text entered in the form {R,G,B}. If RGB is not true the + % default colors of tikz can be used (e.g. blue!50!green) + \ifNW@text@RGB + \ifthenelse{\not\equal{\cmdNW@text@color}{}}{ + \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@text@color} + \tikzset{LocalTextColor/.style={color = LocalColor}} + }{ + \tikzset{LocalTextColor/.style={}} + } + \else + \ifthenelse{\not\equal{\cmdNW@text@color}{}}{ + \tikzset{LocalTextColor/.style={color = \cmdNW@text@color}} + }{ + \tikzset{LocalTextColor/.style={}} + } + \fi + % Check if the opacity of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@opacity}{}}{ + \tikzset{LocalTextOpacity/.style={text opacity = \cmdNW@text@opacity}} + }{ + \tikzset{LocalTextOpacity/.style={}} + } + % Check if the rotation of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@rotation}{}}{ + \tikzset{LocalTextRotation/.style={rotate = \cmdNW@text@rotation}} + }{ + \tikzset{LocalTextRotation/.style={}} + } + % Check if the font size of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@fontsize}{}}{ + \tikzset{LocalTextFontSize/.style={font = \cmdNW@text@fontsize}} + }{ + \tikzset{LocalTextFontSize/.style={}} + } + % Check if the position of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@position}{}}{ + \tikzset{LocalTextPosition/.style={\cmdNW@text@position = \cmdNW@text@distance}} + }{ + \tikzset{LocalTextPosition/.style={}} + } + % Check if the anchor of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@anchor}{}}{ + \tikzset{LocalTextAnchor/.style={anchor = \cmdNW@text@anchor}} + }{ + \tikzset{LocalTextAnchor/.style={}} + } + % Check if the text width of the text is redefined, if so the new style is used + \ifthenelse{\not\equal{\cmdNW@text@width}{}}{ + \tikzset{LocalTextWidth/.style={text width = \cmdNW@text@width}} + }{ + \tikzset{LocalTextWidth/.style={}} + } + \ifthenelse{\equal{\cmdNW@text@layer}{}}{ + \protected@edef\@tempa{% + \noexpand\node[TextStyle, LocalTextColor, LocalTextOpacity, + LocalTextFontSize, LocalTextRotation, LocalTextPosition, + LocalTextAnchor, LocalTextWidth, \cmdNW@text@style] at + (\cmdNW@text@x*\DistanceScale,\cmdNW@text@y*\DistanceScale){#1} + }\@tempa;% + }{ + \begin{scope}[canvas is yx plane at z=(\cmdNW@text@layer-1)*\NetworkLayerDistance] + \protected@edef\@tempa{% + \noexpand\node[TextStyle, LocalTextColor, LocalTextOpacity, + LocalTextFontSize, LocalTextRotation, LocalTextPosition, + LocalTextAnchor, LocalTextWidth, \cmdNW@text@style] at + (\cmdNW@text@x*\DistanceScale,\cmdNW@text@y*\DistanceScale){#1} + }\@tempa;% + \end{scope} + } + } + + + + + + + + + + + + + + + + + + + +\endinput +%============================================================================= +% eof +% +% Local Variables: +% mode: latex +% mode: flyspell +% mode: auto-fill +% fill-column: 80 +% TeX-master: t +% End: |