blob: 841b534fed3b865e5608223dbcbea31ca0dfe974 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
% 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
|