You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tex-compiler/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymindmap.code.tex

417 lines
14 KiB

% Copyright 2006 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
\ProvidesFileRCS{tikzlibrarymindmap.code.tex}
\usetikzlibrary{trees,decorations}%
% A decoration for connecting circle nodes
%
% Parameters: start radius, end radius, amplitude, angle
\pgfdeclaredecoration{circle connection bar}{initial}
{%
\state{initial}[width=0pt,next state=bar]
{
{
\pgftransformxshift{-\pgfkeysvalueof{/pgf/decoration/start radius}}%
\pgfpathmoveto{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}}
\pgfpatharc{\pgfdecorationsegmentangle}{-\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}
\pgfutil@tempcnta=-\pgfdecorationsegmentangle\relax
\advance\pgfutil@tempcnta by90\relax
\pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/decoration/start radius}}
\pgfmathsetlength\pgfutil@tempdimb{\pgfdecorationsegmentamplitude}
\pgfpathcurveto
{\pgfpointadd
{\pgfpointpolar{-\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}}
{\pgfpointpolar{\the\pgfutil@tempcnta}{.25\pgfutil@tempdima}}}
{\pgfqpoint{1.25\pgfutil@tempdima}{-.5\pgfutil@tempdimb}}
{\pgfqpoint{1.5\pgfutil@tempdima}{-.5\pgfutil@tempdimb}}
\pgfpathlineto{\pgfpoint{1.5\pgfutil@tempdima}{.5\pgfutil@tempdimb}}
\pgfutil@tempcnta=\pgfdecorationsegmentangle\relax
\advance\pgfutil@tempcnta by-90\relax
\pgfpathcurveto
{\pgfpoint{1.25\pgfutil@tempdima}{.5\pgfutil@tempdimb}}
{\pgfpointadd
{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}}
{\pgfpointpolar{\the\pgfutil@tempcnta}{.25\pgfutil@tempdima}}}
{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}}
\pgfpathclose
}
}%
\state{bar}[width=0pt,next state=end]
{
\pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/decoration/start radius}}%
\pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/decoration/end radius}}%
\pgfmathsetlength\pgf@xc{\pgfdecorationsegmentamplitude}%
\pgfpathrectangle
{\pgfqpoint{.5\pgfutil@tempdima}{-.5\pgf@xc}}
{\pgfpoint{\pgfdecoratedremainingdistance+-.5\pgfutil@tempdimb+-.5\pgfutil@tempdima}{\pgf@xc}}
}%
\state{end}[width=0pt,next state=final]
{
{
\pgftransformxshift{\pgfdecoratedremainingdistance}%
\pgftransformxscale{-1}%
\pgftransformxshift{-\pgfkeysvalueof{/pgf/decoration/end radius}}%
\pgfpathmoveto{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/end radius}}}
\pgfpatharc{\pgfdecorationsegmentangle}{-\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/end radius}}
\pgfutil@tempcnta=-\pgfdecorationsegmentangle\relax
\advance\pgfutil@tempcnta by90\relax
\pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/decoration/end radius}}
\pgfmathsetlength\pgfutil@tempdimb{\pgfdecorationsegmentamplitude}%
\pgfpathcurveto
{\pgfpointadd
{\pgfpointpolar{-\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/end radius}}}
{\pgfpointpolar{\the\pgfutil@tempcnta}{.25\pgfutil@tempdima}}}
{\pgfqpoint{1.25\pgfutil@tempdima}{-.5\pgfutil@tempdimb}}
{\pgfqpoint{1.5\pgfutil@tempdima}{-.5\pgfutil@tempdimb}}
\pgfpathlineto{\pgfpoint{1.5\pgfutil@tempdima}{.5\pgfutil@tempdimb}}
\pgfutil@tempcnta=\pgfdecorationsegmentangle\relax
\advance\pgfutil@tempcnta by-90\relax
\pgfpathcurveto
{\pgfpoint{1.25\pgfutil@tempdima}{.5\pgfutil@tempdimb}}
{\pgfpointadd
{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/end radius}}}
{\pgfpointpolar{\the\pgfutil@tempcnta}{.25\pgfutil@tempdima}}}
{\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/end radius}}}
\pgfpathclose
}
}%
\state{final}
{}%
}%
\pgfkeys{/pgf/decoration/angle=20}%
% To paths for connecting circle nodes
\tikzset{circle connection bar/.style=
{to path={
\pgfextra{%
\tikz@lib@mindmap@check{\tikztostart}%
\tikz@compute@circle@radii\tikz@compute@segmentamplitude%
}
[every circle connection bar]
decorate [decoration=circle connection bar]
{ -- (\tikztotarget) \tikztonodes}
},
append after command={[fill=\tikz@concept@color,draw=none]}
}}%
\tikzset{every circle connection bar/.style={}}%
\def\tikz@compute@circle@radii{%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztostart}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgfkeys{/pgf/decoration/start radius/.expanded=\the\pgf@xa}%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{center}}}%
\pgf@xa=\pgf@x%
\pgf@process{\pgfpointtransformed{\pgfpointanchor{\tikztotarget}{west}}}%
\advance\pgf@xa by-\pgf@x%
\pgfkeys{/pgf/decoration/end radius/.expanded=\the\pgf@xa}%
}%
\def\tikz@compute@segmentamplitude{%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/start radius}\relax%
\ifdim\pgf@x>\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\pgf@x=\pgfkeysvalueof{/pgf/decoration/end radius}\relax%
\fi%
\pgf@x=.175\pgf@x\relax%
\edef\pgfdecorationsegmentamplitude{\the\pgf@x}%
}%
% Check whether start and end are nodes!
\def\tikz@lib@mindmap@check#1{%
\pgfutil@ifundefined{pgf@sh@ns@#1}%
{\tikzerror{You are attempting to connect two things by a circle
connection bar where one is not a node}}{%
\expandafter\ifx\csname pgf@sh@ns@#1\endcsname\tikz@lib@coordinate@text%
\tikzerror{You are attempting to connect node of shape
'coordinate' by a circle connection bar. The shape should be
'circle' or something similar, instead.}
\fi%
}
}%
\def\tikz@lib@coordinate@text{coordinate}%
% Switch color in a mindmap
\tikzoption{circle connection bar switch color}{\tikz@parse@switch#1\pgf@unique}%
\def\tikz@parse@switch from (#1) to (#2)\pgf@unique{%
\tikzset{to path={%
\pgfextra{%
\tikz@lib@mindmap@check{\tikztostart}%
\tikz@compute@circle@radii\tikz@compute@segmentamplitude%
\global\let\tikz@lib@save@start=\tikztostart%
\global\let\tikz@lib@save@target=\tikztotarget%
\pgfkeysgetvalue{/pgf/decoration/start radius}\pgf@temp%
\global\let\tikz@lib@saved@start@radius=\pgf@temp%
\pgfkeysgetvalue{/pgf/decoration/end radius}\pgf@temp%
\global\let\tikz@lib@saved@end@radius=\pgf@temp%
}%
[every circle connection bar]
decorate [decoration=circle connection bar]
{ -- (\tikztotarget) \tikztonodes}
},
append after command={
[fill=none,draw=none,path picture=\tikz@lib@shade@pic]
\pgfextra{
\pgfutil@colorlet{tikz@switch@from}{#1}%
\pgfutil@colorlet{tikz@switch@to}{#2}%
}}
}
}%
\def\tikz@lib@shade@pic{%
% We have to draw the shading...
% compute start point:
\pgftransformreset%
\pgf@process{\pgfpointnormalised{\pgfpointdiff{\pgfpointanchor{\tikz@lib@save@start}{center}}{\pgfpointanchor{\tikz@lib@save@target}{center}}}}%
\edef\tikz@lib@mm@vec{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\pgfmathsetlength\pgf@xc{\tikz@lib@saved@start@radius}
\pgf@process{\pgfpointadd{\pgfpointtransformed{\pgfpointanchor{\tikz@lib@save@start}{center}}}
{\pgfpointscale{\pgf@sys@tonumber{\pgf@xc}}{\tikz@lib@mm@vec}}}
\edef\tikz@lib@mm@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\pgfmathsetlength\pgf@xc{\tikz@lib@saved@end@radius}
\pgf@process{\pgfpointdiff{\tikz@lib@mm@start}{\pgfpointadd{\pgfpointtransformed{\pgfpointanchor{\tikz@lib@save@target}{center}}}
{\pgfpointscale{-\pgf@sys@tonumber{\pgf@xc}}{\tikz@lib@mm@vec}}}}
\edef\tikz@lib@mm@end{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
\pgftransformshift{\tikz@lib@mm@start}
\pgflowlevelsynccm
\pgf@process{\tikz@lib@mm@vec}
{
\pgf@xa=-\pgf@x%
\pgftransformcm{\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
{\pgf@sys@tonumber{\pgf@y}}{\pgf@sys@tonumber{\pgf@xa}}%
{\pgfpointorigin}%
\pgf@process{\pgfpointtransformed{\tikz@lib@mm@end}}%
\expandafter
}
\edef\tikz@lib@mm@length{\the\pgf@x}%
\pgf@process{\tikz@lib@mm@vec}
\pgf@ya=-\pgf@y%
\pgftransformcm{\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
{\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}%
{\pgfpointorigin}%
% Y scale:
\pgfmathsetlength\pgf@y{\tikz@lib@saved@start@radius}%
\pgfmathsetlength\pgf@ya{\tikz@lib@saved@end@radius}%
\ifdim\pgf@y<\pgf@ya%
\pgf@y=\pgf@ya%
\fi%
\pgf@y=0.01992528\pgf@y%
\pgftransformyscale{\pgf@sys@tonumber{\pgf@y}}%
\pgfpathrectanglecorners
{\pgfpoint{-\tikz@lib@saved@start@radius}{-50bp}}
{\pgfpoint{1pt}{50bp}}
\pgfsetfillcolor{tikz@switch@from}
\pgfusepath{fill}
\pgfpathrectanglecorners
{\pgfpoint{\tikz@lib@mm@length+\tikz@lib@saved@end@radius}{-50bp}}
{\pgfpoint{\tikz@lib@mm@length-1pt}{50bp}}
\pgfsetfillcolor{tikz@switch@to}
\pgfusepath{fill}
% X scale:
\pgf@x=\tikz@lib@mm@length%
\pgf@x=0.009962\pgf@x%
\pgftransformxscale{\pgf@sys@tonumber{\pgf@x}}%
\pgftransformxshift{50bp}
\pgflowlevelsynccm%
\pgfuseshading{tikz@shade@bar}
}%
\tikzoption{concept color}{%
\let\tikz@old@concept@color=\tikz@concept@color%
\def\tikz@edge@to@parent@path{
(\tikzparentnode)
to[circle connection bar switch color=from (\tikz@old@concept@color) to (#1)]
(\tikzchildnode)}
\def\tikz@concept@color{#1}%
}%
\pgfdeclarehorizontalshading[tikz@switch@from,tikz@switch@to]{tikz@shade@bar}{100bp}{%
color(0pt)=(tikz@switch@from);
color(100bp)=(tikz@switch@to)}%
% A concept node
\tikzset{concept/.style= {circle,fill=\tikz@concept@color,draw=\tikz@concept@color,every concept}}%
\tikzset{every concept/.style= {}}%
\def\tikz@concept@color{black}%
\tikzset{tikz@concept@setting/.style={edge from parent path={(\tikzparentnode) to [circle connection bar] (\tikzchildnode)}}}%
\tikzset{tikz@concept@color@set/.style={}}%
\tikzset{extra concept/.style= {concept color=black!50,level 2 concept,concept,every extra concept}}%
\tikzset{every extra concept/.style={}}%
\tikzset{concept connection/.style={line width=1mm,shorten <=2mm,shorten >=2mm,cap=round,draw=black!50}}%
% A mindmap
\tikzset{mindmap/.style=
{fill,draw,very thick,outer sep=0pt,inner sep=1pt,%
every child/.append style={style=tikz@concept@setting,style=tikz@concept@color@set},%
root concept,
level 1/.append style={level 1 concept},
level 2/.append style={level 2 concept},
level 3/.append style={level 3 concept},
level 4/.append style={level 4 concept},
text centered,%
segment angle=20,
style=every mindmap,
}}%
\tikzset{every mindmap/.style={}}%
\tikzset{root concept/.style= {minimum size=4cm,text width=3.5cm,font=\pgfutil@font@large}}%
\tikzset{level 1 concept/.style={minimum size=2.25cm,
level distance=5cm,
text width=2cm,
sibling angle=60,
font=\pgfutil@font@small}}%
\tikzset{level 2 concept/.style={minimum size=1.75cm,%
level distance=2.9cm,%
text width=1.5cm,%
sibling angle=60,%
font=\pgfutil@font@footnotesize}}%
\tikzset{level 3 concept/.style={minimum size=1.15cm,%
text width=1cm,%
level distance=2.4cm,%
sibling angle=30,%
font=\pgfutil@font@tiny}}%
\tikzset{level 4 concept/.style={minimum size=0.9cm,%
text width=0.7cm,
level distance=1.85cm,%
sibling angle=30,%
font=\pgfutil@font@tiny}}%
\tikzset{small mindmap/.style=
{%
root concept/.style={minimum size=2.3cm,text width=2.1cm,font=\pgfutil@font@footnotesize},
level 1 concept/.style={%
minimum size=1.5cm,
level distance=2.8cm,
text width=1.4cm,
sibling angle=75,
font=\pgfutil@font@scriptsize},%
level 2 concept/.style={%
minimum size=1.1cm,%
level distance=2.2cm,%
text width=1.1cm,%
sibling angle=60,%
font=\pgfutil@font@tiny},%
level 3 concept/.style={%
level 2 concept,
sibling angle=30,%
font=\pgfutil@font@tiny},%
level 4 concept/.style={%
level 3 concept,
},
mindmap,%
line width=2pt,
}}%
\tikzset{large mindmap/.style=
{%
root concept/.style={minimum size=5.6cm,text width=4.5cm,font=\pgfutil@font@Large},
level 1 concept/.style={%
minimum size=3.2cm,
level distance=7cm,
text width=2.8cm,
sibling angle=60,
font=},%
level 2 concept/.style={%
minimum size=2.45cm,%
level distance=4cm,%
text width=2.2cm,%
sibling angle=60,%
font=\pgfutil@font@small%
},%
level 3 concept/.style={%
minimum size=1.63cm,%
text width=1.4cm,%
level distance=3.38cm,%
sibling angle=30,%
font=\pgfutil@font@scriptsize},%
level 4 concept/.style={%
minimum size=1.27cm,%
text width=1cm,
level distance=2.60cm,%
sibling angle=30,%
font=\pgfutil@font@tiny},%
mindmap,%
line width=2pt,
}}%
\tikzset{huge mindmap/.style=
{%
root concept/.style={minimum size=8cm,text width=7cm,font=\pgfutil@font@huge},
level 1 concept/.style={%
minimum size=4.5cm,
level distance=10cm,
text width=4cm,
sibling angle=60,
font=\pgfutil@font@large},%
level 2 concept/.style={%
minimum size=3.5cm,%
level distance=5.8cm,%
text width=3cm,%
sibling angle=60,%
font=%
},%
level 3 concept/.style={%
minimum size=2.3cm,%
text width=2cm,%
level distance=4.8cm,%
sibling angle=30,%
font=\pgfutil@font@footnotesize},%
level 4 concept/.style={%
minimum size=1.7cm,%
text width=1.4cm,
level distance=3.7cm,%
sibling angle=30,%
font=\pgfutil@font@scriptsize},%
mindmap,%
line width=3pt,
}}%
% Annotations
\tikzset{annotation/.style={shape=rectangle,
minimum size=0pt,
text width=3.5cm,
outer sep=1.5mm,
inner sep=1mm,
text badly ragged,
rounded corners,
font=\pgfutil@font@tiny,
every annotation}}%
\tikzset{every annotation/.style={}}%
\endinput