diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex | 1097 |
1 files changed, 1097 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex new file mode 100644 index 00000000000..41f0fcfb243 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex @@ -0,0 +1,1097 @@ +% Copyright 2007 by Till Tantau and Mark Wibrow +% +% 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[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibraryshapes.multipart.code.tex,v 1.7 2008/01/15 15:41:18 vibrovski Exp $ + +\newbox\pgfnodepartlowerbox + +% +% A circle that is split in the middle into an upper and a lower part. +% +% This node consists of two parts: The upper (main) part is shown in +% the upper half of the circle. The second part is the (optional) +% lower part. +% +% Parts: text, lower + +\pgfdeclareshape{circle split} +{ + % + % Node parts + % + \nodeparts{text,lower} + + % + % Anchors + % + \savedanchor\centerpoint{% + \pgf@x=.5\wd\pgfnodeparttextbox% + \pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@y=-\pgf@y% + \advance\pgf@y by-\dp\pgfnodeparttextbox% + \advance\pgf@y by-.5\pgflinewidth% + }% + \savedanchor\loweranchor{% + \pgf@x=-.5\wd\pgfnodepartlowerbox% + \advance\pgf@x by.5\wd\pgfnodeparttextbox% + \pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@y=-2\pgf@y% + \advance\pgf@y by-\ht\pgfnodepartlowerbox% + \advance\pgf@y by-.5\pgflinewidth% + \advance\pgf@y by-\dp\pgfnodeparttextbox% + \advance\pgf@y by-.5\pgflinewidth% + } + + \saveddimen\radius{% + % + % Caculate ``height radius'' + % + %\pgf@ya=.5\ht\pgfnodeparttextbox% +% \advance\pgf@ya by.5\dp\pgfnodeparttextbox% +% \advance\pgf@ya by.5\ht\pgfnodepartlowerbox% +% \advance\pgf@ya by.5\dp\pgfnodepartlowerbox% +% \advance\pgf@ya by.5\pgflinewidth% + % + % MW: Suggested correction for above calculation: Use the tallest box * 2. + % + \pgf@ya=.5\ht\pgfnodeparttextbox% + \advance\pgf@ya by.5\dp\pgfnodeparttextbox% + \pgf@yb=.5\ht\pgfnodepartlowerbox% + \advance\pgf@yb by.5\dp\pgfnodepartlowerbox% + \ifdim\pgf@ya>\pgf@yb\relax% + \pgf@ya2.0\pgf@ya\relax% + \else% + \pgf@ya2.0\pgf@yb\relax% + \fi% + \advance\pgf@ya by.5\pgflinewidth% + \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@ya by2\pgf@yb% + % + % Caculate ``width radius'' + % + \pgf@xa=.5\wd\pgfnodeparttextbox% + \ifdim\pgf@xa<.5\wd\pgfnodepartlowerbox% + \pgf@xa=.5\wd\pgfnodepartlowerbox% + \fi% + \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}% + \advance\pgf@xa by\pgf@xb% + % + % Calculate length of radius vector: + % + \pgf@process{\pgfpointnormalised{\pgfqpoint{\pgf@xa}{\pgf@ya}}}% + \ifdim\pgf@x>\pgf@y% + \c@pgf@counta=\pgf@x% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@xa=16\pgf@xa\relax% + \divide\pgf@xa by\c@pgf@counta% + \pgf@xa=16\pgf@xa\relax% + \fi% + \else% + \c@pgf@counta=\pgf@y% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@ya=16\pgf@ya\relax% + \divide\pgf@ya by\c@pgf@counta% + \pgf@xa=16\pgf@ya\relax% + \fi% + \fi% + \pgf@x=\pgf@xa% + % + % If necessary, adjust radius so that the size requirements are + % met: + % + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}% + \ifdim\pgf@x<.5\pgf@xb% + \pgf@x=.5\pgf@xb% + \fi% + \ifdim\pgf@x<.5\pgf@yb% + \pgf@x=.5\pgf@yb% + \fi% + % + % Now, add larger of outer sepearations. + % + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb% + \advance\pgf@x by\pgf@yb% + \else% + \advance\pgf@x by\pgf@xb% + \fi% + } + + % + % Anchors + % + \inheritanchorborder[from=circle] + \inheritanchor[from=circle]{north} + \inheritanchor[from=circle]{north west} + \inheritanchor[from=circle]{north east} + \inheritanchor[from=circle]{center} + \inheritanchor[from=circle]{west} + \inheritanchor[from=circle]{east} + \inheritanchor[from=circle]{mid} + \inheritanchor[from=circle]{mid west} + \inheritanchor[from=circle]{mid east} + \inheritanchor[from=circle]{base} + \inheritanchor[from=circle]{base west} + \inheritanchor[from=circle]{base east} + \inheritanchor[from=circle]{south} + \inheritanchor[from=circle]{south west} + \inheritanchor[from=circle]{south east} + \anchor{lower}{\loweranchor} + + % + % Background path + % + \inheritbackgroundpath[from=circle] + \beforebackgroundpath{ + \pgfutil@tempdima=\radius% + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb% + \advance\pgfutil@tempdima by-\pgf@yb% + \else% + \advance\pgfutil@tempdima by-\pgf@xb% + \fi% + \advance\pgfutil@tempdima by-.5\pgflinewidth% + \pgfsetshortenstart{0pt}% + \pgfsetshortenend{0pt}% + \pgfsetarrows{-}% + \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpoint{-1\pgfutil@tempdima}{0pt}}}% + \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}}% + \pgfusepath{stroke}% + } +} + + + + + +% (Most) keys for shape rectangle split. +% +% /pgf/rectangle split parts : Set the number of rectangles to split into. +% /pgf/rectangle split part align : Align the for the boxes in each part +% (also keys for each part) +% /pgf/rectangle split use custom fill : Use a custom (behindbackground path) fill. +% /pgf/rectangle split part fill : Custom fill for ech part. +% (also keys for each part) +% /pgf/rectangle split draw splits : Draw the line between node parts. +% /pgf/rectangle split empty part height : Set the default height for empty boxes. + + +\newif\ifpgfrectanglesplitdrawsplits +\pgfrectanglesplitdrawsplitstrue + +\newif\ifpgfrectanglesplitusecustomfill +\pgfrectanglesplitusecustomfillfalse + +\pgfkeys{/pgf/.cd, + rectangle split parts/.initial=4, + rectangle split empty part height/.initial=1ex, + rectangle split draw splits/.is if=pgfrectanglesplitdrawsplits, + % + rectangle split part align/.code=\pgf@lib@shapes@rectanglesplit@assigntoparts{#1}{align}, + rectangle split text part align/.initial=center, + rectangle split second part align/.initial=center, + rectangle split third part align/.initial=center, + rectangle split fourth part align/.initial=center, + % + rectangle split use custom fill/.is if=pgfrectanglesplitusecustomfill, + rectangle split part fill/.code={% + \pgfrectanglesplitusecustomfilltrue% + \pgf@lib@shapes@rectanglesplit@assigntoparts{#1}{fill}% + }, + rectangle split text part fill/.initial=white, + rectangle split second part fill/.initial=white, + rectangle split third part fill/.initial=white, + rectangle split fourth part fill/.initial=white +} + +% Internal macros for the rectangle split shape. +% +\def\pgf@lib@shapes@rectanglesplit@left{left} +\def\pgf@lib@shapes@rectanglesplit@right{right} + +\def\pgf@lib@shapes@rectanglesplit@assigntoparts#1#2{% + \expandafter\pgf@lib@shapes@rectanglesplit@@assigntoparts#1,\@@,\@@,\@@,\@@,\pgf@lib#2\pgf@lib} +\def\pgf@lib@shapes@rectanglesplit@@assigntoparts#1,#2,#3,#4,#5\pgf@lib#6\pgf@lib{% + \pgfkeys{/pgf/.cd,% + rectangle split text part #6=#1, + rectangle split second part #6=#1, + rectangle split third part #6=#1, + rectangle split fourth part #6=#1 + }% + \ifx#2\@@\else% + \pgfkeys{/pgf/.cd,% + rectangle split second part #6=#2, + rectangle split third part #6=#2, + rectangle split fourth part #6=#2 + }% + \fi% + \ifx#3\@@\else% + \pgfkeys{/pgf/.cd,% + rectangle split third part #6=#3, + rectangle split fourth part #6=#3 + }% + \fi% + \ifx#4\@@\else% + \pgfkeys{/pgf/rectangle split fourth part #6=#4}% + \fi% +}% + +\newbox\pgfnodepartsecondbox +\newbox\pgfnodepartthirdbox +\newbox\pgfnodepartfourthbox + +\pgfdeclareshape{rectangle split}{% + \nodeparts{text,second,third,fourth} + \savedmacro\getrectanglesplitparameters{% + % + % If the height+depth of any box is 0pt use the default empty height. + % + \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/rectangle split empty part height}} + \pgf@y\ht\pgfnodeparttextbox% + \advance\pgf@y\dp\pgfnodeparttextbox% + \ifdim\pgf@y=0pt\relax% + \setbox\pgfnodeparttextbox=\hbox{% + \vrule width0pt height\the\pgfutil@tempdima depth0pt% + }% + \fi% + \pgf@y\ht\pgfnodepartsecondbox% + \advance\pgf@y\dp\pgfnodepartsecondbox% + \ifdim\pgf@y=0pt\relax% + \setbox\pgfnodepartsecondbox=\hbox{% + \vrule width0pt height\the\pgfutil@tempdima depth0pt% + }% + \fi% + \pgf@y\ht\pgfnodepartthirdbox% + \advance\pgf@y\dp\pgfnodepartthirdbox% + \ifdim\pgf@y=0pt\relax% + \setbox\pgfnodepartthirdbox=\hbox{% + \vrule width0pt height\the\pgfutil@tempdima depth0pt% + }% + \fi% + \pgf@y\ht\pgfnodepartfourthbox% + \advance\pgf@y\dp\pgfnodepartfourthbox% + \ifdim\pgf@y=0pt\relax% + \setbox\pgfnodepartfourthbox=\hbox{% + \vrule width0pt height\the\pgfutil@tempdima depth0pt% + }% + \fi% + % + % Empty boxes (without voiding them) if they are not used. + % + \pgfmathtruncatemacro\parts{\pgfkeysvalueof{/pgf/rectangle split parts}}% + \addtosavedmacro{\parts}% + \ifnum\parts<2\relax% + \setbox\pgfnodepartsecondbox=\hbox{}% + \fi% + \ifnum\parts<3\relax% + \setbox\pgfnodepartthirdbox=\hbox{}% + \fi% + \ifnum\parts<4\relax% + \setbox\pgfnodepartfourthbox=\hbox{}% + \fi% + % + % Save the line width. + % + \pgfmathsetlength\pgf@x{\pgflinewidth} + \edef\linewidth{\the\pgf@x}% + \addtosavedmacro{\linewidth}% + % + \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}% + \edef\innerysep{\the\pgf@y}% + % + \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}% + \edef\innerxsep{\the\pgf@x}% + % + % Get the widths. + % + \pgf@x.5\wd\pgfnodeparttextbox% + \pgf@xa.5\wd\pgfnodepartsecondbox% + \pgf@xb.5\wd\pgfnodepartthirdbox% + \pgf@xc.5\wd\pgfnodepartfourthbox% + % + % Find the maximum width% + % + \pgfutil@tempdima\pgf@x% + \ifdim\pgfutil@tempdima<\pgf@xa% + \pgfutil@tempdima\pgf@xa% + \fi% + \ifdim\pgfutil@tempdima<\pgf@xb% + \pgfutil@tempdima\pgf@xb% + \fi% + \ifdim\pgfutil@tempdima<\pgf@xc% + \pgfutil@tempdima\pgf@xc% + \fi% + % + % Adjust for alignment. + % + \edef\pgf@lib@temp{\pgfkeysvalueof{/pgf/rectangle split text part align}}% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@left% + \pgf@x-\pgfutil@tempdima% + \else% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@right% + \pgf@x-2.0\pgf@x% + \advance\pgf@x\pgfutil@tempdima% + \else% + \pgf@x-\pgf@x% + \fi% + \fi% + % + \edef\pgf@lib@temp{\pgfkeysvalueof{/pgf/rectangle split second part align}}% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@left% + \pgf@xa-\pgfutil@tempdima% + \else% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@right% + \pgf@xa-2.0\pgf@xa% + \advance\pgf@xa\pgfutil@tempdima% + \else% + \pgf@xa-\pgf@xa% + \fi% + \fi% + % + \edef\pgf@lib@temp{\pgfkeysvalueof{/pgf/rectangle split third part align}}% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@left% + \pgf@xb-\pgfutil@tempdima% + \else% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@right% + \pgf@xb-2.0\pgf@xb% + \advance\pgf@xb\pgfutil@tempdima% + \else% + \pgf@xb-\pgf@xb% + \fi% + \fi% + % + \edef\pgf@lib@temp{\pgfkeysvalueof{/pgf/rectangle split fourth part align}}% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@left% + \pgf@xc-\pgfutil@tempdima% + \else% + \ifx\pgf@lib@temp\pgf@lib@shapes@rectanglesplit@right% + \pgf@xc-2.0\pgf@xc% + \advance\pgf@xc\pgfutil@tempdima% + \else% + \pgf@xc-\pgf@xc% + \fi% + \fi% + % + % Make relative to x. + % + \advance\pgf@xa-\pgf@x% + \advance\pgf@xb-\pgf@x% + \advance\pgf@xc-\pgf@x% + \pgf@x0pt% + % + % Find the minimum. + % + \pgfutil@tempdimb\pgf@x% + \ifdim\pgfutil@tempdimb>\pgf@xa% + \pgfutil@tempdimb\pgf@xa% + \fi% + \ifdim\pgfutil@tempdimb>\pgf@xb% + \pgfutil@tempdimb\pgf@xb% + \fi% + \ifdim\pgfutil@tempdimb>\pgf@xc% + \pgfutil@tempdimb\pgf@xc% + \fi% + % + % Anchor for the text box is (0pt, 0pt) + % + \pgfsavepgf@process\textanchor{\pgfqpoint{0pt}{0pt}}% + % + % Anchor for second box. + % + \pgfsavepgf@process\lowestanchor{\pgfqpoint{0pt}{0pt}}% + \let\lowestbox\pgfnodeparttextbox% + \ifnum\parts>1\relax% + \pgfsavepgf@process\secondanchor{% + \pgf@x\pgf@xa% + \pgf@y-\dp\pgfnodeparttextbox% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\pgflinewidth% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\ht\pgfnodepartsecondbox% + }% + \let\lowestanchor\secondanchor% + \let\lowestbox\pgfnodepartsecondbox% + \else% + \let\secondanchor\textanchor% + \fi% + % + % Anchor for third box. + % + \ifnum\parts>2\relax% + \pgfsavepgf@process\thirdanchor{% + \lowestanchor% + \pgf@x\pgf@xb% + \advance\pgf@y-\dp\pgfnodepartsecondbox% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\pgflinewidth% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\ht\pgfnodepartthirdbox% + }% + \let\lowestanchor\thirdanchor% + \let\lowestbox\pgfnodepartthirdbox% + \else% + \let\thirdanchor\secondanchor% + \fi% + % + % Anchor for fourth box. + % + \ifnum\parts>3\relax% + \pgfsavepgf@process\fourthanchor{% + \lowestanchor% + \pgf@x\pgf@xc% + \advance\pgf@y-\dp\lowestbox% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\pgflinewidth% + \advance\pgf@y-\innerysep\relax% + \advance\pgf@y-\ht\pgfnodepartfourthbox% + }% + \let\lowestanchor\fourthanchor% + \let\lowestbox\pgfnodepartfourthbox% + \else% + \let\fourthanchor\thirdanchor% + \fi% + % + \addtosavedmacro{\textanchor}% + \addtosavedmacro{\secondanchor}% + \addtosavedmacro{\thirdanchor}% + \addtosavedmacro{\fourthanchor}% + % + % Adjust the boxwidth for minimum width + % + \pgfmathaddtolength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}% + \ifdim\pgfutil@tempdima<.5\pgf@x% + \pgfutil@tempdima.5\pgf@x% + \fi% + \pgfmathaddtolength\pgfutil@tempdima{-\pgfkeysvalueof{/pgf/inner xsep}}% + % + % Get some important points. + % + \pgfsavepgf@process\southwest{% + \lowestanchor% + \pgf@x\pgfutil@tempdimb% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + \pgf@ya\linewidth\relax% + \advance\pgf@x-.5\pgf@ya% + \advance\pgf@y-\dp\lowestbox% + \advance\pgf@y-.5\pgf@ya% + \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/inner ysep}}% + \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \pgfsavepgf@process\northeast{% + \pgf@x\pgfutil@tempdimb% + \advance\pgf@x2.0\pgfutil@tempdima% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgf@ya\linewidth\relax% + \advance\pgf@x.5\pgf@ya% + \pgf@y\ht\pgfnodeparttextbox% + \advance\pgf@y.5\pgf@ya% + \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \addtosavedmacro{\northeast}% + \addtosavedmacro{\southwest}% + \pgfsavepgf@process\centerpoint{% + \pgfpointadd{\southwest}{% + \pgfpointdiff{\southwest}{\northeast}% + \pgf@x.5\pgf@x% + \pgf@y.5\pgf@y% + }% + }% + \addtosavedmacro{\centerpoint}% + \pgfsavepgf@process\south{% + \centerpoint% + \pgf@xa\pgf@x% + \southwest% + \pgf@x\pgf@xa% + }% + % + % Get the split points. + % + \let\lastsplit\south% + \ifnum\parts>1\relax% + \pgfsavepgf@process\textsplit{% + \pgf@x\pgfutil@tempdimb% + \advance\pgf@x\pgfutil@tempdima% + \pgf@y-\dp\pgfnodeparttextbox% + \advance\pgf@y-\innerysep% + \advance\pgf@y-.5\pgflinewidth% + }% + \else% + \let\textsplit\south% + \fi% + \addtosavedmacro{\textsplit}% + \pgfsavepgf@process\textspliteast{% + \textsplit% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\textspliteast}% + \pgfsavepgf@process\textsplitwest{% + \textsplit% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\textsplitwest}% + \ifnum\parts>2\relax% + \pgfsavepgf@process\secondsplit{% + \secondanchor% + \pgf@x\pgfutil@tempdimb% + \advance\pgf@x\pgfutil@tempdima% + \advance\pgf@y-\dp\pgfnodepartsecondbox% + \advance\pgf@y-\innerysep% + \advance\pgf@y-.5\pgflinewidth% + }% + \else% + \let\secondsplit\south% + \fi% + \addtosavedmacro{\secondsplit}% + \pgfsavepgf@process\secondspliteast{% + \secondsplit% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\secondspliteast}% + \pgfsavepgf@process\secondsplitwest{% + \secondsplit% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\secondsplitwest}% + \ifnum\parts>3\relax% + \pgfsavepgf@process\thirdsplit{% + \thirdanchor% + \pgf@x\pgfutil@tempdimb% + \advance\pgf@x\pgfutil@tempdima% + \advance\pgf@y-\dp\pgfnodepartthirdbox% + \advance\pgf@y-\innerysep% + \advance\pgf@y-.5\pgflinewidth% + }% + \let\lastsplit\thirdsplit% + \else% + \let\thirdsplit\south% + \fi% + \addtosavedmacro{\thirdsplit}% + \pgfsavepgf@process\thirdspliteast{% + \thirdsplit% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\thirdspliteast}% + \pgfsavepgf@process\thirdsplitwest{% + \thirdsplit% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya% + }% + \addtosavedmacro{\thirdsplitwest}% + }% + \savedanchor\basepoint{% + \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}% + \pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}% + \pgf@y0pt\relax% + }% + \savedanchor\midpoint{% + \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}% + \pgfmathsetlength\pgf@y{+.5ex}% + }% + \anchor{center}{\getrectanglesplitparameters\centerpoint}% + \anchor{base}{\basepoint}% + \anchor{mid}{\midpoint}% + \anchor{second}{\getrectanglesplitparameters\secondanchor}% + \anchor{third}{\getrectanglesplitparameters\thirdanchor}% + \anchor{fourth}{\getrectanglesplitparameters\fourthanchor}% + \anchor{north east}{\getrectanglesplitparameters\northeast} + \anchor{south west}{\getrectanglesplitparameters\southwest} + \anchor{south east}{% + \getrectanglesplitparameters% + \northeast% + \pgf@xa\pgf@x% + \southwest% + \pgf@x\pgf@xa} + \anchor{north west}{% + \getrectanglesplitparameters% + \northeast% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya} + \anchor{south}{% + \getrectanglesplitparameters% + \centerpoint% + \pgf@xa\pgf@x% + \southwest% + \pgf@x\pgf@xa} + \anchor{north}{% + \getrectanglesplitparameters% + \centerpoint% + \pgf@xa\pgf@x% + \northeast% + \pgf@x\pgf@xa} + \anchor{west}{% + \getrectanglesplitparameters% + \centerpoint% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya} + \anchor{east}{% + \getrectanglesplitparameters% + \centerpoint% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya} + \anchor{text split}{\getrectanglesplitparameters\textsplit} + \anchor{text split east}{\getrectanglesplitparameters\textspliteast} + \anchor{text split west}{\getrectanglesplitparameters\textsplitwest} + \anchor{second split}{\getrectanglesplitparameters\secondsplit} + \anchor{second split east}{\getrectanglesplitparameters\secondspliteast} + \anchor{second split west}{\getrectanglesplitparameters\secondsplitwest} + \anchor{third split}{\getrectanglesplitparameters\thirdsplit} + \anchor{third split east}{\getrectanglesplitparameters\thirdspliteast} + \anchor{third split west}{\getrectanglesplitparameters\thirdsplitwest} + \anchor{text east}{% + \getrectanglesplitparameters% + \ifnum\parts>1\relax% + \textsplit% + \pgf@ya\pgf@y + \northeast% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@ya\linewidth\relax% + \advance\pgf@y-.25\pgf@ya% + \else% + \centerpoint% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + \fi% + } + \anchor{text west}{% + \getrectanglesplitparameters% + \ifnum\parts>1\relax% + \textsplit% + \pgf@ya\pgf@y + \southwest% + \pgf@xa\pgf@x% + \northeast% + \pgf@x\pgf@xa% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@ya\linewidth\relax% + \advance\pgf@y-.25\pgf@ya% + \else% + \centerpoint% + \pgf@ya\pgf@y% + \southwest% + \pgf@y\pgf@ya% + \fi% + } + \anchor{second east}{% + \getrectanglesplitparameters% + \ifnum\parts>1\relax% + \northeast% + \pgf@xa\pgf@x% + \secondsplit% + \pgf@ya\pgf@y + \textsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \southwest% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + \fi% + } + \anchor{second west}{% + \getrectanglesplitparameters% + \ifnum\parts>1\relax% + \southwest% + \pgf@xa\pgf@x% + \secondsplit% + \pgf@ya\pgf@y + \textsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \southwest% + \fi% + } + \anchor{third east}{% + \getrectanglesplitparameters% + \ifnum\parts>2\relax% + \northeast% + \pgf@xa\pgf@x% + \thirdsplit% + \pgf@ya\pgf@y + \secondsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \southwest% + \pgf@ya\pgf@y% + \northeast% + \pgf@y\pgf@ya% + \fi% + } + \anchor{third west}{% + \getrectanglesplitparameters% + \ifnum\parts>2\relax% + \southwest% + \pgf@xa\pgf@x% + \thirdsplit% + \pgf@ya\pgf@y + \secondsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \southwest + \fi% + } + \anchor{fourth east}{% + \getrectanglesplitparameters% + \ifnum\parts>3\relax% + \northeast% + \pgf@xa\pgf@x% + \southwest% + \pgf@ya\linewidth\relax% + \pgf@ya.5\pgf@ya% + \advance\pgf@ya\pgf@y% + \thirdsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \northeast% + \pgf@xa\pgf@x% + \southwest% + \pgf@x\pgf@xa% + \fi% + } + \anchor{fourth west}{% + \getrectanglesplitparameters% + \ifnum\parts>3\relax% + \southwest% + \pgf@xa\pgf@x% + \pgf@ya\linewidth\relax% + \pgf@ya.5\pgf@ya% + \advance\pgf@ya\pgf@y% + \thirdsplit% + \advance\pgf@y\pgf@ya% + \pgf@y.5\pgf@y% + \pgf@x\pgf@xa% + \else% + \southwest% + \fi% + } + \backgroundpath{% + \getrectanglesplitparameters% + % + % Remove outer sep. + % + \pgfsavepgf@process\southwest{% + \southwest% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \pgfsavepgf@process\northeast{% + \northeast% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \pgfsavepgf@process\textsplit{% + \textsplit% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\secondsplit{% + \secondsplit% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\thirdsplit{% + \thirdsplit% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfpathrectangle{\southwest}{\pgfpointdiff{\southwest}{\northeast}}% + {% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \ifnum\parts>1\relax% + \pgfpathmoveto{\textsplit\pgf@ya\pgf@y\southwest\pgf@y\pgf@ya}% + \pgfpathlineto{\textsplit\pgf@ya\pgf@y\northeast\pgf@y\pgf@ya}% + \fi% + \ifnum\parts>2\relax% + \pgfpathmoveto{\secondsplit\pgf@ya\pgf@y\southwest\pgf@y\pgf@ya}% + \pgfpathlineto{\secondsplit\pgf@ya\pgf@y\northeast\pgf@y\pgf@ya}% + \fi% + \ifnum\parts>3\relax% + \pgfpathmoveto{\thirdsplit\pgf@ya\pgf@y\southwest\pgf@y\pgf@ya}% + \pgfpathlineto{\thirdsplit\pgf@ya\pgf@y\northeast\pgf@y\pgf@ya}% + \fi% + }% + } + \behindbackgroundpath{% + \ifpgfrectanglesplitusecustomfill% + % + % Remove outer sep. + % + \getrectanglesplitparameters% + \pgfsavepgf@process\southwest{% + \southwest% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \pgfsavepgf@process\northeast{% + \northeast% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}% + }% + \pgfsavepgf@process\textspliteast{% + \textspliteast% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\textsplitwest{% + \textsplitwest% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\secondspliteast{% + \secondspliteast% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\secondsplitwest{% + \secondsplitwest% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\thirdspliteast{% + \thirdspliteast% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + }% + \pgfsavepgf@process\thirdsplitwest{% + \thirdsplitwest% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + }% + % + % Always fill the text box. + % + \pgfpathmoveto{\textsplitwest}% + \pgfpathlineto{\northeast\pgf@ya\pgf@y\southwest\pgf@y\pgf@ya}% + \pgfpathlineto{\northeast}% + \ifnum\parts>1\relax% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \fi% + \pgfpathlineto{\textspliteast}% + \pgfpathclose% + \ifnum\parts>1\relax% + \egroup% + \fi% + \pgfsetfillcolor{\pgfkeysvalueof{/pgf/rectangle split text part fill}}% + \pgfusepath{fill}% + % + % Second box. + % + \ifnum\parts>1\relax% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \pgfpathmoveto{\textsplitwest}% + \pgfpathlineto{\textspliteast}% + \ifnum\parts=2\relax% + \egroup% + \fi% + \pgfpathlineto{\secondspliteast}% + \pgfpathlineto{\secondsplitwest}% + \ifnum\parts=2\relax% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \fi% + \pgfpathclose% + \pgfsetfillcolor{\pgfkeysvalueof{/pgf/rectangle split second part fill}}% + \pgfusepath{fill}% + \egroup% + \fi% + % + % Third box. + % + \ifnum\parts>2\relax% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \pgfpathmoveto{\secondsplitwest}% + \pgfpathlineto{\secondspliteast}% + \ifnum\parts=3\relax% + \egroup% + \fi% + \pgfpathlineto{\thirdspliteast}% + \pgfpathlineto{\thirdsplitwest}% + \ifnum\parts=3\relax% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \fi% + \pgfpathclose% + \pgfsetfillcolor{\pgfkeysvalueof{/pgf/rectangle split third part fill}}% + \pgfusepath{fill}% + \egroup% + \fi% + % + % And the fourth box. + % + \ifnum\parts>3\relax% + \pgfpathmoveto{\thirdsplitwest}% + \pgfpathlineto{\southwest}% + \pgfpathlineto{\southwest\pgf@ya\pgf@y\northeast\pgf@y\pgf@ya}% + \bgroup% + \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}% + \pgfpathlineto{\thirdspliteast}% + \pgfpathclose% + \egroup% + \pgfsetfillcolor{\pgfkeysvalueof{/pgf/rectangle split fourth part fill}}% + \pgfusepath{fill}% + \fi% + \fi% + } + \anchorborder{% + \pgfutil@tempdima\pgf@x% + \pgfutil@tempdimb\pgf@y% + \getrectanglesplitparameters% + \pgfpointdiff{\southwest}{\northeast}% + \pgf@x.5\pgf@x% + \pgf@y.5\pgf@y% + \edef\pgf@marshall{% + \noexpand\pgfpointborderrectangle{% + \noexpand\pgfqpoint{\the\pgfutil@tempdima}{\the\pgfutil@tempdimb}% + }% + {% + \noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}% + }% + }% + \pgf@marshall% + \pgf@xa\pgf@x% + \pgf@ya\pgf@y% + \centerpoint% + \advance\pgf@x\pgf@xa% + \advance\pgf@y\pgf@ya% + }% +} + + +% Shape: ellipse split. +% +\pgfdeclareshape{ellipse split}{% + \nodeparts{text,lower} + \savedanchor\radii{% + \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@y2.0\pgf@y% + \advance\pgf@y.5\pgflinewidth% + \pgf@xa.5\wd\pgfnodeparttextbox% + \pgf@xb.5\wd\pgfnodepartlowerbox% + \advance\pgf@xa\pgf@x% + \advance\pgf@xb\pgf@x% + \pgf@ya\ht\pgfnodeparttextbox% + \advance\pgf@ya\dp\pgfnodeparttextbox% + \pgf@yb\ht\pgfnodepartlowerbox% + \advance\pgf@yb\dp\pgfnodepartlowerbox% + \advance\pgf@ya\pgf@y% + \advance\pgf@yb\pgf@y% + \ifdim\pgf@xa>\pgf@xb% + \pgf@x1.414213\pgf@xa% + \else% + \pgf@x1.414213\pgf@xb% + \fi% + \ifdim\pgf@ya>\pgf@yb% + \pgf@y1.414213\pgf@ya% + \else% + \pgf@y1.414213\pgf@yb% + \fi% + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}% + \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}% + \ifdim\pgf@x<.5\pgf@xa% + \pgf@x.5\pgf@xa% + \fi% + \ifdim\pgf@y<.5\pgf@ya% + \pgf@y.5\pgf@ya% + \fi% + \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}% + } + \savedanchor\lower{% + \pgf@x-.5\wd\pgfnodepartlowerbox% + \advance\pgf@x.5\wd\pgfnodeparttextbox% + \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@y-2.0\pgf@y% + \advance\pgf@y-\pgflinewidth% + \advance\pgf@y-\dp\pgfnodeparttextbox% + \advance\pgf@y-\ht\pgfnodepartlowerbox% + } + \savedanchor\centerpoint{% + \pgf@x.5\wd\pgfnodeparttextbox% + \pgfmathsetlength\pgf@y{-\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@y-\dp\pgfnodeparttextbox% + \advance\pgf@y-.5\pgflinewidth% + }% + \savedanchor\basepoint{% + \pgf@x.5\wd\pgfnodeparttextbox% + \pgf@y0pt\relax% + }% + \savedanchor\midpoint{% + \pgf@x.5\wd\pgfnodeparttextbox% + \pgfmathsetlength\pgf@y{.5ex}% + }% + \anchor{center}{\centerpoint} + \anchor{lower}{\lower} + \anchor{mid}{\midpoint} + \anchor{mid east}{\radii\pgf@xa\pgf@x\midpoint\advance\pgf@x\pgf@xa} + \anchor{mid west}{\radii\pgf@xa\pgf@x\midpoint\advance\pgf@x-\pgf@xa} + \anchor{base}{\basepoint} + \anchor{base east}{\radii\pgf@xa\pgf@x\basepoint\advance\pgf@x\pgf@xa} + \anchor{base west}{\radii\pgf@xa\pgf@x\basepoint\advance\pgf@x-\pgf@xa} + \anchor{north}{\pgfpointadd{\centerpoint}{\radii\pgf@x0pt}}% + \anchor{south}{\pgfpointadd{\centerpoint}{\radii\pgf@x0pt\pgf@y-\pgf@y}}% + \anchor{east}{\pgfpointadd{\centerpoint}{\radii\pgf@y0pt}}% + \anchor{west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-\pgf@x\pgf@y0pt}}% + \anchor{north west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-0.707106\pgf@x\pgf@y0.707106\pgf@y}}% + \anchor{south west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-0.707106\pgf@x\pgf@y-0.707106\pgf@y}}% + \anchor{north east}{\pgfpointadd{\centerpoint}{\radii\pgf@x0.707106\pgf@x\pgf@y0.707106\pgf@y}}% + \anchor{south east}{\pgfpointadd{\centerpoint}{\radii\pgf@x0.707106\pgf@x\pgf@y-0.707106\pgf@y}}% + \backgroundpath{% + \radii% + \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}% + \pgfutil@tempdima\pgf@x% + \pgfutil@tempdimb\pgf@y% + \pgfpathellipse{\centerpoint}{\pgfqpoint{\the\pgfutil@tempdima}{0pt}}{\pgfqpoint{0pt}{\the\pgfutil@tempdimb}}% + \pgfpathmoveto{\centerpoint\advance\pgf@x-\pgfutil@tempdima}% + \pgfpathlineto{\centerpoint\advance\pgf@x\pgfutil@tempdima}% + } + \anchorborder{% + \pgfextract@process\externalpoint{}% + \radii% + \edef\pgf@marshal{% + \noexpand\pgfpointadd{\noexpand\pgfpointborderellipse{\noexpand\externalpoint}% + {\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}}{\noexpand\centerpoint}% + }% + \pgf@marshal% + }% +} + +\endinput |