% 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[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibrarytikztrees.code.tex,v 1.7 2006/10/11 15:22:26 tantau Exp $ % % Three point growth % \define@key{tikz}{grow via three points}{\let\tikz@grow=\tikz@grow@three\tikz@parse@three#1} \def\tikz@parse@three one child at#1(#2)#3and two children at#4(#5)#6and#7(#8){% \def\tikz@tree@one@child{\tikz@scan@one@point\pgf@process(#2)} \def\tikz@tree@left@child{\tikz@scan@one@point\pgf@process(#5)} \def\tikz@tree@right@child{\tikz@scan@one@point\pgf@process(#8)} } \def\tikz@grow@three{% \pgf@process{\tikz@tree@one@child}% \pgf@xa=\pgf@x% \pgf@ya=\pgf@y% \pgf@process{\tikz@tree@left@child}% \pgf@xb=\pgf@x% \pgf@yb=\pgf@y% \advance\pgf@xb by-\pgf@xa% \advance\pgf@yb by-\pgf@ya% \pgf@process{\tikz@tree@right@child}% \pgf@xc=\pgf@x% \pgf@yc=\pgf@y% \advance\pgf@xc by-\pgf@xa% \advance\pgf@yc by-\pgf@ya% \advance\pgf@xc by-\pgf@xb% \advance\pgf@yc by-\pgf@yb% \advance\tikznumberofchildren by-1\relax% \pgf@xb=\tikznumberofchildren\pgf@xb\relax% \pgf@yb=\tikznumberofchildren\pgf@yb\relax% \advance\tikznumberofcurrentchild by-1\relax% \pgf@xc=\tikznumberofcurrentchild\pgf@xc\relax% \pgf@yc=\tikznumberofcurrentchild\pgf@yc\relax% \advance\pgf@xa by\pgf@xb% \advance\pgf@xa by\pgf@xc% \advance\pgf@ya by\pgf@yb% \advance\pgf@ya by\pgf@yc% \edef\pgf@temp{\noexpand\pgftransformshift{\noexpand\pgfpoint{\the\pgf@xa}{\the\pgf@ya}}}% \pgf@temp% } % % Circle grow % \tikzstyle{grow cyclic}=[growth function=\tikz@grow@circle] \define@key{tikz}{sibling angle}{\edef\tikz@sibling@angle{#1}} \def\tikz@sibling@angle{20} \def\tikz@grow@circle{% \c@pgf@counta=\tikz@sibling@angle\relax% \c@pgf@countb=\tikz@sibling@angle\relax% \divide\c@pgf@counta by2\relax% \multiply\c@pgf@countb by\tikznumberofcurrentchild\relax% \c@pgf@countc=-\c@pgf@counta\relax \multiply\c@pgf@countc by\tikznumberofchildren\relax% \advance\c@pgf@countc by-\c@pgf@counta\relax \advance\c@pgf@countc by\c@pgf@countb\relax \pgftransformrotate{\the\c@pgf@countc}% \pgftransformxshift{\the\tikzleveldistance}% } \tikzoption{counterclockwise from}{\let\tikz@grow=\tikz@grow@circle@from\def\tikz@grow@circle@from@start{#1}} \def\tikz@grow@circle@from{% \c@pgf@counta=\tikz@sibling@angle\relax% \multiply\c@pgf@counta by\tikznumberofcurrentchild\relax% \advance\c@pgf@counta by-\tikz@sibling@angle\relax% \advance\c@pgf@counta by\tikz@grow@circle@from@start\relax% \pgftransformshift{\pgfpointpolar{\the\c@pgf@counta}{\the\tikzleveldistance}}% } \tikzoption{clockwise from}{\let\tikz@grow=\tikz@grow@circle@from@\def\tikz@grow@circle@from@start{#1}} \def\tikz@grow@circle@from@{% \c@pgf@counta=\tikz@sibling@angle\relax% \multiply\c@pgf@counta by-\tikznumberofcurrentchild\relax% \advance\c@pgf@counta by\tikz@sibling@angle\relax% \advance\c@pgf@counta by\tikz@grow@circle@from@start\relax% \pgftransformshift{\pgfpointpolar{\the\c@pgf@counta}{\the\tikzleveldistance}}% } % % Connections % \tikzstyle{edge from parent fork down}= [edge from parent path={(\tikzparentnode\tikzparentanchor) -- +(0pt,-.5\tikzleveldistance) -| (\tikzchildnode\tikzchildanchor)}] \tikzstyle{edge from parent fork up}= [edge from parent path={(\tikzparentnode\tikzparentanchor) -- +(0pt,.5\tikzleveldistance) -| (\tikzchildnode\tikzchildanchor)}] \tikzstyle{edge from parent fork left}= [edge from parent path={(\tikzparentnode\tikzparentanchor) -- +(-.5\tikzleveldistance,0pt) |- (\tikzchildnode\tikzchildanchor)}] \tikzstyle{edge from parent fork right}= [edge from parent path={(\tikzparentnode\tikzparentanchor) -- +(.5\tikzleveldistance,0pt) |- (\tikzchildnode\tikzchildanchor)}] \endinput