summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/libraries/shapes
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/libraries/shapes')
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.IEC.code.tex425
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.code.tex137
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.IEC.code.tex408
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.US.code.tex4312
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.code.tex34
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex4579
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex1570
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex10
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex8070
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex2100
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex2118
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex548
12 files changed, 12155 insertions, 12156 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.IEC.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.IEC.code.tex
index e79634a06ea..62b1a260299 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.IEC.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.IEC.code.tex
@@ -13,20 +13,20 @@
%
\pgfdeclareshape{var resistor IEC}
-{
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+{%
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -54,9 +54,9 @@
\pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yc}}%
\pgfutil@repeat%
\advance\pgf@xb by-.1pt%
- \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
- }
-}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
+ }%
+}%
@@ -65,7 +65,7 @@
%
\pgfdeclareshape{inductor IEC}
-{
+{%
\savedanchor\northeast{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -75,7 +75,7 @@
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=\pgf@ya%
\advance\pgf@y by\pgf@yb%
- }
+ }%
\savedanchor\southwest{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -83,19 +83,19 @@
\advance\pgf@x by -.5\pgf@xb%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
\pgf@y=-\pgf@ya%
- }
-
- \anchor{center}{\pgfpointorigin}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
+ }%
+
+ \anchor{center}{\pgfpointorigin}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
\anchorborder{%
\ifdim\pgf@y<0pt%
@@ -112,8 +112,8 @@
\pgf@yc=\pgf@y%
\pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\northeast}}%
\fi%
- }
-
+ }%
+
\backgroundpath{
\pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
\pgf@xa=-\pgf@x \pgf@ya=0pt
@@ -127,12 +127,12 @@
\pgfutil@loop%
\advance\pgf@xa by2\pgf@xc\relax%
\ifdim\pgf@xa<\pgf@xb%
- \pgfpatharc{180}{0}{\pgf@xc}%
+ \pgfpatharc{180}{0}{\pgf@xc}%
\pgfutil@repeat%
\advance\pgf@xb by-.1pt%
- \pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}%
- }
-}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}%
+ }%
+}%
@@ -142,20 +142,20 @@
%
\pgfdeclareshape{capacitor IEC}
-{
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+{%
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -166,8 +166,8 @@
\pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
\pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
@@ -177,20 +177,20 @@
%
\pgfdeclareshape{ground IEC}
-{
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+{%
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -213,8 +213,8 @@
\advance\pgf@yb by-\pgf@yc
\pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
@@ -224,20 +224,20 @@
%
\pgfdeclareshape{battery IEC}
-{
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+{%
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -253,8 +253,8 @@
\advance\pgf@yb by-\pgf@yc
\pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
%
@@ -263,20 +263,20 @@
\pgfdeclareshape{breakdown diode IEC}
-{
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+{%
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -295,9 +295,9 @@
\pgfpathlineto{\pgfqpoint{\pgf@xc}{\pgf@yc}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
\pgfpathclose
- }
+ }%
+
-
\beforebackgroundpath{
{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -311,7 +311,7 @@
\pgfusepathqstroke
\pgf@xc=.5\pgf@xa
\advance\pgf@xc by.5\pgf@xb
- \pgftransformshift{\pgfqpoint{\pgf@xc}{\pgf@yc}}
+ \pgftransformshift{\pgfqpoint{\pgf@xc}{\pgf@yc}}
\pgf@yc=.5\pgf@yb
\advance\pgf@yc by-.5\pgf@ya
\pgftransformscale{\pgf@sys@tonumber{\pgf@yc}}
@@ -321,8 +321,8 @@
\pgfpathlineto{\pgfqpoint{.5pt}{1pt}}
\pgfusepathqstroke
}
- }
-}
+ }%
+}%
@@ -339,7 +339,7 @@
\pgfdeclareshape{generic circle IEC}
-{
+{%
% This shape is a generic circle, to which you can add something to
% the before background path using the key
% /pgf/generic circle IEC/before background
@@ -347,31 +347,31 @@
% setup such that the circle's center is at the origin and that the
% position \pgfpoint{1pt}{0pt} lies exactly on the top of the circle
% (and, there, on the middle of the line).
-
- \inheritsavedanchors[from=circle ee]
- \inheritanchorborder[from=circle ee]
- \inheritanchor[from=circle ee]{north}
- \inheritanchor[from=circle ee]{north west}
- \inheritanchor[from=circle ee]{north east}
- \inheritanchor[from=circle ee]{center}
- \inheritanchor[from=circle ee]{west}
- \inheritanchor[from=circle ee]{east}
- \inheritanchor[from=circle ee]{south}
- \inheritanchor[from=circle ee]{south west}
- \inheritanchor[from=circle ee]{south east}
- \inheritanchor[from=circle ee]{input}
- \inheritanchor[from=circle ee]{output}
- \inheritbackgroundpath[from=circle ee]
-
+
+ \inheritsavedanchors[from=circle ee]%
+ \inheritanchorborder[from=circle ee]%
+ \inheritanchor[from=circle ee]{north}%
+ \inheritanchor[from=circle ee]{north west}%
+ \inheritanchor[from=circle ee]{north east}%
+ \inheritanchor[from=circle ee]{center}%
+ \inheritanchor[from=circle ee]{west}%
+ \inheritanchor[from=circle ee]{east}%
+ \inheritanchor[from=circle ee]{south}%
+ \inheritanchor[from=circle ee]{south west}%
+ \inheritanchor[from=circle ee]{south east}%
+ \inheritanchor[from=circle ee]{input}%
+ \inheritanchor[from=circle ee]{output}%
+ \inheritbackgroundpath[from=circle ee]%
+
\beforebackgroundpath{
{
\centerpoint%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
- \pgftransformshift{}
+ \pgftransformshift{}
\pgfutil@tempdima=\radius%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \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%
@@ -380,8 +380,8 @@
\pgftransformscale{\pgf@sys@tonumber{\pgfutil@tempdima}}
\pgfkeysvalueof{/pgf/generic circle IEC/before background}
}
- }
-}
+ }%
+}%
@@ -390,28 +390,28 @@
%
\pgfdeclareshape{generic diode IEC}
-{
+{%
% This shape is a generic diode, to which you can add something to
% the before background path using the key
% /pgf/generic diode IEC/before background
% When this key is invoked, the transformation matrix will have been
- % setup such that the center is at the tip of the diode. The
+ % setup such that the center is at the tip of the diode. The
% position \pgfpoint{1pt}{0pt} lies exactly on the top of the
- % (suggested) line before the diode.
-
- \inheritsavedanchors[from=rectangle ee]
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+ % (suggested) line before the diode.
+
+ \inheritsavedanchors[from=rectangle ee]%
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\backgroundpath{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -427,9 +427,9 @@
\advance\pgf@yc by .5\pgf@yb
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yc}}
\pgfpathclose
- }
+ }%
+
-
\beforebackgroundpath{
{
\pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
@@ -441,31 +441,31 @@
\pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yc}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yc}}
\pgfusepathqstroke
- \pgftransformshift{\pgfqpoint{\pgf@xb}{\pgf@yc}}
+ \pgftransformshift{\pgfqpoint{\pgf@xb}{\pgf@yc}}
\pgf@yc=.5\pgf@yb
\advance\pgf@yc by-.5\pgf@ya
\pgftransformscale{\pgf@sys@tonumber{\pgf@yc}}
\pgfkeysvalueof{/pgf/generic diode IEC/before background}
}
- }
-}
+ }%
+}%
\pgfkeys{
/pgf/generic circle IEC/before background/.initial=,
/pgf/generic diode IEC/before background/.initial=,
-}
+}%
%
-% Concacts
+% Contacts
%
\pgfdeclareshape{make contact IEC}
-{
+{%
\savedanchor\northeast{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -475,7 +475,7 @@
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=\pgf@ya%
\advance\pgf@y by\pgf@yb%
- }
+ }%
\savedanchor\southwest{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -483,23 +483,23 @@
\advance\pgf@x by -.5\pgf@xb%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
\pgf@y=-\pgf@ya%
- }
-
- \anchor{center}{\pgfpointorigin}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
+ }%
+
+ \anchor{center}{\pgfpointorigin}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
\anchorborder{%
\ifdim\pgf@y<0pt%
- % tricky... simpilfy to the origin...
+ % tricky... simplify to the origin...
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgf@process{\southwest}%
@@ -512,8 +512,8 @@
\pgf@yc=\pgf@y%
\pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\northeast}}%
\fi%
- }
-
+ }%
+
\backgroundpath{
\pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
\pgf@xa=-\pgf@x \pgf@ya=0pt
@@ -521,17 +521,17 @@
% Start point
\pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
%
-% Concacts
+% Contacts
%
\pgfdeclareshape{var make contact IEC}
-{
+{%
\savedanchor\northeast{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -541,7 +541,7 @@
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=\pgf@ya%
\advance\pgf@y by\pgf@yb%
- }
+ }%
\savedanchor\southwest{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -551,23 +551,23 @@
\pgf@y=-\pgf@ya%
\pgf@xc=0.083333\pgf@x%
\advance\pgf@y by\pgf@xc%
- }
-
- \anchor{center}{\pgfpointorigin}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
+ }%
+
+ \anchor{center}{\pgfpointorigin}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
\anchorborder{%
\ifdim\pgf@y<0pt%
- % tricky... simpilfy to the origin...
+ % tricky... simplify to the origin...
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgf@process{\southwest}%
@@ -579,8 +579,8 @@
\pgf@yc=\pgf@y%
\pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\northeast}}%
\fi%
- }
-
+ }%
+
\backgroundpath{
\pgf@process{\pgfpointadd{\northeast}{
\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
@@ -600,13 +600,13 @@
\pgfpathmoveto{\pgfpointadd{\pgfqpoint{\pgf@xa}{0pt}}{%
\pgfpointscale{\pgfutil@tempdima}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
\pgfdeclareshape{break contact IEC}
-{
+{%
\savedanchor\northeast{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -616,7 +616,7 @@
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=\pgf@ya%
\advance\pgf@y by\pgf@yb%
- }
+ }%
\savedanchor\southwest{%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
@@ -624,23 +624,23 @@
\advance\pgf@x by -.5\pgf@xb%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
\pgf@y=-\pgf@ya%
- }
-
- \anchor{center}{\pgfpointorigin}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
+ }%
+
+ \anchor{center}{\pgfpointorigin}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
\anchorborder{%
\ifdim\pgf@y<0pt%
- % tricky... simpilfy to the origin...
+ % tricky... simplify to the origin...
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgf@process{\southwest}%
@@ -653,8 +653,8 @@
\pgf@yc=\pgf@y%
\pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\northeast}}%
\fi%
- }
-
+ }%
+
\backgroundpath{
\pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
\pgf@xa=-\pgf@x \pgf@ya=0pt
@@ -669,12 +669,11 @@
\advance\pgf@xb by-\pgf@xc
\pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
- }
-}
+ }%
+}%
\endinput
-
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.code.tex
index 30ecbff3c4d..4cfa4eed7d6 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.ee.code.tex
@@ -16,25 +16,25 @@
% and an "output" anchor have been added at the left and right end.
\pgfdeclareshape{rectangle ee}
-{
- \inheritsavedanchors[from=rectangle]
- \inheritanchorborder[from=rectangle]
- \inheritanchor[from=rectangle]{north}
- \inheritanchor[from=rectangle]{north west}
- \inheritanchor[from=rectangle]{north east}
- \inheritanchor[from=rectangle]{center}
- \inheritanchor[from=rectangle]{west}
- \inheritanchor[from=rectangle]{east}
- \inheritanchor[from=rectangle]{mid}
- \inheritanchor[from=rectangle]{mid west}
- \inheritanchor[from=rectangle]{mid east}
- \inheritanchor[from=rectangle]{base}
- \inheritanchor[from=rectangle]{base west}
- \inheritanchor[from=rectangle]{base east}
- \inheritanchor[from=rectangle]{south}
- \inheritanchor[from=rectangle]{south west}
- \inheritanchor[from=rectangle]{south east}
- \inheritbackgroundpath[from=rectangle]
+{%
+ \inheritsavedanchors[from=rectangle]%
+ \inheritanchorborder[from=rectangle]%
+ \inheritanchor[from=rectangle]{north}%
+ \inheritanchor[from=rectangle]{north west}%
+ \inheritanchor[from=rectangle]{north east}%
+ \inheritanchor[from=rectangle]{center}%
+ \inheritanchor[from=rectangle]{west}%
+ \inheritanchor[from=rectangle]{east}%
+ \inheritanchor[from=rectangle]{mid}%
+ \inheritanchor[from=rectangle]{mid west}%
+ \inheritanchor[from=rectangle]{mid east}%
+ \inheritanchor[from=rectangle]{base}%
+ \inheritanchor[from=rectangle]{base west}%
+ \inheritanchor[from=rectangle]{base east}%
+ \inheritanchor[from=rectangle]{south}%
+ \inheritanchor[from=rectangle]{south west}%
+ \inheritanchor[from=rectangle]{south east}%
+ \inheritbackgroundpath[from=rectangle]%
% New:
\anchor{input}{
\pgf@process{\northeast}%
@@ -42,57 +42,57 @@
\pgf@process{\southwest}%
\pgf@y=.5\pgf@y%
\advance\pgf@y by \pgf@ya%
- }
+ }%
\anchor{output}{%
\pgf@process{\southwest}%
\pgf@ya=.5\pgf@y%
\pgf@process{\northeast}%
\pgf@y=.5\pgf@y%
\advance\pgf@y by \pgf@ya%
- }
-}
+ }%
+}%
\pgfdeclareshape{circle ee}
-{
- \inheritsavedanchors[from=circle]
- \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}
- \inheritbackgroundpath[from=circle]
+{%
+ \inheritsavedanchors[from=circle]%
+ \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}%
+ \inheritbackgroundpath[from=circle]%
% New:
- \anchor{input}{\centerpoint\advance\pgf@x by-\radius}
- \anchor{output}{\centerpoint\advance\pgf@x by\radius}
-}
+ \anchor{input}{\centerpoint\advance\pgf@x by-\radius}%
+ \anchor{output}{\centerpoint\advance\pgf@x by\radius}%
+}%
%
% Current direction indicator. This shape uses the current setting of
% the current direction arrow tip for the arrow. The shape is a
-% rectangle around the arrow tip.
+% rectangle around the arrow tip.
%
\pgfdeclareshape{direction ee}
-{
+{%
\savedanchor\northeast{
\pgf@x=0pt%
% Height is given by minimum height/2
\pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=.5\pgf@y
- }
+ }%
\savedanchor\southwest{
% Left border is given by left extend
\pgfarrowtotallength{\pgfkeysvalueof{/pgf/direction ee arrow}}%
@@ -100,20 +100,20 @@
% Height is given by minimum height/2
\pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/minimum height}}%
\pgf@y=-.5\pgf@y
- }
-
- \inheritanchor[from=rectangle ee]{center}
- \inheritanchor[from=rectangle ee]{north}
- \inheritanchor[from=rectangle ee]{south}
- \inheritanchor[from=rectangle ee]{east}
- \inheritanchor[from=rectangle ee]{west}
- \inheritanchor[from=rectangle ee]{north east}
- \inheritanchor[from=rectangle ee]{north west}
- \inheritanchor[from=rectangle ee]{south east}
- \inheritanchor[from=rectangle ee]{south west}
- \inheritanchor[from=rectangle ee]{input}
- \inheritanchor[from=rectangle ee]{output}
- \inheritanchorborder[from=rectangle ee]
+ }%
+
+ \inheritanchor[from=rectangle ee]{center}%
+ \inheritanchor[from=rectangle ee]{north}%
+ \inheritanchor[from=rectangle ee]{south}%
+ \inheritanchor[from=rectangle ee]{east}%
+ \inheritanchor[from=rectangle ee]{west}%
+ \inheritanchor[from=rectangle ee]{north east}%
+ \inheritanchor[from=rectangle ee]{north west}%
+ \inheritanchor[from=rectangle ee]{south east}%
+ \inheritanchor[from=rectangle ee]{south west}%
+ \inheritanchor[from=rectangle ee]{input}%
+ \inheritanchor[from=rectangle ee]{output}%
+ \inheritanchorborder[from=rectangle ee]%
\nodeparts{}% no text
\behindbackgroundpath{
@@ -124,7 +124,7 @@
\pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
\pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}
\pgfusepathqstroke
- }
+ }%
\beforebackgroundpath{
{
@@ -132,19 +132,19 @@
\pgfarrowdraw{\pgfkeysvalueof{/pgf/direction ee arrow}}%
\pgfsys@endscope
}
- }
-}
+ }%
+}%
\pgfkeys{
/pgf/direction ee arrow/.initial=direction ee,
-}
+}%
% Special arrow for ee directions:
\pgfarrowsdeclare{direction ee}{direction ee}
-{
+{%
\pgfmathsetlength\pgfutil@tempdima{\pgfgetarrowoptions{direction ee}}%
\pgfutil@tempdima=.5\pgfutil@tempdima
\pgfarrowsleftextend{+-\pgfutil@tempdima}
@@ -159,13 +159,12 @@
\pgfpathlineto{\pgfqpoint{-0.5\pgfutil@tempdima}{-0.38268343237\pgfutil@tempdima}}
\pgfpathclose
\pgfusepathqfillstroke
-}
+}%
-\pgfsetarrowoptions{direction ee}{4pt}
+\pgfsetarrowoptions{direction ee}{4pt}%
\endinput
-
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.IEC.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.IEC.code.tex
index e137e113cdc..9b964996d70 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.IEC.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.IEC.code.tex
@@ -7,7 +7,7 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\usepgflibrary{shapes.gates.logic}
+\usepgflibrary{shapes.gates.logic}%
\pgfkeys{/pgf/.cd,
and gate IEC symbol/.initial=$\char`\&$,
@@ -20,14 +20,14 @@
buffer gate IEC symbol/.initial=1,
logic gate IEC symbol align/.initial=top,
logic gate IEC symbol color/.initial=% no value
-}
+}%
\pgfkeys{/pgf/logic gate IEC symbol align/.cd,
top/.code=\pgftransformyshift{\innerhalfheight},
bottom/.code=\pgftransformyshift{-\innerhalfheight},
left/.code=\pgftransformxshift{-\innerhalfwidth},
- right/.code=\pgftransformxshift{\innerhalfwidth}
-}
+ right/.code=\pgftransformxshift{\innerhalfwidth},
+}%
\def\pgf@lib@sh@logicgates@IEC@foregroundpath#1{%
\dimensions%
@@ -45,7 +45,7 @@
\pgfkeysvalueof{/pgf/#1 gate IEC symbol}%
}%
}%
-}
+}%
\def\pgf@lib@sh@logicgates@dimensions@IEC#1{%
@@ -135,13 +135,13 @@
\multiply\pgfutil@tempdima#1\relax%
\advance\pgf@y\halfheight%
\advance\pgf@y-\pgfutil@tempdima%
-}
+}%
% Shape and gate IEC
%
-\pgfdeclareshape{and gate IEC}{
+\pgfdeclareshape{and gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
%
@@ -165,25 +165,25 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{and}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
+ }%
\anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}
+ \anchor{mid}{\midpoint}%
\anchor{mid west}{%
\dimensions%
\midpoint%
@@ -192,7 +192,7 @@
\dimensions%
\midpoint%
\advance\pgf@x\halfwidth}%
- \anchor{base}{\basepoint}
+ \anchor{base}{\basepoint}%
\anchor{base west}{%
\dimensions%
\basepoint%
@@ -209,7 +209,7 @@
\anchor{north west}{\dimensions\centerpoint\advance\pgf@x-\halfwidth\advance\pgf@y\halfheight}%
\anchor{south east}{\dimensions\centerpoint\advance\pgf@x\halfwidth\advance\pgf@y-\halfheight}%
\anchor{south west}{\dimensions\centerpoint\advance\pgf@x-\halfwidth\advance\pgf@y-\halfheight}%
- \anchor{output}{\dimensions\centerpoint\advance\pgf@x\halfwidth}
+ \anchor{output}{\dimensions\centerpoint\advance\pgf@x\halfwidth}%
\backgroundpath{%
\dimensions%
\pgf@xc\halfwidth%
@@ -241,19 +241,19 @@
\advance\pgf@yc-\pgfutil@tempdima%
\expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
{%
- \pgfpathcircle{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\invertedradius}%
+ \pgfpathcircle{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\invertedradius}%
}%
\fi%
\repeatpgfmathloop%
}%
- }
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{and}}
+ }%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{and}}%
\anchorborder{%
\pgfextract@process\externalpoint{}%
\dimensions%
\pgfpointadd{\centerpoint}{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\halfheight}}}%
- }%
-}
+ }%
+}%
@@ -261,7 +261,7 @@
% Shape nand gate IEC
%
-\pgfdeclareshape{nand gate IEC}{
+\pgfdeclareshape{nand gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
%
@@ -285,43 +285,43 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{nand}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
\anchor{output}{%
\csname pgf@anchor@and gate IEC@east\endcsname%
\advance\pgf@x\invertedradius%
\advance\pgf@x\outerinvertedradius%
- }
+ }%
\backgroundpath{%
\csname pgf@sh@bg@and gate IEC\endcsname%
\pgfpathcircle{%
@@ -329,10 +329,10 @@
\advance\pgf@x\halfwidth%
\advance\pgf@x\invertedradius%
}{+\invertedradius}%
- }
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nand}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nand}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
@@ -340,7 +340,7 @@
% Shape or gate IEC
%
-\pgfdeclareshape{or gate IEC}{
+\pgfdeclareshape{or gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@or gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
%
@@ -364,43 +364,43 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{or}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=and gate IEC]{output}
- \inheritbackgroundpath[from=and gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{or}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=and gate IEC]{output}%
+ \inheritbackgroundpath[from=and gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{or}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
@@ -408,7 +408,7 @@
% Shape nor gate IEC
%
-\pgfdeclareshape{nor gate IEC}{
+\pgfdeclareshape{nor gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nor gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
%
@@ -432,43 +432,43 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{nor}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=nand gate IEC]{output}%
- \inheritbackgroundpath[from=nand gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nor}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=nand gate IEC]{output}%%
+ \inheritbackgroundpath[from=nand gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{nor}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
@@ -476,7 +476,7 @@
% Shape xor gate IEC
%
-\pgfdeclareshape{xor gate IEC}{
+\pgfdeclareshape{xor gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xor gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{2}% Maximum 1024 (!) inputs.
%
@@ -500,43 +500,43 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{xor}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=and gate IEC]{output}
- \inheritbackgroundpath[from=and gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xor}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=and gate IEC]{output}%
+ \inheritbackgroundpath[from=and gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xor}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
@@ -544,7 +544,7 @@
% Shape xnor gate IEC
%
-\pgfdeclareshape{xnor gate IEC}{
+\pgfdeclareshape{xnor gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xnor gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
%
@@ -568,50 +568,50 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{xnor}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=nand gate IEC]{output}
- \inheritbackgroundpath[from=nand gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xnor}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=nand gate IEC]{output}%
+ \inheritbackgroundpath[from=nand gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{xnor}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
% Shape buffer gate IEC
%
-\pgfdeclareshape{buffer gate IEC}{
+\pgfdeclareshape{buffer gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@buffer gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1}% Maximum 1 input.
%
@@ -629,43 +629,43 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{xor}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=and gate IEC]{output}
- \inheritbackgroundpath[from=and gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{buffer}}
- \inheritanchorborder[from=and gate IEC]
-}
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=and gate IEC]{output}%
+ \inheritbackgroundpath[from=and gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{buffer}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
@@ -673,7 +673,7 @@
% Shape not gate IEC
%
-\pgfdeclareshape{not gate IEC}{
+\pgfdeclareshape{not gate IEC}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@not gate IEC\endcsname{%
\pgf@lib@sh@logicgate@parseinputs{1}%
%
@@ -692,42 +692,42 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
+ }%
\savedmacro\dimensions{%
\pgf@lib@sh@logicgates@dimensions@IEC{not}%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \inheritanchor[from=and gate IEC]{center}
- \inheritanchor[from=and gate IEC]{mid}
- \inheritanchor[from=and gate IEC]{mid west}
- \inheritanchor[from=and gate IEC]{mid east}
- \inheritanchor[from=and gate IEC]{base}
- \inheritanchor[from=and gate IEC]{base west}
- \inheritanchor[from=and gate IEC]{base east}
- \inheritanchor[from=and gate IEC]{north}
- \inheritanchor[from=and gate IEC]{south}
- \inheritanchor[from=and gate IEC]{east}
- \inheritanchor[from=and gate IEC]{west}
- \inheritanchor[from=and gate IEC]{north east}
- \inheritanchor[from=and gate IEC]{north west}
- \inheritanchor[from=and gate IEC]{south east}
- \inheritanchor[from=and gate IEC]{south west}
- \inheritanchor[from=nand gate IEC]{output}
- \inheritbackgroundpath[from=nand gate IEC]
- \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{not}}
- \inheritanchorborder[from=and gate IEC]
-}
-
-\endinput \ No newline at end of file
+ }%
+ \inheritanchor[from=and gate IEC]{center}%
+ \inheritanchor[from=and gate IEC]{mid}%
+ \inheritanchor[from=and gate IEC]{mid west}%
+ \inheritanchor[from=and gate IEC]{mid east}%
+ \inheritanchor[from=and gate IEC]{base}%
+ \inheritanchor[from=and gate IEC]{base west}%
+ \inheritanchor[from=and gate IEC]{base east}%
+ \inheritanchor[from=and gate IEC]{north}%
+ \inheritanchor[from=and gate IEC]{south}%
+ \inheritanchor[from=and gate IEC]{east}%
+ \inheritanchor[from=and gate IEC]{west}%
+ \inheritanchor[from=and gate IEC]{north east}%
+ \inheritanchor[from=and gate IEC]{north west}%
+ \inheritanchor[from=and gate IEC]{south east}%
+ \inheritanchor[from=and gate IEC]{south west}%
+ \inheritanchor[from=nand gate IEC]{output}%
+ \inheritbackgroundpath[from=nand gate IEC]%
+ \foregroundpath{\pgf@lib@sh@logicgates@IEC@foregroundpath{not}}%
+ \inheritanchorborder[from=and gate IEC]%
+}%
+
+\endinput
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.US.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.US.code.tex
index f941abd2647..3a496324f81 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.US.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.US.code.tex
@@ -7,7 +7,7 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\usepgflibrary{shapes.gates.logic}
+\usepgflibrary{shapes.gates.logic}%
\newif\ifpgfgateanchorsuseboundingrectangle%
@@ -17,160 +17,160 @@
%
\pgfkeys{
/pgf/logic gate anchors use bounding box/.is if=pgfgateanchorsuseboundingrectangle,%
-}
+}%
-% An internal macro for calculating internal dimensions of
+% An internal macro for calculating internal dimensions of
% the US + CDH gates (excluding and gate US and nand gate US).
%
\def\pgf@lib@sh@logicgates@dimensions@orUS{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- %
- % Adjust the height for the number of inputs.
- %
- \c@pgf@counta\pgf@lib@sh@logicgate@numinputs%
- \advance\c@pgf@counta1\relax%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@ya\pgflinewidth%
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/logic gate input sep}}%
- \pgf@yb.5\pgf@yb%
- \ifdim\pgf@ya<\pgf@yb%
- \pgf@ya\pgf@yb%
- \fi%
- \multiply\pgf@ya\c@pgf@counta%
- \ifdim\pgf@y<\pgf@ya%
- \pgf@y\pgf@ya%
- \fi%
- %
- \ifdim\pgf@x>\pgf@y%
- \pgf@y\pgf@x%
- \else%
- \pgf@x\pgf@y%
- \fi%
- %
- % Adjust for minimum height and width.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@ya%
- \pgf@y.5\pgf@ya%
- \fi%
- \pgf@xb\pgf@x%
- \advance\pgf@xb1.732051\pgf@y% 2y*cos(30)
- \ifdim\pgf@xb<\pgf@xa%
- \pgf@xb\pgf@xa%
- \pgf@x0.366025\pgf@xb% xb / (1 + 2*cos(30))
- \fi%
- %
- \ifdim\pgf@x>\pgf@y%
- \pgf@y\pgf@x%
- \else%
- \pgf@x\pgf@y%
- \fi%
- \edef\halfside{\the\pgf@x}%
- \addtosavedmacro\halfside%
- %
- % Take into account the outer sep.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\outerxsep{\the\pgf@xa}%
- \edef\outerysep{\the\pgf@ya}%
- \addtosavedmacro\outerxsep%
- \addtosavedmacro\outerysep%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- %
- \edef\halfwidth{\the\pgf@x}%
- \edef\halfheight{\the\pgf@y}%
- \addtosavedmacro\halfwidth%
- \addtosavedmacro\halfheight%
- %
- \pgfextract@process\tipanchor{%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@y-\pgf@ya%
- \pgf@x-.16666\pgf@x%
- \pgf@yb2.0\pgf@y%
- \advance\pgf@x.866025\pgf@yb%
- \advance\pgf@x1.154701\pgf@xa%
- \pgf@y0pt%
- }%
- \addtosavedmacro\tipanchor%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ %
+ % Adjust the height for the number of inputs.
+ %
+ \c@pgf@counta\pgf@lib@sh@logicgate@numinputs%
+ \advance\c@pgf@counta1\relax%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@ya\pgflinewidth%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/logic gate input sep}}%
+ \pgf@yb.5\pgf@yb%
+ \ifdim\pgf@ya<\pgf@yb%
+ \pgf@ya\pgf@yb%
+ \fi%
+ \multiply\pgf@ya\c@pgf@counta%
+ \ifdim\pgf@y<\pgf@ya%
+ \pgf@y\pgf@ya%
+ \fi%
+ %
+ \ifdim\pgf@x>\pgf@y%
+ \pgf@y\pgf@x%
+ \else%
+ \pgf@x\pgf@y%
+ \fi%
+ %
+ % Adjust for minimum height and width.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \pgf@y.5\pgf@ya%
+ \fi%
+ \pgf@xb\pgf@x%
+ \advance\pgf@xb1.732051\pgf@y% 2y*cos(30)
+ \ifdim\pgf@xb<\pgf@xa%
+ \pgf@xb\pgf@xa%
+ \pgf@x0.366025\pgf@xb% xb / (1 + 2*cos(30))
+ \fi%
+ %
+ \ifdim\pgf@x>\pgf@y%
+ \pgf@y\pgf@x%
+ \else%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\halfside{\the\pgf@x}%
+ \addtosavedmacro\halfside%
+ %
+ % Take into account the outer sep.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\outerxsep{\the\pgf@xa}%
+ \edef\outerysep{\the\pgf@ya}%
+ \addtosavedmacro\outerxsep%
+ \addtosavedmacro\outerysep%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ %
+ \edef\halfwidth{\the\pgf@x}%
+ \edef\halfheight{\the\pgf@y}%
+ \addtosavedmacro\halfwidth%
+ \addtosavedmacro\halfheight%
+ %
+ \pgfextract@process\tipanchor{%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \pgf@x-.16666\pgf@x%
+ \pgf@yb2.0\pgf@y%
+ \advance\pgf@x.866025\pgf@yb%
+ \advance\pgf@x1.154701\pgf@xa%
+ \pgf@y0pt%
+ }%
+ \addtosavedmacro\tipanchor%
}%
-% An internal macro for calculating internal dimensions of
+% An internal macro for calculating internal dimensions of
% the and gate US and nand gate US.
%
\def\pgf@lib@sh@logicgates@dimensions@andUS{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- %
- % Adjust the height for the number of inputs.
- %
- \c@pgf@counta\pgf@lib@sh@logicgate@numinputs%
- \advance\c@pgf@counta1\relax%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@ya\pgflinewidth%
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/logic gate input sep}}%
- \pgf@yb.5\pgf@yb%
- \ifdim\pgf@ya<\pgf@yb%
- \pgf@ya\pgf@yb%
- \fi%
- \multiply\pgf@ya\c@pgf@counta%
- \ifdim\pgf@y<\pgf@ya%
- \pgf@y\pgf@ya%
- \fi%
- %
- \ifdim\pgf@x>\pgf@y%
- \pgf@y\pgf@x%
- \else%
- \pgf@x\pgf@y%
- \fi%
- %
- % Adjust for minimum height and width.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@ya%
- \pgf@y.5\pgf@ya%
- \fi%
- \pgf@xb2.5\pgf@x%
- \ifdim\pgf@xb<\pgf@xa%
- \pgf@xb\pgf@xa%
- \pgf@x0.4\pgf@xb%
- \fi%
- %
- \ifdim\pgf@x>\pgf@y%
- \pgf@y\pgf@x%
- \else%
- \pgf@x\pgf@y%
- \fi%
- \edef\halfside{\the\pgf@x}%
- \addtosavedmacro\halfside%
- %
- % Take into account the outer sep.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\outerxsep{\the\pgf@xa}%
- \edef\outerysep{\the\pgf@ya}%
- \addtosavedmacro\outerxsep%
- \addtosavedmacro\outerysep%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- %
- \edef\halfwidth{\the\pgf@x}%
- \edef\halfheight{\the\pgf@y}%
- \addtosavedmacro\halfwidth%
- \addtosavedmacro\halfheight%
- %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ %
+ % Adjust the height for the number of inputs.
+ %
+ \c@pgf@counta\pgf@lib@sh@logicgate@numinputs%
+ \advance\c@pgf@counta1\relax%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@ya\pgflinewidth%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/logic gate input sep}}%
+ \pgf@yb.5\pgf@yb%
+ \ifdim\pgf@ya<\pgf@yb%
+ \pgf@ya\pgf@yb%
+ \fi%
+ \multiply\pgf@ya\c@pgf@counta%
+ \ifdim\pgf@y<\pgf@ya%
+ \pgf@y\pgf@ya%
+ \fi%
+ %
+ \ifdim\pgf@x>\pgf@y%
+ \pgf@y\pgf@x%
+ \else%
+ \pgf@x\pgf@y%
+ \fi%
+ %
+ % Adjust for minimum height and width.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \pgf@y.5\pgf@ya%
+ \fi%
+ \pgf@xb2.5\pgf@x%
+ \ifdim\pgf@xb<\pgf@xa%
+ \pgf@xb\pgf@xa%
+ \pgf@x0.4\pgf@xb%
+ \fi%
+ %
+ \ifdim\pgf@x>\pgf@y%
+ \pgf@y\pgf@x%
+ \else%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\halfside{\the\pgf@x}%
+ \addtosavedmacro\halfside%
+ %
+ % Take into account the outer sep.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\outerxsep{\the\pgf@xa}%
+ \edef\outerysep{\the\pgf@ya}%
+ \addtosavedmacro\outerxsep%
+ \addtosavedmacro\outerysep%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ %
+ \edef\halfwidth{\the\pgf@x}%
+ \edef\halfheight{\the\pgf@y}%
+ \addtosavedmacro\halfwidth%
+ \addtosavedmacro\halfheight%
+ %
}%
@@ -178,25 +178,25 @@
% both and gates and nand gates, and also the not gate and buffer.
%
\def\pgf@lib@sh@logicgate@AND@inputanchor#1{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-.166666\pgf@xa%
- \advance\pgf@x-\halfwidth%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
- \advance\pgf@x-\invertedradius%
- \advance\pgf@x-\outerinvertedradius%
- \fi%
- %
- \pgfutil@tempdima\halfside%
- \multiply\pgfutil@tempdima2\relax%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \multiply\pgfutil@tempdima#1\relax%
- \advance\pgf@y\halfside%
- \advance\pgf@y-\pgfutil@tempdima%
-}
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-.166666\pgf@xa%
+ \advance\pgf@x-\halfwidth%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
+ \advance\pgf@x-\invertedradius%
+ \advance\pgf@x-\outerinvertedradius%
+ \fi%
+ %
+ \pgfutil@tempdima\halfside%
+ \multiply\pgfutil@tempdima2\relax%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \multiply\pgfutil@tempdima#1\relax%
+ \advance\pgf@y\halfside%
+ \advance\pgf@y-\pgfutil@tempdima%
+}%
@@ -204,235 +204,235 @@
% Shape and gate US
%
\pgfdeclareshape{and gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@and gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@and gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{An and gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@andUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \csname pgf@anchor@and gate US@east\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{mid west}{%
- \csname pgf@anchor@and gate US@west\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \csname pgf@anchor@and gate US@east\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{base west}{%
- \csname pgf@anchor@and gate US@west\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{east}{%
- \dimensions%
- \pgf@xa\halfwidth%
- \pgf@xb\pgf@xa%
- \advance\pgf@xb-\outerxsep%
- \centerpoint%
- \advance\pgf@x.333333\pgf@xb%
- \advance\pgf@x\pgf@xa%
- }
- \anchor{output}{\csname pgf@anchor@and gate US@east\endcsname}
- \anchor{north east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@nand gate US@east\endcsname%
- \advance\pgf@y\halfheight%
- \else
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\pgf@xa%
- \advance\pgf@xb-\outerxsep%
- \centerpoint%
- \advance\pgf@x.333333\pgf@xb%
- \advance\pgf@x.707106\pgf@xa%
- \advance\pgf@y.707106\pgf@ya%
- \fi%
- }
- \anchor{south east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@nand gate US@east\endcsname%
- \advance\pgf@y-\halfheight%
- \else
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\pgf@xa%
- \advance\pgf@xb-\outerxsep%
- \centerpoint%
- \advance\pgf@x.333333\pgf@xb%
- \advance\pgf@x.707106\pgf@xa%
- \advance\pgf@y-.707106\pgf@ya%
- \fi%
- }
- \anchor{north}{%
- \dimensions%
- \centerpoint%
- \advance\pgf@y\halfheight%
- }
- \anchor{south}{%
- \dimensions%
- \centerpoint%
- \advance\pgf@y-\halfheight%
- }
- \anchor{south west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@y-\halfheight%
- }
- \anchor{north west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@y\halfheight%
- }
- \anchor{west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- }
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- \pgf@xb.333333\pgf@xc%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
- {%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
- \pgfpathclose%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@xa\halfside%
- \pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-.5\pgflinewidth%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- }%
- }%
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle\pgfmathresult%
- \dimensions%
- \pgf@xb\halfside%
- \pgf@xc1.66666\pgf@xb%
- \advance\pgf@xc\outerxsep%
- \pgf@yc\halfheight%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@and gate US@north west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y\pgf@yc}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@x.333333\pgf@xb%
- }%
- {0}{90}{+\halfwidth and +\halfheight}%
- \else%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y\pgf@yc}%
- {\centerpoint\advance\pgf@x-\pgf@xc\advance\pgf@y\pgf@yc}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y-\pgf@yc}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@x.333333\pgf@xb%
- }%
- {270}{360}{+\halfwidth and +\halfheight}%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@and gate US@south west\endcsname}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y-\pgf@yc}%
- {\csname pgf@anchor@and gate US@south west\endcsname}%
- \else%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {\csname pgf@anchor@and gate US@north west\endcsname}%
- {\csname pgf@anchor@and gate US@south west\endcsname}%
- \fi%
- \fi%
- \fi%
- }
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@and gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@and gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{An and gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@andUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \csname pgf@anchor@and gate US@east\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{mid west}{%
+ \csname pgf@anchor@and gate US@west\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \csname pgf@anchor@and gate US@east\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base west}{%
+ \csname pgf@anchor@and gate US@west\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{east}{%
+ \dimensions%
+ \pgf@xa\halfwidth%
+ \pgf@xb\pgf@xa%
+ \advance\pgf@xb-\outerxsep%
+ \centerpoint%
+ \advance\pgf@x.333333\pgf@xb%
+ \advance\pgf@x\pgf@xa%
+ }%
+ \anchor{output}{\csname pgf@anchor@and gate US@east\endcsname}%
+ \anchor{north east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@nand gate US@east\endcsname%
+ \advance\pgf@y\halfheight%
+ \else
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\pgf@xa%
+ \advance\pgf@xb-\outerxsep%
+ \centerpoint%
+ \advance\pgf@x.333333\pgf@xb%
+ \advance\pgf@x.707106\pgf@xa%
+ \advance\pgf@y.707106\pgf@ya%
+ \fi%
+ }%
+ \anchor{south east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@nand gate US@east\endcsname%
+ \advance\pgf@y-\halfheight%
+ \else
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\pgf@xa%
+ \advance\pgf@xb-\outerxsep%
+ \centerpoint%
+ \advance\pgf@x.333333\pgf@xb%
+ \advance\pgf@x.707106\pgf@xa%
+ \advance\pgf@y-.707106\pgf@ya%
+ \fi%
+ }%
+ \anchor{north}{%
+ \dimensions%
+ \centerpoint%
+ \advance\pgf@y\halfheight%
+ }%
+ \anchor{south}{%
+ \dimensions%
+ \centerpoint%
+ \advance\pgf@y-\halfheight%
+ }%
+ \anchor{south west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@y-\halfheight%
+ }%
+ \anchor{north west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@y\halfheight%
+ }%
+ \anchor{west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ }%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ \pgf@xb.333333\pgf@xc%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
+ {%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
+ \pgfpathclose%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@xa\halfside%
+ \pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-.5\pgflinewidth%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle\pgfmathresult%
+ \dimensions%
+ \pgf@xb\halfside%
+ \pgf@xc1.66666\pgf@xb%
+ \advance\pgf@xc\outerxsep%
+ \pgf@yc\halfheight%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@and gate US@north west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y\pgf@yc}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@x.333333\pgf@xb%
+ }%
+ {0}{90}{+\halfwidth and +\halfheight}%
+ \else%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y\pgf@yc}%
+ {\centerpoint\advance\pgf@x-\pgf@xc\advance\pgf@y\pgf@yc}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y-\pgf@yc}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@x.333333\pgf@xb%
+ }%
+ {270}{360}{+\halfwidth and +\halfheight}%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@and gate US@south west\endcsname}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {\centerpoint\advance\pgf@x.333333\pgf@xb\advance\pgf@y-\pgf@yc}%
+ {\csname pgf@anchor@and gate US@south west\endcsname}%
+ \else%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {\csname pgf@anchor@and gate US@north west\endcsname}%
+ {\csname pgf@anchor@and gate US@south west\endcsname}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
@@ -441,512 +441,512 @@
% Shape nand gate US
%
\pgfdeclareshape{nand gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@nand gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@nand gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{A nand gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@andUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \inheritanchor[from=and gate US]{mid}
- \inheritanchor[from=and gate US]{mid east}
- \inheritanchor[from=and gate US]{mid west}
- \inheritanchor[from=and gate US]{base}
- \inheritanchor[from=and gate US]{base east}
- \inheritanchor[from=and gate US]{base west}
- \anchor{output}{%
- \dimensions
- \pgfpointadd{\centerpoint}{%
- \pgf@xa\halfside%
- \pgf@x1.33333\pgf@xa%
- \advance\pgf@x\invertedradius%
- \advance\pgf@x\outerinvertedradius%
- \advance\pgf@x\outerxsep%
- \pgf@y0pt%
- }%
- }
- \inheritanchor[from=and gate US]{east}
- \inheritanchor[from=and gate US]{north east}
- \inheritanchor[from=and gate US]{south east}
- \inheritanchor[from=and gate US]{north}
- \inheritanchor[from=and gate US]{south}
- \inheritanchor[from=and gate US]{south west}
- \inheritanchor[from=and gate US]{north west}
- \inheritanchor[from=and gate US]{west}
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- \pgf@xb.333333\pgf@xc%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
- {%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
- \pgfpathclose%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@xa\halfside%
- \pgf@x-1.166666\pgf@xa%
- \advance\pgf@x-.5\pgflinewidth%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- %
- % Draw the output inverter.
- %
- {%
- \pgfpathcircle{%
- \pgf@x1.33333\pgf@xc%
- \advance\pgf@x\outerinvertedradius%
- \pgf@y0pt%
- }{+\invertedradius}%
- }%
- }%
- }
- \inheritanchorborder[from=and gate US]
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@nand gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@nand gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{A nand gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@andUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \inheritanchor[from=and gate US]{mid}%
+ \inheritanchor[from=and gate US]{mid east}%
+ \inheritanchor[from=and gate US]{mid west}%
+ \inheritanchor[from=and gate US]{base}%
+ \inheritanchor[from=and gate US]{base east}%
+ \inheritanchor[from=and gate US]{base west}%
+ \anchor{output}{%
+ \dimensions
+ \pgfpointadd{\centerpoint}{%
+ \pgf@xa\halfside%
+ \pgf@x1.33333\pgf@xa%
+ \advance\pgf@x\invertedradius%
+ \advance\pgf@x\outerinvertedradius%
+ \advance\pgf@x\outerxsep%
+ \pgf@y0pt%
+ }%
+ }%
+ \inheritanchor[from=and gate US]{east}%
+ \inheritanchor[from=and gate US]{north east}%
+ \inheritanchor[from=and gate US]{south east}%
+ \inheritanchor[from=and gate US]{north}%
+ \inheritanchor[from=and gate US]{south}%
+ \inheritanchor[from=and gate US]{south west}%
+ \inheritanchor[from=and gate US]{north west}%
+ \inheritanchor[from=and gate US]{west}%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ \pgf@xb.333333\pgf@xc%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yc}}%
+ {%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
+ \pgfpathclose%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@xa\halfside%
+ \pgf@x-1.166666\pgf@xa%
+ \advance\pgf@x-.5\pgflinewidth%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ % Draw the output inverter.
+ %
+ {%
+ \pgfpathcircle{%
+ \pgf@x1.33333\pgf@xc%
+ \advance\pgf@x\outerinvertedradius%
+ \pgf@y0pt%
+ }{+\invertedradius}%
+ }%
+ }%
+ }%
+ \inheritanchorborder[from=and gate US]%
+}%
% Internal macro for calculation input anchors. Used by
% or, nor xnor gates (US).
%
\def\pgf@lib@sh@logicgate@OR@inputanchor#1{%
- \dimensions%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- %
- \pgfutil@tempdima\halfside%
- \multiply\pgfutil@tempdima2\relax%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \multiply\pgfutil@tempdima#1\relax%
- \pgf@yc\pgf@ya%
- \advance\pgf@yc-\pgfutil@tempdima%
- %
- \pgf@xb\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@xc-1.166666\pgf@ya%
- \advance\pgf@xc-.866025\pgf@xb%
- \advance\pgf@xc\pgfmathresult\pgf@yb%
- \advance\pgf@xc\halflinewidth%
- \advance\pgf@xc-\outerxsep%
- %
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
- \advance\pgf@xc-\invertedradius%
- \advance\pgf@xc-\outerinvertedradius%
- \fi%
- %
- \centerpoint%
- \advance\pgf@x\pgf@xc%
- \advance\pgf@y\pgf@yc%
-}
+ \dimensions%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ %
+ \pgfutil@tempdima\halfside%
+ \multiply\pgfutil@tempdima2\relax%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \multiply\pgfutil@tempdima#1\relax%
+ \pgf@yc\pgf@ya%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ %
+ \pgf@xb\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@xc-1.166666\pgf@ya%
+ \advance\pgf@xc-.866025\pgf@xb%
+ \advance\pgf@xc\pgfmathresult\pgf@yb%
+ \advance\pgf@xc\halflinewidth%
+ \advance\pgf@xc-\outerxsep%
+ %
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
+ \advance\pgf@xc-\invertedradius%
+ \advance\pgf@xc-\outerinvertedradius%
+ \fi%
+ %
+ \centerpoint%
+ \advance\pgf@x\pgf@xc%
+ \advance\pgf@y\pgf@yc%
+}%
% Shape or gate US
%
\pgfdeclareshape{or gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@or gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@or gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@or gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@OR@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{An or gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\halflinewidth{%
- \pgf@x.5\pgflinewidth%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \csname pgf@anchor@or gate US@east\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{mid west}{%
- \csname pgf@anchor@or gate US@north west\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \csname pgf@anchor@or gate US@east\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{base west}{%
- \csname pgf@anchor@or gate US@north west\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{east}{%
- \dimensions%
- \pgfpointadd{\centerpoint}{\tipanchor}%
- }
- \anchor{output}{\csname pgf@anchor@or gate US@east\endcsname}
- \anchor{north east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \tipanchor%
- \pgf@xa\pgf@x%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\halfheight%
- \else%
- \centerpoint%
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\halfside%
- \advance\pgf@x-.166666\pgf@xb%
- \advance\pgf@xa\pgf@xb%
- \advance\pgf@x.5\pgf@xa%
- \advance\pgf@y-\pgf@xb%
- \advance\pgf@ya\pgf@xb%
- \advance\pgf@y.866025\pgf@ya%
- \fi%
- }
- \anchor{south east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \tipanchor%
- \pgf@xa\pgf@x%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y-\halfheight%
- \else
- \centerpoint%
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\halfside%
- \advance\pgf@x-.166666\pgf@xb%
- \advance\pgf@xa\pgf@xb%
- \advance\pgf@x.5\pgf@xa%
- \advance\pgf@y\pgf@xb%
- \advance\pgf@ya\pgf@xb%
- \advance\pgf@y-.866025\pgf@ya%
- \fi%
- }
- \anchor{north}{%
- \dimensions%
- \centerpoint%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y\halfheight%
- \else%
- \pgf@ya\halfheight%
- \advance\pgf@y.993043\pgf@ya%
- \fi%
- }
- \anchor{south}{%
- \dimensions%
- \centerpoint%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y-\halfheight%
- \else%
- \pgf@ya\halfheight%
- \advance\pgf@y-.993043\pgf@ya%
- \fi%
- }
- \anchor{south west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \pgf@xa\outerxsep%
- \advance\pgf@x-1.732050\pgf@xa%
- \advance\pgf@y-\halfheight%
- }
- \anchor{north west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \pgf@xa\outerxsep%
- \advance\pgf@x-1.732050\pgf@xa%
- \advance\pgf@y\halfheight%
- }
- \anchor{west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \else%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@x0.267949\pgf@xa%
- \fi%
- }
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \pgfpatharc{-30}{0}{+\pgf@yc}%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \pgfpatharc{0}{30}{+\pgf@yc}%
- }%
- \pgfpathclose%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- \pgf@xa\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \let\sineangle\pgfmathresult%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@x-1.166666\pgf@ya%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x\pgfmathresult\pgf@yb%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- }%
- }%
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle\pgfmathresult%
- \dimensions%
- \pgf@xc\halfside%
- %
- \pgf@xc-.166666\pgf@xc%
- \ifdim\pgf@xa<\pgf@xc%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@or gate US@north west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@or gate US@north\endcsname%
- }%
- {\csname pgf@anchor@or gate US@north west\endcsname}%
- \else%
- \pgfmathsubtract@{360}{\pgfmathresult}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@or gate US@south\endcsname%
- }%
- {\csname pgf@anchor@or gate US@south west\endcsname}%
- \else%
- \ifdim\pgf@ya>\pgf@yb%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \advance\pgf@yc-\outerxsep%
- \pgfextract@process\point{%
- \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
- {%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.166666\pgf@xa%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x-\outerxsep%
- }%
- {0}{90}{+\pgf@yc}%
- }%
- \else%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \advance\pgf@yc-\outerxsep%
- \pgfextract@process\point{%
- \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
- {%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.166666\pgf@xa%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x-\outerxsep%
- }%
- {270}{360}{+\pgf@yc}%
- }%
- \fi%
- \fi%
- \fi%
- \else%
- \ifdim\pgf@y=0pt\relax%
- \csname pgf@anchor@and gate US@east\endcsname%
- \else%
- \pgf@xc\halfwidth%
- \advance\pgf@xc\halfside%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \pgf@xb\halfside%
- \pgf@xb-.166666\pgf@xb%
- \ifdim\pgf@ya<0pt%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {270}{330}{+\pgf@yc}%
- \else%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y-\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {30}{90}{+\pgf@xc and +\pgf@yc}%
- \fi%
- \fi%
- \fi%
- }%
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@or gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@or gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@or gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@OR@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{An or gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\halflinewidth{%
+ \pgf@x.5\pgflinewidth%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \csname pgf@anchor@or gate US@east\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{mid west}{%
+ \csname pgf@anchor@or gate US@north west\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \csname pgf@anchor@or gate US@east\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base west}{%
+ \csname pgf@anchor@or gate US@north west\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{east}{%
+ \dimensions%
+ \pgfpointadd{\centerpoint}{\tipanchor}%
+ }%
+ \anchor{output}{\csname pgf@anchor@or gate US@east\endcsname}%
+ \anchor{north east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \tipanchor%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\halfheight%
+ \else%
+ \centerpoint%
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\halfside%
+ \advance\pgf@x-.166666\pgf@xb%
+ \advance\pgf@xa\pgf@xb%
+ \advance\pgf@x.5\pgf@xa%
+ \advance\pgf@y-\pgf@xb%
+ \advance\pgf@ya\pgf@xb%
+ \advance\pgf@y.866025\pgf@ya%
+ \fi%
+ }%
+ \anchor{south east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \tipanchor%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y-\halfheight%
+ \else
+ \centerpoint%
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\halfside%
+ \advance\pgf@x-.166666\pgf@xb%
+ \advance\pgf@xa\pgf@xb%
+ \advance\pgf@x.5\pgf@xa%
+ \advance\pgf@y\pgf@xb%
+ \advance\pgf@ya\pgf@xb%
+ \advance\pgf@y-.866025\pgf@ya%
+ \fi%
+ }%
+ \anchor{north}{%
+ \dimensions%
+ \centerpoint%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y\halfheight%
+ \else%
+ \pgf@ya\halfheight%
+ \advance\pgf@y.993043\pgf@ya%
+ \fi%
+ }%
+ \anchor{south}{%
+ \dimensions%
+ \centerpoint%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y-\halfheight%
+ \else%
+ \pgf@ya\halfheight%
+ \advance\pgf@y-.993043\pgf@ya%
+ \fi%
+ }%
+ \anchor{south west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x-1.732050\pgf@xa%
+ \advance\pgf@y-\halfheight%
+ }%
+ \anchor{north west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x-1.732050\pgf@xa%
+ \advance\pgf@y\halfheight%
+ }%
+ \anchor{west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \else%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@x0.267949\pgf@xa%
+ \fi%
+ }%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \pgfpatharc{-30}{0}{+\pgf@yc}%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \pgfpatharc{0}{30}{+\pgf@yc}%
+ }%
+ \pgfpathclose%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ \pgf@xa\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \let\sineangle\pgfmathresult%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@x-1.166666\pgf@ya%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x\pgfmathresult\pgf@yb%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle\pgfmathresult%
+ \dimensions%
+ \pgf@xc\halfside%
+ %
+ \pgf@xc-.166666\pgf@xc%
+ \ifdim\pgf@xa<\pgf@xc%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@or gate US@north west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@or gate US@north\endcsname%
+ }%
+ {\csname pgf@anchor@or gate US@north west\endcsname}%
+ \else%
+ \pgfmathsubtract@{360}{\pgfmathresult}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@or gate US@south\endcsname%
+ }%
+ {\csname pgf@anchor@or gate US@south west\endcsname}%
+ \else%
+ \ifdim\pgf@ya>\pgf@yb%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \advance\pgf@yc-\outerxsep%
+ \pgfextract@process\point{%
+ \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
+ {%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.166666\pgf@xa%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ }%
+ {0}{90}{+\pgf@yc}%
+ }%
+ \else%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \advance\pgf@yc-\outerxsep%
+ \pgfextract@process\point{%
+ \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
+ {%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.166666\pgf@xa%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ }%
+ {270}{360}{+\pgf@yc}%
+ }%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \ifdim\pgf@y=0pt\relax%
+ \csname pgf@anchor@and gate US@east\endcsname%
+ \else%
+ \pgf@xc\halfwidth%
+ \advance\pgf@xc\halfside%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \pgf@xb\halfside%
+ \pgf@xb-.166666\pgf@xb%
+ \ifdim\pgf@ya<0pt%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {270}{330}{+\pgf@yc}%
+ \else%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y-\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {30}{90}{+\pgf@xc and +\pgf@yc}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
@@ -954,154 +954,154 @@
% Shape nor gate US
%
\pgfdeclareshape{nor gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nor gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@nor gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@nor gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@OR@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{A nor gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\halflinewidth{%
- \pgf@x.5\pgflinewidth%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \inheritanchor[from=or gate US]{center}
- \inheritanchor[from=or gate US]{mid}
- \inheritanchor[from=or gate US]{mid east}
- \inheritanchor[from=or gate US]{mid west}
- \inheritanchor[from=or gate US]{base}
- \inheritanchor[from=or gate US]{base east}
- \inheritanchor[from=or gate US]{base west}
- \inheritanchor[from=or gate US]{east}
- \inheritanchor[from=or gate US]{north east}
- \inheritanchor[from=or gate US]{south east}
- \inheritanchor[from=or gate US]{north}
- \inheritanchor[from=or gate US]{south}
- \inheritanchor[from=or gate US]{south west}
- \inheritanchor[from=or gate US]{north west}
- \inheritanchor[from=or gate US]{west}
- \anchor{output}{%
- \dimensions%
- \centerpoint%
- \pgf@xc\halfside%
- \pgf@yc\pgf@xc%
- \advance\pgf@x-.166666\pgf@xc%
- \pgf@yc2.0\pgf@yc%
- \advance\pgf@x.866025\pgf@yc%
- \advance\pgf@x\outerinvertedradius%
- \advance\pgf@x\invertedradius%
- \advance\pgf@x\outerxsep%
- }%
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \pgfpatharc{-30}{0}{+\pgf@yc}%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \pgfpatharc{0}{30}{+\pgf@yc}%
- }%
- \pgfpathclose%
- % Draw the output inverter.
- %
- {%
- \pgfpathcircle{%
- \pgf@x-.166666\pgf@xc%
- \pgf@yc2.0\pgf@yc%
- \advance\pgf@x.866025\pgf@yc%
- \advance\pgf@x\outerinvertedradius%
- \pgf@y0pt%
- }{+\invertedradius}%
- }%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- \pgf@xa\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \let\sineangle\pgfmathresult%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@x-1.166666\pgf@ya%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x\pgfmathresult\pgf@yb%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- }%
- }%
- \inheritanchorborder[from=or gate US]
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nor gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@nor gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@nor gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@OR@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{A nor gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\halflinewidth{%
+ \pgf@x.5\pgflinewidth%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \inheritanchor[from=or gate US]{center}%
+ \inheritanchor[from=or gate US]{mid}%
+ \inheritanchor[from=or gate US]{mid east}%
+ \inheritanchor[from=or gate US]{mid west}%
+ \inheritanchor[from=or gate US]{base}%
+ \inheritanchor[from=or gate US]{base east}%
+ \inheritanchor[from=or gate US]{base west}%
+ \inheritanchor[from=or gate US]{east}%
+ \inheritanchor[from=or gate US]{north east}%
+ \inheritanchor[from=or gate US]{south east}%
+ \inheritanchor[from=or gate US]{north}%
+ \inheritanchor[from=or gate US]{south}%
+ \inheritanchor[from=or gate US]{south west}%
+ \inheritanchor[from=or gate US]{north west}%
+ \inheritanchor[from=or gate US]{west}%
+ \anchor{output}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xc\halfside%
+ \pgf@yc\pgf@xc%
+ \advance\pgf@x-.166666\pgf@xc%
+ \pgf@yc2.0\pgf@yc%
+ \advance\pgf@x.866025\pgf@yc%
+ \advance\pgf@x\outerinvertedradius%
+ \advance\pgf@x\invertedradius%
+ \advance\pgf@x\outerxsep%
+ }%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \pgfpatharc{-30}{0}{+\pgf@yc}%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \pgfpatharc{0}{30}{+\pgf@yc}%
+ }%
+ \pgfpathclose%
+ % Draw the output inverter.
+ %
+ {%
+ \pgfpathcircle{%
+ \pgf@x-.166666\pgf@xc%
+ \pgf@yc2.0\pgf@yc%
+ \advance\pgf@x.866025\pgf@yc%
+ \advance\pgf@x\outerinvertedradius%
+ \pgf@y0pt%
+ }{+\invertedradius}%
+ }%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ \pgf@xa\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \let\sineangle\pgfmathresult%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@x-1.166666\pgf@ya%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x\pgfmathresult\pgf@yb%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ }%
+ \inheritanchorborder[from=or gate US]%
+}%
@@ -1109,42 +1109,42 @@
% xor and xnor gates (US).
%
\def\pgf@lib@sh@logicgate@XOR@inputanchor#1{%
- \dimensions%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- %
- \pgfutil@tempdima\halfside%
- \multiply\pgfutil@tempdima2\relax%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \multiply\pgfutil@tempdima#1\relax%
- \pgf@yc\pgf@ya%
- \advance\pgf@yc-\pgfutil@tempdima%
- %
- \pgf@xb\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@xc-1.166666\pgf@ya%
- \advance\pgf@xc-.866025\pgf@xb%
- \advance\pgf@xc\pgfmathresult\pgf@yb%
- \advance\pgf@xc\halflinewidth%
- \advance\pgf@xc-\outerxsep%
- %
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
- \advance\pgf@xc-\invertedradius%
- \advance\pgf@xc-\outerinvertedradius%
- \fi%
- %
- \centerpoint%
- \advance\pgf@x\pgf@xc%
- \advance\pgf@y\pgf@yc%
- \pgf@xa\halfside%
- \advance\pgf@x-.333333\pgf@xa%
-}
+ \dimensions%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ %
+ \pgfutil@tempdima\halfside%
+ \multiply\pgfutil@tempdima2\relax%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \multiply\pgfutil@tempdima#1\relax%
+ \pgf@yc\pgf@ya%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ %
+ \pgf@xb\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@xc-1.166666\pgf@ya%
+ \advance\pgf@xc-.866025\pgf@xb%
+ \advance\pgf@xc\pgfmathresult\pgf@yb%
+ \advance\pgf@xc\halflinewidth%
+ \advance\pgf@xc-\outerxsep%
+ %
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-#1\endcsname%
+ \advance\pgf@xc-\invertedradius%
+ \advance\pgf@xc-\outerinvertedradius%
+ \fi%
+ %
+ \centerpoint%
+ \advance\pgf@x\pgf@xc%
+ \advance\pgf@y\pgf@yc%
+ \pgf@xa\halfside%
+ \advance\pgf@x-.333333\pgf@xa%
+}%
@@ -1153,330 +1153,330 @@
% Shape xor gate US
%
\pgfdeclareshape{xor gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xor gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{2}%
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@xor gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@xor gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@XOR@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{An xor gate must have at two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\halflinewidth{%
- \pgf@x.5\pgflinewidth%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \inheritanchor[from=or gate US]{mid east}
- \anchor{mid west}{%
- \csname pgf@anchor@xor gate US@north west\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{base}{\basepoint}%
- \inheritanchor[from=or gate US]{base east}
- \anchor{base west}{%
- \csname pgf@anchor@xor gate US@north west\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \inheritanchor[from=or gate US]{base}
- \inheritanchor[from=or gate US]{output}
- \inheritanchor[from=or gate US]{east}
- \inheritanchor[from=or gate US]{north east}
- \inheritanchor[from=or gate US]{south east}
- \inheritanchor[from=or gate US]{north}
- \inheritanchor[from=or gate US]{south}
- \anchor{south west}{%
- \dimensions%
- \pgf@xa\halfside%
- \pgf@xa-3.232051\pgf@xa% (7/6 + 2*cos(30) + 1/3) * x
- \pgf@xb\halfside%
- \pgf@xb2.0\pgf@xb%
- \advance\pgf@xb-\halflinewidth%
- \advance\pgf@xa.866025\pgf@xb%
- \pgf@ya.5\pgf@xb%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y-\halfheight%
- \else%
- \advance\pgf@y-\pgf@ya%
- \fi%
- }
- \anchor{north west}{%
- \dimensions%
- \pgf@xa\halfside%
- \pgf@xa-3.232051\pgf@xa% (7/6 + 2*cos(30) + 1/3) * x
- \pgf@xb\halfside%
- \pgf@xb2.0\pgf@xb%
- \advance\pgf@xb-\halflinewidth%
- \advance\pgf@xa.866025\pgf@xb%
- \pgf@ya.5\pgf@xb%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y\halfheight%
- \else%
- \advance\pgf@y\pgf@ya%
- \fi%
- }
- \anchor{west}{%
- \dimensions%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- %
- \pgf@xb\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{0}{\pgfmath@tonumber{\pgf@yb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@xc-1.166666\pgf@ya%
- \advance\pgf@xc-.866025\pgf@xb%
- \advance\pgf@xc\pgfmathresult\pgf@yb%
- \advance\pgf@xc\halflinewidth%
- \advance\pgf@xc-\outerxsep%
- %
- \centerpoint%
- \advance\pgf@x\pgf@xc%
- \pgf@xa\halfside%
- \advance\pgf@x-.333333\pgf@xa%
- \ifpgfgateanchorsuseboundingrectangle%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@x-0.133974\pgf@xa%
- \fi%
- }
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- {%
- \pgf@yc2.66666\pgf@yc%
- \pgfpatharc{-22}{0}{+1.166666\pgf@yc and +\pgf@yc}%
- }
- {%
- \pgf@yc2.66666\pgf@yc%
- \pgfpatharc{0}{22}{+1.166666\pgf@yc and +\pgf@yc}%
- }%
- \pgfpathclose%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- \pgf@xa\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@x-1.5\pgf@ya%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x\pgfmathresult\pgf@yb%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- %
- % Now, some fooling around to stop the `tail' being filled.
- % Technically it still is, but it isn't visible.
- %
- \pgf@xc\halfside%
- \pgf@yc\halfside%
- \pgfpathmoveto{\pgfqpoint{-1.5\pgf@xc}{-\pgf@yc}}%
- \pgf@yc2.0\pgf@yc%
- \pgfmathloop%
- \ifnum\pgfmathcounter<61\relax%
- {%
- \pgfextract@process\point{%
- \pgfpointadd{%
- \pgf@x\halfside%
- \pgf@x-3.232051\pgf@x% (7/6 + 2*cos(30) + 1/3) * x
- \pgf@y0pt%
- }{%
- \pgfpointpolar{\pgfmathcounter-30}{+\pgf@yc}%
- }%
- }%
- \pgfpathlineto{\point}%
- \pgfpathmoveto{\point}%
- }
- \repeatpgfmathloop%
- }%
- }%
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle\pgfmathresult%
- \dimensions%
- \pgf@xc\halfside%
- %
- \pgf@xc-.166666\pgf@xc%
- \ifdim\pgf@xa<\pgf@xc%
- \pgfmathanglebetweenpoints{\centerpoint}%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@xor gate US@north west\endcsname%
- }%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@xor gate US@north\endcsname%
- }%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@xor gate US@north west\endcsname%
- }%
- \else%
- \pgfmathsubtract@{360}{\pgfmathresult}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@xor gate US@south\endcsname%
- }%
- {%
- \pgfgateanchorsuseboundingrectangletrue%
- \csname pgf@anchor@xor gate US@south west\endcsname%
- }%
- \else%
- \ifdim\pgf@ya>\pgf@yb%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \advance\pgf@yc-\outerxsep%
- \pgf@process{%
- \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
- {%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.166666\pgf@xa%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@x-.166666\pgf@xa%
- }%
- {0}{90}{+\pgf@yc}%
- }%
- \else%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \advance\pgf@yc-\outerxsep%
- \pgf@process{%
- \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
- {%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.166666\pgf@xa%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@x-.166666\pgf@xa%
- }%
- {270}{360}{+\pgf@yc}%
- }%
- \fi%
- \fi%
- \fi%
- \else%
- \ifdim\pgf@y=0pt\relax%
- \csname pgf@anchor@and gate US@east\endcsname%
- \else%
- \pgf@xc\halfwidth%
- \advance\pgf@xc\halfside%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \pgf@xb\halfside%
- \pgf@xb-.166666\pgf@xb%
- \ifdim\pgf@ya<0pt%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {270}{330}{+\pgf@yc}%
- \else%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y-\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {30}{90}{+\pgf@xc and +\pgf@yc}%
- \fi%
- \fi%
- \fi%
- }%
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xor gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{2}%
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@xor gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@xor gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@XOR@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{An xor gate must have at two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\halflinewidth{%
+ \pgf@x.5\pgflinewidth%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \inheritanchor[from=or gate US]{mid east}%
+ \anchor{mid west}{%
+ \csname pgf@anchor@xor gate US@north west\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base}{\basepoint}%
+ \inheritanchor[from=or gate US]{base east}%
+ \anchor{base west}{%
+ \csname pgf@anchor@xor gate US@north west\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \inheritanchor[from=or gate US]{base}%
+ \inheritanchor[from=or gate US]{output}%
+ \inheritanchor[from=or gate US]{east}%
+ \inheritanchor[from=or gate US]{north east}%
+ \inheritanchor[from=or gate US]{south east}%
+ \inheritanchor[from=or gate US]{north}%
+ \inheritanchor[from=or gate US]{south}%
+ \anchor{south west}{%
+ \dimensions%
+ \pgf@xa\halfside%
+ \pgf@xa-3.232051\pgf@xa% (7/6 + 2*cos(30) + 1/3) * x
+ \pgf@xb\halfside%
+ \pgf@xb2.0\pgf@xb%
+ \advance\pgf@xb-\halflinewidth%
+ \advance\pgf@xa.866025\pgf@xb%
+ \pgf@ya.5\pgf@xb%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y-\halfheight%
+ \else%
+ \advance\pgf@y-\pgf@ya%
+ \fi%
+ }%
+ \anchor{north west}{%
+ \dimensions%
+ \pgf@xa\halfside%
+ \pgf@xa-3.232051\pgf@xa% (7/6 + 2*cos(30) + 1/3) * x
+ \pgf@xb\halfside%
+ \pgf@xb2.0\pgf@xb%
+ \advance\pgf@xb-\halflinewidth%
+ \advance\pgf@xa.866025\pgf@xb%
+ \pgf@ya.5\pgf@xb%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y\halfheight%
+ \else%
+ \advance\pgf@y\pgf@ya%
+ \fi%
+ }%
+ \anchor{west}{%
+ \dimensions%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ %
+ \pgf@xb\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{0}{\pgfmath@tonumber{\pgf@yb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@xc-1.166666\pgf@ya%
+ \advance\pgf@xc-.866025\pgf@xb%
+ \advance\pgf@xc\pgfmathresult\pgf@yb%
+ \advance\pgf@xc\halflinewidth%
+ \advance\pgf@xc-\outerxsep%
+ %
+ \centerpoint%
+ \advance\pgf@x\pgf@xc%
+ \pgf@xa\halfside%
+ \advance\pgf@x-.333333\pgf@xa%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@x-0.133974\pgf@xa%
+ \fi%
+ }%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ {%
+ \pgf@yc2.66666\pgf@yc%
+ \pgfpatharc{-22}{0}{+1.166666\pgf@yc and +\pgf@yc}%
+ }
+ {%
+ \pgf@yc2.66666\pgf@yc%
+ \pgfpatharc{0}{22}{+1.166666\pgf@yc and +\pgf@yc}%
+ }%
+ \pgfpathclose%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ \pgf@xa\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@x-1.5\pgf@ya%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x\pgfmathresult\pgf@yb%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ % Now, some fooling around to stop the `tail' being filled.
+ % Technically it still is, but it isn't visible.
+ %
+ \pgf@xc\halfside%
+ \pgf@yc\halfside%
+ \pgfpathmoveto{\pgfqpoint{-1.5\pgf@xc}{-\pgf@yc}}%
+ \pgf@yc2.0\pgf@yc%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter<61\relax%
+ {%
+ \pgfextract@process\point{%
+ \pgfpointadd{%
+ \pgf@x\halfside%
+ \pgf@x-3.232051\pgf@x% (7/6 + 2*cos(30) + 1/3) * x
+ \pgf@y0pt%
+ }{%
+ \pgfpointpolar{\pgfmathcounter-30}{+\pgf@yc}%
+ }%
+ }%
+ \pgfpathlineto{\point}%
+ \pgfpathmoveto{\point}%
+ }
+ \repeatpgfmathloop%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle\pgfmathresult%
+ \dimensions%
+ \pgf@xc\halfside%
+ %
+ \pgf@xc-.166666\pgf@xc%
+ \ifdim\pgf@xa<\pgf@xc%
+ \pgfmathanglebetweenpoints{\centerpoint}%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@xor gate US@north west\endcsname%
+ }%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@xor gate US@north\endcsname%
+ }%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@xor gate US@north west\endcsname%
+ }%
+ \else%
+ \pgfmathsubtract@{360}{\pgfmathresult}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfpointintersectionoflines{\externalpoint}{\centerpoint}%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@xor gate US@south\endcsname%
+ }%
+ {%
+ \pgfgateanchorsuseboundingrectangletrue%
+ \csname pgf@anchor@xor gate US@south west\endcsname%
+ }%
+ \else%
+ \ifdim\pgf@ya>\pgf@yb%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \advance\pgf@yc-\outerxsep%
+ \pgf@process{%
+ \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
+ {%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.166666\pgf@xa%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@x-.166666\pgf@xa%
+ }%
+ {0}{90}{+\pgf@yc}%
+ }%
+ \else%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \advance\pgf@yc-\outerxsep%
+ \pgf@process{%
+ \pgfmathpointintersectionoflineandarc{\centerpoint}{\externalpoint}%
+ {%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.166666\pgf@xa%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@x-.166666\pgf@xa%
+ }%
+ {270}{360}{+\pgf@yc}%
+ }%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \ifdim\pgf@y=0pt\relax%
+ \csname pgf@anchor@and gate US@east\endcsname%
+ \else%
+ \pgf@xc\halfwidth%
+ \advance\pgf@xc\halfside%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \pgf@xb\halfside%
+ \pgf@xb-.166666\pgf@xb%
+ \ifdim\pgf@ya<0pt%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {270}{330}{+\pgf@yc}%
+ \else%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y-\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {30}{90}{+\pgf@xc and +\pgf@yc}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
@@ -1484,167 +1484,167 @@
% Shape xnor gate US
%
\pgfdeclareshape{xnor gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xnor gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{2}%
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@xnor gate US@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@xnor gate US@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@XOR@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{An xnor gate must have two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\halflinewidth{%
- \pgf@x.5\pgflinewidth%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \inheritanchor[from=xor gate US]{mid east}
- \inheritanchor[from=xor gate US]{mid west}
- \anchor{base}{\basepoint}%
- \inheritanchor[from=xor gate US]{base east}
- \inheritanchor[from=xor gate US]{base west}
- \inheritanchor[from=xor gate US]{base}
- \inheritanchor[from=nor gate US]{output}
- \inheritanchor[from=xor gate US]{east}
- \inheritanchor[from=xor gate US]{north east}
- \inheritanchor[from=xor gate US]{south east}
- \inheritanchor[from=xor gate US]{north}
- \inheritanchor[from=xor gate US]{south}
- \inheritanchor[from=xor gate US]{south west}
- \inheritanchor[from=xor gate US]{north west}
- \inheritanchor[from=xor gate US]{west}
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- {%
- \pgf@yc2.66666\pgf@yc%
- \pgfpatharc{-22}{0}{+1.166666\pgf@yc and +\pgf@yc}%
- }
- {%
- \pgf@yc2.66666\pgf@yc%
- \pgfpatharc{0}{22}{+1.166666\pgf@yc and +\pgf@yc}%
- }%
- \pgfpathclose%
- %
- % Draw the output inverter.
- %
- {%
- \pgfpathcircle{%
- \pgf@x-.166666\pgf@xc%
- \pgf@yc2.0\pgf@yc%
- \advance\pgf@x.866025\pgf@yc%
- \advance\pgf@x\outerinvertedradius%
- \pgf@y0pt%
- }{+\invertedradius}%
- }%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@ya\halfside%
- \pgf@yb2.0\pgf@ya%
- \pgf@xa\pgf@yb%
- \advance\pgf@yb-\halflinewidth%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- %
- \pgf@x-1.5\pgf@ya%
- \advance\pgf@x-.866025\pgf@xa%
- \advance\pgf@x\pgfmathresult\pgf@yb%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- %
- % Now, some fooling around to stop the `tail' being filled.
- %
- \pgf@xc\halfside%
- \pgf@yc\halfside%
- \pgfpathmoveto{\pgfqpoint{-1.5\pgf@xc}{-\pgf@yc}}%
- \pgf@yc2.0\pgf@yc%
- \pgfmathloop%
- \ifnum\pgfmathcounter<61\relax%
- {%
- \pgfextract@process\point{%
- \pgfpointadd{%
- \pgf@x\halfside%
- \pgf@x-3.232051\pgf@x% (7/6 + 2*cos(30) + 1/3) * x
- \pgf@y0pt%
- }{%
- \pgfpointpolar{\pgfmathcounter-30}{+\pgf@yc}%
- }%
- }%
- \pgfpathlineto{\point}%
- \pgfpathmoveto{\point}%
- }
- \repeatpgfmathloop%
- }%
- }%
- \inheritanchorborder[from=xor gate US]
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@xnor gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{2}%
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@xnor gate US@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@xnor gate US@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@XOR@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{An xnor gate must have two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\halflinewidth{%
+ \pgf@x.5\pgflinewidth%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \inheritanchor[from=xor gate US]{mid east}%
+ \inheritanchor[from=xor gate US]{mid west}%
+ \anchor{base}{\basepoint}%%
+ \inheritanchor[from=xor gate US]{base east}%
+ \inheritanchor[from=xor gate US]{base west}%
+ \inheritanchor[from=xor gate US]{base}%
+ \inheritanchor[from=nor gate US]{output}%
+ \inheritanchor[from=xor gate US]{east}%
+ \inheritanchor[from=xor gate US]{north east}%
+ \inheritanchor[from=xor gate US]{south east}%
+ \inheritanchor[from=xor gate US]{north}%
+ \inheritanchor[from=xor gate US]{south}%
+ \inheritanchor[from=xor gate US]{south west}%
+ \inheritanchor[from=xor gate US]{north west}%
+ \inheritanchor[from=xor gate US]{west}%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ {%
+ \pgf@yc2.66666\pgf@yc%
+ \pgfpatharc{-22}{0}{+1.166666\pgf@yc and +\pgf@yc}%
+ }
+ {%
+ \pgf@yc2.66666\pgf@yc%
+ \pgfpatharc{0}{22}{+1.166666\pgf@yc and +\pgf@yc}%
+ }%
+ \pgfpathclose%
+ %
+ % Draw the output inverter.
+ %
+ {%
+ \pgfpathcircle{%
+ \pgf@x-.166666\pgf@xc%
+ \pgf@yc2.0\pgf@yc%
+ \advance\pgf@x.866025\pgf@yc%
+ \advance\pgf@x\outerinvertedradius%
+ \pgf@y0pt%
+ }{+\invertedradius}%
+ }%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@ya\halfside%
+ \pgf@yb2.0\pgf@ya%
+ \pgf@xa\pgf@yb%
+ \advance\pgf@yb-\halflinewidth%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yc}}{\pgfmath@tonumber{\pgf@yb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ %
+ \pgf@x-1.5\pgf@ya%
+ \advance\pgf@x-.866025\pgf@xa%
+ \advance\pgf@x\pgfmathresult\pgf@yb%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ % Now, some fooling around to stop the `tail' being filled.
+ %
+ \pgf@xc\halfside%
+ \pgf@yc\halfside%
+ \pgfpathmoveto{\pgfqpoint{-1.5\pgf@xc}{-\pgf@yc}}%
+ \pgf@yc2.0\pgf@yc%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter<61\relax%
+ {%
+ \pgfextract@process\point{%
+ \pgfpointadd{%
+ \pgf@x\halfside%
+ \pgf@x-3.232051\pgf@x% (7/6 + 2*cos(30) + 1/3) * x
+ \pgf@y0pt%
+ }{%
+ \pgfpointpolar{\pgfmathcounter-30}{+\pgf@yc}%
+ }%
+ }%
+ \pgfpathlineto{\point}%
+ \pgfpathmoveto{\point}%
+ }
+ \repeatpgfmathloop%
+ }%
+ }%
+ \inheritanchorborder[from=xor gate US]%
+}%
@@ -1655,7 +1655,7 @@
%
\pgfdeclareshape{not gate US}{%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@not gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1}%
+ \pgf@lib@sh@logicgate@parseinputs{1}%
\ifnum\pgf@lib@sh@logicgate@numinputs=0\relax%
\pgferror{A not gate must have one input}%
\fi%
@@ -1670,21 +1670,21 @@
\saveddimen\outerinvertedradius{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
\advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
+ }%
\anchor{center}{\centerpoint}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{%
@@ -1692,14 +1692,14 @@
\pgfutil@tempdima\pgf@y%
\csname pgf@anchor@not gate US@east\endcsname%
\pgf@y\pgfutil@tempdima%
- }
+ }%
\anchor{mid west}{%
\dimensions%
\pgf@xc\halfside%
\pgf@xc-.833333\pgf@xc%
\advance\pgf@xc-\outerxsep%
\midpoint%
- \advance\pgf@x\pgf@xc%
+ \advance\pgf@x\pgf@xc%
}%
\anchor{base}{\basepoint}%
\anchor{base east}{%
@@ -1707,16 +1707,16 @@
\pgfutil@tempdima\pgf@y%
\csname pgf@anchor@not gate US@east\endcsname%
\pgf@y\pgfutil@tempdima%
- }
+ }%
\anchor{base west}{%
\dimensions%
\pgf@xc\halfside%
\pgf@xc-.833333\pgf@xc%
\advance\pgf@xc-\outerxsep%
\basepoint%
- \advance\pgf@x\pgf@xc%
+ \advance\pgf@x\pgf@xc%
}%
- \inheritanchor[from=and gate US]{base}
+ \inheritanchor[from=and gate US]{base}%
\anchor{output}{%
\dimensions%
\pgf@xc\halfside%
@@ -1727,7 +1727,7 @@
\advance\pgf@x\invertedradius%
\advance\pgf@x\outerinvertedradius%
\advance\pgf@x\outerxsep%
- }
+ }%
\anchor{east}{%
\dimensions%
\tipanchor%
@@ -1749,11 +1749,11 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\fi%
- }
+ }%
\anchor{south}{%
\dimensions%
\ifpgfgateanchorsuseboundingrectangle%
@@ -1768,17 +1768,17 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\fi%
- }
+ }%
\anchor{south east}{%
\dimensions%
\ifpgfgateanchorsuseboundingrectangle%
\csname pgf@anchor@not gate US@south west\endcsname%
\pgf@ya\pgf@y%
- \pgf@process{%
+ \pgf@process{%
\dimensions%
\tipanchor%
\pgf@xa\pgf@x%
@@ -1793,17 +1793,17 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\fi%
- }
+ }%
\anchor{north east}{%
\dimensions%
\ifpgfgateanchorsuseboundingrectangle%
\csname pgf@anchor@not gate US@north west\endcsname%
\pgf@ya\pgf@y%
- \pgf@process{%
+ \pgf@process{%
\dimensions%
\tipanchor%
\pgf@xa\pgf@x%
@@ -1818,11 +1818,11 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\fi%
- }
+ }%
\anchor{south west}{%
\dimensions%
\pgf@xa\halfside%
@@ -1831,7 +1831,7 @@
\advance\pgf@x-\outerxsep%
\advance\pgf@y-1.166666\pgf@xa%
\pgf@ya\outerysep%
- \advance\pgf@y-1.565\pgf@ya% Selected by trial and error.
+ \advance\pgf@y-1.565\pgf@ya% Selected by trial and error.
}%
\anchor{north west}{%
\dimensions%
@@ -1841,7 +1841,7 @@
\advance\pgf@x-\outerxsep%
\advance\pgf@y1.166666\pgf@xa%
\pgf@ya\outerysep%
- \advance\pgf@y1.565\pgf@ya% Selected by trial and error.
+ \advance\pgf@y1.565\pgf@ya% Selected by trial and error.
}%
\anchor{input}{%
\dimensions%
@@ -1856,7 +1856,7 @@
\advance\pgf@xc-\outerxsep%
\centerpoint%
\advance\pgf@x\pgf@xc%
- }
+ }%
\backgroundpath{%
\dimensions%
\pgf@xc\halfwidth%
@@ -1869,9 +1869,9 @@
\pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{1.166666\pgf@yc}}%
\pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{-1.166666\pgf@yc}}%
\pgfpathlineto{\tipanchor}%
- %
+ %
% Draw the output inverter.
- %
+ %
{%
\pgfpathcircle{%
\pgf@x-.166666\pgf@xc%
@@ -1879,11 +1879,11 @@
\advance\pgf@x.866025\pgf@yc%
\advance\pgf@x\outerinvertedradius%
\pgf@y0pt%
- }{+\invertedradius}%
+ }{+\invertedradius}%
}%
- %
+ %
% Draw the input.
- %
+ %
\expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-1\endcsname%
{%
\pgfpathcircle{%
@@ -1892,15 +1892,15 @@
\advance\pgf@x-.5\pgflinewidth%
\advance\pgf@x-\invertedradius%
\pgf@y0pt%
- }{+\invertedradius}%
+ }{+\invertedradius}%
}%
- \fi%
+ \fi%
}%
}%
\anchorborder{%
\pgf@lib@gates@not@buffer@border{not gate US}
- }
-}
+ }%
+}%
\def\pgf@lib@gates@not@buffer@border#1{
\pgfextract@process\externalpoint{}%
@@ -1922,9 +1922,9 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\else%
\pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@not gate US@south west\endcsname}%
\ifdim\externalangle pt<\pgfmathresult pt%
@@ -1938,9 +1938,9 @@
\pgfpointadd{\centerpoint}{%
\tipanchor%
\pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
+ \advance\pgf@x2.350943\pgf@xa%
}%
- }%
+ }%
\fi%
\fi%
\fi%
@@ -1948,8 +1948,8 @@
}%
-\def\pgf@lib@zero@text{0.0}
-\def\pgf@lib@onehundredeighty@text{180.0}
+\def\pgf@lib@zero@text{0.0}%
+\def\pgf@lib@onehundredeighty@text{180.0}%
@@ -1957,569 +1957,569 @@
% Shape buffer gate US.
%
\pgfdeclareshape{buffer gate US}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@buffer gate US\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1}%
- \ifnum\pgf@lib@sh@logicgate@numinputs=0\relax%
- \pgferror{A buffer gate must have one input}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\halflinewidth{%
- \pgf@x.5\pgflinewidth%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \midpoint%
- \pgfutil@tempdima\pgf@y%
- \csname pgf@anchor@buffer gate US@east\endcsname%
- \pgf@y\pgfutil@tempdima%
- }
- \anchor{mid west}{%
- \dimensions%
- \pgf@xc\halfside%
- \pgf@xc-.833333\pgf@xc%
- \advance\pgf@xc-\outerxsep%
- \midpoint%
- \advance\pgf@x\pgf@xc%
- }%
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \basepoint%
- \pgfutil@tempdima\pgf@y%
- \csname pgf@anchor@buffer gate US@east\endcsname%
- \pgf@y\pgfutil@tempdima%
- }
- \inheritanchor[from=not gate US]{base west}
- \inheritanchor[from=and gate US]{base}
- \anchor{output}{\csname pgf@anchor@buffer gate US@east\endcsname}
- \anchor{east}{%
- \dimensions%
- \pgfpointadd{\centerpoint}{%
- \tipanchor%
- \pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
- }%
- }%
- \anchor{north}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@not gate US@north west\endcsname%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@y\pgf@ya%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@y1pt}%
- {\csname pgf@anchor@buffer gate US@north west\endcsname}%
- {%
- \pgfpointadd{\centerpoint}{%
- \tipanchor%
- \pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
- }%
- }%
- \fi%
- }
- \anchor{south}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@not gate US@south west\endcsname%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@y\pgf@ya%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@y-1pt}%
- {\csname pgf@anchor@not gate US@south west\endcsname}%
- {%
- \pgfpointadd{\centerpoint}{%
- \tipanchor%
- \pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
- }%
- }%
- \fi%
- }
- \anchor{south east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@not gate US@south west\endcsname%
- \pgfutil@tempdima\pgf@y%
- \csname pgf@anchor@buffer gate US@east\endcsname%
- \pgf@y\pgfutil@tempdima%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@x1pt\advance\pgf@y-1pt}%
- {\csname pgf@anchor@buffer gate US@south west\endcsname}%
- {%
- \pgfpointadd{\centerpoint}{%
- \tipanchor%
- \pgf@xc\outerxsep%
- \advance\pgf@x2.350943\pgf@xc%
- }%
- }%
- \fi%
- }
- \anchor{north east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \csname pgf@anchor@not gate US@north west\endcsname%
- \pgfutil@tempdima\pgf@y%
- \csname pgf@anchor@buffer gate US@east\endcsname%
- \pgf@y\pgfutil@tempdima%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@x1pt\advance\pgf@y1pt}%
- {\csname pgf@anchor@buffer gate US@north west\endcsname}%
- {%
- \pgfpointadd{\centerpoint}{%
- \tipanchor%
- \pgf@xa\outerxsep%
- \advance\pgf@x2.350943\pgf@xa%
- }%
- }%
- \fi%
- }
- \inheritanchor[from=not gate US]{south west}
- \inheritanchor[from=not gate US]{north west}
- \inheritanchor[from=not gate US]{input}
- \inheritanchor[from=not gate US]{west}
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\tipanchor}%
- \pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{1.166666\pgf@yc}}%
- \pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{-1.166666\pgf@yc}}%
- \pgfpathclose%
- %
- % Draw the input.
- %
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-1\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@xa\halfside%
- \pgf@x-.833333\pgf@xa%
- \advance\pgf@x-.5\pgflinewidth%
- \advance\pgf@x-\invertedradius%
- \pgf@y0pt%
- }{+\invertedradius}%
- }%
- \fi%
- }%
- }%
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@buffer gate US\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1}%
+ \ifnum\pgf@lib@sh@logicgate@numinputs=0\relax%
+ \pgferror{A buffer gate must have one input}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\halflinewidth{%
+ \pgf@x.5\pgflinewidth%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \midpoint%
+ \pgfutil@tempdima\pgf@y%
+ \csname pgf@anchor@buffer gate US@east\endcsname%
+ \pgf@y\pgfutil@tempdima%
+ }%
+ \anchor{mid west}{%
+ \dimensions%
+ \pgf@xc\halfside%
+ \pgf@xc-.833333\pgf@xc%
+ \advance\pgf@xc-\outerxsep%
+ \midpoint%
+ \advance\pgf@x\pgf@xc%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \basepoint%
+ \pgfutil@tempdima\pgf@y%
+ \csname pgf@anchor@buffer gate US@east\endcsname%
+ \pgf@y\pgfutil@tempdima%
+ }%
+ \inheritanchor[from=not gate US]{base west}%
+ \inheritanchor[from=and gate US]{base}%
+ \anchor{output}{\csname pgf@anchor@buffer gate US@east\endcsname}%
+ \anchor{east}{%
+ \dimensions%
+ \pgfpointadd{\centerpoint}{%
+ \tipanchor%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x2.350943\pgf@xa%
+ }%
+ }%
+ \anchor{north}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@not gate US@north west\endcsname%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@y\pgf@ya%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@y1pt}%
+ {\csname pgf@anchor@buffer gate US@north west\endcsname}%
+ {%
+ \pgfpointadd{\centerpoint}{%
+ \tipanchor%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x2.350943\pgf@xa%
+ }%
+ }%
+ \fi%
+ }%
+ \anchor{south}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@not gate US@south west\endcsname%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@y\pgf@ya%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@y-1pt}%
+ {\csname pgf@anchor@not gate US@south west\endcsname}%
+ {%
+ \pgfpointadd{\centerpoint}{%
+ \tipanchor%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x2.350943\pgf@xa%
+ }%
+ }%
+ \fi%
+ }%
+ \anchor{south east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@not gate US@south west\endcsname%
+ \pgfutil@tempdima\pgf@y%
+ \csname pgf@anchor@buffer gate US@east\endcsname%
+ \pgf@y\pgfutil@tempdima%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@x1pt\advance\pgf@y-1pt}%
+ {\csname pgf@anchor@buffer gate US@south west\endcsname}%
+ {%
+ \pgfpointadd{\centerpoint}{%
+ \tipanchor%
+ \pgf@xc\outerxsep%
+ \advance\pgf@x2.350943\pgf@xc%
+ }%
+ }%
+ \fi%
+ }%
+ \anchor{north east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \csname pgf@anchor@not gate US@north west\endcsname%
+ \pgfutil@tempdima\pgf@y%
+ \csname pgf@anchor@buffer gate US@east\endcsname%
+ \pgf@y\pgfutil@tempdima%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\centerpoint\advance\pgf@x1pt\advance\pgf@y1pt}%
+ {\csname pgf@anchor@buffer gate US@north west\endcsname}%
+ {%
+ \pgfpointadd{\centerpoint}{%
+ \tipanchor%
+ \pgf@xa\outerxsep%
+ \advance\pgf@x2.350943\pgf@xa%
+ }%
+ }%
+ \fi%
+ }%
+ \inheritanchor[from=not gate US]{south west}%
+ \inheritanchor[from=not gate US]{north west}%
+ \inheritanchor[from=not gate US]{input}%
+ \inheritanchor[from=not gate US]{west}%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\tipanchor}%
+ \pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{1.166666\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-.833333\pgf@xc}{-1.166666\pgf@yc}}%
+ \pgfpathclose%
+ %
+ % Draw the input.
+ %
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-1\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@xa\halfside%
+ \pgf@x-.833333\pgf@xa%
+ \advance\pgf@x-.5\pgflinewidth%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y0pt%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ }%
+ }%
\anchorborder{%
\pgf@lib@gates@not@buffer@border{buffer gate US}
- }
-}
+ }%
+}%
\pgfdeclareshape{and gate CDH}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate CDH\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@and gate CDH@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@and gate CDH@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{An and gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \csname pgf@anchor@and gate CDH@east\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{mid west}{%
- \csname pgf@anchor@and gate CDH@west\endcsname%
- \pgf@xa\pgf@x%
- \midpoint%
- \pgf@x\pgf@xa}
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \csname pgf@anchor@and gate CDH@east\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{base west}{%
- \csname pgf@anchor@and gate CDH@west\endcsname%
- \pgf@xa\pgf@x%
- \basepoint%
- \pgf@x\pgf@xa}
- \anchor{east}{%
- \dimensions%
- \pgfpointadd{\centerpoint}{\tipanchor}%
- }
- \anchor{output}{\csname pgf@anchor@and gate CDH@east\endcsname}
- \anchor{north east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \tipanchor%
- \pgf@xa\pgf@x%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\halfheight%
- \else%
- \centerpoint%
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\halfside%
- \advance\pgf@x-.166666\pgf@xb%
- \advance\pgf@xa\pgf@xb%
- \advance\pgf@x.5\pgf@xa%
- \advance\pgf@y-\pgf@xb%
- \advance\pgf@ya\pgf@xb%
- \advance\pgf@y.866025\pgf@ya%
- \fi%
- }
- \anchor{south east}{%
- \dimensions%
- \ifpgfgateanchorsuseboundingrectangle%
- \tipanchor%
- \pgf@xa\pgf@x%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y-\halfheight%
- \else
- \centerpoint%
- \pgf@xa\halfwidth%
- \pgf@ya\halfheight%
- \pgf@xb\halfside%
- \advance\pgf@x-.166666\pgf@xb%
- \advance\pgf@xa\pgf@xb%
- \advance\pgf@x.5\pgf@xa%
- \advance\pgf@y\pgf@xb%
- \advance\pgf@ya\pgf@xb%
- \advance\pgf@y-.866025\pgf@ya%
- \fi%
- }
- \anchor{north}{%
- \dimensions%
- \centerpoint%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y\halfheight%
- \else%
- \pgf@ya\halfheight%
- \advance\pgf@y.993043\pgf@ya%
- \fi%
- }
- \anchor{south}{%
- \dimensions%
- \centerpoint%
- \ifpgfgateanchorsuseboundingrectangle%
- \advance\pgf@y-\halfheight%
- \else%
- \pgf@ya\halfheight%
- \advance\pgf@y-.993043\pgf@ya%
- \fi%
- }
- \anchor{south west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@y-\halfheight%
- }
- \anchor{north west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- \advance\pgf@y\halfheight%
- }
- \anchor{west}{%
- \dimensions%
- \centerpoint%
- \pgf@xa\halfside%
- \advance\pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-\outerxsep%
- }
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
- \pgfpathclose%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@xa\halfside%
- \pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-.5\pgflinewidth%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- }%
- }%
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \dimensions%
- \pgf@xb\halfside%
- %
- \pgf@xb-.166666\pgf@xb%
- \ifdim\pgf@xa<\pgf@xb%
- \pgfpointadd{\centerpoint}{%
- \pgfpointborderrectangle{\externalpoint}{%
- \pgf@xc\halfside%
- \pgf@xc.166666\pgf@xc%
- \advance\pgf@xc\halfwidth%
- \pgfqpoint{\pgf@xc}{\halfheight}%
- }%
- }%
- \else%
- \ifdim\pgf@y=0pt\relax%
- \csname pgf@anchor@and gate CDH@east\endcsname%
- \else%
- \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
- \pgf@xc\halfwidth%
- \advance\pgf@xc\halfside%
- \pgf@yc\halfheight%
- \advance\pgf@yc\halfside%
- \ifdim\pgf@ya<0pt%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {270}{330}{+\pgf@yc}%
- \else%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {%
- \centerpoint%
- \advance\pgf@y-\halfside%
- \advance\pgf@x\pgf@xb%
- }%
- {30}{90}{+\pgf@xc and +\pgf@yc}%
- \fi%
- \fi%
- \fi%
- }
-}
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@and gate CDH\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@and gate CDH@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@and gate CDH@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{An and gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \csname pgf@anchor@and gate CDH@east\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{mid west}{%
+ \csname pgf@anchor@and gate CDH@west\endcsname%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \csname pgf@anchor@and gate CDH@east\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{base west}{%
+ \csname pgf@anchor@and gate CDH@west\endcsname%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \pgf@x\pgf@xa}%
+ \anchor{east}{%
+ \dimensions%
+ \pgfpointadd{\centerpoint}{\tipanchor}%
+ }%
+ \anchor{output}{\csname pgf@anchor@and gate CDH@east\endcsname}%
+ \anchor{north east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \tipanchor%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\halfheight%
+ \else%
+ \centerpoint%
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\halfside%
+ \advance\pgf@x-.166666\pgf@xb%
+ \advance\pgf@xa\pgf@xb%
+ \advance\pgf@x.5\pgf@xa%
+ \advance\pgf@y-\pgf@xb%
+ \advance\pgf@ya\pgf@xb%
+ \advance\pgf@y.866025\pgf@ya%
+ \fi%
+ }%
+ \anchor{south east}{%
+ \dimensions%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \tipanchor%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y-\halfheight%
+ \else
+ \centerpoint%
+ \pgf@xa\halfwidth%
+ \pgf@ya\halfheight%
+ \pgf@xb\halfside%
+ \advance\pgf@x-.166666\pgf@xb%
+ \advance\pgf@xa\pgf@xb%
+ \advance\pgf@x.5\pgf@xa%
+ \advance\pgf@y\pgf@xb%
+ \advance\pgf@ya\pgf@xb%
+ \advance\pgf@y-.866025\pgf@ya%
+ \fi%
+ }%
+ \anchor{north}{%
+ \dimensions%
+ \centerpoint%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y\halfheight%
+ \else%
+ \pgf@ya\halfheight%
+ \advance\pgf@y.993043\pgf@ya%
+ \fi%
+ }%
+ \anchor{south}{%
+ \dimensions%
+ \centerpoint%
+ \ifpgfgateanchorsuseboundingrectangle%
+ \advance\pgf@y-\halfheight%
+ \else%
+ \pgf@ya\halfheight%
+ \advance\pgf@y-.993043\pgf@ya%
+ \fi%
+ }%
+ \anchor{south west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@y-\halfheight%
+ }%
+ \anchor{north west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ \advance\pgf@y\halfheight%
+ }%
+ \anchor{west}{%
+ \dimensions%
+ \centerpoint%
+ \pgf@xa\halfside%
+ \advance\pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-\outerxsep%
+ }%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
+ \pgfpathclose%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@xa\halfside%
+ \pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-.5\pgflinewidth%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \dimensions%
+ \pgf@xb\halfside%
+ %
+ \pgf@xb-.166666\pgf@xb%
+ \ifdim\pgf@xa<\pgf@xb%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointborderrectangle{\externalpoint}{%
+ \pgf@xc\halfside%
+ \pgf@xc.166666\pgf@xc%
+ \advance\pgf@xc\halfwidth%
+ \pgfqpoint{\pgf@xc}{\halfheight}%
+ }%
+ }%
+ \else%
+ \ifdim\pgf@y=0pt\relax%
+ \csname pgf@anchor@and gate CDH@east\endcsname%
+ \else%
+ \pgfextract@process\externalpoint{\pgfpointadd{\centerpoint}{\externalpoint}}%
+ \pgf@xc\halfwidth%
+ \advance\pgf@xc\halfside%
+ \pgf@yc\halfheight%
+ \advance\pgf@yc\halfside%
+ \ifdim\pgf@ya<0pt%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {270}{330}{+\pgf@yc}%
+ \else%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {%
+ \centerpoint%
+ \advance\pgf@y-\halfside%
+ \advance\pgf@x\pgf@xb%
+ }%
+ {30}{90}{+\pgf@xc and +\pgf@yc}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
\pgfdeclareshape{nand gate CDH}{%
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate CDH\endcsname{%
- \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
- \else%
- \pgfutil@ifundefined{pgf@anchor@nand gate CDH@input \pgfmathcounter}{%
- \expandafter\xdef\csname pgf@anchor@nand gate CDH@input \pgfmathcounter\endcsname{%
- \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
- }%
- }{}%
- \repeatpgfmathloop%
- \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
- \pgferror{A nand gate must have at least two inputs}%
- \fi%
- }%
- \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
- \saveddimen\invertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- }%
- \saveddimen\outerinvertedradius{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
- \advance\pgf@x.5\pgflinewidth%
- }
- \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \inheritanchor[from=and gate CDH]{mid east}
- \inheritanchor[from=and gate CDH]{mid west}
- \anchor{base}{\basepoint}%
- \inheritanchor[from=and gate CDH]{base east}
- \inheritanchor[from=and gate CDH]{base west}
- \anchor{output}{%
- \dimensions
- \pgfpointadd{\centerpoint}{%
- \pgf@xa\halfside%
- \pgf@x-.166666\pgf@xa%
- \pgf@xb2.0\pgf@xa%
- \advance\pgf@x.866025\pgf@xb%
- \advance\pgf@x\invertedradius%
- \advance\pgf@x\outerinvertedradius%
- \advance\pgf@x\outerxsep%
- \pgf@y0pt%
- }%
- }
- \inheritanchor[from=and gate CDH]{east}
- \inheritanchor[from=and gate CDH]{north east}
- \inheritanchor[from=and gate CDH]{south east}
- \inheritanchor[from=and gate CDH]{north}
- \inheritanchor[from=and gate CDH]{south}
- \inheritanchor[from=and gate CDH]{south west}
- \inheritanchor[from=and gate CDH]{north west}
- \inheritanchor[from=and gate CDH]{west}
- \backgroundpath{%
- \dimensions%
- \pgf@xc\halfwidth%
- \pgf@yc\halfheight%
- \advance\pgf@xc-\outerxsep%
- \advance\pgf@yc-\outerysep%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- {%
- \pgf@yc2.0\pgf@yc%
- \edef\pgf@marshal{%
- \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
- }%
- \pgf@marshal%
- }
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
- \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
- \pgfpathclose%
- %
- % Draw the output inverter.
- %
- {%
- \pgfpathcircle{%
- \pgf@x-.166666\pgf@xc%
- \pgf@yc2.0\pgf@yc%
- \advance\pgf@x.866025\pgf@yc%
- \advance\pgf@x\outerinvertedradius%
- \pgf@y0pt%
- }{+\invertedradius}%
- }%
- %
- % Draw the inputs.
- %
- \pgfutil@tempdima2.0\pgf@yc%
- \c@pgf@counta\numinputs%
- \advance\c@pgf@counta1\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\numinputs%
- \else%
- \advance\pgf@yc-\pgfutil@tempdima%
- \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
- {%
- \pgfpathcircle{%
- \pgf@xa\halfside%
- \pgf@x-1.16666\pgf@xa%
- \advance\pgf@x-.5\pgflinewidth%
- \advance\pgf@x-\invertedradius%
- \pgf@y\pgf@yc%
- }{+\invertedradius}%
- }%
- \fi%
- \repeatpgfmathloop%
- }%
- }%
- \inheritanchorborder[from=and gate CDH]
-} \ No newline at end of file
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@nand gate CDH\endcsname{%
+ \pgf@lib@sh@logicgate@parseinputs{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@logicgate@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@nand gate CDH@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@nand gate CDH@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@logicgate@AND@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@logicgate@numinputs<2\relax%
+ \pgferror{A nand gate must have at least two inputs}%
+ \fi%
+ }%
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@logicgate@numinputs}%
+ \saveddimen\invertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ }%
+ \saveddimen\outerinvertedradius{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/logic gate inverted radius}}%
+ \advance\pgf@x.5\pgflinewidth%
+ }%
+ \savedmacro\dimensions{\pgf@lib@sh@logicgates@dimensions@orUS}%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \inheritanchor[from=and gate CDH]{mid east}%
+ \inheritanchor[from=and gate CDH]{mid west}%
+ \anchor{base}{\basepoint}%%
+ \inheritanchor[from=and gate CDH]{base east}%
+ \inheritanchor[from=and gate CDH]{base west}%
+ \anchor{output}{%
+ \dimensions
+ \pgfpointadd{\centerpoint}{%
+ \pgf@xa\halfside%
+ \pgf@x-.166666\pgf@xa%
+ \pgf@xb2.0\pgf@xa%
+ \advance\pgf@x.866025\pgf@xb%
+ \advance\pgf@x\invertedradius%
+ \advance\pgf@x\outerinvertedradius%
+ \advance\pgf@x\outerxsep%
+ \pgf@y0pt%
+ }%
+ }%
+ \inheritanchor[from=and gate CDH]{east}%
+ \inheritanchor[from=and gate CDH]{north east}%
+ \inheritanchor[from=and gate CDH]{south east}%
+ \inheritanchor[from=and gate CDH]{north}%
+ \inheritanchor[from=and gate CDH]{south}%
+ \inheritanchor[from=and gate CDH]{south west}%
+ \inheritanchor[from=and gate CDH]{north west}%
+ \inheritanchor[from=and gate CDH]{west}%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \advance\pgf@xc-\outerxsep%
+ \advance\pgf@yc-\outerysep%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfqpoint{-.16666\pgf@xc}{\pgf@yc}}%
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{90}{30}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ {%
+ \pgf@yc2.0\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpatharc{-30}{-90}{\the\pgf@yc}%
+ }%
+ \pgf@marshal%
+ }
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{-\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-1.16666\pgf@xc}{\pgf@yc}}%
+ \pgfpathclose%
+ %
+ % Draw the output inverter.
+ %
+ {%
+ \pgfpathcircle{%
+ \pgf@x-.166666\pgf@xc%
+ \pgf@yc2.0\pgf@yc%
+ \advance\pgf@x.866025\pgf@yc%
+ \advance\pgf@x\outerinvertedradius%
+ \pgf@y0pt%
+ }{+\invertedradius}%
+ }%
+ %
+ % Draw the inputs.
+ %
+ \pgfutil@tempdima2.0\pgf@yc%
+ \c@pgf@counta\numinputs%
+ \advance\c@pgf@counta1\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\pgfutil@tempdima%
+ \expandafter\ifx\expandafter\pgf@lib@sh@itext\csname input-\pgfmathcounter\endcsname%
+ {%
+ \pgfpathcircle{%
+ \pgf@xa\halfside%
+ \pgf@x-1.16666\pgf@xa%
+ \advance\pgf@x-.5\pgflinewidth%
+ \advance\pgf@x-\invertedradius%
+ \pgf@y\pgf@yc%
+ }{+\invertedradius}%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ }%
+ \inheritanchorborder[from=and gate CDH]%
+}%
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.code.tex
index 72d6a6d22ba..68005a61478 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/circuits/pgflibraryshapes.gates.logic.code.tex
@@ -13,8 +13,8 @@
\pgfkeys{/pgf/.cd,%
logic gate input sep/.initial=0.125cm,
logic gate inputs/.initial={normal,normal},%
- logic gate inverted radius/.initial=2pt
-}
+ logic gate inverted radius/.initial=2pt,
+}%
% Internal macro for parsing inputs.
@@ -31,19 +31,19 @@
\let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@short%
\fi%
\pgf@lib@sh@next%
-}
-\def\pgf@lib@sh@itext{i}
-\def\pgf@lib@sh@invertedtext{inverted}
-\def\pgf@lib@sh@atchar{@}
-\def\pgf@lib@sh@gobbletilat#1@{}
-\def\pgf@lib@sh@gobbletilatcomma#1@,{}
+}%
+\def\pgf@lib@sh@itext{i}%
+\def\pgf@lib@sh@invertedtext{inverted}%
+\def\pgf@lib@sh@atchar{@}%
+\def\pgf@lib@sh@gobbletilat#1@{}%
+\def\pgf@lib@sh@gobbletilatcomma#1@,{}%
%
-% The `short' version for input specifcation is an extension of
+% The `short' version for input specification is an extension of
% ideas due to Juergen Werber and Christoph Bartoschek.
%
\def\pgf@lib@sh@logicgate@parseinputs@short{%
\expandafter\pgf@lib@sh@logicgate@parseinputs@@short\pgf@lib@sh@temp @%
-}
+}%
\def\pgf@lib@sh@logicgate@parseinputs@@short#1{%
\def\pgf@lib@sh@tmp{#1}%
\ifx\pgf@lib@sh@tmp\pgf@lib@sh@atchar%
@@ -61,17 +61,17 @@
\else%
\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
\expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}%
- \fi%
+ \fi%
\let\pgf@lib@sh@next=\pgf@lib@sh@logicgate@parseinputs@@short%
\fi%
\fi%
\pgf@lib@sh@next%
-}
+}%
\def\pgf@lib@sh@logicgate@parseinputs@long{%
\expandafter\pgf@lib@sh@logicgate@parseinputs@@long\pgf@lib@sh@temp,@,%
-}
+}%
\def\pgf@lib@sh@logicgate@parseinputs@@long#1,{%
\def\pgf@lib@sh@tmp{#1}%
\ifx\pgf@lib@sh@tmp\pgf@lib@sh@atchar%
@@ -90,16 +90,14 @@
\else%
\expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{%
\expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}%
- \fi%
+ \fi%
\let\pgf@lib@sh@next=\pgf@lib@sh@logicgate@parseinputs@@@long%
\fi%
\fi%
\pgf@lib@sh@next%
-}
+}%
\def\pgf@lib@sh@logicgate@parseinputs@@@long{%
\pgfutil@ifnextchar x{\pgf@lib@sh@logicgate@parseinputs@@long}%
{\pgf@lib@sh@logicgate@parseinputs@@long}%
-}
+}%
\fi%
-
-
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex
index 39f90d6f2e6..0859687f9d4 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex
@@ -7,7 +7,7 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.arrows.code.tex,v 1.1 2008/06/26 16:55:55 tantau Exp $
+\ProvidesFileRCS{pgflibraryshapes.arrows.code.tex}
% keys for shape single arrow
@@ -17,531 +17,532 @@
% /pgf/single arrow head indent
\pgfkeys{/pgf/.cd,
- single arrow tip angle/.initial=90,
- single arrow head extend/.initial=.25cm,
- single arrow head indent/.initial=0cm}
+ single arrow tip angle/.initial=90,
+ single arrow head extend/.initial=.25cm,
+ single arrow head indent/.initial=0cm,
+}%
% Shape single arrow
%
%
\pgfdeclareshape{single arrow}{%
- \savedmacro\getsinglearrowpoints{%
- %
- % Get the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \edef\xoutersep{\the\pgf@x}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\youtersep{\the\pgf@y}%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@xa.5\wd\pgfnodeparttextbox%
- \advance\pgf@xa.5\pgflinewidth%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@ya.5\ht\pgfnodeparttextbox%
- \advance\pgf@ya.5\dp\pgfnodeparttextbox%
- \advance\pgf@ya.5\pgflinewidth%
- \ifpgfshapeborderusesincircle%
- \ifdim\pgf@xa<\pgf@ya%
- \pgf@xa\pgf@ya%
- \fi%
- \pgf@xa1.41421\pgf@xa%
- \pgf@ya\pgf@xa%
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \ifdim\xoutersep>\youtersep\relax%
- \let\youtersep\xoutersep%
- \else%
- \let\xoutersep\youtersep%
- \fi%
- \else%
- %
- % Round the rotation.
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \pgfmathmod@{\rotate}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Calculate the width and height of the node
- % contents, according to any border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@x\pgf@xa%
- \pgf@xa\pgf@ya%
- \pgf@ya\pgf@x%
- \let\pgfmathresult\xoutersep%
- \let\xoutersep\youtersep%
- \let\youtersep\pgfmathresult%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@x\pgf@xa%
- \pgf@xa\pgf@ya%
- \pgf@ya\pgf@x%
- \let\pgfmathresult\xoutersep%
- \let\xoutersep\youtersep%
- \let\youtersep\pgfmathresult%
- \fi%
- \fi%
- \fi%
- \addtosavedmacro\rotate%
- %
- % Get some useful trig stuff.
- %
- \pgfmathdivide{\pgfkeysvalueof{/pgf/single arrow tip angle}}{2}%
- \let\halftipangle\pgfmathresult%
- \pgfmathcosec@{\halftipangle}%
- \let\cosechalftipangle\pgfmathresult%
- \pgfmathcos@{\halftipangle}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
- \edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \let\sechalftipangle\pgfmathresult%
- \pgfmathsin@{\halftipangle}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
- \edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
- %
- % Get the single arrow head extend, and adjust for minimum width.
- %
- \pgf@xb\pgf@ya%
- \pgf@xb\cothalftipangle\pgf@xb%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/single arrow head extend}}%
- \pgf@yc\pgf@xc%
- \advance\pgf@xc\pgf@ya%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@xc<.5\pgfutil@tempdimb%
- \pgfutil@tempdimb.5\pgfutil@tempdimb%
- \pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgf@xc\pgfmathresult\pgf@xc%
- \pgf@yc\pgfmathresult\pgf@yc%
- \pgf@xb\pgfmathresult\pgf@xb%
- \fi%
- %
- % Now calculate the height of the arrow and adjust for minimum height.
- %
- \advance\pgf@xc-\pgf@ya%
- \pgf@xc\cothalftipangle\pgf@xc%
- \pgf@xa2.0\pgf@xa%
- \advance\pgf@xa\pgf@xb%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@xa<\pgfutil@tempdimb%
- \pgf@xa\pgfutil@tempdimb%
- \fi%
- \advance\pgf@xa-\pgf@xb%
- \pgf@xa.5\pgf@xa%
- \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/single arrow head indent}}%
- %
- % Now:
- %
- % xa - .5 * width of the node minus xb.
- % ya - .5 * height of the node contents.
- % xb - distance from the end of the node contents to the arrow tip.
- % xc - distance from the end of the node contents to the back end of the arrow head.
- % yc - distance from the top of the node contents to the top end of the arrow head.
- %
- \pgfsavepgf@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \pgfsavepgf@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \pgfsavepgf@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % As the arrow is symmetrical it can be described by only four points:
- %
- \pgfsavepgf@process\arrowtip{%
- \pgf@x\pgf@xa%
- \advance\pgf@x\pgf@xb%
- \pgf@y0pt\relax%
- }%
- \pgfsavepgf@process\beforearrowtip{%
- \pgf@x\pgf@xa%
- \advance\pgf@x-\pgf@xc%
- \pgf@y\pgf@ya%
- \advance\pgf@y\pgf@yc%
- }%
- \pgfsavepgf@process\beforearrowhead{%
- \pgf@x\pgf@xa%
- \advance\pgf@x-\pgf@xc%
- \advance\pgf@x\pgfutil@tempdima%
- \pgf@y\pgf@ya%
- }%
- \pgfsavepgf@process\afterarrowtail{%
- \pgf@x-\pgf@xa%
- \pgf@y\pgf@ya%
- }%
- %
- % Calculate the anchor point at the arrow tip...
- %
- \pgfsavepgf@process\arrowtipanchor{%
- \pgfpointadd{\centerpoint}{\arrowtip}%
- \pgf@xa\xoutersep\relax%
- \advance\pgf@x\cosechalftipangle\pgf@xa%
- }%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \edef\externalradius{\the\pgf@x}%
- \addtosavedmacro\externalradius%
- %
- % ...and the rest of the points.
- %
- \pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
- \pgf@xa\xoutersep\relax%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \advance\pgfutil@tempdima-\halftipangle pt\relax%
- %
- \pgfsavepgf@process\beforearrowtipanchor{%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- }%
- \pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
- \pgfutil@tempdima-\pgfmathresult pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgf@xa\xoutersep\relax%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfsavepgf@process\beforearrowheadanchor{%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- }%
- \pgfsavepgf@process\afterarrowtailanchor{%
- \pgfpointadd{\centerpoint}{\afterarrowtail}%
- \advance\pgf@x-\xoutersep\relax%
- \advance\pgf@y\youtersep\relax%
- }%
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
- \let\center@angle@beforearrowtip\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowheadanchor}%
- \let\center@angle@beforearrowhead\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\afterarrowtailanchor}%
- \let\center@angle@afterarrowtail\pgfmathresult%
- \addtosavedmacro\center@angle@beforearrowtip%
- \addtosavedmacro\center@angle@beforearrowhead%
- \addtosavedmacro\center@angle@afterarrowtail%
- %
- \pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
- \let\mid@angle@beforearrowtip\pgfmathresult%
- \pgfmathanglebetweenpoints{\midpoint}{\beforearrowheadanchor}%
- \let\mid@angle@beforearrowhead\pgfmathresult%
- \pgfmathanglebetweenpoints{\midpoint}{\afterarrowtailanchor}%
- \let\mid@angle@afterarrowtail\pgfmathresult%
- \addtosavedmacro\mid@angle@beforearrowtip%
- \addtosavedmacro\mid@angle@beforearrowhead%
- \addtosavedmacro\mid@angle@afterarrowtail%
- %
- \pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
- \let\base@angle@beforearrowtip\pgfmathresult%
- \pgfmathanglebetweenpoints{\basepoint}{\beforearrowheadanchor}%
- \let\base@angle@beforearrowhead\pgfmathresult%
- \pgfmathanglebetweenpoints{\basepoint}{\afterarrowtailanchor}%
- \let\base@angle@afterarrowtail\pgfmathresult%
- \addtosavedmacro\base@angle@beforearrowtip%
- \addtosavedmacro\base@angle@beforearrowhead%
- \addtosavedmacro\base@angle@afterarrowtail%
- %
- \addtosavedmacro\arrowtipanchor%
- \addtosavedmacro\beforearrowtipanchor%
- \addtosavedmacro\beforearrowheadanchor%
- \addtosavedmacro\afterarrowtailanchor%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }%
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \getsinglearrowpoints%
- \let\pgf@singlearrow@referencepoint\midpoint%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{mid west}{%
- \getsinglearrowpoints%
- \let\pgf@singlearrow@referencepoint\midpoint%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \getsinglearrowpoints%
- \let\pgf@singlearrow@referencepoint\basepoint%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{base west}{%
- \getsinglearrowpoints%
- \let\pgf@singlearrow@referencepoint\basepoint%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
- \anchor{south}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
- \anchor{east}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{west}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north east}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
- \anchor{south east}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \anchor{south west}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
- \anchor{north west}{%
- \getsinglearrowpoints%
- \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
- \anchor{before head}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{before tip}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{tip}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{after tip}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{after head}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{before tail}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{after tail}{%
- \getsinglearrowpoints%
- \pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
- }
- \anchor{tail}{%
- \getsinglearrowpoints%
- \pgfpointlineattime{0.5}{%
- \pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
- }%
- {%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }%
- }%
- \backgroundpath{%
- {%
- \pgftransformshift{\centerpoint}%
- \pgftransformrotate{\rotate}%
- \pgfpathmoveto{\arrowtip}%
- \pgfpathlineto{\beforearrowtip}%
- \pgfpathlineto{\beforearrowhead}%
- \pgfpathlineto{\afterarrowtail}%
- \pgfpathlineto{\afterarrowtail\pgf@y-\pgf@y}%
- \pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
- \pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
- }%
- \pgfpathclose%
- }%
- \anchorborder{%
- \pgfsavepgf@process\externalpoint{}%
- \getsinglearrowpoints%
- \pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@singlearrow@referencepoint}%
- \pgfsavepgf@process\externalpoint{%
- \externalpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \referencepoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya}%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- \pgf@x\externalangle pt\relax%
- \ifx\referencepoint\midpoint%
- \pgf@xa\mid@angle@beforearrowtip pt\relax%
- \pgf@xb\mid@angle@beforearrowhead pt\relax%
- \pgf@xc\mid@angle@afterarrowtail pt\relax%
- \else%
- \ifx\referencepoint\basepoint%
- \pgf@xa\base@angle@beforearrowtip pt\relax%
- \pgf@xb\base@angle@beforearrowhead pt\relax%
- \pgf@xc\base@angle@afterarrowtail pt\relax%
- \else%
- \pgf@xa\center@angle@beforearrowtip pt\relax%
- \pgf@xb\center@angle@beforearrowhead pt\relax%
- \pgf@xc\center@angle@afterarrowtail pt\relax%
- \fi%
- \fi%
- \ifdim\pgf@x<\pgf@xa%
- \let\firstpoint\arrowtipanchor%
- \let\secondpoint\beforearrowtipanchor%
- \else%
- \ifdim\pgf@x<\pgf@xb%
- \ifdim\pgf@xb<\pgf@xa%
- \let\firstpoint\arrowtipanchor%
- \let\secondpoint\beforearrowtipanchor%
- \else%
- \let\firstpoint\beforearrowheadanchor%
- \let\secondpoint\beforearrowtipanchor%
- \fi%
- \else%
- \ifdim\pgf@x<\pgf@xc%
- \let\firstpoint\beforearrowheadanchor%
- \let\secondpoint\afterarrowtailanchor%
- \else%
- \pgf@xc-\pgf@xc%
- \advance\pgf@xc360pt\relax%
- \ifdim\pgf@x<\pgf@xc%
- \let\firstpoint\afterarrowtailanchor%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \else%
- \pgf@xa-\pgf@xa%
- \advance\pgf@xa360pt\relax%
- \pgf@xb-\pgf@xb%
- \advance\pgf@xb360pt\relax%
- \ifdim\pgf@x<\pgf@xa%
- \ifdim\pgf@x<\pgf@xb%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \else%
- \ifdim\pgf@xb<\pgf@xa%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \else%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \fi%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \fi%
- \else%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}%
- }%
- \let\secondpoint\arrowtipanchor%
- \fi%
- \fi%
- \fi%
- \fi%
- \fi%
- \pgfsavepgf@process\firstpoint{%
- \pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
- }%
- \pgfsavepgf@process\secondpoint{%
- \pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
- }%
- \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
- }%
-}
+ \savedmacro\getsinglearrowpoints{%
+ %
+ % Get the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \edef\xoutersep{\the\pgf@x}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\youtersep{\the\pgf@y}%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@xa.5\wd\pgfnodeparttextbox%
+ \advance\pgf@xa.5\pgflinewidth%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@ya.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya.5\dp\pgfnodeparttextbox%
+ \advance\pgf@ya.5\pgflinewidth%
+ \ifpgfshapeborderusesincircle%
+ \ifdim\pgf@xa<\pgf@ya%
+ \pgf@xa\pgf@ya%
+ \fi%
+ \pgf@xa1.41421\pgf@xa%
+ \pgf@ya\pgf@xa%
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \ifdim\xoutersep>\youtersep\relax%
+ \let\youtersep\xoutersep%
+ \else%
+ \let\xoutersep\youtersep%
+ \fi%
+ \else%
+ %
+ % Round the rotation.
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \pgfmathmod@{\rotate}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Calculate the width and height of the node
+ % contents, according to any border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@x\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \pgf@ya\pgf@x%
+ \let\pgfmathresult\xoutersep%
+ \let\xoutersep\youtersep%
+ \let\youtersep\pgfmathresult%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@x\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \pgf@ya\pgf@x%
+ \let\pgfmathresult\xoutersep%
+ \let\xoutersep\youtersep%
+ \let\youtersep\pgfmathresult%
+ \fi%
+ \fi%
+ \fi%
+ \addtosavedmacro\rotate%
+ %
+ % Get some useful trig stuff.
+ %
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/single arrow tip angle}}{2}%
+ \let\halftipangle\pgfmathresult%
+ \pgfmathcosec@{\halftipangle}%
+ \let\cosechalftipangle\pgfmathresult%
+ \pgfmathcos@{\halftipangle}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
+ \edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \let\sechalftipangle\pgfmathresult%
+ \pgfmathsin@{\halftipangle}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
+ \edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ %
+ % Get the single arrow head extend, and adjust for minimum width.
+ %
+ \pgf@xb\pgf@ya%
+ \pgf@xb\cothalftipangle\pgf@xb%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/single arrow head extend}}%
+ \pgf@yc\pgf@xc%
+ \advance\pgf@xc\pgf@ya%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@xc<.5\pgfutil@tempdimb%
+ \pgfutil@tempdimb.5\pgfutil@tempdimb%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgf@xc\pgfmathresult\pgf@xc%
+ \pgf@yc\pgfmathresult\pgf@yc%
+ \pgf@xb\pgfmathresult\pgf@xb%
+ \fi%
+ %
+ % Now calculate the height of the arrow and adjust for minimum height.
+ %
+ \advance\pgf@xc-\pgf@ya%
+ \pgf@xc\cothalftipangle\pgf@xc%
+ \pgf@xa2.0\pgf@xa%
+ \advance\pgf@xa\pgf@xb%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@xa<\pgfutil@tempdimb%
+ \pgf@xa\pgfutil@tempdimb%
+ \fi%
+ \advance\pgf@xa-\pgf@xb%
+ \pgf@xa.5\pgf@xa%
+ \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/single arrow head indent}}%
+ %
+ % Now:
+ %
+ % xa - .5 * width of the node minus xb.
+ % ya - .5 * height of the node contents.
+ % xb - distance from the end of the node contents to the arrow tip.
+ % xc - distance from the end of the node contents to the back end of the arrow head.
+ % yc - distance from the top of the node contents to the top end of the arrow head.
+ %
+ \pgfsavepgf@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfsavepgf@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \pgfsavepgf@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % As the arrow is symmetrical it can be described by only four points:
+ %
+ \pgfsavepgf@process\arrowtip{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x\pgf@xb%
+ \pgf@y0pt\relax%
+ }%
+ \pgfsavepgf@process\beforearrowtip{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x-\pgf@xc%
+ \pgf@y\pgf@ya%
+ \advance\pgf@y\pgf@yc%
+ }%
+ \pgfsavepgf@process\beforearrowhead{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x-\pgf@xc%
+ \advance\pgf@x\pgfutil@tempdima%
+ \pgf@y\pgf@ya%
+ }%
+ \pgfsavepgf@process\afterarrowtail{%
+ \pgf@x-\pgf@xa%
+ \pgf@y\pgf@ya%
+ }%
+ %
+ % Calculate the anchor point at the arrow tip...
+ %
+ \pgfsavepgf@process\arrowtipanchor{%
+ \pgfpointadd{\centerpoint}{\arrowtip}%
+ \pgf@xa\xoutersep\relax%
+ \advance\pgf@x\cosechalftipangle\pgf@xa%
+ }%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \edef\externalradius{\the\pgf@x}%
+ \addtosavedmacro\externalradius%
+ %
+ % ...and the rest of the points.
+ %
+ \pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
+ \pgf@xa\xoutersep\relax%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \advance\pgfutil@tempdima-\halftipangle pt\relax%
+ %
+ \pgfsavepgf@process\beforearrowtipanchor{%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ }%
+ \pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
+ \pgfutil@tempdima-\pgfmathresult pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgf@xa\xoutersep\relax%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfsavepgf@process\beforearrowheadanchor{%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ }%
+ \pgfsavepgf@process\afterarrowtailanchor{%
+ \pgfpointadd{\centerpoint}{\afterarrowtail}%
+ \advance\pgf@x-\xoutersep\relax%
+ \advance\pgf@y\youtersep\relax%
+ }%
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
+ \let\center@angle@beforearrowtip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowheadanchor}%
+ \let\center@angle@beforearrowhead\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\afterarrowtailanchor}%
+ \let\center@angle@afterarrowtail\pgfmathresult%
+ \addtosavedmacro\center@angle@beforearrowtip%
+ \addtosavedmacro\center@angle@beforearrowhead%
+ \addtosavedmacro\center@angle@afterarrowtail%
+ %
+ \pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
+ \let\mid@angle@beforearrowtip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\midpoint}{\beforearrowheadanchor}%
+ \let\mid@angle@beforearrowhead\pgfmathresult%
+ \pgfmathanglebetweenpoints{\midpoint}{\afterarrowtailanchor}%
+ \let\mid@angle@afterarrowtail\pgfmathresult%
+ \addtosavedmacro\mid@angle@beforearrowtip%
+ \addtosavedmacro\mid@angle@beforearrowhead%
+ \addtosavedmacro\mid@angle@afterarrowtail%
+ %
+ \pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
+ \let\base@angle@beforearrowtip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\basepoint}{\beforearrowheadanchor}%
+ \let\base@angle@beforearrowhead\pgfmathresult%
+ \pgfmathanglebetweenpoints{\basepoint}{\afterarrowtailanchor}%
+ \let\base@angle@afterarrowtail\pgfmathresult%
+ \addtosavedmacro\base@angle@beforearrowtip%
+ \addtosavedmacro\base@angle@beforearrowhead%
+ \addtosavedmacro\base@angle@afterarrowtail%
+ %
+ \addtosavedmacro\arrowtipanchor%
+ \addtosavedmacro\beforearrowtipanchor%
+ \addtosavedmacro\beforearrowheadanchor%
+ \addtosavedmacro\afterarrowtailanchor%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \getsinglearrowpoints%
+ \let\pgf@singlearrow@referencepoint\midpoint%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid west}{%
+ \getsinglearrowpoints%
+ \let\pgf@singlearrow@referencepoint\midpoint%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \getsinglearrowpoints%
+ \let\pgf@singlearrow@referencepoint\basepoint%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{base west}{%
+ \getsinglearrowpoints%
+ \let\pgf@singlearrow@referencepoint\basepoint%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \getsinglearrowpoints%
+ \csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{before head}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{before tip}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{tip}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{after tip}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{after head}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{before tail}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{after tail}{%
+ \getsinglearrowpoints%
+ \pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{tail}{%
+ \getsinglearrowpoints%
+ \pgfpointlineattime{0.5}{%
+ \pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
+ }%
+ {%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ }%
+ \backgroundpath{%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgftransformrotate{\rotate}%
+ \pgfpathmoveto{\arrowtip}%
+ \pgfpathlineto{\beforearrowtip}%
+ \pgfpathlineto{\beforearrowhead}%
+ \pgfpathlineto{\afterarrowtail}%
+ \pgfpathlineto{\afterarrowtail\pgf@y-\pgf@y}%
+ \pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
+ \pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
+ }%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ \pgfsavepgf@process\externalpoint{}%
+ \getsinglearrowpoints%
+ \pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@singlearrow@referencepoint}%
+ \pgfsavepgf@process\externalpoint{%
+ \externalpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \referencepoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya}%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ \pgf@x\externalangle pt\relax%
+ \ifx\referencepoint\midpoint%
+ \pgf@xa\mid@angle@beforearrowtip pt\relax%
+ \pgf@xb\mid@angle@beforearrowhead pt\relax%
+ \pgf@xc\mid@angle@afterarrowtail pt\relax%
+ \else%
+ \ifx\referencepoint\basepoint%
+ \pgf@xa\base@angle@beforearrowtip pt\relax%
+ \pgf@xb\base@angle@beforearrowhead pt\relax%
+ \pgf@xc\base@angle@afterarrowtail pt\relax%
+ \else%
+ \pgf@xa\center@angle@beforearrowtip pt\relax%
+ \pgf@xb\center@angle@beforearrowhead pt\relax%
+ \pgf@xc\center@angle@afterarrowtail pt\relax%
+ \fi%
+ \fi%
+ \ifdim\pgf@x<\pgf@xa%
+ \let\firstpoint\arrowtipanchor%
+ \let\secondpoint\beforearrowtipanchor%
+ \else%
+ \ifdim\pgf@x<\pgf@xb%
+ \ifdim\pgf@xb<\pgf@xa%
+ \let\firstpoint\arrowtipanchor%
+ \let\secondpoint\beforearrowtipanchor%
+ \else%
+ \let\firstpoint\beforearrowheadanchor%
+ \let\secondpoint\beforearrowtipanchor%
+ \fi%
+ \else%
+ \ifdim\pgf@x<\pgf@xc%
+ \let\firstpoint\beforearrowheadanchor%
+ \let\secondpoint\afterarrowtailanchor%
+ \else%
+ \pgf@xc-\pgf@xc%
+ \advance\pgf@xc360pt\relax%
+ \ifdim\pgf@x<\pgf@xc%
+ \let\firstpoint\afterarrowtailanchor%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \else%
+ \pgf@xa-\pgf@xa%
+ \advance\pgf@xa360pt\relax%
+ \pgf@xb-\pgf@xb%
+ \advance\pgf@xb360pt\relax%
+ \ifdim\pgf@x<\pgf@xa%
+ \ifdim\pgf@x<\pgf@xb%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \else%
+ \ifdim\pgf@xb<\pgf@xa%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \else%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \fi%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \fi%
+ \else%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}%
+ }%
+ \let\secondpoint\arrowtipanchor%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
+ {\firstpoint}{\secondpoint}%
+ }%
+}%
@@ -555,504 +556,505 @@
% /pgf/double arrow head sep
\pgfkeys{/pgf/.cd,
- double arrow tip angle/.initial=90,
- double arrow head extend/.initial=.25cm,
- double arrow head indent/.initial=0cm}
+ double arrow tip angle/.initial=90,
+ double arrow head extend/.initial=.25cm,
+ double arrow head indent/.initial=0cm,
+}%
% Shape double arrow
%
%
\pgfdeclareshape{double arrow}{%
- \savedmacro\getdoublearrowpoints{%
- %
- % Get the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \edef\xoutersep{\the\pgf@x}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\youtersep{\the\pgf@y}%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@xa.5\wd\pgfnodeparttextbox%
- \advance\pgf@xa.5\pgflinewidth%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@ya.5\ht\pgfnodeparttextbox%
- \advance\pgf@ya.5\dp\pgfnodeparttextbox%
- \advance\pgf@ya.5\pgflinewidth%
- \ifpgfshapeborderusesincircle%
- \ifdim\pgf@xa<\pgf@ya%
- \pgf@xa\pgf@ya%
- \fi%
- \pgf@xa1.41421\pgf@xa%
- \pgf@ya\pgf@xa%
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \ifdim\xoutersep>\youtersep\relax%
- \let\youtersep\xoutersep%
- \else%
- \let\xoutersep\youtersep%
- \fi%
- \else%
- %
- % Round the rotation.
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}
- \pgfmathmod@{\rotate}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Calculate the width and height of the node
- % contents, according to any border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@x\pgf@xa%
- \pgf@xa\pgf@ya%
- \pgf@ya\pgf@x%
- \let\pgfmathresult\xoutersep%
- \let\xoutersep\youtersep%
- \let\youtersep\pgfmathresult%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@x\pgf@xa%
- \pgf@xa\pgf@ya%
- \pgf@ya\pgf@x%
- \let\pgfmathresult\xoutersep%
- \let\xoutersep\youtersep%
- \let\youtersep\pgfmathresult%
- \fi%
- \fi%
- \fi%
- \addtosavedmacro\rotate%
- %
- % Get some useful trig stuff.
- %
- \pgfmathdivide{\pgfkeysvalueof{/pgf/double arrow tip angle}}{2}%
- \let\halftipangle\pgfmathresult%
- \pgfmathcosec@{\halftipangle}%
- \let\cosechalftipangle\pgfmathresult%
- \pgfmathcos@{\halftipangle}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
- \edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \let\sechalftipangle\pgfmathresult%
- \pgfmathsin@{\halftipangle}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
- \edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
- %
- % Get the double arrow head extend, and adjust for minimum width.
- %
- \pgf@xb\pgf@ya%
- \pgf@xb\cothalftipangle\pgf@xb%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/double arrow head extend}}%
- \pgf@yc\pgf@xc%
- \advance\pgf@xc\pgf@ya%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@xc<.5\pgfutil@tempdimb%
- \pgfutil@tempdimb.5\pgfutil@tempdimb%
- \pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgf@xc\pgfmathresult\pgf@xc%
- \pgf@yc\pgfmathresult\pgf@yc%
- \pgf@xb\pgfmathresult\pgf@xb%
- \fi%
- %
- % Now calculate the height of the arrow and adjust for minimum height.
- %
- \advance\pgf@xc-\pgf@ya%
- \pgf@xc\cothalftipangle\pgf@xc%
- \advance\pgf@xa\pgf@xb%
- \pgf@xa2.0\pgf@xa%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@xa<\pgfutil@tempdimb%
- \pgf@xa\pgfutil@tempdimb%
- \fi%
- \pgf@xa.5\pgf@xa%
- \advance\pgf@xa-\pgf@xb%
- \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/double arrow head indent}}%
- %
- % Now:
- %
- % xa - .5 * width of the node minus xb.
- % ya - .5 * height of the node contents.
- % xb - distance from the end of the node contents to the arrow tip.
- % xc - distance from the end of the node contents to the back end of the arrow head.
- % yc - distance from the top of the node contents to the top end of the arrow head.
- %
- \pgfsavepgf@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \pgfsavepgf@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \pgfsavepgf@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % As the arrow is symmetrical it can be described by only 3 points:
- %
- \pgfsavepgf@process\arrowtip{%
- \pgf@x\pgf@xa%
- \advance\pgf@x\pgf@xb%
- \pgf@y0pt\relax%
- }%
- \pgfsavepgf@process\beforearrowtip{%
- \pgf@x\pgf@xa%
- \advance\pgf@x-\pgf@xc%
- \pgf@y\pgf@ya%
- \advance\pgf@y\pgf@yc%
- }%
- \pgfsavepgf@process\beforearrowhead{%
- \pgf@x\pgf@xa%
- \advance\pgf@x-\pgf@xc%
- \advance\pgf@x\pgfutil@tempdima%
- \pgf@y\pgf@ya%
- }%
- %
- % Calculate the anchor point at the arrow tip.
- %
- \pgfsavepgf@process\arrowtipanchor{%
- \pgfpointadd{\centerpoint}{\arrowtip}%
- \pgf@xa\xoutersep\relax%
- \advance\pgf@x\cosechalftipangle\pgf@xa%
- }%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \edef\externalradius{\the\pgf@x}%
- \addtosavedmacro\externalradius%
- %
- %
- \pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
- \pgf@xa\xoutersep\relax%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \advance\pgfutil@tempdima-\halftipangle pt\relax%
- \pgfsavepgf@process\beforearrowtipanchor{%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- }%
- \pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
- \pgfutil@tempdima-\pgfmathresult pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgf@xa\xoutersep\relax%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfsavepgf@process\beforearrowheadanchor{%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- }%
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
- \let\center@angle@beforearrowtip\pgfmathresult%
- \addtosavedmacro\center@angle@beforearrowtip%
- %
- \pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
- \let\mid@angle@beforearrowtip\pgfmathresult%
- \addtosavedmacro\mid@angle@beforearrowtip%
- %
- \pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
- \let\base@angle@beforearrowtip\pgfmathresult%
- \addtosavedmacro\base@angle@beforearrowtip%
- %
- \addtosavedmacro\arrowtipanchor%
- \addtosavedmacro\beforearrowtipanchor%
- \addtosavedmacro\beforearrowheadanchor%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }%
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \getdoublearrowpoints%
- \let\pgf@singlearrow@referencepoint\midpoint%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{mid west}{%
- \getdoublearrowpoints%
- \let\pgf@singlearrow@referencepoint\midpoint%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \getdoublearrowpoints%
- \let\pgf@singlearrow@referencepoint\basepoint%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{base west}{%
- \getdoublearrowpoints%
- \let\pgf@singlearrow@referencepoint\basepoint%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
- \anchor{south}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
- \anchor{east}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{west}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north east}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
- \anchor{south east}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \anchor{south west}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
- \anchor{north west}{%
- \getdoublearrowpoints%
- \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
- \anchor{before head 1}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{before tip 1}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{tip 1}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
- }%
- \anchor{after tip 1}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{after head 1}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{before head 2}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }%
- \anchor{before tip 2}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }%
- \anchor{tip 2}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
- \pgf@x-\pgf@x%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }%
- \anchor{after tip 2}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@x-\pgf@x%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{after head 2}{%
- \getdoublearrowpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@x-\pgf@x%
- }{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \backgroundpath{%
- {%
- \pgftransformshift{\centerpoint}%
- \pgftransformrotate{\rotate}%
- \pgfpathmoveto{\arrowtip}%
- \pgfpathlineto{\beforearrowtip}%
- \pgfpathlineto{\beforearrowhead}%
- \pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x}%
- \pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x}%
- \pgfpathlineto{\arrowtip\pgf@x-\pgf@x}%
- \pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x\pgf@y-\pgf@y}%
- \pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x\pgf@y-\pgf@y}%
- \pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
- \pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
- }%
- \pgfpathclose%
- }%
- \anchorborder{%
- \pgfsavepgf@process\externalpoint{}%
- \getdoublearrowpoints%
- \pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@singlearrow@referencepoint}%
- \pgfsavepgf@process\externalpoint{%
- \externalpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \referencepoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya}%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- \pgf@x\externalangle pt\relax%
- \ifx\referencepoint\midpoint%
- \pgf@xa\mid@angle@beforearrowtip pt\relax%
- \else%
- \ifx\referencepoint\basepoint%
- \pgf@xa\base@angle@beforearrowtip pt\relax%
- \else%
- \pgf@xa\center@angle@beforearrowtip pt\relax%
- \fi%
- \fi%
- \ifdim\pgf@x<180pt\relax%
- \ifdim\pgf@x<\pgf@xa%
- \let\firstpoint\arrowtipanchor%
- \let\secondpoint\beforearrowtipanchor%
- \else%
- \pgf@xa-\pgf@xa%
- \advance\pgf@xa180pt\relax%
- \ifdim\pgf@x<\pgf@xa%
- \let\firstpoint\beforearrowheadanchor%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@x-\pgf@x
- }{\centerpoint}}%
- \else%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@x-\pgf@x
- }{\centerpoint}}%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- \fi%
- \fi%
- \else%
- \pgf@xa-\pgf@xa%
- \advance\pgf@xa360pt\relax%
- \ifdim\pgf@x<\pgf@xa%
- \pgf@xa-\pgf@xa%
- \advance\pgf@xa540pt\relax%
- \ifdim\pgf@x<\pgf@xa%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
- \pgf@x-\pgf@x%
- }{\centerpoint}}%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- \else%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- \pgfsavepgf@process\secondpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
- \pgf@y-\pgf@y%
- }{\centerpoint}}%
- \fi%
- \else%
- \pgfsavepgf@process\firstpoint{%
- \pgfpointadd{%
- \pgfpointdiff{\beforearrowtipanchor}{\centerpoint}%
- \pgf@x-\pgf@x%
- }{\centerpoint}}%
- \let\secondpoint\arrowtipanchor%
- \fi%
- \fi%
- \pgfsavepgf@process\firstpoint{%
- \pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
- }%
- \pgfsavepgf@process\secondpoint{%
- \pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
- }%
- \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
- }%
-}
+ \savedmacro\getdoublearrowpoints{%
+ %
+ % Get the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \edef\xoutersep{\the\pgf@x}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\youtersep{\the\pgf@y}%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@xa.5\wd\pgfnodeparttextbox%
+ \advance\pgf@xa.5\pgflinewidth%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@ya.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya.5\dp\pgfnodeparttextbox%
+ \advance\pgf@ya.5\pgflinewidth%
+ \ifpgfshapeborderusesincircle%
+ \ifdim\pgf@xa<\pgf@ya%
+ \pgf@xa\pgf@ya%
+ \fi%
+ \pgf@xa1.41421\pgf@xa%
+ \pgf@ya\pgf@xa%
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \ifdim\xoutersep>\youtersep\relax%
+ \let\youtersep\xoutersep%
+ \else%
+ \let\xoutersep\youtersep%
+ \fi%
+ \else%
+ %
+ % Round the rotation.
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}
+ \pgfmathmod@{\rotate}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Calculate the width and height of the node
+ % contents, according to any border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@x\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \pgf@ya\pgf@x%
+ \let\pgfmathresult\xoutersep%
+ \let\xoutersep\youtersep%
+ \let\youtersep\pgfmathresult%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@x\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \pgf@ya\pgf@x%
+ \let\pgfmathresult\xoutersep%
+ \let\xoutersep\youtersep%
+ \let\youtersep\pgfmathresult%
+ \fi%
+ \fi%
+ \fi%
+ \addtosavedmacro\rotate%
+ %
+ % Get some useful trig stuff.
+ %
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/double arrow tip angle}}{2}%
+ \let\halftipangle\pgfmathresult%
+ \pgfmathcosec@{\halftipangle}%
+ \let\cosechalftipangle\pgfmathresult%
+ \pgfmathcos@{\halftipangle}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
+ \edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \let\sechalftipangle\pgfmathresult%
+ \pgfmathsin@{\halftipangle}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
+ \edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ %
+ % Get the double arrow head extend, and adjust for minimum width.
+ %
+ \pgf@xb\pgf@ya%
+ \pgf@xb\cothalftipangle\pgf@xb%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/double arrow head extend}}%
+ \pgf@yc\pgf@xc%
+ \advance\pgf@xc\pgf@ya%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@xc<.5\pgfutil@tempdimb%
+ \pgfutil@tempdimb.5\pgfutil@tempdimb%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgf@xc\pgfmathresult\pgf@xc%
+ \pgf@yc\pgfmathresult\pgf@yc%
+ \pgf@xb\pgfmathresult\pgf@xb%
+ \fi%
+ %
+ % Now calculate the height of the arrow and adjust for minimum height.
+ %
+ \advance\pgf@xc-\pgf@ya%
+ \pgf@xc\cothalftipangle\pgf@xc%
+ \advance\pgf@xa\pgf@xb%
+ \pgf@xa2.0\pgf@xa%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@xa<\pgfutil@tempdimb%
+ \pgf@xa\pgfutil@tempdimb%
+ \fi%
+ \pgf@xa.5\pgf@xa%
+ \advance\pgf@xa-\pgf@xb%
+ \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/double arrow head indent}}%
+ %
+ % Now:
+ %
+ % xa - .5 * width of the node minus xb.
+ % ya - .5 * height of the node contents.
+ % xb - distance from the end of the node contents to the arrow tip.
+ % xc - distance from the end of the node contents to the back end of the arrow head.
+ % yc - distance from the top of the node contents to the top end of the arrow head.
+ %
+ \pgfsavepgf@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfsavepgf@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \pgfsavepgf@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % As the arrow is symmetrical it can be described by only 3 points:
+ %
+ \pgfsavepgf@process\arrowtip{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x\pgf@xb%
+ \pgf@y0pt\relax%
+ }%
+ \pgfsavepgf@process\beforearrowtip{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x-\pgf@xc%
+ \pgf@y\pgf@ya%
+ \advance\pgf@y\pgf@yc%
+ }%
+ \pgfsavepgf@process\beforearrowhead{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x-\pgf@xc%
+ \advance\pgf@x\pgfutil@tempdima%
+ \pgf@y\pgf@ya%
+ }%
+ %
+ % Calculate the anchor point at the arrow tip.
+ %
+ \pgfsavepgf@process\arrowtipanchor{%
+ \pgfpointadd{\centerpoint}{\arrowtip}%
+ \pgf@xa\xoutersep\relax%
+ \advance\pgf@x\cosechalftipangle\pgf@xa%
+ }%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \edef\externalradius{\the\pgf@x}%
+ \addtosavedmacro\externalradius%
+ %
+ %
+ \pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
+ \pgf@xa\xoutersep\relax%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \advance\pgfutil@tempdima-\halftipangle pt\relax%
+ \pgfsavepgf@process\beforearrowtipanchor{%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ }%
+ \pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
+ \pgfutil@tempdima-\pgfmathresult pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgf@xa\xoutersep\relax%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfsavepgf@process\beforearrowheadanchor{%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ }%
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
+ \let\center@angle@beforearrowtip\pgfmathresult%
+ \addtosavedmacro\center@angle@beforearrowtip%
+ %
+ \pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
+ \let\mid@angle@beforearrowtip\pgfmathresult%
+ \addtosavedmacro\mid@angle@beforearrowtip%
+ %
+ \pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
+ \let\base@angle@beforearrowtip\pgfmathresult%
+ \addtosavedmacro\base@angle@beforearrowtip%
+ %
+ \addtosavedmacro\arrowtipanchor%
+ \addtosavedmacro\beforearrowtipanchor%
+ \addtosavedmacro\beforearrowheadanchor%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \getdoublearrowpoints%
+ \let\pgf@singlearrow@referencepoint\midpoint%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid west}{%
+ \getdoublearrowpoints%
+ \let\pgf@singlearrow@referencepoint\midpoint%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \getdoublearrowpoints%
+ \let\pgf@singlearrow@referencepoint\basepoint%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{base west}{%
+ \getdoublearrowpoints%
+ \let\pgf@singlearrow@referencepoint\basepoint%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \getdoublearrowpoints%
+ \csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{before head 1}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{before tip 1}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{tip 1}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
+ }%
+ \anchor{after tip 1}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{after head 1}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{before head 2}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{before tip 2}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{tip 2}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
+ \pgf@x-\pgf@x%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{after tip 2}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@x-\pgf@x%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{after head 2}{%
+ \getdoublearrowpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@x-\pgf@x%
+ }{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \backgroundpath{%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgftransformrotate{\rotate}%
+ \pgfpathmoveto{\arrowtip}%
+ \pgfpathlineto{\beforearrowtip}%
+ \pgfpathlineto{\beforearrowhead}%
+ \pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x}%
+ \pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x}%
+ \pgfpathlineto{\arrowtip\pgf@x-\pgf@x}%
+ \pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x\pgf@y-\pgf@y}%
+ \pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x\pgf@y-\pgf@y}%
+ \pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
+ \pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
+ }%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ \pgfsavepgf@process\externalpoint{}%
+ \getdoublearrowpoints%
+ \pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@singlearrow@referencepoint}%
+ \pgfsavepgf@process\externalpoint{%
+ \externalpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \referencepoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya}%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ \pgf@x\externalangle pt\relax%
+ \ifx\referencepoint\midpoint%
+ \pgf@xa\mid@angle@beforearrowtip pt\relax%
+ \else%
+ \ifx\referencepoint\basepoint%
+ \pgf@xa\base@angle@beforearrowtip pt\relax%
+ \else%
+ \pgf@xa\center@angle@beforearrowtip pt\relax%
+ \fi%
+ \fi%
+ \ifdim\pgf@x<180pt\relax%
+ \ifdim\pgf@x<\pgf@xa%
+ \let\firstpoint\arrowtipanchor%
+ \let\secondpoint\beforearrowtipanchor%
+ \else%
+ \pgf@xa-\pgf@xa%
+ \advance\pgf@xa180pt\relax%
+ \ifdim\pgf@x<\pgf@xa%
+ \let\firstpoint\beforearrowheadanchor%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@x-\pgf@x
+ }{\centerpoint}}%
+ \else%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@x-\pgf@x
+ }{\centerpoint}}%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ \fi%
+ \fi%
+ \else%
+ \pgf@xa-\pgf@xa%
+ \advance\pgf@xa360pt\relax%
+ \ifdim\pgf@x<\pgf@xa%
+ \pgf@xa-\pgf@xa%
+ \advance\pgf@xa540pt\relax%
+ \ifdim\pgf@x<\pgf@xa%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\arrowtipanchor}%
+ \pgf@x-\pgf@x%
+ }{\centerpoint}}%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ \else%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
+ \pgf@y-\pgf@y%
+ }{\centerpoint}}%
+ \fi%
+ \else%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfpointadd{%
+ \pgfpointdiff{\beforearrowtipanchor}{\centerpoint}%
+ \pgf@x-\pgf@x%
+ }{\centerpoint}}%
+ \let\secondpoint\arrowtipanchor%
+ \fi%
+ \fi%
+ \pgfsavepgf@process\firstpoint{%
+ \pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfsavepgf@process\secondpoint{%
+ \pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
+ {\firstpoint}{\secondpoint}%
+ }%
+}%
@@ -1061,1298 +1063,1299 @@
% Internal macros for the arrow box/shape.
%
\def\pgf@lib@arrowbox@parsearrowlength#1#2#3{%
- \edef\pgf@lib@temp{#3}%
- \edef\pgf@lib@marshal{%
- \noexpand\pgfutil@in@{none}{\pgf@lib@temp}%
- }%
- \pgf@lib@marshal%
- \ifpgfutil@in@%
- #10pt\relax%
- \else%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter#1\pgf@lib@temp\relax\pgfmath@%
- %
- \edef\pgf@lib@marshal{%
- \noexpand\pgfutil@in@{from center}{\pgf@lib@temp}%
- }%
- \pgf@lib@marshal%
- \ifpgfutil@in@%
- \else%
- \ifdim#1>0pt\relax%
- \advance#1#2\relax%
- \fi%
- \fi%
- \fi}
+ \edef\pgf@lib@temp{#3}%
+ \edef\pgf@lib@marshal{%
+ \noexpand\pgfutil@in@{none}{\pgf@lib@temp}%
+ }%
+ \pgf@lib@marshal%
+ \ifpgfutil@in@%
+ #10pt\relax%
+ \else%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter#1\pgf@lib@temp\relax\pgfmath@%
+ %
+ \edef\pgf@lib@marshal{%
+ \noexpand\pgfutil@in@{from center}{\pgf@lib@temp}%
+ }%
+ \pgf@lib@marshal%
+ \ifpgfutil@in@%
+ \else%
+ \ifdim#1>0pt\relax%
+ \advance#1#2\relax%
+ \fi%
+ \fi%
+ \fi}%
\def\pgf@lib@arrowbox@parsearrows#1{%
- \pgfkeys{/pgf/.cd,%
- arrow box west arrow=0pt,
- arrow box east arrow=0pt,
- arrow box south arrow=0pt,
- arrow box north arrow=0pt
- }%
- \def\pgf@lib@arrowbox@extend{0pt}%
- \edef\pgf@lib@temp{#1}%
- \expandafter\pgf@lib@arrowbox@@parsearrows\pgf@lib@temp,\pgf@lib@arrowbox@parsearrows,}
+ \pgfkeys{/pgf/.cd,%
+ arrow box west arrow=0pt,
+ arrow box east arrow=0pt,
+ arrow box south arrow=0pt,
+ arrow box north arrow=0pt
+ }%
+ \def\pgf@lib@arrowbox@extend{0pt}%
+ \edef\pgf@lib@temp{#1}%
+ \expandafter\pgf@lib@arrowbox@@parsearrows\pgf@lib@temp,\pgf@lib@arrowbox@parsearrows,
+}%
\def\pgf@lib@arrowbox@@parsearrows#1,{%
- \ifx\pgf@lib@arrowbox@parsearrows#1%
- \let\pgflib@next\relax%
- \else%
- \pgfutil@in@:{#1}%
- \ifpgfutil@in@%
- \pgf@lib@arrowbox@getextend#1\pgf@lib%
- \else%
- \def\pgf@lib@arrowbox@direction{#1}%
- \fi%
- \edef\pgf@marshal{%
- \noexpand\pgfkeys{/pgf/arrow box \pgf@lib@arrowbox@direction\space arrow=\pgf@lib@arrowbox@extend}%
- }%
- \pgf@marshal%
- \let\pgflib@next\pgf@lib@arrowbox@@@parsearrows%
- \fi%
- \pgflib@next%
-}
+ \ifx\pgf@lib@arrowbox@parsearrows#1%
+ \let\pgflib@next\relax%
+ \else%
+ \pgfutil@in@:{#1}%
+ \ifpgfutil@in@%
+ \pgf@lib@arrowbox@getextend#1\pgf@lib%
+ \else%
+ \def\pgf@lib@arrowbox@direction{#1}%
+ \fi%
+ \edef\pgf@marshal{%
+ \noexpand\pgfkeys{/pgf/arrow box \pgf@lib@arrowbox@direction\space arrow=\pgf@lib@arrowbox@extend}%
+ }%
+ \pgf@marshal%
+ \let\pgflib@next\pgf@lib@arrowbox@@@parsearrows%
+ \fi%
+ \pgflib@next%
+}%
\def\pgf@lib@arrowbox@@@parsearrows{%
- \pgfutil@ifnextchar x{\relax\pgf@lib@arrowbox@@parsearrows}{\relax\pgf@lib@arrowbox@@parsearrows}%
-}
+ \pgfutil@ifnextchar x{\relax\pgf@lib@arrowbox@@parsearrows}{\relax\pgf@lib@arrowbox@@parsearrows}%
+}%
\def\pgf@lib@arrowbox@getextend#1:#2\pgf@lib{%
- \def\pgf@lib@arrowbox@direction{#1}%
- \def\pgf@lib@arrowbox@extend{#2}%
+ \def\pgf@lib@arrowbox@direction{#1}%
+ \def\pgf@lib@arrowbox@extend{#2}%
}%
%
-% /pgf/arrow box north arrow
-% /pgf/arrow box south arrow
-% /pgf/arrow box west arrow
-% /pgf/arrow box east arrow
-% /pgf/arrow box arrows
-% /pgf/arrow box shaft width
-% /pgf/arrow box head extend
-% /pgf/arrow box head indent
-% /pgf/arrow box tip angle
+% /pgf/arrow box north arrow
+% /pgf/arrow box south arrow
+% /pgf/arrow box west arrow
+% /pgf/arrow box east arrow
+% /pgf/arrow box arrows
+% /pgf/arrow box shaft width
+% /pgf/arrow box head extend
+% /pgf/arrow box head indent
+% /pgf/arrow box tip angle
%
\pgfkeys{/pgf/.cd,
- arrow box west arrow/.initial=.5cm,
- arrow box east arrow/.initial=.5cm,
- arrow box south arrow/.initial=.5cm,
- arrow box north arrow/.initial=.5cm,
- arrow box shaft width/.initial=.125cm,
- arrow box head extend/.initial=.125cm,
- arrow box head indent/.initial=0cm,
- arrow box tip angle/.initial=90,
-}
+ arrow box west arrow/.initial=.5cm,
+ arrow box east arrow/.initial=.5cm,
+ arrow box south arrow/.initial=.5cm,
+ arrow box north arrow/.initial=.5cm,
+ arrow box shaft width/.initial=.125cm,
+ arrow box head extend/.initial=.125cm,
+ arrow box head indent/.initial=0cm,
+ arrow box tip angle/.initial=90,
+}%
%
% arrow box/Shape.
%
\pgfdeclareshape{arrow box}{%
- \saveddimen\shaftwidth{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
- }%
- %
- % Calculate far the arrows extend from the center of the node.
- %
- \savedmacro\arrowboxpoints{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@x<.5\pgf@xa%
- \pgf@x.5\pgf@xa%
- \fi%
- \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@ya%
- \pgf@y.5\pgf@ya%
- \fi%
- \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- %
- \edef\halfboxwidth{\the\pgf@x}%
- \edef\halfboxheight{\the\pgf@y}%
- \pgfextract@process\arrowboxcorner{}%
- \addtosavedmacro\arrowboxcorner%
- %
- \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
- {\pgfkeysvalueof{/pgf/arrow box west arrow}}%
- \edef\westextend{\the\pgf@x}%
- \addtosavedmacro\westextend%
- %
- \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
- {\pgfkeysvalueof{/pgf/arrow box east arrow}}%
- \edef\eastextend{\the\pgf@x}%
- \addtosavedmacro\eastextend%
- %
- \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
- {\pgfkeysvalueof{/pgf/arrow box north arrow}}%
- \edef\northextend{\the\pgf@x}%
- \addtosavedmacro\northextend%
- %
- \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
- {\pgfkeysvalueof{/pgf/arrow box south arrow}}%
- \edef\southextend{\the\pgf@x}%
- \addtosavedmacro\southextend%
- }%
- \saveddimen\arrowheadextend{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
- }%
- \saveddimen\arrowheadindent{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head indent}}%
- }%
- %
- % Calculate the `miter' angle for the outer sep at the arrow tip.
- %
- \savedmacro\arrowtipmiterangle{%
- \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\arrowtipmiterangle\pgfmathresult%
- }%
- %
- % Calculate the `miter' angle for the outer sep at the point just
- % before the arrow tip.
- %
- \savedmacro\arrowheadangles{%
- %
- % Calculate the `miter' angle and its cosecant at the arrow tip...
- %
- \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\arrowtipmiterangle\pgfmathresult%
- \addtosavedmacro\arrowtipmiterangle%
- \pgfmathcosec@{\arrowtipmiterangle}%
- \let\cosecarrowtipmiterangle\pgfmathresult%
- \addtosavedmacro\cosecarrowtipmiterangle%
- %
- % ...before the arrow head...
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head indent}}%
- \ifdim\pgf@y=0pt\relax%
- \def\pgfmathresult{90}%
- \else%
- \ifdim\pgf@y<0pt\relax%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \pgfmathatan@{\pgfmathresult}%
- \pgfmathadd@{\pgfmathresult}{180}%
- \else%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \pgfmathatan@{\pgfmathresult}%
- \fi%
- \fi%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\beforearrowheadmiterangle\pgfmathresult%
- \addtosavedmacro\beforearrowheadmiterangle%
- \pgfmathcosec@{\beforearrowheadmiterangle}%
- \let\cosecbeforearrowheadmiterangle\pgfmathresult%
- \addtosavedmacro\cosecbeforearrowheadmiterangle%
- %
- % ...and before the arrow tip.
- %
- \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima90pt\relax%
- \pgfutil@tempdimb\beforearrowheadmiterangle pt\relax%
- \pgfutil@tempdimb2.0\pgfutil@tempdimb%
- \advance\pgfutil@tempdimb-90pt\relax%
- \advance\pgfutil@tempdima\pgfutil@tempdimb%
- \divide\pgfutil@tempdima2\relax%
- \edef\beforearrowtipmiterangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \addtosavedmacro\beforearrowtipmiterangle%
- \pgfmathcosec@{\beforearrowtipmiterangle}%
- \let\cosecbeforearrowtipmiterangle\pgfmathresult%
- \addtosavedmacro\cosecbeforearrowtipmiterangle%
- }
- \saveddimen\outerxsep{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- }%
- \saveddimen\outerysep{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer ysep}}%
- }%
- %
- % Calculate the (path) point immediately prior to an arrow tip.
- %
- \savedanchor\beforearrowtip{%
- \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \pgfmathcot@{\pgfmathresult}%
- \let\cothalfangle\pgfmathresult%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
- \pgf@y.5\pgf@y%
- \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head extend}}%
- \pgf@y\pgf@y%
- \pgf@x\cothalfangle\pgf@y%
- }%
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \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{mid}{\midpoint}
- \anchor{mid east}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
- \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
- \else%
- \arrowboxcorner%
- \pgf@xa\pgf@x%
- \midpoint%
- \advance\pgf@x\pgf@xa%
- \fi%
- }
- \anchor{mid west}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
- \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
- \else%
- \arrowboxcorner%
- \pgf@xa\pgf@x%
- \midpoint%
- \advance\pgf@x-\pgf@xa%
- \fi%
- }
- \anchor{base}{\basepoint}
- \anchor{base east}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
- \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
- \else%
- \arrowboxcorner%
- \pgf@xa\pgf@x%
- \basepoint%
- \advance\pgf@x\pgf@xa%
- \fi%
- }
- \anchor{base west}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
- \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
- \else%
- \arrowboxcorner%
- \pgf@xa\pgf@x%
- \basepoint%
- \advance\pgf@x-\pgf@xa%
- \fi%
- }
- \anchor{north}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \csname pgf@anchor@arrow box@north arrow tip\endcsname%
- \else%
- \pgfpointadd{\centerpoint}{\arrowboxcorner}%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@y\pgf@ya%
- \fi%
- }%
- \anchor{south}{%
- \arrowboxpoints%
- \ifdim\southextend>0pt\relax%
- \csname pgf@anchor@arrow box@south arrow tip\endcsname%
- \else%
- \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
- \pgf@ya\pgf@y%
- \centerpoint%
- \pgf@y\pgf@ya%
- \fi%
- }%
- \anchor{east}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \csname pgf@anchor@arrow box@east arrow tip\endcsname%
- \else%
- \pgfpointadd{\centerpoint}{\arrowboxcorner}%
- \pgf@xa\pgf@x%
- \centerpoint%
- \pgf@x\pgf@xa%
- \fi%
- }%
- \anchor{west}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \csname pgf@anchor@arrow box@west arrow tip\endcsname%
- \else%
- \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
- \pgf@xa\pgf@x%
- \centerpoint%
- \pgf@x\pgf@xa%
- \fi%
- }%
- \anchor{north east}{%
- \arrowboxpoints%
- \pgfpointadd{\centerpoint}{\arrowboxcorner}%
- }%
- \anchor{north west}{%
- \arrowboxpoints%
- \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
- }%
- \anchor{south west}{%
- \arrowboxpoints%
- \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
- }%
- \anchor{south east}{%
- \arrowboxpoints%
- \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
- }%
- \anchor{before east arrow}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- \advance\pgf@y\outerysep\relax%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }%
- \anchor{before east arrow head}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{before east arrow tip}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- }%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{east arrow tip}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \centerpoint%
- \advance\pgf@x\eastextend\relax%
- \pgf@xa\outerxsep\relax%
- \pgfmathcosec@{\arrowtipmiterangle}%
- \advance\pgf@x\pgfmathresult\pgf@xa%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{after east arrow tip}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- }%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{after east arrow head}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{after east arrow}{%
- \arrowboxpoints%
- \ifdim\eastextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- \advance\pgf@y\outerysep\relax%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }%
- %
- \anchor{before west arrow}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@x-\pgf@x%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- \advance\pgf@y\outerysep\relax%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }%
- \anchor{before west arrow head}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\westextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }
- \anchor{before west arrow tip}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\westextend\relax%
- }%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }
- \anchor{west arrow tip}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \centerpoint%
- \advance\pgf@x-\westextend\relax%
- \pgf@xa\outerxsep\relax%
- \pgfmathcosec@{\arrowtipmiterangle}%
- \advance\pgf@x-\pgfmathresult\pgf@xa%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }
- \anchor{after west arrow tip}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\westextend\relax%
- }%
- \pgf@x-\pgf@x%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }
- \anchor{after west arrow head}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\westextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgf@x-\pgf@x%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }
- \anchor{after west arrow}{%
- \arrowboxpoints%
- \ifdim\westextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- \advance\pgf@y\outerysep\relax%
- \pgf@x-\pgf@x%
- }%
- \else%
- \csname pgf@anchor@arrow box@west\endcsname%
- \fi%
- }%
- %
- \anchor{before north arrow}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- \advance\pgf@x-\outerxsep\relax%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{before north arrow head}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima270pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{before north arrow tip}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-90pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y-\pgf@xa%
- \advance\pgf@y\northextend\relax%
- }%
- \pgf@x-\pgf@x%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{north arrow tip}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \centerpoint%
- \advance\pgf@y\northextend\relax%
- \pgf@ya\outerysep\relax%
- \pgfmathcosec@{\arrowtipmiterangle}%
- \advance\pgf@y\pgfmathresult\pgf@ya%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{after north arrow tip}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-90pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y-\pgf@xa%
- \advance\pgf@y\northextend\relax%
- }%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{after north arrow head}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima270pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \pgf@x-\pgf@x%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- \anchor{after north arrow}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- \advance\pgf@x\outerxsep\relax%
- }%
- \else%
- \csname pgf@anchor@arrow box@north\endcsname%
- \fi%
- }
- %
- \anchor{before south arrow}{%
- \arrowboxpoints%
- \ifdim\southextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- \advance\pgf@x\outerxsep\relax%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }%
- \anchor{before south arrow head}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima270pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }
- \anchor{before south arrow tip}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-90pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y-\pgf@xa%
- \advance\pgf@y\northextend\relax%
- }%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }
- \anchor{south arrow tip}{%
- \arrowboxpoints%
- \ifdim\southextend>0pt\relax%
- \centerpoint%
- \advance\pgf@y-\southextend\relax%
- \pgf@ya\outerysep\relax%
- \pgfmathcosec@{\arrowtipmiterangle}%
- \advance\pgf@y-\pgfmathresult\pgf@ya%
- \else%
- \csname pgf@anchor@arrow box@east\endcsname%
- \fi%
- }
- \anchor{after south arrow tip}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima\arrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
- \advance\pgfutil@tempdima-90pt\relax%
- \pgfutil@tempdimb\outerxsep\relax%
- \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y-\pgf@xa%
- \advance\pgf@y\northextend\relax%
- }%
- \pgf@x-\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }
- \anchor{after south arrow head}{%
- \arrowboxpoints%
- \ifdim\northextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \pgfpointadd{%
- \arrowheadangles%
- \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
- \advance\pgfutil@tempdima270pt\relax%
- \pgfutil@tempdimb\outerysep\relax%
- \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }%
- {%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }
- \anchor{after south arrow}{%
- \arrowboxpoints%
- \ifdim\southextend>0pt\relax%
- \pgfpointadd{\centerpoint}{%
- \arrowboxcorner%
- \pgf@x-\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- \advance\pgf@x-\outerxsep\relax%
- \pgf@y-\pgf@y%
- }%
- \else%
- \csname pgf@anchor@arrow box@south\endcsname%
- \fi%
- }%
- %
- \backgroundpath{%
- \arrowboxpoints%
- \pgfextract@process\arrowboxcorner{%
- \arrowboxcorner%
- \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
- }%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\arrowboxcorner}%
- \ifdim\eastextend>0pt\relax%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- }%
- \pgfpathlineto{%
- \pgf@x\eastextend\relax%
- \pgf@y0pt\relax%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- \pgf@y-\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@x-\pgf@x%
- \advance\pgf@x\eastextend\relax%
- \advance\pgf@x\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y-.5\pgf@y%
- }%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@y\shaftwidth\relax%
- \pgf@y-.5\pgf@y%
- }%
- \fi%
- \pgfpathlineto{\arrowboxcorner\pgf@y-\pgf@y}%
- \ifdim\southextend>0pt\relax%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@y\pgf@x%
- \advance\pgf@y-\southextend\relax%
- \advance\pgf@y-\arrowheadindent\relax%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@xa\pgf@y%
- \pgf@y\pgf@x%
- \advance\pgf@y-\southextend\relax%
- \pgf@x\pgf@xa%
- }%
- \pgfpathlineto{%
- \pgf@x0pt\relax%
- \pgf@y-\southextend\relax%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@xa\pgf@y%
- \pgf@y\pgf@x%
- \advance\pgf@y-\southextend\relax%
- \pgf@x-\pgf@xa%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@y\pgf@x%
- \advance\pgf@y-\southextend\relax%
- \advance\pgf@y-\arrowheadindent\relax%
- \pgf@x\shaftwidth\relax%
- \pgf@x-.5\pgf@x%
- }%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x-.5\pgf@x%
- \pgf@y-\pgf@y%
- }%
- \fi%
- \pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
- \ifdim\westextend>0pt\relax%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x-\pgf@x
- \pgf@y\shaftwidth\relax%
- \pgf@y-.5\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \advance\pgf@x-\westextend\relax%
- \advance\pgf@x-\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y-.5\pgf@y%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \advance\pgf@x-\westextend\relax%
- \pgf@y-\pgf@y%
- }%
- \pgfpathlineto{%
- \pgf@x-\westextend\relax%
- \pgf@y0pt\relax%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \advance\pgf@x-\westextend\relax%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \advance\pgf@x-\westextend\relax%
- \advance\pgf@x-\arrowheadindent\relax%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x-\pgf@x%
- \pgf@y\shaftwidth\relax%
- \pgf@y.5\pgf@y%
- }%
- \fi%
- \pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x}%
- \ifdim\northextend>0pt\relax%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x-.5\pgf@x%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x\shaftwidth\relax%
- \pgf@x-.5\pgf@x%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@xa\pgf@y%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \pgf@x-\pgf@xa%
- }%
- \pgfpathlineto{%
- \pgf@x0pt\relax%
- \pgf@y\northextend\relax%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@xa\pgf@y%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \pgf@x\pgf@xa%
- }%
- \pgfpathlineto{%
- \beforearrowtip%
- \pgf@y-\pgf@x%
- \advance\pgf@y\northextend\relax%
- \advance\pgf@y\arrowheadindent\relax%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \pgfpathlineto{%
- \arrowboxcorner%
- \pgf@x\shaftwidth\relax%
- \pgf@x.5\pgf@x%
- }%
- \fi%
- \pgfpathclose%
- }%
- }
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \pgfutil@ifundefined{pgf@lib@shapes@arrowbox@referencepoint}%
- {\let\referencepoint\centerpoint}{\let\referencepoint\pgf@lib@shapes@arrowbox@referencepoint}%
- \pgfextract@process\externalpoint{%
- \pgfpointadd{\referencepoint}{\externalpoint}%
- }%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle\pgfmathresult%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@north\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@north east\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before east arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{east arrow tip}%
- \def\secondpoint{before east arrow tip}%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before east arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{before east arrow head}%
- \def\secondpoint{before east arrow}%
- \else%
- \def\firstpoint{before east arrow}%
- \def\secondpoint{north east}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after north arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after north arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{north east}%
- \def\secondpoint{after north arrow}%
- \else%
- \def\firstpoint{after north arrow}%
- \def\secondpoint{after north arrow head}%
- \fi%
- \else%
- \def\firstpoint{after north arrow tip}%
- \def\secondpoint{north arrow tip}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@north west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before north arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{north arrow tip}%
- \def\secondpoint{before north arrow tip}%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before north arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{before north head}%
- \def\secondpoint{before north arrow}%
- \else%
- \def\firstpoint{before north arrow}%
- \def\secondpoint{north west}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after west arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after west arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{north west}%
- \def\secondpoint{after west arrow}%
- \else%
- \def\firstpoint{after west arrow}%
- \def\secondpoint{after west arrow head}%
- \fi%
- \else%
- \def\firstpoint{after west arrow tip}%
- \def\secondpoint{west arrow tip}%
- \fi%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@south arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@south west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before west arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{west arrow tip}%
- \def\secondpoint{before west arrow tip}%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before west arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{before west arrow head}%
- \def\secondpoint{before west arrow}%
- \else%
- \def\firstpoint{before west arrow}%
- \def\secondpoint{south west}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after south arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after south arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{south west}%
- \def\secondpoint{after south arrow}%
- \else%
- \def\firstpoint{after south arrow}%
- \def\secondpoint{after south arrow head}%
- \fi%
- \else%
- \def\firstpoint{after south arrow tip}%
- \def\secondpoint{south arrow tip}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@south east\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before south arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{south arrow tip}%
- \def\secondpoint{before south arrow tip}%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@before south arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{before south arrow head}%
- \def\secondpoint{before south arrow}%
- \else%
- \def\firstpoint{before south arrow}%
- \def\secondpoint{south east}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after east arrow tip\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}%
- {\csname pgf@anchor@arrow box@after east arrow\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \def\firstpoint{south east}%
- \def\secondpoint{after east arrow}%
- \else%
- \def\firstpoint{after east arrow}%
- \def\secondpoint{after east arrow head}%
- \fi%
- \else%
- \def\firstpoint{after east arrow tip}%
- \def\secondpoint{east arrow tip}%
- \fi%
- \fi%
- \fi%
- \fi%
- \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
- {\csname pgf@anchor@arrow box@\firstpoint\endcsname}%
- {\csname pgf@anchor@arrow box@\secondpoint\endcsname}%
- }
-}
+ \saveddimen\shaftwidth{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
+ }%
+ %
+ % Calculate far the arrows extend from the center of the node.
+ %
+ \savedmacro\arrowboxpoints{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \pgf@y.5\pgf@ya%
+ \fi%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ %
+ \edef\halfboxwidth{\the\pgf@x}%
+ \edef\halfboxheight{\the\pgf@y}%
+ \pgfextract@process\arrowboxcorner{}%
+ \addtosavedmacro\arrowboxcorner%
+ %
+ \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
+ {\pgfkeysvalueof{/pgf/arrow box west arrow}}%
+ \edef\westextend{\the\pgf@x}%
+ \addtosavedmacro\westextend%
+ %
+ \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
+ {\pgfkeysvalueof{/pgf/arrow box east arrow}}%
+ \edef\eastextend{\the\pgf@x}%
+ \addtosavedmacro\eastextend%
+ %
+ \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
+ {\pgfkeysvalueof{/pgf/arrow box north arrow}}%
+ \edef\northextend{\the\pgf@x}%
+ \addtosavedmacro\northextend%
+ %
+ \pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
+ {\pgfkeysvalueof{/pgf/arrow box south arrow}}%
+ \edef\southextend{\the\pgf@x}%
+ \addtosavedmacro\southextend%
+ }%
+ \saveddimen\arrowheadextend{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
+ }%
+ \saveddimen\arrowheadindent{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head indent}}%
+ }%
+ %
+ % Calculate the `miter' angle for the outer sep at the arrow tip.
+ %
+ \savedmacro\arrowtipmiterangle{%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\arrowtipmiterangle\pgfmathresult%
+ }%
+ %
+ % Calculate the `miter' angle for the outer sep at the point just
+ % before the arrow tip.
+ %
+ \savedmacro\arrowheadangles{%
+ %
+ % Calculate the `miter' angle and its cosecant at the arrow tip...
+ %
+ \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\arrowtipmiterangle\pgfmathresult%
+ \addtosavedmacro\arrowtipmiterangle%
+ \pgfmathcosec@{\arrowtipmiterangle}%
+ \let\cosecarrowtipmiterangle\pgfmathresult%
+ \addtosavedmacro\cosecarrowtipmiterangle%
+ %
+ % ...before the arrow head...
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head indent}}%
+ \ifdim\pgf@y=0pt\relax%
+ \def\pgfmathresult{90}%
+ \else%
+ \ifdim\pgf@y<0pt\relax%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \pgfmathatan@{\pgfmathresult}%
+ \pgfmathadd@{\pgfmathresult}{180}%
+ \else%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \pgfmathatan@{\pgfmathresult}%
+ \fi%
+ \fi%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\beforearrowheadmiterangle\pgfmathresult%
+ \addtosavedmacro\beforearrowheadmiterangle%
+ \pgfmathcosec@{\beforearrowheadmiterangle}%
+ \let\cosecbeforearrowheadmiterangle\pgfmathresult%
+ \addtosavedmacro\cosecbeforearrowheadmiterangle%
+ %
+ % ...and before the arrow tip.
+ %
+ \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima90pt\relax%
+ \pgfutil@tempdimb\beforearrowheadmiterangle pt\relax%
+ \pgfutil@tempdimb2.0\pgfutil@tempdimb%
+ \advance\pgfutil@tempdimb-90pt\relax%
+ \advance\pgfutil@tempdima\pgfutil@tempdimb%
+ \divide\pgfutil@tempdima2\relax%
+ \edef\beforearrowtipmiterangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \addtosavedmacro\beforearrowtipmiterangle%
+ \pgfmathcosec@{\beforearrowtipmiterangle}%
+ \let\cosecbeforearrowtipmiterangle\pgfmathresult%
+ \addtosavedmacro\cosecbeforearrowtipmiterangle%
+ }%
+ \saveddimen\outerxsep{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ }%
+ \saveddimen\outerysep{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer ysep}}%
+ }%
+ %
+ % Calculate the (path) point immediately prior to an arrow tip.
+ %
+ \savedanchor\beforearrowtip{%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \pgfmathcot@{\pgfmathresult}%
+ \let\cothalfangle\pgfmathresult%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
+ \pgf@y.5\pgf@y%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head extend}}%
+ \pgf@y\pgf@y%
+ \pgf@x\cothalfangle\pgf@y%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \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{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
+ \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
+ \else%
+ \arrowboxcorner%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ }%
+ \anchor{mid west}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
+ \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
+ \else%
+ \arrowboxcorner%
+ \pgf@xa\pgf@x%
+ \midpoint%
+ \advance\pgf@x-\pgf@xa%
+ \fi%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
+ \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
+ \else%
+ \arrowboxcorner%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ }%
+ \anchor{base west}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
+ \csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
+ \else%
+ \arrowboxcorner%
+ \pgf@xa\pgf@x%
+ \basepoint%
+ \advance\pgf@x-\pgf@xa%
+ \fi%
+ }%
+ \anchor{north}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \csname pgf@anchor@arrow box@north arrow tip\endcsname%
+ \else%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner}%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@y\pgf@ya%
+ \fi%
+ }%
+ \anchor{south}{%
+ \arrowboxpoints%
+ \ifdim\southextend>0pt\relax%
+ \csname pgf@anchor@arrow box@south arrow tip\endcsname%
+ \else%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \pgf@y\pgf@ya%
+ \fi%
+ }%
+ \anchor{east}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \csname pgf@anchor@arrow box@east arrow tip\endcsname%
+ \else%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner}%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \pgf@x\pgf@xa%
+ \fi%
+ }%
+ \anchor{west}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \csname pgf@anchor@arrow box@west arrow tip\endcsname%
+ \else%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \pgf@x\pgf@xa%
+ \fi%
+ }%
+ \anchor{north east}{%
+ \arrowboxpoints%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner}%
+ }%
+ \anchor{north west}{%
+ \arrowboxpoints%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
+ }%
+ \anchor{south west}{%
+ \arrowboxpoints%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
+ }%
+ \anchor{south east}{%
+ \arrowboxpoints%
+ \pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
+ }%
+ \anchor{before east arrow}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ \advance\pgf@y\outerysep\relax%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{before east arrow head}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{before east arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ }%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{east arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \centerpoint%
+ \advance\pgf@x\eastextend\relax%
+ \pgf@xa\outerxsep\relax%
+ \pgfmathcosec@{\arrowtipmiterangle}%
+ \advance\pgf@x\pgfmathresult\pgf@xa%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{after east arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ }%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{after east arrow head}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{after east arrow}{%
+ \arrowboxpoints%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ \advance\pgf@y\outerysep\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ %
+ \anchor{before west arrow}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@x-\pgf@x%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ \advance\pgf@y\outerysep\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{before west arrow head}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\westextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{before west arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\westextend\relax%
+ }%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{west arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \centerpoint%
+ \advance\pgf@x-\westextend\relax%
+ \pgf@xa\outerxsep\relax%
+ \pgfmathcosec@{\arrowtipmiterangle}%
+ \advance\pgf@x-\pgfmathresult\pgf@xa%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{after west arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\westextend\relax%
+ }%
+ \pgf@x-\pgf@x%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{after west arrow head}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\westextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgf@x-\pgf@x%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ \anchor{after west arrow}{%
+ \arrowboxpoints%
+ \ifdim\westextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ \advance\pgf@y\outerysep\relax%
+ \pgf@x-\pgf@x%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@west\endcsname%
+ \fi%
+ }%
+ %
+ \anchor{before north arrow}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ \advance\pgf@x-\outerxsep\relax%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{before north arrow head}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima270pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{before north arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-90pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y-\pgf@xa%
+ \advance\pgf@y\northextend\relax%
+ }%
+ \pgf@x-\pgf@x%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{north arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \centerpoint%
+ \advance\pgf@y\northextend\relax%
+ \pgf@ya\outerysep\relax%
+ \pgfmathcosec@{\arrowtipmiterangle}%
+ \advance\pgf@y\pgfmathresult\pgf@ya%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{after north arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-90pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y-\pgf@xa%
+ \advance\pgf@y\northextend\relax%
+ }%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{after north arrow head}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima270pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \pgf@x-\pgf@x%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ \anchor{after north arrow}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ \advance\pgf@x\outerxsep\relax%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@north\endcsname%
+ \fi%
+ }%
+ %
+ \anchor{before south arrow}{%
+ \arrowboxpoints%
+ \ifdim\southextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ \advance\pgf@x\outerxsep\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ \anchor{before south arrow head}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima270pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ \anchor{before south arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-90pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y-\pgf@xa%
+ \advance\pgf@y\northextend\relax%
+ }%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ \anchor{south arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\southextend>0pt\relax%
+ \centerpoint%
+ \advance\pgf@y-\southextend\relax%
+ \pgf@ya\outerysep\relax%
+ \pgfmathcosec@{\arrowtipmiterangle}%
+ \advance\pgf@y-\pgfmathresult\pgf@ya%
+ \else%
+ \csname pgf@anchor@arrow box@east\endcsname%
+ \fi%
+ }%
+ \anchor{after south arrow tip}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima\arrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
+ \advance\pgfutil@tempdima-90pt\relax%
+ \pgfutil@tempdimb\outerxsep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y-\pgf@xa%
+ \advance\pgf@y\northextend\relax%
+ }%
+ \pgf@x-\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ \anchor{after south arrow head}{%
+ \arrowboxpoints%
+ \ifdim\northextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointadd{%
+ \arrowheadangles%
+ \pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
+ \advance\pgfutil@tempdima270pt\relax%
+ \pgfutil@tempdimb\outerysep\relax%
+ \pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }%
+ {%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ \anchor{after south arrow}{%
+ \arrowboxpoints%
+ \ifdim\southextend>0pt\relax%
+ \pgfpointadd{\centerpoint}{%
+ \arrowboxcorner%
+ \pgf@x-\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ \advance\pgf@x-\outerxsep\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \else%
+ \csname pgf@anchor@arrow box@south\endcsname%
+ \fi%
+ }%
+ %
+ \backgroundpath{%
+ \arrowboxpoints%
+ \pgfextract@process\arrowboxcorner{%
+ \arrowboxcorner%
+ \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
+ }%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\arrowboxcorner}%
+ \ifdim\eastextend>0pt\relax%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ }%
+ \pgfpathlineto{%
+ \pgf@x\eastextend\relax%
+ \pgf@y0pt\relax%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x\eastextend\relax%
+ \advance\pgf@x\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y-.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y-.5\pgf@y%
+ }%
+ \fi%
+ \pgfpathlineto{\arrowboxcorner\pgf@y-\pgf@y}%
+ \ifdim\southextend>0pt\relax%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@y\pgf@x%
+ \advance\pgf@y-\southextend\relax%
+ \advance\pgf@y-\arrowheadindent\relax%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@xa\pgf@y%
+ \pgf@y\pgf@x%
+ \advance\pgf@y-\southextend\relax%
+ \pgf@x\pgf@xa%
+ }%
+ \pgfpathlineto{%
+ \pgf@x0pt\relax%
+ \pgf@y-\southextend\relax%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@xa\pgf@y%
+ \pgf@y\pgf@x%
+ \advance\pgf@y-\southextend\relax%
+ \pgf@x-\pgf@xa%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@y\pgf@x%
+ \advance\pgf@y-\southextend\relax%
+ \advance\pgf@y-\arrowheadindent\relax%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x-.5\pgf@x%
+ }%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x-.5\pgf@x%
+ \pgf@y-\pgf@y%
+ }%
+ \fi%
+ \pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
+ \ifdim\westextend>0pt\relax%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x-\pgf@x
+ \pgf@y\shaftwidth\relax%
+ \pgf@y-.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \advance\pgf@x-\westextend\relax%
+ \advance\pgf@x-\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y-.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \advance\pgf@x-\westextend\relax%
+ \pgf@y-\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \pgf@x-\westextend\relax%
+ \pgf@y0pt\relax%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \advance\pgf@x-\westextend\relax%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \advance\pgf@x-\westextend\relax%
+ \advance\pgf@x-\arrowheadindent\relax%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x-\pgf@x%
+ \pgf@y\shaftwidth\relax%
+ \pgf@y.5\pgf@y%
+ }%
+ \fi%
+ \pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x}%
+ \ifdim\northextend>0pt\relax%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x-.5\pgf@x%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x-.5\pgf@x%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@xa\pgf@y%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \pgf@x-\pgf@xa%
+ }%
+ \pgfpathlineto{%
+ \pgf@x0pt\relax%
+ \pgf@y\northextend\relax%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@xa\pgf@y%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \pgf@x\pgf@xa%
+ }%
+ \pgfpathlineto{%
+ \beforearrowtip%
+ \pgf@y-\pgf@x%
+ \advance\pgf@y\northextend\relax%
+ \advance\pgf@y\arrowheadindent\relax%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \pgfpathlineto{%
+ \arrowboxcorner%
+ \pgf@x\shaftwidth\relax%
+ \pgf@x.5\pgf@x%
+ }%
+ \fi%
+ \pgfpathclose%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \pgfutil@ifundefined{pgf@lib@shapes@arrowbox@referencepoint}%
+ {\let\referencepoint\centerpoint}{\let\referencepoint\pgf@lib@shapes@arrowbox@referencepoint}%
+ \pgfextract@process\externalpoint{%
+ \pgfpointadd{\referencepoint}{\externalpoint}%
+ }%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle\pgfmathresult%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@north\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@north east\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before east arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{east arrow tip}%
+ \def\secondpoint{before east arrow tip}%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before east arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{before east arrow head}%
+ \def\secondpoint{before east arrow}%
+ \else%
+ \def\firstpoint{before east arrow}%
+ \def\secondpoint{north east}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after north arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after north arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{north east}%
+ \def\secondpoint{after north arrow}%
+ \else%
+ \def\firstpoint{after north arrow}%
+ \def\secondpoint{after north arrow head}%
+ \fi%
+ \else%
+ \def\firstpoint{after north arrow tip}%
+ \def\secondpoint{north arrow tip}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@north west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before north arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{north arrow tip}%
+ \def\secondpoint{before north arrow tip}%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before north arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{before north head}%
+ \def\secondpoint{before north arrow}%
+ \else%
+ \def\firstpoint{before north arrow}%
+ \def\secondpoint{north west}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after west arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after west arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{north west}%
+ \def\secondpoint{after west arrow}%
+ \else%
+ \def\firstpoint{after west arrow}%
+ \def\secondpoint{after west arrow head}%
+ \fi%
+ \else%
+ \def\firstpoint{after west arrow tip}%
+ \def\secondpoint{west arrow tip}%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@south arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@south west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before west arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{west arrow tip}%
+ \def\secondpoint{before west arrow tip}%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before west arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{before west arrow head}%
+ \def\secondpoint{before west arrow}%
+ \else%
+ \def\firstpoint{before west arrow}%
+ \def\secondpoint{south west}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after south arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after south arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{south west}%
+ \def\secondpoint{after south arrow}%
+ \else%
+ \def\firstpoint{after south arrow}%
+ \def\secondpoint{after south arrow head}%
+ \fi%
+ \else%
+ \def\firstpoint{after south arrow tip}%
+ \def\secondpoint{south arrow tip}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@south east\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before south arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{south arrow tip}%
+ \def\secondpoint{before south arrow tip}%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@before south arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{before south arrow head}%
+ \def\secondpoint{before south arrow}%
+ \else%
+ \def\firstpoint{before south arrow}%
+ \def\secondpoint{south east}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after east arrow tip\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}%
+ {\csname pgf@anchor@arrow box@after east arrow\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \def\firstpoint{south east}%
+ \def\secondpoint{after east arrow}%
+ \else%
+ \def\firstpoint{after east arrow}%
+ \def\secondpoint{after east arrow head}%
+ \fi%
+ \else%
+ \def\firstpoint{after east arrow tip}%
+ \def\secondpoint{east arrow tip}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
+ {\csname pgf@anchor@arrow box@\firstpoint\endcsname}%
+ {\csname pgf@anchor@arrow box@\secondpoint\endcsname}%
+ }%
+}%
+
+
-
-
\endinput
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex
index cfa1d80d442..4cf4b1346b8 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex
@@ -7,83 +7,83 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\usepgflibrary{shapes.symbols}
+\usepgflibrary{shapes.symbols}%
% Keys for callouts
%
% Common to all callouts:
-% /pgf/callout absolute pointer
-% /pgf/callout relative pointer
+% /pgf/callout absolute pointer
+% /pgf/callout relative pointer
%
% ellipse callout only:
-% /pgf/callout pointer arc
+% /pgf/callout pointer arc
%
-% rectangle callout only:
-% /pgf/callout pointer width
+% rectangle callout only:
+% /pgf/callout pointer width
%
% cloud callout only:
-% /pgf/callout pointer start size
-% /pgf/callout pointer end size
-% /pgf/callout pointer segments
+% /pgf/callout pointer start size
+% /pgf/callout pointer end size
+% /pgf/callout pointer segments
%
\newif\ifpgf@lib@callout@absolutepointer
\pgfkeys{/pgf/.cd,
- callout pointer arc/.initial=15,
- callout pointer width/.initial=.25cm,
- callout pointer start size/.initial=.2 of callout,
- callout pointer end size/.initial=.1 of callout,
- callout pointer segments/.initial=2,
- callout absolute pointer/.code={\pgf@lib@callout@makeabsolutepointer{#1}},
- callout relative pointer/.code={\pgf@lib@callout@makerelativepointer{#1}},
- callout pointer shorten/.initial=0cm
-}
+ callout pointer arc/.initial=15,
+ callout pointer width/.initial=.25cm,
+ callout pointer start size/.initial=.2 of callout,
+ callout pointer end size/.initial=.1 of callout,
+ callout pointer segments/.initial=2,
+ callout absolute pointer/.code={\pgf@lib@callout@makeabsolutepointer{#1}},
+ callout relative pointer/.code={\pgf@lib@callout@makerelativepointer{#1}},
+ callout pointer shorten/.initial=0cm,
+}%
\def\pgf@lib@callout@makeabsolutepointer#1{%
- \pgf@lib@callout@absolutepointertrue%
- {%
- \pgftransformshift{#1}%
- \pgfmultipartnode{coordinate}{center}{pgf@lib@callout@pointer}{}%
- }%
-}
+ \pgf@lib@callout@absolutepointertrue%
+ {%
+ \pgftransformshift{#1}%
+ \pgfmultipartnode{coordinate}{center}{pgf@lib@callout@pointer}{}%
+ }%
+}%
\def\pgf@lib@callout@makerelativepointer#1{%
- \pgf@lib@callout@absolutepointerfalse%
- \def\pgf@lib@callout@relativepointer{#1}%
-}
-\pgfkeys{/pgf/callout relative pointer=\pgfpointpolar{300}{.5cm}}
+ \pgf@lib@callout@absolutepointerfalse%
+ \def\pgf@lib@callout@relativepointer{#1}%
+}%
+\pgfkeys{/pgf/callout relative pointer=\pgfpointpolar{300}{.5cm}}%
% Shape ellipse callout
%
%
\pgfdeclareshape{ellipse callout}{%
- \savedmacro\ellipsecalloutpoints{%
- %
- % Get the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x>\pgf@y%
- \edef\outersep{\the\pgf@x}%
- \else%
- \edef\outersep{\the\pgf@y}%
- \fi%
- \addtosavedmacro\outersep%
- %
- % Calculate the node dimensions...
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \savedmacro\ellipsecalloutpoints{%
+ %
+ % Get the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x>\pgf@y%
+ \edef\outersep{\the\pgf@x}%
+ \else%
+ \edef\outersep{\the\pgf@y}%
+ \fi%
+ \addtosavedmacro\outersep%
+ %
+ % Calculate the node dimensions...
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@x1.4142136\pgf@x%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
\ifdim\pgf@x<.5\pgf@xa%
\pgf@x.5\pgf@xa%
\fi%
%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y.5\dp\pgfnodeparttextbox%
\pgf@y1.4142136\pgf@y%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
@@ -105,177 +105,177 @@
%
\addtosavedmacro\xradius%
\addtosavedmacro\xpathradius%
- \addtosavedmacro\yradius%
+ \addtosavedmacro\yradius%
\addtosavedmacro\ypathradius%
- %
- \pgfmathsetmacro\pointerarc{\pgfkeysvalueof{/pgf/callout pointer arc}}%
- \addtosavedmacro\pointerarc%
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- %
- % Get the realtive pointer.
- %
- \ifpgf@lib@callout@absolutepointer%
- \else%
- \pgfextract@process\calloutpointer{%
- \pgfextract@process\borderpoint{%
- \expandafter\pgfpointborderellipse\expandafter{\pgf@lib@callout@relativepointer}{\pgfqpoint{\xpathradius}{\ypathradius}}%
- }%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
- \let\pointerangle\pgfmathresult%
- \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \edef\pointerradius{\pgfmathresult pt}%
- \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- \addtosavedmacro\calloutpointer%
- \pgf@lib@callouts@shortenpointer%
- \pgf@lib@ellipsecallout@getpoints%
- \addtosavedmacro\calloutpointeranchor%
- \addtosavedmacro\beforecalloutangle%
- \addtosavedmacro\aftercalloutangle%
- \fi%
+ %
+ \pgfmathsetmacro\pointerarc{\pgfkeysvalueof{/pgf/callout pointer arc}}%
+ \addtosavedmacro\pointerarc%
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ %
+ % Get the relative pointer.
+ %
+ \ifpgf@lib@callout@absolutepointer%
+ \else%
+ \pgfextract@process\calloutpointer{%
+ \pgfextract@process\borderpoint{%
+ \expandafter\pgfpointborderellipse\expandafter{\pgf@lib@callout@relativepointer}{\pgfqpoint{\xpathradius}{\ypathradius}}%
+ }%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
+ \let\pointerangle\pgfmathresult%
+ \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \edef\pointerradius{\pgfmathresult pt}%
+ \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ %
+ \addtosavedmacro\calloutpointer%
+ \pgf@lib@callouts@shortenpointer%
+ \pgf@lib@ellipsecallout@getpoints%
+ \addtosavedmacro\calloutpointeranchor%
+ \addtosavedmacro\beforecalloutangle%
+ \addtosavedmacro\aftercalloutangle%
+ \fi%
}%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt\relax%
- }
+ }%
\anchor{center}{\centerpoint}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{%
- \ellipsecalloutpoints%
- \pgfmathpointintersectionoflineandarc{\midpoint\advance\pgf@x\xradius}{\midpoint}%
- {\centerpoint}{270}{450}{\xradius and \yradius}%
+ \ellipsecalloutpoints%
+ \pgfmathpointintersectionoflineandarc{\midpoint\advance\pgf@x\xradius}{\midpoint}%
+ {\centerpoint}{270}{450}{\xradius and \yradius}%
}%
\anchor{mid west}{%
- \ellipsecalloutpoints%
- \pgfmathpointintersectionoflineandarc{\midpoint\advance\pgf@x-\xradius}{\midpoint}%
- {\centerpoint}{90}{270}{\xradius and \yradius}%
+ \ellipsecalloutpoints%
+ \pgfmathpointintersectionoflineandarc{\midpoint\advance\pgf@x-\xradius}{\midpoint}%
+ {\centerpoint}{90}{270}{\xradius and \yradius}%
}%
\anchor{base}{\basepoint}%
\anchor{base east}{%
- \ellipsecalloutpoints%
- \pgfmathpointintersectionoflineandarc{\basepoint\advance\pgf@x\xradius}{\basepoint}%
- {\centerpoint}{270}{450}{\xradius and \yradius}%
+ \ellipsecalloutpoints%
+ \pgfmathpointintersectionoflineandarc{\basepoint\advance\pgf@x\xradius}{\basepoint}%
+ {\centerpoint}{270}{450}{\xradius and \yradius}%
}%
\anchor{base west}{%
- \ellipsecalloutpoints%
- \pgfmathpointintersectionoflineandarc{\basepoint\advance\pgf@x-\xradius}{\basepoint}%
- {\centerpoint}{90}{270}{\xradius and \yradius}%
+ \ellipsecalloutpoints%
+ \pgfmathpointintersectionoflineandarc{\basepoint\advance\pgf@x-\xradius}{\basepoint}%
+ {\centerpoint}{90}{270}{\xradius and \yradius}%
}%
\anchor{north}{%
- \ellipsecalloutpoints%
- \centerpoint%
- \advance\pgf@y\yradius\relax%
- }
+ \ellipsecalloutpoints%
+ \centerpoint%
+ \advance\pgf@y\yradius\relax%
+ }%
\anchor{south}{%
- \ellipsecalloutpoints%
- \centerpoint%
- \advance\pgf@y-\yradius\relax%
- }
+ \ellipsecalloutpoints%
+ \centerpoint%
+ \advance\pgf@y-\yradius\relax%
+ }%
\anchor{east}{%
- \ellipsecalloutpoints%
- \centerpoint%
- \advance\pgf@x\xradius\relax%
- }
+ \ellipsecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x\xradius\relax%
+ }%
\anchor{west}{%
- \ellipsecalloutpoints%
- \centerpoint%
- \advance\pgf@x-\xradius\relax%
- }
+ \ellipsecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x-\xradius\relax%
+ }%
\anchor{north west}{%
- \ellipsecalloutpoints%
- \pgf@xa\xradius\relax%
- \pgf@ya\yradius\relax%
- \centerpoint%
- \advance\pgf@y0.7071067\pgf@ya%
- \advance\pgf@x-0.7071067\pgf@xa%
- }
+ \ellipsecalloutpoints%
+ \pgf@xa\xradius\relax%
+ \pgf@ya\yradius\relax%
+ \centerpoint%
+ \advance\pgf@y0.7071067\pgf@ya%
+ \advance\pgf@x-0.7071067\pgf@xa%
+ }%
\anchor{north east}{%
- \ellipsecalloutpoints%
- \pgf@xa\xradius\relax%
- \pgf@ya\yradius\relax%
- \centerpoint%
- \advance\pgf@y0.7071067\pgf@ya%
- \advance\pgf@x0.7071067\pgf@xa%
- }
+ \ellipsecalloutpoints%
+ \pgf@xa\xradius\relax%
+ \pgf@ya\yradius\relax%
+ \centerpoint%
+ \advance\pgf@y0.7071067\pgf@ya%
+ \advance\pgf@x0.7071067\pgf@xa%
+ }%
\anchor{south west}{%
- \ellipsecalloutpoints%
- \pgf@xa\xradius\relax%
- \pgf@ya\yradius\relax%
- \centerpoint%
- \advance\pgf@y-0.7071067\pgf@ya%
- \advance\pgf@x-0.7071067\pgf@xa%
- }
+ \ellipsecalloutpoints%
+ \pgf@xa\xradius\relax%
+ \pgf@ya\yradius\relax%
+ \centerpoint%
+ \advance\pgf@y-0.7071067\pgf@ya%
+ \advance\pgf@x-0.7071067\pgf@xa%
+ }%
\anchor{south east}{%
- \ellipsecalloutpoints%
- \pgf@xa\xradius\relax%
- \pgf@ya\yradius\relax%
- \centerpoint%
- \advance\pgf@y-0.7071067\pgf@ya%
- \advance\pgf@x0.7071067\pgf@xa%
- }
+ \ellipsecalloutpoints%
+ \pgf@xa\xradius\relax%
+ \pgf@ya\yradius\relax%
+ \centerpoint%
+ \advance\pgf@y-0.7071067\pgf@ya%
+ \advance\pgf@x0.7071067\pgf@xa%
+ }%
\anchor{pointer}{%
- \ellipsecalloutpoints%
- \calloutpointeranchor%
- }%
+ \ellipsecalloutpoints%
+ \calloutpointeranchor%
+ }%
\backgroundpath{%
- \ellipsecalloutpoints%
- \ifpgf@lib@callout@absolutepointer%
- \pgfextract@process\calloutpointer{%
- \pgfpointanchor{pgf@lib@callout@pointer}{center}%
- }%
- \pgf@lib@callouts@shortenpointer%
- \pgf@lib@ellipsecallout@getpoints%
- \calloutpointeranchor%
- \ifx\pgf@node@name\pgfutil@empty%
- \else%
- \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
- \edef\pgf@sh@@@temp{%
- \noexpand\def\noexpand\calloutpointeranchor{%
- \noexpand\pgf@x\the\pgf@x%
- \noexpand\pgf@y\the\pgf@y%
- }%
- }%
- \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}
- \fi%
- \fi%
- \pgfpathmoveto{\calloutpointer}%
- \pgfpathlineto{\aftercalloutpointer}%
- \ifdim\aftercalloutangle pt<\beforecalloutangle pt\relax%
- \pgfpatharc{\aftercalloutangle}{\beforecalloutangle}{\xpathradius and \ypathradius}%
- \else%
- \pgfpatharc{\aftercalloutangle}{360}{\xpathradius and \ypathradius}%
- \pgfpatharc{0}{\beforecalloutangle}{\xpathradius and \ypathradius}%
- \fi%
- \pgfpathclose%
- }%
+ \ellipsecalloutpoints%
+ \ifpgf@lib@callout@absolutepointer%
+ \pgfextract@process\calloutpointer{%
+ \pgfpointanchor{pgf@lib@callout@pointer}{center}%
+ }%
+ \pgf@lib@callouts@shortenpointer%
+ \pgf@lib@ellipsecallout@getpoints%
+ \calloutpointeranchor%
+ \ifx\pgf@node@name\pgfutil@empty%
+ \else%
+ \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
+ \edef\pgf@sh@@@temp{%
+ \noexpand\def\noexpand\calloutpointeranchor{%
+ \noexpand\pgf@x\the\pgf@x%
+ \noexpand\pgf@y\the\pgf@y%
+ }%
+ }%
+ \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}
+ \fi%
+ \fi%
+ \pgfpathmoveto{\calloutpointer}%
+ \pgfpathlineto{\aftercalloutpointer}%
+ \ifdim\aftercalloutangle pt<\beforecalloutangle pt\relax%
+ \pgfpatharc{\aftercalloutangle}{\beforecalloutangle}{\xpathradius and \ypathradius}%
+ \else%
+ \pgfpatharc{\aftercalloutangle}{360}{\xpathradius and \ypathradius}%
+ \pgfpatharc{0}{\beforecalloutangle}{\xpathradius and \ypathradius}%
+ \fi%
+ \pgfpathclose%
+ }%
\anchorborder{%
- \pgfextract@process\externalpoint{}%
- \ellipsecalloutpoints%
- \pgfpointadd{\pgfpointborderellipse{\externalpoint}{\pgfpoint{\xradius}{\yradius}}%
- }{\centerpoint}%
+ \pgfextract@process\externalpoint{}%
+ \ellipsecalloutpoints%
+ \pgfpointadd{\pgfpointborderellipse{\externalpoint}{\pgfpoint{\xradius}{\yradius}}%
+ }{\centerpoint}%
}%
-}
+}%
% Internal macro for calculating the points for the
% ellipse callout pointer.
@@ -289,334 +289,334 @@
% \ypathradius - the y radius of the ellipse.
%
\def\pgf@lib@ellipsecallout@getpoints{%
- \pgfextract@process\borderpoint{%
- \pgfpointborderellipse{%
- \centerpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \calloutpointer%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@y-\pgf@ya%
- }{\pgfqpoint{\xpathradius}{\ypathradius}}%
- }%
- \pgfmathangleonellipse{\borderpoint}{\xpathradius and \ypathradius}%
- \pgfutil@tempdima\pointerarc pt\relax%
- \pgfutil@tempdimb\pgfmathresult pt\relax%
- \advance\pgfutil@tempdimb-.5\pgfutil@tempdima%
- \ifdim\pgfutil@tempdimb<0pt\relax%
- \advance\pgfutil@tempdimb360pt\relax%
- \fi%
- \edef\beforecalloutangle{\pgfmath@tonumber{\pgfutil@tempdimb}}%
- \advance\pgfutil@tempdimb\pgfutil@tempdima%
- \ifdim\pgfutil@tempdimb<360pt\relax%
- \else%
- \advance\pgfutil@tempdimb-360pt\relax%
- \fi%
- \edef\aftercalloutangle{\pgfmath@tonumber{\pgfutil@tempdimb}}%
- %
- \pgfextract@process\beforecalloutpointer{%
- \pgfpointadd{\centerpoint}{%
- \pgfpointpolar{\beforecalloutangle}{\xpathradius and \ypathradius}%
- }%
- }%
- \pgfextract@process\aftercalloutpointer{%
- \pgfpointadd{\centerpoint}{%
- \pgfpointpolar{\aftercalloutangle}{\xpathradius and \ypathradius}%
- }%
- }%
- %
- % Calculate the pointer anchor.
- %
- \pgf@lib@callouts@pointeranchor%
-}
+ \pgfextract@process\borderpoint{%
+ \pgfpointborderellipse{%
+ \centerpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \calloutpointer%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ }{\pgfqpoint{\xpathradius}{\ypathradius}}%
+ }%
+ \pgfmathangleonellipse{\borderpoint}{\xpathradius and \ypathradius}%
+ \pgfutil@tempdima\pointerarc pt\relax%
+ \pgfutil@tempdimb\pgfmathresult pt\relax%
+ \advance\pgfutil@tempdimb-.5\pgfutil@tempdima%
+ \ifdim\pgfutil@tempdimb<0pt\relax%
+ \advance\pgfutil@tempdimb360pt\relax%
+ \fi%
+ \edef\beforecalloutangle{\pgfmath@tonumber{\pgfutil@tempdimb}}%
+ \advance\pgfutil@tempdimb\pgfutil@tempdima%
+ \ifdim\pgfutil@tempdimb<360pt\relax%
+ \else%
+ \advance\pgfutil@tempdimb-360pt\relax%
+ \fi%
+ \edef\aftercalloutangle{\pgfmath@tonumber{\pgfutil@tempdimb}}%
+ %
+ \pgfextract@process\beforecalloutpointer{%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointpolar{\beforecalloutangle}{\xpathradius and \ypathradius}%
+ }%
+ }%
+ \pgfextract@process\aftercalloutpointer{%
+ \pgfpointadd{\centerpoint}{%
+ \pgfpointpolar{\aftercalloutangle}{\xpathradius and \ypathradius}%
+ }%
+ }%
+ %
+ % Calculate the pointer anchor.
+ %
+ \pgf@lib@callouts@pointeranchor%
+}%
-% If the callout pointer is very pointed and stroked, the anchor will be
+% If the callout pointer is very pointed and stroked, the anchor will be
% miles away from the end of the pointer which will (typically) be
-% bevelled.
+% bevelled.
% Using outer sep=0pt is one solution, however, another is provided
% using this special key:
%
% /pgf/callout pointer anchor aspect
-%
+%
% which takes a value from 0 (ignore any outer sep) to 1 (use
% the full outer sep).
-\pgfkeys{/pgf/callout pointer anchor aspect/.initial=1}
+\pgfkeys{/pgf/callout pointer anchor aspect/.initial=1}%
% Internal macro for calculating the anchor for the callout pointer.
%
% Requires the following to be set up (points are anti-clockwise)
%
-% \beforecalloutpointer - point on the border before the callout pointer
-% \calloutpointer
+% \beforecalloutpointer - point on the border before the callout pointer
+% \calloutpointer
% \aftercalloutpointer - point on the border after the callout pointer
% \outersep - the largest of the outer xsep or ysep.
%
\def\pgf@lib@callouts@pointeranchor{%
- \pgfutil@tempdimb\outersep\relax%
- %
- \pgfmathanglebetweenlines{\calloutpointer}{\aftercalloutpointer}{\calloutpointer}{\beforecalloutpointer}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \pgfmathcosec@{\pgfmathresult}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \pgfmathanglebetweenpoints{\calloutpointer}{\aftercalloutpointer}%
- \advance\pgfutil@tempdima\pgfmathresult pt\relax%
- \advance\pgfutil@tempdima180pt\relax%
- %
- \pgfextract@process\calloutpointeranchor{%
- \pgfpointadd{%
- \pgfmathparse{\pgfkeysvalueof{/pgf/callout pointer anchor aspect}}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- }{%
- \calloutpointer%
- }%
- }%
+ \pgfutil@tempdimb\outersep\relax%
+ %
+ \pgfmathanglebetweenlines{\calloutpointer}{\aftercalloutpointer}{\calloutpointer}{\beforecalloutpointer}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \pgfmathanglebetweenpoints{\calloutpointer}{\aftercalloutpointer}%
+ \advance\pgfutil@tempdima\pgfmathresult pt\relax%
+ \advance\pgfutil@tempdima180pt\relax%
+ %
+ \pgfextract@process\calloutpointeranchor{%
+ \pgfpointadd{%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/callout pointer anchor aspect}}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ }{%
+ \calloutpointer%
+ }%
+ }%
}%
\def\pgf@lib@callouts@shortenpointer{%
- \pgfextract@process\calloutpointer{%
- \pgfmathanglebetweenpoints{\calloutpointer}{\centerpoint}%
- \let\angle\pgfmathresult%
- \pgfmathsin@{\angle}%
- \let\sinpointerangle\pgfmathresult%
- \pgfmathcos@{\angle}%
- \let\cospointerangle\pgfmathresult%
- \pgfpointadd{\calloutpointer}{%
- \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/callout pointer shorten}}%
- \pgf@x\cospointerangle\pgfutil@tempdima%
- \pgf@y\sinpointerangle\pgfutil@tempdima%
- }%
- }%
+ \pgfextract@process\calloutpointer{%
+ \pgfmathanglebetweenpoints{\calloutpointer}{\centerpoint}%
+ \let\angle\pgfmathresult%
+ \pgfmathsin@{\angle}%
+ \let\sinpointerangle\pgfmathresult%
+ \pgfmathcos@{\angle}%
+ \let\cospointerangle\pgfmathresult%
+ \pgfpointadd{\calloutpointer}{%
+ \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/callout pointer shorten}}%
+ \pgf@x\cospointerangle\pgfutil@tempdima%
+ \pgf@y\sinpointerangle\pgfutil@tempdima%
+ }%
+ }%
}%
-
+
\pgfdeclareshape{rectangle callout}{%
- \savedmacro\rectanglecalloutpoints{%
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@x<.5\pgf@xa%
- \pgf@x.5\pgf@xa%
- \fi%
- \edef\xtemp{\the\pgf@x}%
- \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@ya%
- \pgf@y.5\pgf@ya%
- \fi%
- \edef\ytemp{\the\pgf@y}%
- \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- %
- \edef\xlength{\the\pgf@x}%
- \edef\ylength{\the\pgf@y}%
- \addtosavedmacro\xlength%
- \addtosavedmacro\ylength%
- %
- \pgfmathsetlengthmacro\pointerwidth{\pgfkeysvalueof{/pgf/callout pointer width}}%
- \addtosavedmacro\pointerwidth%
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- %
- % Process the relative callout pointer.
- %
- \ifpgf@lib@callout@absolutepointer%
- \else%
- \pgfextract@process\calloutpointer{%
- \pgfextract@process\borderpoint{%
- \expandafter\pgfpointborderrectangle\expandafter{\pgf@lib@callout@relativepointer}%
- {\pgfqpoint{\xtemp}{\ytemp}}%
- }%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
- \let\pointerangle\pgfmathresult%
- \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \edef\pointerradius{\pgfmathresult pt}%
- \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgf@lib@callouts@shortenpointer%
- \addtosavedmacro\calloutpointer%
- \pgf@lib@rectanglecallout@pointer%
- \addtosavedmacro\calloutpointeranchor%
- \addtosavedmacro\beforecalloutpointer%
- \addtosavedmacro\aftercalloutpointer%
- \addtosavedmacro\firstpoint%
- \addtosavedmacro\secondpoint%
- \addtosavedmacro\thirdpoint%
- \addtosavedmacro\fourthpoint%
- \fi%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt\relax%
- }
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5em}%
- }
- \anchor{center}{\centerpoint}
- \anchor{mid}{\midpoint}
- \anchor{mid east}{%
- \rectanglecalloutpoints%
- \midpoint%
- \advance\pgf@x\xlength\relax%
- }
- \anchor{mid west}{%
- \rectanglecalloutpoints%
- \midpoint%
- \advance\pgf@x-\xlength\relax%
- }
- \anchor{base}{\basepoint}
- \anchor{base east}{%
- \rectanglecalloutpoints%
- \basepoint%
- \advance\pgf@x\xlength\relax%
- }
- \anchor{base west}{%
- \rectanglecalloutpoints%
- \basepoint%
- \advance\pgf@x-\xlength\relax%
- }
- \anchor{north}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@y\ylength\relax%
- }%
- \anchor{south}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@y-\ylength\relax%
- }%
- \anchor{east}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x\xlength\relax%
- }%
- \anchor{west}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x-\xlength\relax%
- }%
- \anchor{north east}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x\xlength\relax%
- \advance\pgf@y\ylength\relax%
- }%
- \anchor{south west}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x-\xlength\relax%
- \advance\pgf@y-\ylength\relax%
- }%
- \anchor{south east}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x\xlength\relax%
- \advance\pgf@y-\ylength\relax%
- }%
- \anchor{north west}{%
- \rectanglecalloutpoints%
- \centerpoint%
- \advance\pgf@x-\xlength\relax%
- \advance\pgf@y\ylength\relax%
- }%
- \anchor{pointer}{%
- \rectanglecalloutpoints%
- \calloutpointeranchor%
- }%
- \backgroundpath{%
- \rectanglecalloutpoints%
- \pgf@x\xlength\relax%
- \pgf@y\ylength\relax%
- \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\xtemp{\the\pgf@x}%
- \edef\ytemp{\the\pgf@y}%
- %
- % The absolute pointer must be calculated here because the
- % anchor of the shape (which is calculated after the saved
- % macros and points) affects how the pointer joins the
- % main rectangle.
- %
- \ifpgf@lib@callout@absolutepointer%
- \pgfextract@process\calloutpointer{%
- \pgfpointanchor{pgf@lib@callout@pointer}{center}%
- }%
- \pgf@lib@callouts@shortenpointer%
- \pgfmathsetlengthmacro\pointerwidth{\pgfkeysvalueof{/pgf/callout pointer width}}%
- \pgf@lib@rectanglecallout@pointer%
- %
- % \pgf@node@name = the shape name (from \pgfmultipartnode)
- %
- \ifx\pgf@node@name\pgfutil@empty%
- \else%
- %
- % Now hack an extra saved anchor \calloutpointeranchor,
- % with the new anchor for the callout pointer.
- %
- \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
- \edef\pgf@sh@@@temp{%
- \noexpand\def\noexpand\calloutpointeranchor{%
- \noexpand\pgf@x\the\pgf@x%
- \noexpand\pgf@y\the\pgf@y%
- }%
- }%
- \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}%
- \fi%
- \fi%
- {%
- \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
- \pgfpathmoveto{\beforecalloutpointer}%
- }%
- \pgfpathlineto{\calloutpointer}%
- {%
- \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
- \pgfpathlineto{\aftercalloutpointer}%
- }%
- {%
- \pgftransformshift{\centerpoint}%
- \pgfpathlineto{\firstpoint}%
- \pgfpathlineto{\secondpoint}%
- \pgfpathlineto{\thirdpoint}%
- \pgfpathlineto{\fourthpoint}%
- {%
- \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
- \pgfpathclose%
- }%
- }
- }
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \rectanglecalloutpoints%
- \pgfpointadd{\centerpoint}%
- {%
- \pgfpointborderrectangle{\pgfpointadd{\centerpoint}{\externalpoint}}%
- {\pgfqpoint{\xlength}{\ylength}}%
- }%
- }%
-}
+ \savedmacro\rectanglecalloutpoints{%
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \edef\xtemp{\the\pgf@x}%
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \pgf@y.5\pgf@ya%
+ \fi%
+ \edef\ytemp{\the\pgf@y}%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ %
+ \edef\xlength{\the\pgf@x}%
+ \edef\ylength{\the\pgf@y}%
+ \addtosavedmacro\xlength%
+ \addtosavedmacro\ylength%
+ %
+ \pgfmathsetlengthmacro\pointerwidth{\pgfkeysvalueof{/pgf/callout pointer width}}%
+ \addtosavedmacro\pointerwidth%
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ %
+ % Process the relative callout pointer.
+ %
+ \ifpgf@lib@callout@absolutepointer%
+ \else%
+ \pgfextract@process\calloutpointer{%
+ \pgfextract@process\borderpoint{%
+ \expandafter\pgfpointborderrectangle\expandafter{\pgf@lib@callout@relativepointer}%
+ {\pgfqpoint{\xtemp}{\ytemp}}%
+ }%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
+ \let\pointerangle\pgfmathresult%
+ \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \edef\pointerradius{\pgfmathresult pt}%
+ \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgf@lib@callouts@shortenpointer%
+ \addtosavedmacro\calloutpointer%
+ \pgf@lib@rectanglecallout@pointer%
+ \addtosavedmacro\calloutpointeranchor%
+ \addtosavedmacro\beforecalloutpointer%
+ \addtosavedmacro\aftercalloutpointer%
+ \addtosavedmacro\firstpoint%
+ \addtosavedmacro\secondpoint%
+ \addtosavedmacro\thirdpoint%
+ \addtosavedmacro\fourthpoint%
+ \fi%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt\relax%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5em}%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \rectanglecalloutpoints%
+ \midpoint%
+ \advance\pgf@x\xlength\relax%
+ }%
+ \anchor{mid west}{%
+ \rectanglecalloutpoints%
+ \midpoint%
+ \advance\pgf@x-\xlength\relax%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \rectanglecalloutpoints%
+ \basepoint%
+ \advance\pgf@x\xlength\relax%
+ }%
+ \anchor{base west}{%
+ \rectanglecalloutpoints%
+ \basepoint%
+ \advance\pgf@x-\xlength\relax%
+ }%
+ \anchor{north}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@y\ylength\relax%
+ }%
+ \anchor{south}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@y-\ylength\relax%
+ }%
+ \anchor{east}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x\xlength\relax%
+ }%
+ \anchor{west}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x-\xlength\relax%
+ }%
+ \anchor{north east}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x\xlength\relax%
+ \advance\pgf@y\ylength\relax%
+ }%
+ \anchor{south west}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x-\xlength\relax%
+ \advance\pgf@y-\ylength\relax%
+ }%
+ \anchor{south east}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x\xlength\relax%
+ \advance\pgf@y-\ylength\relax%
+ }%
+ \anchor{north west}{%
+ \rectanglecalloutpoints%
+ \centerpoint%
+ \advance\pgf@x-\xlength\relax%
+ \advance\pgf@y\ylength\relax%
+ }%
+ \anchor{pointer}{%
+ \rectanglecalloutpoints%
+ \calloutpointeranchor%
+ }%
+ \backgroundpath{%
+ \rectanglecalloutpoints%
+ \pgf@x\xlength\relax%
+ \pgf@y\ylength\relax%
+ \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\xtemp{\the\pgf@x}%
+ \edef\ytemp{\the\pgf@y}%
+ %
+ % The absolute pointer must be calculated here because the
+ % anchor of the shape (which is calculated after the saved
+ % macros and points) affects how the pointer joins the
+ % main rectangle.
+ %
+ \ifpgf@lib@callout@absolutepointer%
+ \pgfextract@process\calloutpointer{%
+ \pgfpointanchor{pgf@lib@callout@pointer}{center}%
+ }%
+ \pgf@lib@callouts@shortenpointer%
+ \pgfmathsetlengthmacro\pointerwidth{\pgfkeysvalueof{/pgf/callout pointer width}}%
+ \pgf@lib@rectanglecallout@pointer%
+ %
+ % \pgf@node@name = the shape name (from \pgfmultipartnode)
+ %
+ \ifx\pgf@node@name\pgfutil@empty%
+ \else%
+ %
+ % Now hack an extra saved anchor \calloutpointeranchor,
+ % with the new anchor for the callout pointer.
+ %
+ \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
+ \edef\pgf@sh@@@temp{%
+ \noexpand\def\noexpand\calloutpointeranchor{%
+ \noexpand\pgf@x\the\pgf@x%
+ \noexpand\pgf@y\the\pgf@y%
+ }%
+ }%
+ \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}%
+ \fi%
+ \fi%
+ {%
+ \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
+ \pgfpathmoveto{\beforecalloutpointer}%
+ }%
+ \pgfpathlineto{\calloutpointer}%
+ {%
+ \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
+ \pgfpathlineto{\aftercalloutpointer}%
+ }%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathlineto{\firstpoint}%
+ \pgfpathlineto{\secondpoint}%
+ \pgfpathlineto{\thirdpoint}%
+ \pgfpathlineto{\fourthpoint}%
+ {%
+ \pgfsetcornersarced{\pgfqpoint{0pt}{0pt}}%
+ \pgfpathclose%
+ }%
+ }
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \rectanglecalloutpoints%
+ \pgfpointadd{\centerpoint}%
+ {%
+ \pgfpointborderrectangle{\pgfpointadd{\centerpoint}{\externalpoint}}%
+ {\pgfqpoint{\xlength}{\ylength}}%
+ }%
+ }%
+}%
@@ -632,145 +632,145 @@
% \pointerwidth - the width of the pointer.
%
\def\pgf@lib@rectanglecallout@pointer{%
- %
- % Ensure that the pointer never connects to the main shape
- % too near to a corner. This is done for two reasons:
- % 1. It can look ugly.
- % 2. If the corners are rounded, a mess can result.
- %
- \pgfextract@process\borderpoint{%
- \pgfpointborderrectangle{%
- \centerpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \calloutpointer%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@y-\pgf@ya%
- }{\pgfqpoint{\xtemp}{\ytemp}}%
- }%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
- \let\borderangle\pgfmathresult%
- %
- \pgfutil@tempdima\pointerwidth\relax%
- \pgf@xa\xtemp\relax%
- \advance\pgf@xa-\pgfutil@tempdima%
- \pgf@ya\ytemp\relax%
- \advance\pgf@ya-\pgfutil@tempdima%
- %
- \pgf@process{%
- \pgfutil@ifundefined{pgf@corner@arc}{\pgfpointorigin}{%
- \expandafter\pgfqpoint\pgf@corner@arc}%
- }%
- \advance\pgf@xa-\pgf@x%
- \advance\pgf@ya-\pgf@y%
- %
- \borderpoint%
- \pgf@xb\pgf@x%
- \pgf@yb\pgf@y%
- %
- \pgf@xc0pt\relax%
- \pgf@yc0pt\relax%
- %
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{\xtemp}{\ytemp}}%
- \ifdim\borderangle pt<\pgfmathresult pt\relax%
- \pgf@yc.5\pgfutil@tempdima%
- \ifdim\pgf@yb>\pgf@ya%
- \pgf@yb\pgf@ya%
- \fi%
- %
- % Establish the order for drawing the rectangle corners.
- %
- \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
- \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
- \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
- \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
- \else%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{-\xtemp}{\ytemp}}%
- \ifdim\borderangle pt<\pgfmathresult pt\relax%
- \pgf@xc-.5\pgfutil@tempdima%
- \ifdim\pgf@xb>\pgf@xa%
- \pgf@xb\pgf@xa%
- \else%
- \ifdim\pgf@xb<-\pgf@xa%
- \pgf@xb-\pgf@xa%
- \fi%
- \fi%
- \edef\firstpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
- \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
- \edef\thirdpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
- \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
- \else%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{-\xtemp}{-\ytemp}}%
- \ifdim\borderangle pt<\pgfmathresult pt\relax%
- \pgf@yc-.5\pgfutil@tempdima%
- \ifdim\pgf@yb>\pgf@ya%
- \pgf@yb\pgf@ya%
- \else%
- \ifdim\pgf@yb<-\pgf@ya%
- \pgf@yb-\pgf@ya%
- \fi%
- \fi%
- \edef\firstpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
- \edef\secondpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
- \edef\thirdpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
- \edef\fourthpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
- \else%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{\xtemp}{-\ytemp}}%
- \ifdim\borderangle pt<\pgfmathresult pt\relax%
- \pgf@xc.5\pgfutil@tempdima%
- \ifdim\pgf@xb>\pgf@xa%
- \pgf@xb\pgf@xa%
- \else%
- \ifdim\pgf@xb<-\pgf@xa%
- \pgf@xb-\pgf@xa%
- \fi%
- \fi%
- \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
- \edef\secondpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
- \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
- \edef\fourthpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
- \else%
- \pgf@yc.5\pgfutil@tempdima%
- \ifdim\pgf@yb<-\pgf@ya%
- \pgf@yb-\pgf@ya%
- \fi%
- \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
- \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
- \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
- \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
- \fi%
- \fi%
- \fi%
- \fi%
- \pgfextract@process\beforecalloutpointer{%
- \centerpoint%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- \advance\pgf@x-\pgf@xc%
- \advance\pgf@y-\pgf@yc%
- }%
- \pgfextract@process\aftercalloutpointer{%
- \centerpoint%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- \advance\pgf@x\pgf@xc%
- \advance\pgf@y\pgf@yc%
- }%
- %
- % Now calculate the pointer anchor.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x>\pgf@y%
- \edef\outersep{\the\pgf@x}%
- \else%
- \edef\outersep{\the\pgf@y}%
- \fi%
- \pgf@lib@callouts@pointeranchor%
-}
+ %
+ % Ensure that the pointer never connects to the main shape
+ % too near to a corner. This is done for two reasons:
+ % 1. It can look ugly.
+ % 2. If the corners are rounded, a mess can result.
+ %
+ \pgfextract@process\borderpoint{%
+ \pgfpointborderrectangle{%
+ \centerpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \calloutpointer%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ }{\pgfqpoint{\xtemp}{\ytemp}}%
+ }%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
+ \let\borderangle\pgfmathresult%
+ %
+ \pgfutil@tempdima\pointerwidth\relax%
+ \pgf@xa\xtemp\relax%
+ \advance\pgf@xa-\pgfutil@tempdima%
+ \pgf@ya\ytemp\relax%
+ \advance\pgf@ya-\pgfutil@tempdima%
+ %
+ \pgf@process{%
+ \pgfutil@ifundefined{pgf@corner@arc}{\pgfpointorigin}{%
+ \expandafter\pgfqpoint\pgf@corner@arc}%
+ }%
+ \advance\pgf@xa-\pgf@x%
+ \advance\pgf@ya-\pgf@y%
+ %
+ \borderpoint%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ %
+ \pgf@xc0pt\relax%
+ \pgf@yc0pt\relax%
+ %
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{\xtemp}{\ytemp}}%
+ \ifdim\borderangle pt<\pgfmathresult pt\relax%
+ \pgf@yc.5\pgfutil@tempdima%
+ \ifdim\pgf@yb>\pgf@ya%
+ \pgf@yb\pgf@ya%
+ \fi%
+ %
+ % Establish the order for drawing the rectangle corners.
+ %
+ \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
+ \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
+ \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
+ \else%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{-\xtemp}{\ytemp}}%
+ \ifdim\borderangle pt<\pgfmathresult pt\relax%
+ \pgf@xc-.5\pgfutil@tempdima%
+ \ifdim\pgf@xb>\pgf@xa%
+ \pgf@xb\pgf@xa%
+ \else%
+ \ifdim\pgf@xb<-\pgf@xa%
+ \pgf@xb-\pgf@xa%
+ \fi%
+ \fi%
+ \edef\firstpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
+ \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \edef\thirdpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
+ \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
+ \else%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \ifdim\borderangle pt<\pgfmathresult pt\relax%
+ \pgf@yc-.5\pgfutil@tempdima%
+ \ifdim\pgf@yb>\pgf@ya%
+ \pgf@yb\pgf@ya%
+ \else%
+ \ifdim\pgf@yb<-\pgf@ya%
+ \pgf@yb-\pgf@ya%
+ \fi%
+ \fi%
+ \edef\firstpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \edef\secondpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
+ \edef\thirdpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
+ \edef\fourthpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
+ \else%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfqpoint{\xtemp}{-\ytemp}}%
+ \ifdim\borderangle pt<\pgfmathresult pt\relax%
+ \pgf@xc.5\pgfutil@tempdima%
+ \ifdim\pgf@xb>\pgf@xa%
+ \pgf@xb\pgf@xa%
+ \else%
+ \ifdim\pgf@xb<-\pgf@xa%
+ \pgf@xb-\pgf@xa%
+ \fi%
+ \fi%
+ \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
+ \edef\secondpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
+ \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
+ \edef\fourthpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \else%
+ \pgf@yc.5\pgfutil@tempdima%
+ \ifdim\pgf@yb<-\pgf@ya%
+ \pgf@yb-\pgf@ya%
+ \fi%
+ \edef\firstpoint{\noexpand\pgfqpoint{\xtemp}{\ytemp}}%
+ \edef\secondpoint{\noexpand\pgfqpoint{-\xtemp}{\ytemp}}%
+ \edef\thirdpoint{\noexpand\pgfqpoint{-\xtemp}{-\ytemp}}%
+ \edef\fourthpoint{\noexpand\pgfqpoint{\xtemp}{-\ytemp}}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfextract@process\beforecalloutpointer{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ \advance\pgf@x-\pgf@xc%
+ \advance\pgf@y-\pgf@yc%
+ }%
+ \pgfextract@process\aftercalloutpointer{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ \advance\pgf@x\pgf@xc%
+ \advance\pgf@y\pgf@yc%
+ }%
+ %
+ % Now calculate the pointer anchor.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x>\pgf@y%
+ \edef\outersep{\the\pgf@x}%
+ \else%
+ \edef\outersep{\the\pgf@y}%
+ \fi%
+ \pgf@lib@callouts@pointeranchor%
+}%
-% Internal macro for parsing the size of
+% Internal macro for parsing the size of
% the cloud callout pointer.
%
% \pgf@x and \pgf@y should be set up as the
@@ -779,173 +779,173 @@
% \pgf@xa and \pgf@ya are returned appropriately.
%
\def\pgf@lib@callout@setpointersize#1{%
- \edef\pgf@lib@callout@temp{#1}%
- \edef\pgf@marshall{\noexpand\pgfutil@in@{of callout}{\pgf@lib@callout@temp}}%
- \pgf@marshall%
- \ifpgfutil@in@%
- \expandafter\pgf@xa\expandafter\pgf@lib@callout@setpointerrelativesize%
- \pgf@lib@callout@temp\pgf@lib@stop\pgf@x%
- \expandafter\pgf@ya\expandafter\pgf@lib@callout@setpointerrelativesize%
- \pgf@lib@callout@temp\pgf@lib@stop\pgf@y%
- \else%
- \edef\pgf@marshall{\noexpand\pgfutil@in@{and}{\pgf@lib@callout@temp}}%
- \pgf@marshall%
- \ifpgfutil@in@%
- \expandafter\pgf@lib@callout@setpointerbothsizes\pgf@lib@callout@temp\pgf@lib@stop%
- \else%
- \pgfmathsetlength\pgf@xa{#1}%
- \pgfmathsetlength\pgf@ya{#1}%
- \fi%
- \fi%
-}
+ \edef\pgf@lib@callout@temp{#1}%
+ \edef\pgf@marshall{\noexpand\pgfutil@in@{of callout}{\pgf@lib@callout@temp}}%
+ \pgf@marshall%
+ \ifpgfutil@in@%
+ \expandafter\pgf@xa\expandafter\pgf@lib@callout@setpointerrelativesize%
+ \pgf@lib@callout@temp\pgf@lib@stop\pgf@x%
+ \expandafter\pgf@ya\expandafter\pgf@lib@callout@setpointerrelativesize%
+ \pgf@lib@callout@temp\pgf@lib@stop\pgf@y%
+ \else%
+ \edef\pgf@marshall{\noexpand\pgfutil@in@{and}{\pgf@lib@callout@temp}}%
+ \pgf@marshall%
+ \ifpgfutil@in@%
+ \expandafter\pgf@lib@callout@setpointerbothsizes\pgf@lib@callout@temp\pgf@lib@stop%
+ \else%
+ \pgfmathsetlength\pgf@xa{#1}%
+ \pgfmathsetlength\pgf@ya{#1}%
+ \fi%
+ \fi%
+}%
\def\pgf@lib@callout@setpointerrelativesize#1of callout#2\pgf@lib@stop{#1}%
\def\pgf@lib@callout@setpointerbothsizes#1and#2\pgf@lib@stop{%
- \pgfmathsetlength\pgf@xa{#2}%
- \pgfmathsetlength\pgf@ya{#2}%
-}
+ \pgfmathsetlength\pgf@xa{#2}%
+ \pgfmathsetlength\pgf@ya{#2}%
+}%
% Shape: cloud callout.
%
\pgfdeclareshape{cloud callout}{%
- \savedanchor\calloutpointer{%
- \pgfutil@ifundefined{pgf@sh@s@cloud}{%
- \pgferror{I cannot find the cloud shape. Please load the `symbol shapes' library}}{}%
- \pgf@sh@s@cloud%
- \pgf@sh@savedmacros%
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \ifpgf@lib@callout@absolutepointer%
- \else%
- \pgfextract@process\calloutpointer{%
- \pgfextract@process\borderpoint{%
- \expandafter\pgfpointborderellipse\expandafter{\pgf@lib@callout@relativepointer}%
- {\pgfqpoint{\xouterradius}{\youterradius}}%
- }%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
- \let\pointerangle\pgfmathresult%
- \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \edef\pointerradius{\pgfmathresult pt}%
- \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgf@lib@callouts@shortenpointer%
- \fi%
- }
- \anchor{pointer}{%
- \calloutpointer%
- }%
- \inheritsavedanchors[from=cloud]
- \inheritanchor[from=cloud]{center}
- \inheritanchor[from=cloud]{base}
- \inheritanchor[from=cloud]{mid}
- \inheritanchor[from=cloud]{north}
- \inheritanchor[from=cloud]{south}
- \inheritanchor[from=cloud]{east}
- \inheritanchor[from=cloud]{west}
- \inheritanchor[from=cloud]{north east}
- \inheritanchor[from=cloud]{south west}
- \inheritanchor[from=cloud]{south east}
- \inheritanchor[from=cloud]{north west}
- \inheritanchorborder[from=cloud]
- \backgroundpath{%
- \pgf@sh@bg@cloud%
- \ifpgf@lib@callout@absolutepointer%
- \pgfextract@process\calloutpointer{%
- \pgfpointanchor{pgf@lib@callout@pointer}{center}%
- }%
- \ifx\pgf@node@name\pgfutil@empty%
- \else%
- \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
- \edef\pgf@sh@@@temp{%
- \noexpand\def\noexpand\calloutpointeranchor{%
- \noexpand\pgf@x\the\pgf@x%
- \noexpand\pgf@y\the\pgf@y%
- }%
- }%
- \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}
- \fi%
- \fi%
- %
- \pgfextract@process\borderpoint{%
- \pgfpointadd{%
- \pgfpointborderellipse{\pgfpointdiff{\centerpoint}{\calloutpointer}}%
- {\pgfqpoint{\xouterradius}{\youterradius}}%
- }{\centerpoint}%
- }%
- \pgf@lib@callouts@shortenpointer%
- \pgfmathanglebetweenpoints{\calloutpointer}{\centerpoint}%
- \let\angle\pgfmathresult%
- \pgfmathsin@{\angle}%
- \let\sinpointerangle\pgfmathresult%
- \pgfmathcos@{\angle}%
- \let\cospointerangle\pgfmathresult%
- %
- \pgf@x\xouterradius\relax%
- \pgf@x2.0\pgf@x%
- \pgf@y\yinnerradius\relax%
- \pgf@y2.0\pgf@y%
- \pgf@lib@callout@setpointersize{\pgfkeysvalueof{/pgf/callout pointer start size}}%
- \pgf@xb\pgf@xa%
- \pgf@yb\pgf@ya%
- \pgf@lib@callout@setpointersize{\pgfkeysvalueof{/pgf/callout pointer end size}}%
- \advance\pgf@xb-\pgf@xa%
- \advance\pgf@yb-\pgf@ya%
- %
- \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/callout pointer segments}}%
- \divide\pgf@xb\c@pgf@counta%
- \divide\pgf@yb\c@pgf@counta%
- %
- \pgf@process{\pgfpointdiff{\borderpoint}{\calloutpointer}}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \divide\pgfutil@tempdima\c@pgf@counta%
- %
- \pgfutil@tempdimb0pt\relax%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\c@pgf@counta%
- \else%
- {%
- \pgf@xa.5\pgf@xa%
- \pgf@ya.5\pgf@ya%
- \edef\tempxradius{\the\pgf@xa}%
- \edef\tempyradius{\the\pgf@ya}%
- \pgfpathellipse%
- {%
- \calloutpointer%
- \advance\pgf@x\cospointerangle\pgfutil@tempdimb%
- \advance\pgf@y\sinpointerangle\pgfutil@tempdimb%
- }%
- {\pgfqpoint{\tempxradius}{0pt}}{\pgfqpoint{0pt}{\tempyradius}}%
- }%
- \advance\pgf@xa\pgf@xb%
- \advance\pgf@ya\pgf@yb%
- \advance\pgfutil@tempdimb\pgfutil@tempdima%
- \repeatpgfmathloop%
- }%
- %
- % Hack the puff anchors for the callout.
- %
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@cloud callout\endcsname{%
- \c@pgf@counta\puffs\relax%
- \pgfmathloop%
- \ifnum\c@pgf@counta>0\relax%
- \pgfutil@ifundefined{pgf@anchor@cloud callout@puff\space\the\c@pgf@counta}{%
- \expandafter\xdef\csname pgf@anchor@cloud callout@puff\space\the\c@pgf@counta\endcsname{%
- \noexpand\pgf@sh@@cloudpuffanchor{\the\c@pgf@counta}%
- }%
- }{\c@pgf@counta0\relax}%
- \advance\c@pgf@counta-1\relax%
- \repeatpgfmathloop%
- }%
-}
+ \savedanchor\calloutpointer{%
+ \pgfutil@ifundefined{pgf@sh@s@cloud}{%
+ \pgferror{I cannot find the cloud shape. Please load the `symbol shapes' library}}{}%
+ \pgf@sh@s@cloud%
+ \pgf@sh@savedmacros%
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \ifpgf@lib@callout@absolutepointer%
+ \else%
+ \pgfextract@process\calloutpointer{%
+ \pgfextract@process\borderpoint{%
+ \expandafter\pgfpointborderellipse\expandafter{\pgf@lib@callout@relativepointer}%
+ {\pgfqpoint{\xouterradius}{\youterradius}}%
+ }%
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\borderpoint}%
+ \let\pointerangle\pgfmathresult%
+ \expandafter\pgf@process\expandafter{\pgf@lib@callout@relativepointer}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \edef\pointerradius{\pgfmathresult pt}%
+ \pgfpointadd{\borderpoint}{\pgfqpointpolar{\pointerangle}{\pointerradius}}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgf@lib@callouts@shortenpointer%
+ \fi%
+ }%
+ \anchor{pointer}{%
+ \calloutpointer%
+ }%
+ \inheritsavedanchors[from=cloud]%
+ \inheritanchor[from=cloud]{center}%
+ \inheritanchor[from=cloud]{base}%
+ \inheritanchor[from=cloud]{mid}%
+ \inheritanchor[from=cloud]{north}%
+ \inheritanchor[from=cloud]{south}%
+ \inheritanchor[from=cloud]{east}%
+ \inheritanchor[from=cloud]{west}%
+ \inheritanchor[from=cloud]{north east}%
+ \inheritanchor[from=cloud]{south west}%
+ \inheritanchor[from=cloud]{south east}%
+ \inheritanchor[from=cloud]{north west}%
+ \inheritanchorborder[from=cloud]%
+ \backgroundpath{%
+ \pgf@sh@bg@cloud%
+ \ifpgf@lib@callout@absolutepointer%
+ \pgfextract@process\calloutpointer{%
+ \pgfpointanchor{pgf@lib@callout@pointer}{center}%
+ }%
+ \ifx\pgf@node@name\pgfutil@empty%
+ \else%
+ \edef\pgf@sh@@temp{\noexpand\expandafter\noexpand\pgfutil@g@addto@macro\noexpand\csname pgf@sh@np@\pgf@node@name\noexpand\endcsname}%
+ \edef\pgf@sh@@@temp{%
+ \noexpand\def\noexpand\calloutpointeranchor{%
+ \noexpand\pgf@x\the\pgf@x%
+ \noexpand\pgf@y\the\pgf@y%
+ }%
+ }%
+ \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@@@temp}
+ \fi%
+ \fi%
+ %
+ \pgfextract@process\borderpoint{%
+ \pgfpointadd{%
+ \pgfpointborderellipse{\pgfpointdiff{\centerpoint}{\calloutpointer}}%
+ {\pgfqpoint{\xouterradius}{\youterradius}}%
+ }{\centerpoint}%
+ }%
+ \pgf@lib@callouts@shortenpointer%
+ \pgfmathanglebetweenpoints{\calloutpointer}{\centerpoint}%
+ \let\angle\pgfmathresult%
+ \pgfmathsin@{\angle}%
+ \let\sinpointerangle\pgfmathresult%
+ \pgfmathcos@{\angle}%
+ \let\cospointerangle\pgfmathresult%
+ %
+ \pgf@x\xouterradius\relax%
+ \pgf@x2.0\pgf@x%
+ \pgf@y\yinnerradius\relax%
+ \pgf@y2.0\pgf@y%
+ \pgf@lib@callout@setpointersize{\pgfkeysvalueof{/pgf/callout pointer start size}}%
+ \pgf@xb\pgf@xa%
+ \pgf@yb\pgf@ya%
+ \pgf@lib@callout@setpointersize{\pgfkeysvalueof{/pgf/callout pointer end size}}%
+ \advance\pgf@xb-\pgf@xa%
+ \advance\pgf@yb-\pgf@ya%
+ %
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/callout pointer segments}}%
+ \divide\pgf@xb\c@pgf@counta%
+ \divide\pgf@yb\c@pgf@counta%
+ %
+ \pgf@process{\pgfpointdiff{\borderpoint}{\calloutpointer}}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \divide\pgfutil@tempdima\c@pgf@counta%
+ %
+ \pgfutil@tempdimb0pt\relax%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\c@pgf@counta%
+ \else%
+ {%
+ \pgf@xa.5\pgf@xa%
+ \pgf@ya.5\pgf@ya%
+ \edef\tempxradius{\the\pgf@xa}%
+ \edef\tempyradius{\the\pgf@ya}%
+ \pgfpathellipse%
+ {%
+ \calloutpointer%
+ \advance\pgf@x\cospointerangle\pgfutil@tempdimb%
+ \advance\pgf@y\sinpointerangle\pgfutil@tempdimb%
+ }%
+ {\pgfqpoint{\tempxradius}{0pt}}{\pgfqpoint{0pt}{\tempyradius}}%
+ }%
+ \advance\pgf@xa\pgf@xb%
+ \advance\pgf@ya\pgf@yb%
+ \advance\pgfutil@tempdimb\pgfutil@tempdima%
+ \repeatpgfmathloop%
+ }%
+ %
+ % Hack the puff anchors for the callout.
+ %
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@cloud callout\endcsname{%
+ \c@pgf@counta\puffs\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \pgfutil@ifundefined{pgf@anchor@cloud callout@puff\space\the\c@pgf@counta}{%
+ \expandafter\xdef\csname pgf@anchor@cloud callout@puff\space\the\c@pgf@counta\endcsname{%
+ \noexpand\pgf@sh@@cloudpuffanchor{\the\c@pgf@counta}%
+ }%
+ }{\c@pgf@counta0\relax}%
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }%
+}%
\endinput
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex
index fc0b1d20aa5..ee41b301abc 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex
@@ -7,14 +7,14 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.code.tex,v 1.1 2008/06/26 16:55:55 tantau Exp $
+\ProvidesFileRCS{pgflibraryshapes.code.tex}
% Only the following are loaded by default and only for historical
-% reasons.
+% reasons.
-\usepgflibrary{shapes.geometric}
-\usepgflibrary{shapes.misc}
-\usepgflibrary{shapes.symbols}
+\usepgflibrary{shapes.geometric}%
+\usepgflibrary{shapes.misc}%
+\usepgflibrary{shapes.symbols}%
% Further libraries should be included directly
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex
index ae7ec0f3c4e..08ef867ff0e 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex
@@ -7,87 +7,87 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.geometric.code.tex,v 1.1 2008/06/26 16:55:55 tantau Exp $
+\ProvidesFileRCS{pgflibraryshapes.geometric.code.tex}
\pgfdeclareshape{ellipse}
%
% Draws a circle around the text
%
-{
+{%
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\radius{%
- %
- % Caculate ``height radius''
- %
+ %
+ % Calculate ``height radius''
+ %
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by.5\dp\pgfnodeparttextbox%
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y by\pgf@yb%
- %
- % Caculate ``width radius''
- %
+ %
+ % Calculate ``width radius''
+ %
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x by\pgf@xb%
- %
+ %
% Adjust
- %
+ %
\pgf@x=1.4142136\pgf@x%
\pgf@y=1.4142136\pgf@y%
- %
- % Adjust hieght, if necessary
- %
+ %
+ % Adjust height, if necessary
+ %
\pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}%
\ifdim\pgf@y<.5\pgf@yc%
\pgf@y=.5\pgf@yc%
\fi%
- %
+ %
% Adjust width, if necessary
- %
+ %
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
\ifdim\pgf@x<.5\pgf@xc%
\pgf@x=.5\pgf@xc%
\fi%
- %
+ %
% Add outer sep
- %
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\advance\pgf@x by\pgf@xb%
\advance\pgf@y by\pgf@yb%
- }
+ }%
%
% Anchors
- %
- \anchor{center}{\centerpoint}
- \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}
- \anchor{base}{\centerpoint\pgf@y=0pt}
+ %
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}%
+ \anchor{base}{\centerpoint\pgf@y=0pt}%
\anchor{north}
{
\pgf@process{\radius}
\pgf@ya=\pgf@y%
\pgf@process{\centerpoint}
\advance\pgf@y by\pgf@ya
- }
+ }%
\anchor{south}
{
\pgf@process{\radius}
\pgf@ya=\pgf@y%
\pgf@process{\centerpoint}
\advance\pgf@y by-\pgf@ya
- }
+ }%
\anchor{west}
{
\pgf@process{\radius}
\pgf@xa=\pgf@x%
\pgf@process{\centerpoint}
\advance\pgf@x by-\pgf@xa
- }
+ }%
\anchor{mid west}
{%
\pgf@process{\radius}
@@ -95,7 +95,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by-\pgf@xa%
\pgfmathsetlength\pgf@y{.5ex}
- }
+ }%
\anchor{base west}
{%
\pgf@process{\radius}
@@ -103,7 +103,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by-\pgf@xa%
\pgf@y=0pt
- }
+ }%
\anchor{north west}
{
\pgf@process{\radius}
@@ -112,7 +112,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by-0.707107\pgf@xa
\advance\pgf@y by0.707107\pgf@ya
- }
+ }%
\anchor{south west}
{
\pgf@process{\radius}
@@ -121,14 +121,14 @@
\pgf@process{\centerpoint}
\advance\pgf@x by-0.707107\pgf@xa
\advance\pgf@y by-0.707107\pgf@ya
- }
+ }%
\anchor{east}
{%
\pgf@process{\radius}
\pgf@xa=\pgf@x%
\pgf@process{\centerpoint}
\advance\pgf@x by\pgf@xa
- }
+ }%
\anchor{mid east}
{%
\pgf@process{\radius}
@@ -136,7 +136,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by\pgf@xa%
\pgfmathsetlength\pgf@y{.5ex}
- }
+ }%
\anchor{base east}
{%
\pgf@process{\radius}
@@ -144,7 +144,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by\pgf@xa%
\pgf@y=0pt
- }
+ }%
\anchor{north east}
{
\pgf@process{\radius}
@@ -153,7 +153,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by0.707107\pgf@xa
\advance\pgf@y by0.707107\pgf@ya
- }
+ }%
\anchor{south east}
{
\pgf@process{\radius}
@@ -162,7 +162,7 @@
\pgf@process{\centerpoint}
\advance\pgf@x by0.707107\pgf@xa
\advance\pgf@y by-0.707107\pgf@ya
- }
+ }%
\anchorborder{
\edef\pgf@marshal{%
\noexpand\pgfpointborderellipse
@@ -175,7 +175,7 @@
\centerpoint%
\advance\pgf@x by\pgf@xa%
\advance\pgf@y by\pgf@ya%
- }
+ }%
%
% Background path
@@ -185,13 +185,13 @@
\pgf@process{\radius}%
\pgfutil@tempdima=\pgf@x%
\pgfutil@tempdimb=\pgf@y%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\advance\pgfutil@tempdima by-\pgf@xb%
\advance\pgfutil@tempdimb by-\pgf@yb%
\pgfpathellipse{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}{\pgfqpoint{0pt}{\pgfutil@tempdimb}}%
- }
-}
+ }%
+}%
@@ -209,14 +209,14 @@
% /pgf/aspect : recommended width/height quotient.
%
\pgfkeys{/pgf/.cd,
- aspect/.code={\pgfsetshapeaspect{#1}},% this for tikz...
- shape aspect/.initial=1,% but this is consistent with other pgfset stuff.
- shape aspect/.code={%
- \pgfkeys{/pgf/aspect=#1}%
- \pgfkeyssetvalue{/pgf/shape aspect}{#1}
- }%
-}
-
+ aspect/.code={\pgfsetshapeaspect{#1}},% this for tikz...
+ shape aspect/.initial=1,% but this is consistent with other pgfset stuff.
+ shape aspect/.code={%
+ \pgfkeys{/pgf/aspect=#1}%
+ \pgfkeyssetvalue{/pgf/shape aspect}{#1}
+ }%
+}%
+
\def\pgfsetshapeaspect#1{%
\def\pgfshapeaspect{#1}%
@@ -226,13 +226,13 @@
\c@pgf@counta=\pgfutil@tempdima\relax% 8192*determinant
\pgfutil@tempdima=8192pt%
\divide\pgfutil@tempdima by\c@pgf@counta%
- \edef\pgfshapeaspectinverse{\pgf@sys@tonumber{\pgfutil@tempdima}}
-}
+ \edef\pgfshapeaspectinverse{\pgf@sys@tonumber{\pgfutil@tempdima}}%
+}%
-\pgfsetshapeaspect{1}
+\pgfsetshapeaspect{1}%
\pgfdeclareshape{diamond}
-{
+{%
\savedanchor\outernortheast{%
%
% Calculate width and height of the inner rectangle
@@ -255,13 +255,13 @@
% Check against minimum height/width
%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgf@xb=.5\pgf@xb%
+ \pgf@xb=.5\pgf@xb%
\ifdim\pgf@x<\pgf@xb%
% yes, too small. Enlarge...
\pgf@x=\pgf@xb%
\fi%
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
- \pgf@yb=.5\pgf@yb%
+ \pgf@yb=.5\pgf@yb%
\ifdim\pgf@y<\pgf@yb%
% yes, too small. Enlarge...
\pgf@y=\pgf@yb%
@@ -273,12 +273,12 @@
\advance\pgf@x by\pgf@xa%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
\advance\pgf@y by\pgf@ya%
- }
+ }%
\savedanchor\text{%
\pgf@x=-.5\wd\pgfnodeparttextbox%
\pgf@y=-.5\ht\pgfnodeparttextbox%
\advance\pgf@y by.5\dp\pgfnodeparttextbox%
- }
+ }%
%
% Anchors
@@ -288,18 +288,18 @@
\anchor{mid}{%
\pgf@process{\text}%
\pgf@x=0pt%
- \pgfmathsetlength\pgf@ya{.5ex}
+ \pgfmathsetlength\pgf@ya{.5ex}%
\advance\pgf@y by\pgf@ya%
- }
- \anchor{base}{\pgf@process{\text}\pgf@x=0pt }
- \anchor{north}{\pgf@process{\outernortheast}\pgf@x=0pt}
- \anchor{south}{\pgf@process{\outernortheast}\pgf@x=0pt\pgf@y=-\pgf@y}
- \anchor{west}{\pgf@process{\outernortheast}\pgf@x=-\pgf@x\pgf@y=0pt}
- \anchor{north west}{\pgf@process{\outernortheast}\pgf@x=-.5\pgf@x\pgf@y=.5\pgf@y}
- \anchor{south west}{\pgf@process{\outernortheast}\pgf@x=-.5\pgf@x\pgf@y=-.5\pgf@y}
- \anchor{east}{\pgf@process{\outernortheast}\pgf@y=0pt}
- \anchor{north east}{\pgf@process{\outernortheast}\pgf@x=.5\pgf@x\pgf@y=.5\pgf@y}
- \anchor{south east}{\pgf@process{\outernortheast}\pgf@x=.5\pgf@x\pgf@y=-.5\pgf@y}
+ }%
+ \anchor{base}{\pgf@process{\text}\pgf@x=0pt}%
+ \anchor{north}{\pgf@process{\outernortheast}\pgf@x=0pt}%
+ \anchor{south}{\pgf@process{\outernortheast}\pgf@x=0pt\pgf@y=-\pgf@y}%
+ \anchor{west}{\pgf@process{\outernortheast}\pgf@x=-\pgf@x\pgf@y=0pt}%
+ \anchor{north west}{\pgf@process{\outernortheast}\pgf@x=-.5\pgf@x\pgf@y=.5\pgf@y}%
+ \anchor{south west}{\pgf@process{\outernortheast}\pgf@x=-.5\pgf@x\pgf@y=-.5\pgf@y}%
+ \anchor{east}{\pgf@process{\outernortheast}\pgf@y=0pt}%
+ \anchor{north east}{\pgf@process{\outernortheast}\pgf@x=.5\pgf@x\pgf@y=.5\pgf@y}%
+ \anchor{south east}{\pgf@process{\outernortheast}\pgf@x=.5\pgf@x\pgf@y=-.5\pgf@y}%
\anchorborder{%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
@@ -320,7 +320,7 @@
{\noexpand\pgfqpoint{0pt}{\the\pgf@y}}%
}%
\pgf@process{\pgf@marshal}%
- }
+ }%
%
% Background path
@@ -338,8 +338,8 @@
\pgfpathlineto{\pgfqpoint{-\pgf@xc}{0pt}}%
\pgfpathlineto{\pgfqpoint{0pt}{-\pgf@yc}}%
\pgfpathclose%
- }
-}
+ }%
+}%
@@ -356,571 +356,569 @@
% /pgf/star point ratio : The ratio of the outer point and inner point radii.
\pgfkeys{/pgf/.cd,
- star points/.initial=5,
- star point height/.initial=.5cm,
- star point height/.code={%
- \def\pgf@lib@temp{#1}%
- \pgfkeyslet{/pgf/star point height}{\pgf@lib@temp}%
- \pgf@lib@shapes@starouterradiususesratiofalse%
- },
- star point ratio/.initial=1.5,
- star point ratio/.code={%
- \def\pgf@lib@temp{#1}%
- \pgfkeyslet{/pgf/star point ratio}{\pgf@lib@temp}%
- \pgf@lib@shapes@starouterradiususesratiotrue%
- },%
- star rotate/.style={/pgf/shape border rotate=#1}% For compatability with 1.18
-}
+ star points/.initial=5,
+ star point height/.initial=.5cm,
+ star point height/.code={%
+ \def\pgf@lib@temp{#1}%
+ \pgfkeyslet{/pgf/star point height}{\pgf@lib@temp}%
+ \pgf@lib@shapes@starouterradiususesratiofalse%
+ },
+ star point ratio/.initial=1.5,
+ star point ratio/.code={%
+ \def\pgf@lib@temp{#1}%
+ \pgfkeyslet{/pgf/star point ratio}{\pgf@lib@temp}%
+ \pgf@lib@shapes@starouterradiususesratiotrue%
+ },%
+ star rotate/.style={/pgf/shape border rotate=#1},% For compatibility with 1.18
+}%
% Shape star.
%
-\pgfdeclareshape{star}{
- \savedmacro\totalstarpoints{%
- \pgfmathsetcounter{pgf@counta}{\pgfkeysvalueof{/pgf/star points}}%
- \multiply\c@pgf@counta2\relax%
- \edef\totalstarpoints{\the\c@pgf@counta}%
- }
- \savedmacro\anglestep{%
- \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/star points}}%
- \let\anglestep\pgfmathresult%
- }
- \savedmacro\calculateradii{%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \ifdim\pgf@y>\pgf@x%
- \pgf@x\pgf@y%
- \fi%
- %
- % Calculate the incircle radius.
- %
- \pgf@x1.41421\pgf@x%
- \edef\innerradius{\the\pgf@x}%
- %
- % Calculate the circumcircle radius.
- %
- % Use the star point height or the star point ratio?
- %
- \ifpgf@lib@shapes@starouterradiususesratio%
- \pgfmathparse{\pgfkeysvalueof{/pgf/star point ratio}}%
- \expandafter\pgf@x\pgfmathresult\pgf@x%
- \else%
- \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/star point height}}%
- \fi%
- \pgf@xc\pgf@x%
- %
- % Accommodate the larger of the minimum height/width.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@ya>\pgf@xa%
- \pgf@xa\pgf@ya%
- \fi%
- \ifdim\pgf@x<.5\pgf@xa%
- \pgf@x.5\pgf@xa%
- \fi%
- \edef\outerradius{\the\pgf@x}%
- %
- % If the outer radius has been enlarged, adjust the inner radius...
- %
- \ifdim\pgf@x>\pgf@xc%
- %
- % ...using the star point ratio, or...
- %
- \ifpgf@lib@shapes@starouterradiususesratio%
- \pgfmathreciprocal{\pgfkeysvalueof{/pgf/star point ratio}}%
- \pgf@xa\pgfmathresult\pgf@x\relax%
- \edef\innerradius{\the\pgf@xa}%
- \else%
- %
- % The star point height.
- %
- \pgf@xa\pgf@x\relax%
- \pgfmathaddtolength\pgf@xa{-\pgfkeysvalueof{/pgf/star point height}}%
- \edef\innerradius{\the\pgf@xa}%
- \fi%
- \fi%
- \edef\outerradius{\the\pgf@x}%
- %
- % Now calculate the anchor radii from the outer sep.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@ya>\pgf@xa%
- \pgf@xa\pgf@ya%
- \fi
- %
- % Take into account the miter length...
- %
- \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/star points}}%
- \let\angletofirstpoint\pgfmathresult%
- \pgfmathmultiply@{\angletofirstpoint}{2}%
- \let\angletosecondpoint\pgfmathresult%
- %
- % ...for the outer radius...
- %
- \pgfmathanglebetweenlines%
- {\pgfqpointpolar{\angletofirstpoint}{\outerradius}}%
- {\pgfqpointpolar{\angletosecondpoint}{\innerradius}}%
- {\pgfqpointpolar{\angletofirstpoint}{\outerradius}}%
- {\pgfqpointpolar{0}{\innerradius}}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \pgfmathcosec@{\pgfmathresult}%
- \pgf@x\outerradius\relax%
- \advance\pgf@x\pgfmathresult\pgf@xa%
- \edef\anchorouterradius{\the\pgf@x}%
- %
- % ...and for the inner radius.
- %
- \pgfmathanglebetweenlines%
- {\pgfqpointpolar{\angletofirstpoint}{\innerradius}}%
- {\pgfqpointpolar{0}{\outerradius}}%
- {\pgfqpointpolar{\angletofirstpoint}{\innerradius}}%
- {\pgfqpointpolar{\angletosecondpoint}{\outerradius}}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \pgfmathcosec@{\pgfmathresult}%
- \pgf@x\innerradius\relax%
- \advance\pgf@x\pgfmathresult\pgf@xa%
- \edef\anchorinnerradius{\the\pgf@x}%
- %
- % Save all radii.
- %
- \addtosavedmacro{\innerradius}%
- \addtosavedmacro{\outerradius}%
- \addtosavedmacro{\anchorinnerradius}%
- \addtosavedmacro{\anchorouterradius}%
- }
- \savedmacro\startangle{%
- \pgfmathadd{90}{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \let\startangle\pgfmathresult%
- }
- %
- % Saved anchors.
- %
- \savedanchor{\centerpoint}{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor{\midpoint}{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % Other anchors.
- %
-%
- % Other anchors.
- %
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}%
- \anchor{base}{\centerpoint\pgf@y=0pt}%
- \anchor{north}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{0pt}{\anchorouterradius}}}%
- \anchor{south}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{0pt}{-\anchorouterradius}}}%
- \anchor{east}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{0pt}}}%
- \anchor{west}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{0pt}}}%
- \anchor{north east}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{\anchorouterradius}}}%
- \anchor{north west}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{\anchorouterradius}}}%
- \anchor{south east}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{-\anchorouterradius}}}%
- \anchor{south west}{%
- \calculateradii%
- \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{-\anchorouterradius}}}%
- %
- % Background path.
- %
- \backgroundpath{%
- \calculateradii%
- \let\angle\startangle%
- \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\startangle}{\outerradius}}}%
- \pgfmathloop%
- \pgfmathadd@{\angle}{\anglestep}%
- \let\angle\pgfmathresult%
- \ifnum\pgfmathcounter=\totalstarpoints%
- \pgfpathclose%
- \else%
- \ifodd\pgfmathcounter
- \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\innerradius}}}%
- \else%
- \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\outerradius}}}%
- \fi%
- \repeatpgfmathloop%
- }%
- %
- % Define points on the anchor border.
- %
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % Adjust the location of the external
- % point relative to \centerpoint.
- %
- \centerpoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Get the angle of the external point to the \centerpoint.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
- %
- % Locate the appropriate sides on the star border...
- %
- \pgfmathsubtract@{\pgfmathresult}{\startangle}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \pgfmathdivide@{\pgfmathresult}{\anglestep}%
- \pgfmathfloor@{\pgfmathresult}%
- \afterassignment\pgfmath@gobbletilpgfmath@
- \c@pgf@counta\pgfmathresult\relax\pgfmath@
- \pgfmathmultiply@{\pgfmathresult}{\anglestep}%
- \pgfmathadd@{\pgfmathresult}{\startangle}%
- \let\firstangle\pgfmathresult%
- \pgfmathadd@{\pgfmathresult}{\anglestep}%
- \let\secondangle\pgfmathresult%
- \calculateradii%
- %
- % ...and thus, the point on the star border.
- %
- \ifodd\c@pgf@counta
- \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\firstangle}{+\anchorinnerradius}}%
- }%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\secondangle}{+\anchorouterradius}}%
- }%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\firstangle}{+\anchorouterradius}}%
- }%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\secondangle}{+\anchorinnerradius}}%
- }%
- \fi%
- }
- %
- % Some hackery. This is needed if a star is positioned using
- % a `...point <n+1>' anchor, where n is the maximum number of
- % points of any previously drawn star.
- %
- \pgfutil@g@addto@macro\pgf@sh@s@star{%
- \c@pgf@counta\totalstarpoints\relax%
- \divide\c@pgf@counta2\relax%
- \pgfmathloop%
- \ifnum\c@pgf@counta>0\relax%
- \c@pgf@countb\c@pgf@counta\relax%
- \advance\c@pgf@countb-1\relax%
- \pgfutil@ifundefined{pgf@anchor@star@inner point\space\the\c@pgf@counta}{%
- \expandafter\xdef\csname pgf@anchor@star@inner point\space\the\c@pgf@counta\endcsname{%
- \noexpand\calculateradii%
- \noexpand\pgfmathmultiply@{\the\c@pgf@countb}{\noexpand\anglestep}%
- \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{2}%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
- \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
- \noexpand\pgfpointadd{\noexpand\centerpoint}%
- {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorinnerradius}}%
- }%
- \expandafter\xdef\csname pgf@anchor@star@outer point\space\the\c@pgf@counta\endcsname{%
- \noexpand\calculateradii%
- \noexpand\pgfmathmultiply@{\the\c@pgf@countb}{\noexpand\anglestep}%
- \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{2}%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
- \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
- \noexpand\pgfpointadd{\noexpand\centerpoint}%
- {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorouterradius}}%
- }%
- }{\c@pgf@counta0\relax}%
- \advance\c@pgf@counta-1\relax%
- \repeatpgfmathloop%
- }%
-}
+\pgfdeclareshape{star}{%
+ \savedmacro\totalstarpoints{%
+ \pgfmathsetcounter{pgf@counta}{\pgfkeysvalueof{/pgf/star points}}%
+ \multiply\c@pgf@counta2\relax%
+ \edef\totalstarpoints{\the\c@pgf@counta}%
+ }%
+ \savedmacro\anglestep{%
+ \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/star points}}%
+ \let\anglestep\pgfmathresult%
+ }%
+ \savedmacro\calculateradii{%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi%
+ %
+ % Calculate the incircle radius.
+ %
+ \pgf@x1.41421\pgf@x%
+ \edef\innerradius{\the\pgf@x}%
+ %
+ % Calculate the circumcircle radius.
+ %
+ % Use the star point height or the star point ratio?
+ %
+ \ifpgf@lib@shapes@starouterradiususesratio%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/star point ratio}}%
+ \expandafter\pgf@x\pgfmathresult\pgf@x%
+ \else%
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/star point height}}%
+ \fi%
+ \pgf@xc\pgf@x%
+ %
+ % Accommodate the larger of the minimum height/width.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \fi%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \edef\outerradius{\the\pgf@x}%
+ %
+ % If the outer radius has been enlarged, adjust the inner radius...
+ %
+ \ifdim\pgf@x>\pgf@xc%
+ %
+ % ...using the star point ratio, or...
+ %
+ \ifpgf@lib@shapes@starouterradiususesratio%
+ \pgfmathreciprocal{\pgfkeysvalueof{/pgf/star point ratio}}%
+ \pgf@xa\pgfmathresult\pgf@x\relax%
+ \edef\innerradius{\the\pgf@xa}%
+ \else%
+ %
+ % The star point height.
+ %
+ \pgf@xa\pgf@x\relax%
+ \pgfmathaddtolength\pgf@xa{-\pgfkeysvalueof{/pgf/star point height}}%
+ \edef\innerradius{\the\pgf@xa}%
+ \fi%
+ \fi%
+ \edef\outerradius{\the\pgf@x}%
+ %
+ % Now calculate the anchor radii from the outer sep.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \fi
+ %
+ % Take into account the miter length...
+ %
+ \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/star points}}%
+ \let\angletofirstpoint\pgfmathresult%
+ \pgfmathmultiply@{\angletofirstpoint}{2}%
+ \let\angletosecondpoint\pgfmathresult%
+ %
+ % ...for the outer radius...
+ %
+ \pgfmathanglebetweenlines%
+ {\pgfqpointpolar{\angletofirstpoint}{\outerradius}}%
+ {\pgfqpointpolar{\angletosecondpoint}{\innerradius}}%
+ {\pgfqpointpolar{\angletofirstpoint}{\outerradius}}%
+ {\pgfqpointpolar{0}{\innerradius}}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgf@x\outerradius\relax%
+ \advance\pgf@x\pgfmathresult\pgf@xa%
+ \edef\anchorouterradius{\the\pgf@x}%
+ %
+ % ...and for the inner radius.
+ %
+ \pgfmathanglebetweenlines%
+ {\pgfqpointpolar{\angletofirstpoint}{\innerradius}}%
+ {\pgfqpointpolar{0}{\outerradius}}%
+ {\pgfqpointpolar{\angletofirstpoint}{\innerradius}}%
+ {\pgfqpointpolar{\angletosecondpoint}{\outerradius}}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgf@x\innerradius\relax%
+ \advance\pgf@x\pgfmathresult\pgf@xa%
+ \edef\anchorinnerradius{\the\pgf@x}%
+ %
+ % Save all radii.
+ %
+ \addtosavedmacro{\innerradius}%
+ \addtosavedmacro{\outerradius}%
+ \addtosavedmacro{\anchorinnerradius}%
+ \addtosavedmacro{\anchorouterradius}%
+ }%
+ \savedmacro\startangle{%
+ \pgfmathadd{90}{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \let\startangle\pgfmathresult%
+ }%
+ %
+ % Saved anchors.
+ %
+ \savedanchor{\centerpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor{\midpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ %
+ % Other anchors.
+ %
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}%
+ \anchor{base}{\centerpoint\pgf@y=0pt}%
+ \anchor{north}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{0pt}{\anchorouterradius}}}%
+ \anchor{south}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{0pt}{-\anchorouterradius}}}%
+ \anchor{east}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{0pt}}}%
+ \anchor{west}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{0pt}}}%
+ \anchor{north east}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{\anchorouterradius}}}%
+ \anchor{north west}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{\anchorouterradius}}}%
+ \anchor{south east}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{\anchorouterradius}{-\anchorouterradius}}}%
+ \anchor{south west}{%
+ \calculateradii%
+ \csname pgf@anchor@star@border\endcsname{\pgfqpoint{-\anchorouterradius}{-\anchorouterradius}}}%
+ %
+ % Background path.
+ %
+ \backgroundpath{%
+ \calculateradii%
+ \let\angle\startangle%
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\startangle}{\outerradius}}}%
+ \pgfmathloop%
+ \pgfmathadd@{\angle}{\anglestep}%
+ \let\angle\pgfmathresult%
+ \ifnum\pgfmathcounter=\totalstarpoints%
+ \pgfpathclose%
+ \else%
+ \ifodd\pgfmathcounter
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\innerradius}}}%
+ \else%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\outerradius}}}%
+ \fi%
+ \repeatpgfmathloop%
+ }%
+ %
+ % Define points on the anchor border.
+ %
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % Adjust the location of the external
+ % point relative to \centerpoint.
+ %
+ \centerpoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Get the angle of the external point to the \centerpoint.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
+ %
+ % Locate the appropriate sides on the star border...
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\startangle}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \pgfmathdivide@{\pgfmathresult}{\anglestep}%
+ \pgfmathfloor@{\pgfmathresult}%
+ \afterassignment\pgfmath@gobbletilpgfmath@
+ \c@pgf@counta\pgfmathresult\relax\pgfmath@
+ \pgfmathmultiply@{\pgfmathresult}{\anglestep}%
+ \pgfmathadd@{\pgfmathresult}{\startangle}%
+ \let\firstangle\pgfmathresult%
+ \pgfmathadd@{\pgfmathresult}{\anglestep}%
+ \let\secondangle\pgfmathresult%
+ \calculateradii%
+ %
+ % ...and thus, the point on the star border.
+ %
+ \ifodd\c@pgf@counta
+ \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\firstangle}{+\anchorinnerradius}}%
+ }%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\secondangle}{+\anchorouterradius}}%
+ }%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\firstangle}{+\anchorouterradius}}%
+ }%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\secondangle}{+\anchorinnerradius}}%
+ }%
+ \fi%
+ }%
+ %
+ % Some hackery. This is needed if a star is positioned using
+ % a `...point <n+1>' anchor, where n is the maximum number of
+ % points of any previously drawn star.
+ %
+ \pgfutil@g@addto@macro\pgf@sh@s@star{%
+ \c@pgf@counta\totalstarpoints\relax%
+ \divide\c@pgf@counta2\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \c@pgf@countb\c@pgf@counta\relax%
+ \advance\c@pgf@countb-1\relax%
+ \pgfutil@ifundefined{pgf@anchor@star@inner point\space\the\c@pgf@counta}{%
+ \expandafter\xdef\csname pgf@anchor@star@inner point\space\the\c@pgf@counta\endcsname{%
+ \noexpand\calculateradii%
+ \noexpand\pgfmathmultiply@{\the\c@pgf@countb}{\noexpand\anglestep}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{2}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
+ \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
+ \noexpand\pgfpointadd{\noexpand\centerpoint}%
+ {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorinnerradius}}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@star@outer point\space\the\c@pgf@counta\endcsname{%
+ \noexpand\calculateradii%
+ \noexpand\pgfmathmultiply@{\the\c@pgf@countb}{\noexpand\anglestep}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{2}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
+ \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
+ \noexpand\pgfpointadd{\noexpand\centerpoint}%
+ {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorouterradius}}%
+ }%
+ }{\c@pgf@counta0\relax}%
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }%
+}%
% Keys for shape regular polygon
%
-% /pgf/regular polygon sides
+% /pgf/regular polygon sides
%
\pgfkeys{/pgf/.cd,
- regular polygon sides/.initial=5,
- regular polygon rotate/.style={/pgf/shape border rotate=#1}% For compatability with 1.18
-}
+ regular polygon sides/.initial=5,
+ regular polygon rotate/.style={/pgf/shape border rotate=#1}% For compatibility with 1.18
+}%
% Shape Regular Polygon.
%
-\pgfdeclareshape{regular polygon}{
- \savedmacro\sides{%
- \pgfmathtruncatemacro\sides{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- }
- \savedmacro\anglestep{%
- \pgfmathdivide{360}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- \let\anglestep\pgfmathresult%
- }
- \savedmacro\calculateradii{%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \ifdim\pgf@y>\pgf@x%
- \pgf@x\pgf@y%
- \fi%
- %
- % Calculate i, the incircle radius
- %
- \pgf@x1.41421\pgf@x%
- %
- % Calculate r, the polygon radius
- %
- % r = i / cos(360 / s / 2)
- %
- % (s = polygon sides)
- %
- \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- \pgfmathsec@{\pgfmathresult}%
- \pgf@x\pgfmathresult\pgf@x%
- %
- % Accommodate the minimum width/height.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@ya>\pgf@xa%
- \pgf@xa\pgf@ya%
- \fi%
- \ifdim\pgf@x<.5\pgf@xa%
- \pgf@x.5\pgf@xa%
- \fi%
- \edef\radius{\the\pgf@x}%
- %
- % Now calculate the anchor radius from the outer sep.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@ya>\pgf@xa%
- \pgf@xa\pgf@ya%
- \fi
- %
- % Take into account the miter length.
- %
- % m = o / sin (90 - (360 / s / 2))
- %
- % (o = outer sep, s = sides)
- %
- \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- \pgfmathsubtract@{90}{\pgfmathresult}%
- \pgfmathcosec@{\pgfmathresult}%
- \advance\pgf@x\pgfmathresult\pgf@xa%
- \edef\anchorradius{\the\pgf@x}%
- %
- % Save both radii.
- %
- \addtosavedmacro{\radius}%
- \addtosavedmacro{\anchorradius}%
- }
- \savedmacro\startangle{%
- \pgfmathdivide{360}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- \let\anglestep\pgfmathresult%
- \pgfmathtruncatemacro\sides{\pgfkeysvalueof{/pgf/regular polygon sides}}%
- \expandafter\ifodd\sides\relax%
- \edef\pgfmathresult{90}%
- \else%
- \pgfmathdivide@{\anglestep}{2}%
- \pgfmathsubtract@{90}{\pgfmathresult}%
- \fi%
- \pgfmathadd{\pgfmathresult}{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \let\startangle\pgfmathresult%
- }
- %
- % Saved anchors.
- %
- \savedanchor{\centerpoint}{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor{\midpoint}{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % Other anchors.
- %
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{base}{\centerpoint\pgf@y=0pt}%
- \anchor{north}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{0pt}{\anchorradius}}}%
- \anchor{south}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{0pt}{-\anchorradius}}}%
- \anchor{east}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{0pt}}}%
- \anchor{west}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{0pt}}}%
- \anchor{north east}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{\anchorradius}}}%
- \anchor{north west}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{\anchorradius}}}%
- \anchor{south east}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{-\anchorradius}}}%
- \anchor{south west}{%
- \calculateradii%
- \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{-\anchorradius}}}%
- %
- % Background path.
- %
- \backgroundpath{%
- \calculateradii%
- \pgfpathmoveto{%
- \pgfpointadd{\centerpoint}{\pgfqpointpolar{\startangle}{\radius}}%
- }%
- \let\angle\startangle%
- \pgfmathloop%
- \ifnum\pgfmathcounter=\sides\relax%
- \pgfpathclose%
- \else%
- \pgfmathadd@{\angle}{\anglestep}%
- \let\angle\pgfmathresult%
- \pgfpathlineto{%
- \pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\radius}}%
- }%
- \repeatpgfmathloop%
- }%
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % Adjust the location of the external
- % point relative to \centerpoint.
- %
- \centerpoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Get the angle of the external point to the \centerpoint.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
- %
- % Locate the appropriate sides on the polygon border...
- %
- \pgfmathsubtract@{\pgfmathresult}{\startangle}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \pgfmathdivide@{\pgfmathresult}{\anglestep}%
- \pgfmathfloor@{\pgfmathresult}%
- \pgfmathmultiply@{\pgfmathresult}{\anglestep}%
- \pgfmathadd@{\pgfmathresult}{\startangle}%
- \let\firstangle\pgfmathresult%
- \pgfmathadd@{\pgfmathresult}{\anglestep}%
- \let\secondangle\pgfmathresult%
- \calculateradii%
- %
- % ...and thus, the point on the polygon border.
- %
- \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\firstangle}{+\anchorradius}}%
- }%
- {%
- \pgfpointadd{\centerpoint}%
- {\pgfqpointpolar{+\secondangle}{+\anchorradius}}%
- }%
- }
- %
- % More hackery for when the recuglar polygon is positioned using
- % a `corner <n+1>' or `side <n+1>' anchor, where n is the maximum
- % number of sides of any previously drawn regular polygon.
- %
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@regular polygon\endcsname{%
- \c@pgf@counta\sides\relax%
- \pgfmathloop%
- \ifnum\c@pgf@counta>0\relax%
- \pgfutil@ifundefined{pgf@anchor@regular polygon@corner\space\the\c@pgf@counta}{%
- %
- % ...(manually \xdef as \gdef is normally used by \anchor)...
- %
- \expandafter\xdef\csname pgf@anchor@regular polygon@corner\space\the\c@pgf@counta\endcsname{%
- \noexpand\calculateradii%
- \noexpand\pgfmathsubtract@{\the\c@pgf@counta}{1}%
- \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
- \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
- \noexpand\pgfpointadd{\noexpand\centerpoint}%
- {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorradius}}%
- }%
- \expandafter\xdef\csname pgf@anchor@regular polygon@side\space\the\c@pgf@counta\endcsname{%
- \noexpand\calculateradii%
- \noexpand\pgfmathsubtract@{\the\c@pgf@counta}{1}%
- \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
- \noexpand\let\noexpand\firstangle\noexpand\pgfmathresult%
- \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
- \noexpand\let\noexpand\secondangle\noexpand\pgfmathresult%
- \noexpand\pgfpointlineattime{0.5}%
- {\noexpand\pgfpointadd{\noexpand\centerpoint}%
- {\noexpand\pgfqpointpolar{\noexpand\firstangle}{\noexpand\anchorradius}}}%
- {\noexpand\pgfpointadd{\noexpand\centerpoint}%
- {\noexpand\pgfqpointpolar{\noexpand\secondangle}{\noexpand\anchorradius}}}%
- }%
- }{\c@pgf@counta0\relax}%
- \advance\c@pgf@counta-1\relax%
- \repeatpgfmathloop%
- }%
-}
+\pgfdeclareshape{regular polygon}{%
+ \savedmacro\sides{%
+ \pgfmathtruncatemacro\sides{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ }%
+ \savedmacro\anglestep{%
+ \pgfmathdivide{360}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ \let\anglestep\pgfmathresult%
+ }%
+ \savedmacro\calculateradii{%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi%
+ %
+ % Calculate i, the incircle radius
+ %
+ \pgf@x1.41421\pgf@x%
+ %
+ % Calculate r, the polygon radius
+ %
+ % r = i / cos(360 / s / 2)
+ %
+ % (s = polygon sides)
+ %
+ \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ \pgfmathsec@{\pgfmathresult}%
+ \pgf@x\pgfmathresult\pgf@x%
+ %
+ % Accommodate the minimum width/height.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \fi%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \edef\radius{\the\pgf@x}%
+ %
+ % Now calculate the anchor radius from the outer sep.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@xa\pgf@ya%
+ \fi
+ %
+ % Take into account the miter length.
+ %
+ % m = o / sin (90 - (360 / s / 2))
+ %
+ % (o = outer sep, s = sides)
+ %
+ \pgfmathdivide{180}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ \pgfmathsubtract@{90}{\pgfmathresult}%
+ \pgfmathcosec@{\pgfmathresult}%
+ \advance\pgf@x\pgfmathresult\pgf@xa%
+ \edef\anchorradius{\the\pgf@x}%
+ %
+ % Save both radii.
+ %
+ \addtosavedmacro{\radius}%
+ \addtosavedmacro{\anchorradius}%
+ }%
+ \savedmacro\startangle{%
+ \pgfmathdivide{360}{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ \let\anglestep\pgfmathresult%
+ \pgfmathtruncatemacro\sides{\pgfkeysvalueof{/pgf/regular polygon sides}}%
+ \expandafter\ifodd\sides\relax%
+ \edef\pgfmathresult{90}%
+ \else%
+ \pgfmathdivide@{\anglestep}{2}%
+ \pgfmathsubtract@{90}{\pgfmathresult}%
+ \fi%
+ \pgfmathadd{\pgfmathresult}{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \let\startangle\pgfmathresult%
+ }%
+ %
+ % Saved anchors.
+ %
+ \savedanchor{\centerpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor{\midpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % Other anchors.
+ %
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{base}{\centerpoint\pgf@y=0pt}%
+ \anchor{north}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{0pt}{\anchorradius}}}%
+ \anchor{south}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{0pt}{-\anchorradius}}}%
+ \anchor{east}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{0pt}}}%
+ \anchor{west}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{0pt}}}%
+ \anchor{north east}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{\anchorradius}}}%
+ \anchor{north west}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{\anchorradius}}}%
+ \anchor{south east}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{\anchorradius}{-\anchorradius}}}%
+ \anchor{south west}{%
+ \calculateradii%
+ \csname pgf@anchor@regular polygon@border\endcsname{\pgfqpoint{-\anchorradius}{-\anchorradius}}}%
+ %
+ % Background path.
+ %
+ \backgroundpath{%
+ \calculateradii%
+ \pgfpathmoveto{%
+ \pgfpointadd{\centerpoint}{\pgfqpointpolar{\startangle}{\radius}}%
+ }%
+ \let\angle\startangle%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter=\sides\relax%
+ \pgfpathclose%
+ \else%
+ \pgfmathadd@{\angle}{\anglestep}%
+ \let\angle\pgfmathresult%
+ \pgfpathlineto{%
+ \pgfpointadd{\centerpoint}{\pgfqpointpolar{\angle}{\radius}}%
+ }%
+ \repeatpgfmathloop%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % Adjust the location of the external
+ % point relative to \centerpoint.
+ %
+ \centerpoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Get the angle of the external point to the \centerpoint.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
+ %
+ % Locate the appropriate sides on the polygon border...
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\startangle}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \pgfmathdivide@{\pgfmathresult}{\anglestep}%
+ \pgfmathfloor@{\pgfmathresult}%
+ \pgfmathmultiply@{\pgfmathresult}{\anglestep}%
+ \pgfmathadd@{\pgfmathresult}{\startangle}%
+ \let\firstangle\pgfmathresult%
+ \pgfmathadd@{\pgfmathresult}{\anglestep}%
+ \let\secondangle\pgfmathresult%
+ \calculateradii%
+ %
+ % ...and thus, the point on the polygon border.
+ %
+ \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\firstangle}{+\anchorradius}}%
+ }%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfqpointpolar{+\secondangle}{+\anchorradius}}%
+ }%
+ }%
+ %
+ % More hackery for when the rectangular polygon is positioned using
+ % a `corner <n+1>' or `side <n+1>' anchor, where n is the maximum
+ % number of sides of any previously drawn regular polygon.
+ %
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@regular polygon\endcsname{%
+ \c@pgf@counta\sides\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \pgfutil@ifundefined{pgf@anchor@regular polygon@corner\space\the\c@pgf@counta}{%
+ %
+ % ...(manually \xdef as \gdef is normally used by \anchor)...
+ %
+ \expandafter\xdef\csname pgf@anchor@regular polygon@corner\space\the\c@pgf@counta\endcsname{%
+ \noexpand\calculateradii%
+ \noexpand\pgfmathsubtract@{\the\c@pgf@counta}{1}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
+ \noexpand\let\noexpand\angle\noexpand\pgfmathresult%
+ \noexpand\pgfpointadd{\noexpand\centerpoint}%
+ {\noexpand\pgfqpointpolar{\noexpand\angle}{\noexpand\anchorradius}}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@regular polygon@side\space\the\c@pgf@counta\endcsname{%
+ \noexpand\calculateradii%
+ \noexpand\pgfmathsubtract@{\the\c@pgf@counta}{1}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\startangle}%
+ \noexpand\let\noexpand\firstangle\noexpand\pgfmathresult%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{\noexpand\anglestep}%
+ \noexpand\let\noexpand\secondangle\noexpand\pgfmathresult%
+ \noexpand\pgfpointlineattime{0.5}%
+ {\noexpand\pgfpointadd{\noexpand\centerpoint}%
+ {\noexpand\pgfqpointpolar{\noexpand\firstangle}{\noexpand\anchorradius}}}%
+ {\noexpand\pgfpointadd{\noexpand\centerpoint}%
+ {\noexpand\pgfqpointpolar{\noexpand\secondangle}{\noexpand\anchorradius}}}%
+ }%
+ }{\c@pgf@counta0\relax}%
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }%
+}%
@@ -930,15 +928,15 @@
% /pgf/trapezium right angle : angle of the right side.
\pgfkeys{/pgf/.cd,
- trapezium left angle/.initial=60,
- trapezium right angle/.initial=60,
- trapezium angle/.style={
- /pgf/trapezium left angle=#1,
- /pgf/trapezium right angle=#1
- },%
- trapezium stretches/.is if=pgf@lib@sh@trapeziumstretches,%
- trapezium stretches body/.is if=pgf@lib@sh@trapeziumstretchesbody%
-}
+ trapezium left angle/.initial=60,
+ trapezium right angle/.initial=60,
+ trapezium angle/.style={
+ /pgf/trapezium left angle=#1,
+ /pgf/trapezium right angle=#1
+ },%
+ trapezium stretches/.is if=pgf@lib@sh@trapeziumstretches,%
+ trapezium stretches body/.is if=pgf@lib@sh@trapeziumstretchesbody,%
+}%
\newif\ifpgf@lib@sh@trapeziumstretchesbody
\newif\ifpgf@lib@sh@trapeziumstretches
@@ -946,1394 +944,1394 @@
% Shape trapezium.
%
-\pgfdeclareshape{trapezium}{
- \savedmacro\installtrapeziumparameters{%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \ifpgfshapeborderusesincircle%
- %
- % Get the rotation (no rounding).
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- %
- % Use the radius of the incircle if required...
- %
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \pgf@x1.41421\pgf@x%
- \pgf@y\pgf@x%
- \else%
- %
- % Get the rotation (with rounding).
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Calculate the width and height of the node
- % contents, according to any border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \fi%
- \fi%
- \fi%
- \pgfmathmod{\pgfkeysvalueof{/pgf/trapezium left angle}}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\leftangle\pgfmathresult%
- \ifdim\leftangle pt=0pt\relax%
- \def\pgfmathresult{0}%
- \else%
- \pgfmathcot@{\leftangle}%
- \fi%
- \pgf@xa2\pgf@y%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfmathmod{\pgfkeysvalueof{/pgf/trapezium right angle}}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\rightangle\pgfmathresult%
- \ifdim\rightangle pt=0pt\relax%
- \def\pgfmathresult{0}%
- \else%
- \pgfmathcot@{\rightangle}%
- \fi%
- \pgf@xb2\pgf@y%
- \pgf@xb\pgfmathresult\pgf@xb%
- %
- % Take into account minimum height and width.
- %
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@ya%
- \ifpgf@lib@sh@trapeziumstretches%
- \pgf@y.5\pgf@ya%
- \else%
- \ifpgf@lib@sh@trapeziumstretchesbody%
- \pgf@y.5\pgf@ya%
- \else%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@y}}%
- \pgf@yb.5\pgf@ya%
- \pgf@yb\pgfmathresult\pgf@yb%
- \pgf@y.5\pgf@ya%
- \pgf@x\pgfmath@tonumber{\pgf@yb}\pgf@x%
- \pgf@xa\pgfmath@tonumber{\pgf@yb}\pgf@xa%
- \pgf@xb\pgfmath@tonumber{\pgf@yb}\pgf@xb%
- \fi%
- \fi%
- \fi%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgf@xc2\pgf@x%
- \ifdim\pgf@xa<0pt\relax%
- \advance\pgf@xc-\pgf@xa%
- \else%
- \advance\pgf@xc\pgf@xa%
- \fi%
- \ifdim\pgf@xb<0pt\relax%
- \advance\pgf@xc-\pgf@xb%
- \else%
- \advance\pgf@xc\pgf@xb%
- \fi%
- \ifdim\pgf@xc<\pgf@ya%
- \ifpgf@lib@sh@trapeziumstretchesbody%
- \pgf@xc-\pgf@xc%
- \advance\pgf@xc\pgf@ya%
- \advance\pgf@x.5\pgf@xc%
- \else%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@xc}}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgf@x\pgfmath@tonumber{\pgf@ya}\pgf@x%
- \pgf@xa\pgfmath@tonumber{\pgf@ya}\pgf@xa%
- \pgf@xb\pgfmath@tonumber{\pgf@ya}\pgf@xb%
- \ifpgf@lib@sh@trapeziumstretches%
- \else%
- \pgf@y\pgfmath@tonumber{\pgf@ya}\pgf@y%
- \fi%
- \fi%
- \fi%
- \edef\halfheight{\the\pgf@y}%
- \edef\halfwidth{\the\pgf@x}%
- \edef\leftextension{\the\pgf@xa}%
- \edef\rightextension{\the\pgf@xb}%
- \pgf@xc2\pgf@x%
- %
- % Take the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@y>\pgf@x%
- \pgf@x\pgf@y%
- \fi%
- \edef\outersep{\the\pgf@x}%
- %
- % The \externalradius is a length that is
- % guarenteed to produce a point outside the trapezium.
- %
- \advance\pgf@xc2.0\pgf@x%
- \pgf@yc\halfheight\relax%
- \multiply\pgf@yc2\relax%
- \advance\pgf@yc2.0\pgf@x%
- \ifdim\pgf@xc<\pgf@yc%
- \edef\externalradius{\the\pgf@yc}%
- \else%
- \edef\externalradius{\the\pgf@xc}%
- \fi%
- %
- % Calculate the centre base and mid poins of the node.
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \pgfextract@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt\relax%
- }%
- \pgfextract@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % Calculate each point on the trapezium (without rotation).
- %
- \pgfextract@process\lowerleftpoint{%
- \centerpoint%
- \advance\pgf@x-\halfwidth\relax%
- \ifdim\leftextension>0pt\relax%
- \advance\pgf@x-\leftextension\relax%
- \fi%
- \advance\pgf@y-\halfheight\relax%
- }%
- \pgfextract@process\upperleftpoint{%
- \centerpoint%
- \advance\pgf@x-\halfwidth\relax%
- \ifdim\leftextension<0pt\relax%
- \advance\pgf@x\leftextension\relax%
- \fi%
- \advance\pgf@y\halfheight\relax%
- }%
- \pgfextract@process\upperrightpoint{%
- \centerpoint%
- \advance\pgf@x\halfwidth\relax%
- \ifdim\rightextension<0pt\relax%
- \advance\pgf@x-\rightextension\relax%
- \fi%
- \advance\pgf@y\halfheight\relax%
- }%
- \pgfextract@process\lowerrightpoint{%
- \centerpoint%
- \advance\pgf@x\halfwidth\relax%
- \ifdim\rightextension>0pt\relax%
- \advance\pgf@x\rightextension\relax%
- \fi%
- \advance\pgf@y-\halfheight\relax%
- }%
- %
- % Now calculate the adjustment for the miter length at each corner
- % of the trapezium. This ensures more accurate anchor positioning
- % when the line width is particularly thick.
- %
- \pgfextract@process\lowerleftmiter{%
- \pgfmathanglebetweenlines{\lowerleftpoint}{\lowerrightpoint}{\lowerleftpoint}{\upperleftpoint}%
- \pgfmathmultiply@{\pgfmathresult}{.5}%
- \pgfmathtan@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@x-\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y-\outersep\relax%
- }%
- \pgfextract@process\upperleftmiter{%
- \pgfmathanglebetweenlines{\upperleftpoint}{\lowerleftpoint}{\upperleftpoint}{\upperrightpoint}%
- \pgfmathmultiply@{\pgfmathresult}{.5}%
- \pgfmathtan@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@x-\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y\outersep\relax%
- }%
- \pgfextract@process\upperrightmiter{%
- \pgfmathanglebetweenlines{\upperrightpoint}{\upperleftpoint}{\upperrightpoint}{\lowerrightpoint}%
- \pgfmathmultiply@{\pgfmathresult}{.5}%
- \pgfmathtan@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@x\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y\outersep\relax%
- }%
- \pgfextract@process\lowerrightmiter{%
- \pgfmathanglebetweenlines{\lowerrightpoint}{\upperrightpoint}{\lowerrightpoint}{\lowerleftpoint}%
- \pgfmathmultiply@{\pgfmathresult}{.5}%
- \pgfmathtan@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@x\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y-\outersep\relax%
- }%
- %
- % Now calculate the corners for determining anchor border
- % points, by adding the adjustment for the miter length.
- %
- \pgfextract@process\lowerleftborderpoint{%
- \pgfpointadd{\lowerleftpoint}{\lowerleftmiter}%
- }%
- \pgfextract@process\upperleftborderpoint{%
- \pgfpointadd{\upperleftpoint}{\upperleftmiter}%
- }%
- \pgfextract@process\upperrightborderpoint{%
- \pgfpointadd{\upperrightpoint}{\upperrightmiter}%
- }%
- \pgfextract@process\lowerrightborderpoint{%
- \pgfpointadd{\lowerrightpoint}{\lowerrightmiter}%
- }%
- %
- % Calulate the angle from the centerpoint to each corner.
- % Rotation is not important here (see \anchorborder code).
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\lowerleftborderpoint}%
- \let\angletolowerleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\upperleftborderpoint}%
- \let\angletoupperleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\upperrightborderpoint}%
- \let\angletoupperright\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\lowerrightborderpoint}%
- \let\angletolowerright\pgfmathresult%
- %
- % Do the same for the *inversely rotated* base point...
- %
- \pgfextract@process\rotatedbasepoint{%
- \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lowerleftborderpoint}%
- \let\baseangletolowerleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\upperleftborderpoint}%
- \let\baseangletoupperleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\upperrightborderpoint}%
- \let\baseangletoupperright\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lowerrightborderpoint}%
- \let\baseangletolowerright\pgfmathresult%
- %
- % And the *inversely rotated* mid point...
- %
- \pgfextract@process\rotatedmidpoint{%
- \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lowerleftborderpoint}%
- \let\midangletolowerleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\upperleftborderpoint}%
- \let\midangletoupperleft\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\upperrightborderpoint}%
- \let\midangletoupperright\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lowerrightborderpoint}%
- \let\midangletolowerright\pgfmathresult%
- %
- % Now rotate the border points around the centerpoint...
- %
- \pgfextract@process\lowerleftborderpoint{%
- \pgfmathrotatepointaround%
- {\lowerleftborderpoint}%
- {\centerpoint}%
- {\rotate}%
- }%
- \pgfextract@process\upperleftborderpoint{%
- \pgfmathrotatepointaround%
- {\upperleftborderpoint}%
- {\centerpoint}%
- {\rotate}%
- }%
- \pgfextract@process\upperrightborderpoint{%
- \pgfmathrotatepointaround%
- {\upperrightborderpoint}%
- {\centerpoint}%
- {\rotate}%
- }%
- \pgfextract@process\lowerrightborderpoint{%
- \pgfmathrotatepointaround%
- {\lowerrightborderpoint}%
- {\centerpoint}%
- {\rotate}%
- }%
- %
- % ...and the points for drawing the border (i.e. no outer sep).
- %
- \pgfextract@process\lowerleftpoint{%
- \pgfmathrotatepointaround{\lowerleftpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\upperleftpoint{%
- \pgfmathrotatepointaround{\upperleftpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\upperrightpoint{%
- \pgfmathrotatepointaround{\upperrightpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\lowerrightpoint{%
- \pgfmathrotatepointaround{\lowerrightpoint}{\centerpoint}{\rotate}%
- }%
- %
- % And finally, save all the relevant stuff.
- %
- \addtosavedmacro{\lowerleftpoint}%
- \addtosavedmacro{\upperleftpoint}%
- \addtosavedmacro{\upperrightpoint}%
- \addtosavedmacro{\lowerrightpoint}%
- %
- \addtosavedmacro{\lowerleftborderpoint}%
- \addtosavedmacro{\upperleftborderpoint}%
- \addtosavedmacro{\upperrightborderpoint}%
- \addtosavedmacro{\lowerrightborderpoint}%
- %
- \addtosavedmacro{\angletolowerleft}%
- \addtosavedmacro{\angletoupperleft}%
- \addtosavedmacro{\angletoupperright}%
- \addtosavedmacro{\angletolowerright}%
- %
- \addtosavedmacro{\baseangletolowerleft}%
- \addtosavedmacro{\baseangletoupperleft}%
- \addtosavedmacro{\baseangletoupperright}%
- \addtosavedmacro{\baseangletolowerright}%
- %
- \addtosavedmacro{\midangletolowerleft}%
- \addtosavedmacro{\midangletoupperleft}%
- \addtosavedmacro{\midangletoupperright}%
- \addtosavedmacro{\midangletolowerright}%
- %
- \addtosavedmacro{\rotate}%
- \addtosavedmacro{\externalradius}%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \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{base}{\basepoint}%
- \anchor{base east}{%
- \installtrapeziumparameters%
- \let\pgf@trapeziumanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{base west}{%
- \installtrapeziumparameters%
- \let\pgf@trapeziumanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \installtrapeziumparameters%
- \let\pgf@trapeziumanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{mid west}{%
- \installtrapeziumparameters%
- \let\pgf@trapeziumanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{north}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
- \anchor{south}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
- \anchor{east}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{west}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north east}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
- \anchor{south west}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
- \anchor{south east}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \anchor{north west}{%
- \installtrapeziumparameters%
- \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
- \anchor{bottom left corner}{%
- \installtrapeziumparameters%
- \lowerleftborderpoint%
- }%
- \anchor{top left corner}{%
- \installtrapeziumparameters%
- \upperleftborderpoint%
- }%
- \anchor{top right corner}{%
- \installtrapeziumparameters%
- \upperrightborderpoint%
- }%
- \anchor{bottom right corner}{%
- \installtrapeziumparameters%
- \lowerrightborderpoint%
- }%
- \anchor{left side}{%
- \installtrapeziumparameters%
- \pgfpointlineattime{0.5}{\lowerleftborderpoint}{\upperleftborderpoint}%
- }%
- \anchor{right side}{%
- \installtrapeziumparameters%
- \pgfpointlineattime{0.5}{\lowerrightborderpoint}{\upperrightborderpoint}%
- }%
- \anchor{top side}{%
- \installtrapeziumparameters%
- \pgfpointlineattime{0.5}{\upperleftborderpoint}{\upperrightborderpoint}%
- }%
- \anchor{bottom side}{%
- \installtrapeziumparameters%
- \pgfpointlineattime{0.5}{\lowerleftborderpoint}{\lowerrightborderpoint}%
- }%
- \backgroundpath{%
- \installtrapeziumparameters%
- \pgfpathmoveto{\lowerleftpoint}%
- \pgfpathlineto{\upperleftpoint}%
- \pgfpathlineto{\upperrightpoint}%
- \pgfpathlineto{\lowerrightpoint}%
- \pgfpathclose%
- }
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % This allows anchors base east, base west, mid east and mid west,
- % to redefine the `center' of the node to correctly calculate the
- % border points.
- %
- \pgfutil@ifundefined{pgf@trapeziumanchorborderreferencepoint}%
- {\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@trapeziumanchorborderreferencepoint}%
- %
- % Adjust the location of the external
- % point relative to the reference point.
- %
- \referencepoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Install the required points and angles.
- %
- \installtrapeziumparameters%
- %
- % Get the angle of the external point to the \referencepoint.
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- %
- % *Subtract* the rotation from the external angle. This is
- % why the border point angles do not neeed to be rotated.
- %
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- %
- % Get the relevant angles for the reference point.
- %
- \let\externalangle\pgfmathresult%
- \ifx\referencepoint\basepoint%
- \let\angletoupperright\baseangletoupperright%
- \let\angletoupperleft\baseangletoupperleft%
- \let\angletolowerright\baseangletolowerright%
- \let\angletolowerleft\baseangletolowerleft%
- \else%
- \ifx\referencepoint\midpoint%
- \let\angletoupperright\midangletoupperright%
- \let\angletoupperleft\midangletoupperleft%
- \let\angletolowerright\midangletolowerright%
- \let\angletolowerleft\midangletolowerleft%
- \fi\fi%
- %
- % Find the line on the border...
- %
- \ifdim\externalangle pt<\angletoupperright pt\relax%
- \let\firstpoint\upperrightborderpoint%
- \let\secondpoint\lowerrightborderpoint%
- \else%
- \ifdim\externalangle pt<\angletoupperleft pt\relax%
- \let\firstpoint\upperleftborderpoint%
- \let\secondpoint\upperrightborderpoint%
- \else%
- \ifdim\externalangle pt<\angletolowerleft pt\relax%
- \let\firstpoint\upperleftborderpoint%
- \let\secondpoint\lowerleftborderpoint%
- \else%
- \ifdim\externalangle pt<\angletolowerright pt\relax%
- \let\firstpoint\lowerleftborderpoint%
- \let\secondpoint\lowerrightborderpoint%
- \else%
- \let\firstpoint\upperrightborderpoint%
- \let\secondpoint\lowerrightborderpoint%
- \fi%
- \fi%
- \fi%
- \fi%
- %
- % ...and thus the point on the border.
- %
- \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\firstpoint}{\secondpoint}%
- }%
-}
+\pgfdeclareshape{trapezium}{%
+ \savedmacro\installtrapeziumparameters{%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \ifpgfshapeborderusesincircle%
+ %
+ % Get the rotation (no rounding).
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ %
+ % Use the radius of the incircle if required...
+ %
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgf@x1.41421\pgf@x%
+ \pgf@y\pgf@x%
+ \else%
+ %
+ % Get the rotation (with rounding).
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Calculate the width and height of the node
+ % contents, according to any border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \fi%
+ \fi%
+ \fi%
+ \pgfmathmod{\pgfkeysvalueof{/pgf/trapezium left angle}}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\leftangle\pgfmathresult%
+ \ifdim\leftangle pt=0pt\relax%
+ \def\pgfmathresult{0}%
+ \else%
+ \pgfmathcot@{\leftangle}%
+ \fi%
+ \pgf@xa2\pgf@y%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfmathmod{\pgfkeysvalueof{/pgf/trapezium right angle}}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\rightangle\pgfmathresult%
+ \ifdim\rightangle pt=0pt\relax%
+ \def\pgfmathresult{0}%
+ \else%
+ \pgfmathcot@{\rightangle}%
+ \fi%
+ \pgf@xb2\pgf@y%
+ \pgf@xb\pgfmathresult\pgf@xb%
+ %
+ % Take into account minimum height and width.
+ %
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \ifpgf@lib@sh@trapeziumstretches%
+ \pgf@y.5\pgf@ya%
+ \else%
+ \ifpgf@lib@sh@trapeziumstretchesbody%
+ \pgf@y.5\pgf@ya%
+ \else%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@y}}%
+ \pgf@yb.5\pgf@ya%
+ \pgf@yb\pgfmathresult\pgf@yb%
+ \pgf@y.5\pgf@ya%
+ \pgf@x\pgfmath@tonumber{\pgf@yb}\pgf@x%
+ \pgf@xa\pgfmath@tonumber{\pgf@yb}\pgf@xa%
+ \pgf@xb\pgfmath@tonumber{\pgf@yb}\pgf@xb%
+ \fi%
+ \fi%
+ \fi%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@xc2\pgf@x%
+ \ifdim\pgf@xa<0pt\relax%
+ \advance\pgf@xc-\pgf@xa%
+ \else%
+ \advance\pgf@xc\pgf@xa%
+ \fi%
+ \ifdim\pgf@xb<0pt\relax%
+ \advance\pgf@xc-\pgf@xb%
+ \else%
+ \advance\pgf@xc\pgf@xb%
+ \fi%
+ \ifdim\pgf@xc<\pgf@ya%
+ \ifpgf@lib@sh@trapeziumstretchesbody%
+ \pgf@xc-\pgf@xc%
+ \advance\pgf@xc\pgf@ya%
+ \advance\pgf@x.5\pgf@xc%
+ \else%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@xc}}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgf@x\pgfmath@tonumber{\pgf@ya}\pgf@x%
+ \pgf@xa\pgfmath@tonumber{\pgf@ya}\pgf@xa%
+ \pgf@xb\pgfmath@tonumber{\pgf@ya}\pgf@xb%
+ \ifpgf@lib@sh@trapeziumstretches%
+ \else%
+ \pgf@y\pgfmath@tonumber{\pgf@ya}\pgf@y%
+ \fi%
+ \fi%
+ \fi%
+ \edef\halfheight{\the\pgf@y}%
+ \edef\halfwidth{\the\pgf@x}%
+ \edef\leftextension{\the\pgf@xa}%
+ \edef\rightextension{\the\pgf@xb}%
+ \pgf@xc2\pgf@x%
+ %
+ % Take the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\outersep{\the\pgf@x}%
+ %
+ % The \externalradius is a length that is
+ % guarenteed to produce a point outside the trapezium.
+ %
+ \advance\pgf@xc2.0\pgf@x%
+ \pgf@yc\halfheight\relax%
+ \multiply\pgf@yc2\relax%
+ \advance\pgf@yc2.0\pgf@x%
+ \ifdim\pgf@xc<\pgf@yc%
+ \edef\externalradius{\the\pgf@yc}%
+ \else%
+ \edef\externalradius{\the\pgf@xc}%
+ \fi%
+ %
+ % Calculate the centre base and mid poins of the node.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfextract@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt\relax%
+ }%
+ \pgfextract@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % Calculate each point on the trapezium (without rotation).
+ %
+ \pgfextract@process\lowerleftpoint{%
+ \centerpoint%
+ \advance\pgf@x-\halfwidth\relax%
+ \ifdim\leftextension>0pt\relax%
+ \advance\pgf@x-\leftextension\relax%
+ \fi%
+ \advance\pgf@y-\halfheight\relax%
+ }%
+ \pgfextract@process\upperleftpoint{%
+ \centerpoint%
+ \advance\pgf@x-\halfwidth\relax%
+ \ifdim\leftextension<0pt\relax%
+ \advance\pgf@x\leftextension\relax%
+ \fi%
+ \advance\pgf@y\halfheight\relax%
+ }%
+ \pgfextract@process\upperrightpoint{%
+ \centerpoint%
+ \advance\pgf@x\halfwidth\relax%
+ \ifdim\rightextension<0pt\relax%
+ \advance\pgf@x-\rightextension\relax%
+ \fi%
+ \advance\pgf@y\halfheight\relax%
+ }%
+ \pgfextract@process\lowerrightpoint{%
+ \centerpoint%
+ \advance\pgf@x\halfwidth\relax%
+ \ifdim\rightextension>0pt\relax%
+ \advance\pgf@x\rightextension\relax%
+ \fi%
+ \advance\pgf@y-\halfheight\relax%
+ }%
+ %
+ % Now calculate the adjustment for the miter length at each corner
+ % of the trapezium. This ensures more accurate anchor positioning
+ % when the line width is particularly thick.
+ %
+ \pgfextract@process\lowerleftmiter{%
+ \pgfmathanglebetweenlines{\lowerleftpoint}{\lowerrightpoint}{\lowerleftpoint}{\upperleftpoint}%
+ \pgfmathmultiply@{\pgfmathresult}{.5}%
+ \pgfmathtan@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x-\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y-\outersep\relax%
+ }%
+ \pgfextract@process\upperleftmiter{%
+ \pgfmathanglebetweenlines{\upperleftpoint}{\lowerleftpoint}{\upperleftpoint}{\upperrightpoint}%
+ \pgfmathmultiply@{\pgfmathresult}{.5}%
+ \pgfmathtan@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x-\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y\outersep\relax%
+ }%
+ \pgfextract@process\upperrightmiter{%
+ \pgfmathanglebetweenlines{\upperrightpoint}{\upperleftpoint}{\upperrightpoint}{\lowerrightpoint}%
+ \pgfmathmultiply@{\pgfmathresult}{.5}%
+ \pgfmathtan@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y\outersep\relax%
+ }%
+ \pgfextract@process\lowerrightmiter{%
+ \pgfmathanglebetweenlines{\lowerrightpoint}{\upperrightpoint}{\lowerrightpoint}{\lowerleftpoint}%
+ \pgfmathmultiply@{\pgfmathresult}{.5}%
+ \pgfmathtan@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y-\outersep\relax%
+ }%
+ %
+ % Now calculate the corners for determining anchor border
+ % points, by adding the adjustment for the miter length.
+ %
+ \pgfextract@process\lowerleftborderpoint{%
+ \pgfpointadd{\lowerleftpoint}{\lowerleftmiter}%
+ }%
+ \pgfextract@process\upperleftborderpoint{%
+ \pgfpointadd{\upperleftpoint}{\upperleftmiter}%
+ }%
+ \pgfextract@process\upperrightborderpoint{%
+ \pgfpointadd{\upperrightpoint}{\upperrightmiter}%
+ }%
+ \pgfextract@process\lowerrightborderpoint{%
+ \pgfpointadd{\lowerrightpoint}{\lowerrightmiter}%
+ }%
+ %
+ % Calculate the angle from the centerpoint to each corner.
+ % Rotation is not important here (see \anchorborder code).
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\lowerleftborderpoint}%
+ \let\angletolowerleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\upperleftborderpoint}%
+ \let\angletoupperleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\upperrightborderpoint}%
+ \let\angletoupperright\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\lowerrightborderpoint}%
+ \let\angletolowerright\pgfmathresult%
+ %
+ % Do the same for the *inversely rotated* base point...
+ %
+ \pgfextract@process\rotatedbasepoint{%
+ \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lowerleftborderpoint}%
+ \let\baseangletolowerleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\upperleftborderpoint}%
+ \let\baseangletoupperleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\upperrightborderpoint}%
+ \let\baseangletoupperright\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lowerrightborderpoint}%
+ \let\baseangletolowerright\pgfmathresult%
+ %
+ % And the *inversely rotated* mid point...
+ %
+ \pgfextract@process\rotatedmidpoint{%
+ \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lowerleftborderpoint}%
+ \let\midangletolowerleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\upperleftborderpoint}%
+ \let\midangletoupperleft\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\upperrightborderpoint}%
+ \let\midangletoupperright\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lowerrightborderpoint}%
+ \let\midangletolowerright\pgfmathresult%
+ %
+ % Now rotate the border points around the centerpoint...
+ %
+ \pgfextract@process\lowerleftborderpoint{%
+ \pgfmathrotatepointaround%
+ {\lowerleftborderpoint}%
+ {\centerpoint}%
+ {\rotate}%
+ }%
+ \pgfextract@process\upperleftborderpoint{%
+ \pgfmathrotatepointaround%
+ {\upperleftborderpoint}%
+ {\centerpoint}%
+ {\rotate}%
+ }%
+ \pgfextract@process\upperrightborderpoint{%
+ \pgfmathrotatepointaround%
+ {\upperrightborderpoint}%
+ {\centerpoint}%
+ {\rotate}%
+ }%
+ \pgfextract@process\lowerrightborderpoint{%
+ \pgfmathrotatepointaround%
+ {\lowerrightborderpoint}%
+ {\centerpoint}%
+ {\rotate}%
+ }%
+ %
+ % ...and the points for drawing the border (i.e. no outer sep).
+ %
+ \pgfextract@process\lowerleftpoint{%
+ \pgfmathrotatepointaround{\lowerleftpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\upperleftpoint{%
+ \pgfmathrotatepointaround{\upperleftpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\upperrightpoint{%
+ \pgfmathrotatepointaround{\upperrightpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\lowerrightpoint{%
+ \pgfmathrotatepointaround{\lowerrightpoint}{\centerpoint}{\rotate}%
+ }%
+ %
+ % And finally, save all the relevant stuff.
+ %
+ \addtosavedmacro{\lowerleftpoint}%
+ \addtosavedmacro{\upperleftpoint}%
+ \addtosavedmacro{\upperrightpoint}%
+ \addtosavedmacro{\lowerrightpoint}%
+ %
+ \addtosavedmacro{\lowerleftborderpoint}%
+ \addtosavedmacro{\upperleftborderpoint}%
+ \addtosavedmacro{\upperrightborderpoint}%
+ \addtosavedmacro{\lowerrightborderpoint}%
+ %
+ \addtosavedmacro{\angletolowerleft}%
+ \addtosavedmacro{\angletoupperleft}%
+ \addtosavedmacro{\angletoupperright}%
+ \addtosavedmacro{\angletolowerright}%
+ %
+ \addtosavedmacro{\baseangletolowerleft}%
+ \addtosavedmacro{\baseangletoupperleft}%
+ \addtosavedmacro{\baseangletoupperright}%
+ \addtosavedmacro{\baseangletolowerright}%
+ %
+ \addtosavedmacro{\midangletolowerleft}%
+ \addtosavedmacro{\midangletoupperleft}%
+ \addtosavedmacro{\midangletoupperright}%
+ \addtosavedmacro{\midangletolowerright}%
+ %
+ \addtosavedmacro{\rotate}%
+ \addtosavedmacro{\externalradius}%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \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{base}{\basepoint}%
+ \anchor{base east}{%
+ \installtrapeziumparameters%
+ \let\pgf@trapeziumanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{base west}{%
+ \installtrapeziumparameters%
+ \let\pgf@trapeziumanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \installtrapeziumparameters%
+ \let\pgf@trapeziumanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid west}{%
+ \installtrapeziumparameters%
+ \let\pgf@trapeziumanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \installtrapeziumparameters%
+ \csname pgf@anchor@trapezium@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{bottom left corner}{%
+ \installtrapeziumparameters%
+ \lowerleftborderpoint%
+ }%
+ \anchor{top left corner}{%
+ \installtrapeziumparameters%
+ \upperleftborderpoint%
+ }%
+ \anchor{top right corner}{%
+ \installtrapeziumparameters%
+ \upperrightborderpoint%
+ }%
+ \anchor{bottom right corner}{%
+ \installtrapeziumparameters%
+ \lowerrightborderpoint%
+ }%
+ \anchor{left side}{%
+ \installtrapeziumparameters%
+ \pgfpointlineattime{0.5}{\lowerleftborderpoint}{\upperleftborderpoint}%
+ }%
+ \anchor{right side}{%
+ \installtrapeziumparameters%
+ \pgfpointlineattime{0.5}{\lowerrightborderpoint}{\upperrightborderpoint}%
+ }%
+ \anchor{top side}{%
+ \installtrapeziumparameters%
+ \pgfpointlineattime{0.5}{\upperleftborderpoint}{\upperrightborderpoint}%
+ }%
+ \anchor{bottom side}{%
+ \installtrapeziumparameters%
+ \pgfpointlineattime{0.5}{\lowerleftborderpoint}{\lowerrightborderpoint}%
+ }%
+ \backgroundpath{%
+ \installtrapeziumparameters%
+ \pgfpathmoveto{\lowerleftpoint}%
+ \pgfpathlineto{\upperleftpoint}%
+ \pgfpathlineto{\upperrightpoint}%
+ \pgfpathlineto{\lowerrightpoint}%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % This allows anchors base east, base west, mid east and mid west,
+ % to redefine the `center' of the node to correctly calculate the
+ % border points.
+ %
+ \pgfutil@ifundefined{pgf@trapeziumanchorborderreferencepoint}%
+ {\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@trapeziumanchorborderreferencepoint}%
+ %
+ % Adjust the location of the external
+ % point relative to the reference point.
+ %
+ \referencepoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Install the required points and angles.
+ %
+ \installtrapeziumparameters%
+ %
+ % Get the angle of the external point to the \referencepoint.
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ %
+ % *Subtract* the rotation from the external angle. This is
+ % why the border point angles do not neeed to be rotated.
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ %
+ % Get the relevant angles for the reference point.
+ %
+ \let\externalangle\pgfmathresult%
+ \ifx\referencepoint\basepoint%
+ \let\angletoupperright\baseangletoupperright%
+ \let\angletoupperleft\baseangletoupperleft%
+ \let\angletolowerright\baseangletolowerright%
+ \let\angletolowerleft\baseangletolowerleft%
+ \else%
+ \ifx\referencepoint\midpoint%
+ \let\angletoupperright\midangletoupperright%
+ \let\angletoupperleft\midangletoupperleft%
+ \let\angletolowerright\midangletolowerright%
+ \let\angletolowerleft\midangletolowerleft%
+ \fi\fi%
+ %
+ % Find the line on the border...
+ %
+ \ifdim\externalangle pt<\angletoupperright pt\relax%
+ \let\firstpoint\upperrightborderpoint%
+ \let\secondpoint\lowerrightborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletoupperleft pt\relax%
+ \let\firstpoint\upperleftborderpoint%
+ \let\secondpoint\upperrightborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletolowerleft pt\relax%
+ \let\firstpoint\upperleftborderpoint%
+ \let\secondpoint\lowerleftborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletolowerright pt\relax%
+ \let\firstpoint\lowerleftborderpoint%
+ \let\secondpoint\lowerrightborderpoint%
+ \else%
+ \let\firstpoint\upperrightborderpoint%
+ \let\secondpoint\lowerrightborderpoint%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ %
+ % ...and thus the point on the border.
+ %
+ \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\firstpoint}{\secondpoint}%
+ }%
+}%
% Shape semicircle.
%
-\pgfdeclareshape{semicircle}{
- \savedmacro\installsemicircleparameters{%
- %
- % Get the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \edef\outersep{\the\pgf@x}%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x+.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y+.5\ht\pgfnodeparttextbox%
- \advance\pgf@y+.5\dp\pgfnodeparttextbox%
- %
- % Use the radius of the incircle if required...
- %
- \ifpgfshapeborderusesincircle%
- %
- % Get the rotation (no rounding).
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \pgf@x1.41421\pgf@x%
- \edef\halfheight{\the\pgf@x}%
- \advance\pgf@x\pgf@x%
- \else%
- %
- % Get the rotation (with rounding).
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Calculate the width and height of the node
- % contents, according to any border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \fi%
- \fi%
- \advance\pgf@y\pgf@y%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \pgf@x\pgfmathresult pt\relax%
- \pgf@y.5\pgf@y%
- \edef\halfheight{\the\pgf@y}%
- \fi%
- \edef\defaultradius{\the\pgf@x}%
- %
- % Take into account minimum height and width.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@x<.5\pgf@xa%
- \pgf@x.5\pgf@xa%
- \fi%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@x<\pgf@ya%
- \pgf@x\pgf@ya%
- \fi%
- \edef\semicircleradius{\the\pgf@x}%
- %
- % Find the center/base/mid of the semi circle node.
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y+-.5\dp\pgfnodeparttextbox%
- }%
- \pgfextract@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt\relax%
- }%
- \pgfextract@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- \pgfextract@process\semicirclecenterpoint{%
- \centerpoint%
- \pgf@ya\semicircleradius\relax%
- \advance\pgf@ya-\defaultradius\relax%
- %
- % The point is adjusted to make the node contents
- % appear more centered if the node is enlarged to
- % some minimum size. The factor .4 just seems OK.
- %
- \pgf@ya.4\pgf@ya%
- \advance\pgf@y-\pgf@ya%
- \pgf@ya\halfheight\relax%
- \advance\pgf@y-\pgf@ya%
- }%
- %
- % Add the outer sep to the radius here.
- %
- \pgf@x\semicircleradius\relax%
- \advance\pgf@x\outersep\relax%
- \edef\semicircleradius{\the\pgf@x}%
- \pgfpointdiff{\centerpoint}{\semicirclecenterpoint}%
- \ifdim\pgf@y<0pt\pgf@y-\pgf@y\fi%
- \edef\centerpointdiff{\the\pgf@y}%
- %
- % Calculate the start and end points on the border.
- %
- \pgfextract@process\arcstartborder{%
- \semicirclecenterpoint%
- \advance\pgf@x\semicircleradius\relax%
- }%
- \pgfextract@process\arcendborder{%
- \semicirclecenterpoint%
- \advance\pgf@x-\semicircleradius\relax%
- }%
- %
- % Calculate the start and end *corner* points on the border.
- % This is needed to accommodate the outer sep.
- %
- \pgfextract@process\arcstartcorner{%
- \arcstartborder%
- \advance\pgf@y-\outersep\relax%
- }%
- \pgfextract@process\arcendcorner{%
- \arcendborder%
- \advance\pgf@y-\outersep\relax%
- }
- %
- % Now calculate all the relevant angles.
- %
- % For the center point.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\arcstartborder}%
- \let\angletoarcstartborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcendborder}%
- \let\angletoarcendborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcstartcorner}%
- \let\angletoarcstartcorner\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcendcorner}%
- \let\angletoarcendcorner\pgfmathresult%
- %
- % For the basepoint (rotated about the center point).
- %
- \pgfextract@process\rotatedbasepoint{%
- \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcstartborder}%
- \let\baseangletoarcstartborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcendborder}%
- \let\baseangletoarcendborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcstartcorner}%
- \let\baseangletoarcstartcorner\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcendcorner}%
- \let\baseangletoarcendcorner\pgfmathresult%
- %
- % For the midpoint (rotated about the center point).
- %
- \pgfextract@process\rotatedmidpoint{%
- \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcstartborder}%
- \let\midangletoarcstartborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcendborder}%
- \let\midangletoarcendborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcstartcorner}%
- \let\midangletoarcstartcorner\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcendcorner}%
- \let\midangletoarcendcorner\pgfmathresult%
- %
- % Now, rotate the semicircle points around the centerpoint.
- %
- \pgfextract@process\semicirclecenterpoint{%
- \pgfmathrotatepointaround{\semicirclecenterpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcstartborder{%
- \pgfmathrotatepointaround{\arcstartborder}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcendborder{%
- \pgfmathrotatepointaround{\arcendborder}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcstartcorner{%
- \pgfmathrotatepointaround{\arcstartcorner}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcendcorner{%
- \pgfmathrotatepointaround{\arcendcorner}{\centerpoint}{\rotate}%
- }%
- %
- % Calculate the distance between the base point and the (rotated) semicircle center.
- %
- \pgfpointdiff{\basepoint}{\semicirclecenterpoint}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \edef\basesemicirclecenterdiff{\pgfmathresult pt}%
- %
- % Calculate the distance between the base point and the (rotated) semicircle center.
- %
- \pgfpointdiff{\midpoint}{\semicirclecenterpoint}%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
- \edef\midsemicirclecenterdiff{\pgfmathresult pt}%
- %
- % And save all the stuff.
- %
- \addtosavedmacro{\rotate}%
- \addtosavedmacro{\outersep}%
- \addtosavedmacro{\semicircleradius}%
- %
- \addtosavedmacro{\arcstartborder}%
- \addtosavedmacro{\arcendborder}%
- \addtosavedmacro{\arcstartcorner}%
- \addtosavedmacro{\arcendcorner}%
- \addtosavedmacro{\semicirclecenterpoint}%
- %
- \addtosavedmacro{\angletoarcstartborder}%
- \addtosavedmacro{\angletoarcendborder}%
- \addtosavedmacro{\angletoarcstartcorner}%
- \addtosavedmacro{\angletoarcendcorner}%
- %
- \addtosavedmacro{\centerpointdiff}%
- \addtosavedmacro{\basesemicirclecenterdiff}%
- \addtosavedmacro{\midsemicirclecenterdiff}%
- %
- \addtosavedmacro{\baseangletoarcstartborder}%
- \addtosavedmacro{\baseangletoarcendborder}%
- \addtosavedmacro{\baseangletoarcstartcorner}%
- \addtosavedmacro{\baseangletoarcendcorner}%
- %
- \addtosavedmacro{\midangletoarcstartborder}%
- \addtosavedmacro{\midangletoarcendborder}%
- \addtosavedmacro{\midangletoarcstartcorner}%
- \addtosavedmacro{\midangletoarcendcorner}%
- }
- \savedanchor{\centerpoint}{%
- \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
- \pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}%
- \pgfmathaddtolength\pgf@y{-.5\dp\pgfnodeparttextbox}%
- }
- \savedanchor{\basepoint}{%
- \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
- \pgf@y0pt\relax%
- }
- \savedanchor{\midpoint}{%
- \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }
- \anchor{center}{\centerpoint}
- \anchor{base}{\basepoint}
- \anchor{base west}{%
- \installsemicircleparameters%
- \let\pgf@semicirclereferencepoint\basepoint%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{-\semicircleradius}{0pt}}%
- }
- \anchor{base east}{%
- \installsemicircleparameters%
- \let\pgf@semicirclereferencepoint\basepoint%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{\semicircleradius}{0pt}}%
- }
- \anchor{mid}{\midpoint}
- \anchor{mid west}{%
- \installsemicircleparameters%
- \let\pgf@semicirclereferencepoint\midpoint%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{-\semicircleradius}{0pt}}%
- }
- \anchor{mid east}{%
- \installsemicircleparameters%
- \let\pgf@semicirclereferencepoint\midpoint%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{\semicircleradius}{0pt}}%
- }
- \anchor{apex}{%
- \installsemicircleparameters%
- \pgfmathadd@{\rotate}{90}%
- \let\angle\pgfmathresult%
- \pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\angle}{\semicircleradius}}%
- }
- \anchor{arc start}{%
- \installsemicircleparameters%
- \arcstartcorner%
- }
- \anchor{arc end}{%
- \installsemicircleparameters%
- \arcendcorner%
- }
- \anchor{chord center}{%
- \installsemicircleparameters%
- \pgfpointlineattime{0.5}{\arcstartcorner}{\arcendcorner}%
- }
- \anchor{north}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{90}{\semicircleradius}}%
- }
- \anchor{south}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{270}{\semicircleradius}}%
- }
- \anchor{east}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{0}{\semicircleradius}}%
- }
- \anchor{west}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{180}{\semicircleradius}}%
- }
- \anchor{north west}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{135}{\semicircleradius}}%
- }
- \anchor{south west}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{225}{\semicircleradius}}%
- }
- \anchor{north east}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{45}{\semicircleradius}}%
- }
- \anchor{south east}{%
- \installsemicircleparameters%
- \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{315}{\semicircleradius}}%
- }
- \backgroundpath{%
- \installsemicircleparameters%
- \pgf@x\semicircleradius\relax%
- \advance\pgf@x-\outersep\relax%
- \edef\semicircleradius{\the\pgf@x}%
- \pgfpathmoveto{\pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\rotate}{\semicircleradius}}}%
- {%
- \pgftransformrotate{\rotate}%
- \pgfpatharc{0}{180}{\semicircleradius}%
- \pgfpathclose%
- }%
- }
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % Check if a reference point has been defined (i.e. \midpoint or \basepoint).
- %
- \pgfutil@ifundefined{pgf@semicirclereferencepoint}%
- {\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@semicirclereferencepoint}%
- %
- % Adjust the location of the external point relative to the reference point.
- %
- \referencepoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Install the required points and angles.
- %
- \installsemicircleparameters%
- %
- % Get the angle of the external point to the \referencepoint.
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- \let\externalangle\pgfmathresult%
- %
- % *Subtract* the rotation from the external angle.
- %
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\angle\pgfmathresult%
- \ifx\referencepoint\basepoint%
- \let\angletoarcstartborder\baseangletoarcstartborder%
- \let\angletoarcendborder\baseangletoarcendborder%
- \let\angletoarcstartcorner\baseangletoarcstartcorner%
- \let\angletoarcendcorner\baseangletoarcendcorner%
- \let\centerpointdiff\basesemicirclecenterdiff%
- \else%
- \ifx\referencepoint\midpoint%
- \let\angletoarcstartborder\midangletoarcstartborder%
- \let\angletoarcendborder\midangletoarcendborder%
- \let\angletoarcstartcorner\midangletoarcstartcorner%
- \let\angletoarcendcorner\midangletoarcendcorner%
- \let\centerpointdiff\midsemicirclecenterdiff%
- \fi\fi%
- %
- % Determine if the line will cross the semicircle arc, or the chord.
- %
- \ifdim\angle pt>\angletoarcstartborder pt\relax%
- \let\firstpoint\pgfutil@empty%
- \let\secondpoint\pgfutil@empty%
- \else%
- \ifdim\angle pt>\angletoarcstartcorner pt\relax%
- \let\firstpoint\arcstartcorner%
- \let\secondpoint\arcstartborder%
- \else%
- \ifdim\angle pt>\angletoarcendcorner pt\relax%
- \let\firstpoint\arcendcorner%
- \let\secondpoint\arcstartcorner%
- \else%
- \ifdim\angle pt>\angletoarcendborder pt\relax%
- \let\firstpoint\arcendborder%
- \let\secondpoint\arcendcorner%
- \else%
- \let\firstpoint\pgfutil@empty%
- \let\secondpoint\pgfutil@empty%
- \fi%
- \fi%
- \fi%
- \fi%
- \ifx\firstpoint\pgfutil@empty
- %
- % Calculate the angle from the centre of the semicircle to the
- % point on the semicircle arc which intersects the line from
- % the external point to the reference point...
- %
- \pgfmathanglebetweenlines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\semicirclecenterpoint}{\referencepoint}%
- \pgfmathsin@{\pgfmathresult}%
- \let\sineangle\pgfmathresult%
- \pgf@x\semicircleradius\relax%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
- \let\reciprocalradius\pgfmathresult%
- \pgf@x\centerpointdiff\relax%
- \pgf@x\sineangle\pgf@x%
- \pgf@x\reciprocalradius\pgf@x%
- \pgfmathasin@{\pgfmath@tonumber{\pgf@x}}%
- \pgf@x\pgfmathresult pt\relax%
- \advance\pgf@x\externalangle pt\relax%
- \edef\angle{\pgfmath@tonumber{\pgf@x}}%
- %
- % ...and thus the point on the border.
- %
- \pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\angle}{\semicircleradius}}%
- \else%
- %
- % Calculate the the point where the semicircle chord intersects
- % the line from the external point to the reference point.
- %
- \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\firstpoint}{\secondpoint}%
- \fi%
- }
-}
+\pgfdeclareshape{semicircle}{%
+ \savedmacro\installsemicircleparameters{%
+ %
+ % Get the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\outersep{\the\pgf@x}%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x+.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y+.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y+.5\dp\pgfnodeparttextbox%
+ %
+ % Use the radius of the incircle if required...
+ %
+ \ifpgfshapeborderusesincircle%
+ %
+ % Get the rotation (no rounding).
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgf@x1.41421\pgf@x%
+ \edef\halfheight{\the\pgf@x}%
+ \advance\pgf@x\pgf@x%
+ \else%
+ %
+ % Get the rotation (with rounding).
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Calculate the width and height of the node
+ % contents, according to any border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \fi%
+ \fi%
+ \advance\pgf@y\pgf@y%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \pgf@x\pgfmathresult pt\relax%
+ \pgf@y.5\pgf@y%
+ \edef\halfheight{\the\pgf@y}%
+ \fi%
+ \edef\defaultradius{\the\pgf@x}%
+ %
+ % Take into account minimum height and width.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<\pgf@ya%
+ \pgf@x\pgf@ya%
+ \fi%
+ \edef\semicircleradius{\the\pgf@x}%
+ %
+ % Find the center/base/mid of the semi circle node.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y+-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfextract@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt\relax%
+ }%
+ \pgfextract@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ \pgfextract@process\semicirclecenterpoint{%
+ \centerpoint%
+ \pgf@ya\semicircleradius\relax%
+ \advance\pgf@ya-\defaultradius\relax%
+ %
+ % The point is adjusted to make the node contents
+ % appear more centered if the node is enlarged to
+ % some minimum size. The factor .4 just seems OK.
+ %
+ \pgf@ya.4\pgf@ya%
+ \advance\pgf@y-\pgf@ya%
+ \pgf@ya\halfheight\relax%
+ \advance\pgf@y-\pgf@ya%
+ }%
+ %
+ % Add the outer sep to the radius here.
+ %
+ \pgf@x\semicircleradius\relax%
+ \advance\pgf@x\outersep\relax%
+ \edef\semicircleradius{\the\pgf@x}%
+ \pgfpointdiff{\centerpoint}{\semicirclecenterpoint}%
+ \ifdim\pgf@y<0pt\pgf@y-\pgf@y\fi%
+ \edef\centerpointdiff{\the\pgf@y}%
+ %
+ % Calculate the start and end points on the border.
+ %
+ \pgfextract@process\arcstartborder{%
+ \semicirclecenterpoint%
+ \advance\pgf@x\semicircleradius\relax%
+ }%
+ \pgfextract@process\arcendborder{%
+ \semicirclecenterpoint%
+ \advance\pgf@x-\semicircleradius\relax%
+ }%
+ %
+ % Calculate the start and end *corner* points on the border.
+ % This is needed to accommodate the outer sep.
+ %
+ \pgfextract@process\arcstartcorner{%
+ \arcstartborder%
+ \advance\pgf@y-\outersep\relax%
+ }%
+ \pgfextract@process\arcendcorner{%
+ \arcendborder%
+ \advance\pgf@y-\outersep\relax%
+ }
+ %
+ % Now calculate all the relevant angles.
+ %
+ % For the center point.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcstartborder}%
+ \let\angletoarcstartborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcendborder}%
+ \let\angletoarcendborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcstartcorner}%
+ \let\angletoarcstartcorner\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcendcorner}%
+ \let\angletoarcendcorner\pgfmathresult%
+ %
+ % For the basepoint (rotated about the center point).
+ %
+ \pgfextract@process\rotatedbasepoint{%
+ \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcstartborder}%
+ \let\baseangletoarcstartborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcendborder}%
+ \let\baseangletoarcendborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcstartcorner}%
+ \let\baseangletoarcstartcorner\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\arcendcorner}%
+ \let\baseangletoarcendcorner\pgfmathresult%
+ %
+ % For the midpoint (rotated about the center point).
+ %
+ \pgfextract@process\rotatedmidpoint{%
+ \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcstartborder}%
+ \let\midangletoarcstartborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcendborder}%
+ \let\midangletoarcendborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcstartcorner}%
+ \let\midangletoarcstartcorner\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\arcendcorner}%
+ \let\midangletoarcendcorner\pgfmathresult%
+ %
+ % Now, rotate the semicircle points around the centerpoint.
+ %
+ \pgfextract@process\semicirclecenterpoint{%
+ \pgfmathrotatepointaround{\semicirclecenterpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcstartborder{%
+ \pgfmathrotatepointaround{\arcstartborder}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcendborder{%
+ \pgfmathrotatepointaround{\arcendborder}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcstartcorner{%
+ \pgfmathrotatepointaround{\arcstartcorner}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcendcorner{%
+ \pgfmathrotatepointaround{\arcendcorner}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Calculate the distance between the base point and the (rotated) semicircle center.
+ %
+ \pgfpointdiff{\basepoint}{\semicirclecenterpoint}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \edef\basesemicirclecenterdiff{\pgfmathresult pt}%
+ %
+ % Calculate the distance between the base point and the (rotated) semicircle center.
+ %
+ \pgfpointdiff{\midpoint}{\semicirclecenterpoint}%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ \edef\midsemicirclecenterdiff{\pgfmathresult pt}%
+ %
+ % And save all the stuff.
+ %
+ \addtosavedmacro{\rotate}%
+ \addtosavedmacro{\outersep}%
+ \addtosavedmacro{\semicircleradius}%
+ %
+ \addtosavedmacro{\arcstartborder}%
+ \addtosavedmacro{\arcendborder}%
+ \addtosavedmacro{\arcstartcorner}%
+ \addtosavedmacro{\arcendcorner}%
+ \addtosavedmacro{\semicirclecenterpoint}%
+ %
+ \addtosavedmacro{\angletoarcstartborder}%
+ \addtosavedmacro{\angletoarcendborder}%
+ \addtosavedmacro{\angletoarcstartcorner}%
+ \addtosavedmacro{\angletoarcendcorner}%
+ %
+ \addtosavedmacro{\centerpointdiff}%
+ \addtosavedmacro{\basesemicirclecenterdiff}%
+ \addtosavedmacro{\midsemicirclecenterdiff}%
+ %
+ \addtosavedmacro{\baseangletoarcstartborder}%
+ \addtosavedmacro{\baseangletoarcendborder}%
+ \addtosavedmacro{\baseangletoarcstartcorner}%
+ \addtosavedmacro{\baseangletoarcendcorner}%
+ %
+ \addtosavedmacro{\midangletoarcstartborder}%
+ \addtosavedmacro{\midangletoarcendborder}%
+ \addtosavedmacro{\midangletoarcstartcorner}%
+ \addtosavedmacro{\midangletoarcendcorner}%
+ }%
+ \savedanchor{\centerpoint}{%
+ \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
+ \pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}%
+ \pgfmathaddtolength\pgf@y{-.5\dp\pgfnodeparttextbox}%
+ }%
+ \savedanchor{\basepoint}{%
+ \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
+ \pgf@y0pt\relax%
+ }%
+ \savedanchor{\midpoint}{%
+ \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{base}{\basepoint}%
+ \anchor{base west}{%
+ \installsemicircleparameters%
+ \let\pgf@semicirclereferencepoint\basepoint%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{-\semicircleradius}{0pt}}%
+ }%
+ \anchor{base east}{%
+ \installsemicircleparameters%
+ \let\pgf@semicirclereferencepoint\basepoint%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{\semicircleradius}{0pt}}%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid west}{%
+ \installsemicircleparameters%
+ \let\pgf@semicirclereferencepoint\midpoint%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{-\semicircleradius}{0pt}}%
+ }%
+ \anchor{mid east}{%
+ \installsemicircleparameters%
+ \let\pgf@semicirclereferencepoint\midpoint%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpoint{\semicircleradius}{0pt}}%
+ }%
+ \anchor{apex}{%
+ \installsemicircleparameters%
+ \pgfmathadd@{\rotate}{90}%
+ \let\angle\pgfmathresult%
+ \pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\angle}{\semicircleradius}}%
+ }%
+ \anchor{arc start}{%
+ \installsemicircleparameters%
+ \arcstartcorner%
+ }%
+ \anchor{arc end}{%
+ \installsemicircleparameters%
+ \arcendcorner%
+ }%
+ \anchor{chord center}{%
+ \installsemicircleparameters%
+ \pgfpointlineattime{0.5}{\arcstartcorner}{\arcendcorner}%
+ }%
+ \anchor{north}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{90}{\semicircleradius}}%
+ }%
+ \anchor{south}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{270}{\semicircleradius}}%
+ }%
+ \anchor{east}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{0}{\semicircleradius}}%
+ }%
+ \anchor{west}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{180}{\semicircleradius}}%
+ }%
+ \anchor{north west}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{135}{\semicircleradius}}%
+ }%
+ \anchor{south west}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{225}{\semicircleradius}}%
+ }%
+ \anchor{north east}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{45}{\semicircleradius}}%
+ }%
+ \anchor{south east}{%
+ \installsemicircleparameters%
+ \csname pgf@anchor@semicircle@border\endcsname{\pgfqpointpolar{315}{\semicircleradius}}%
+ }%
+ \backgroundpath{%
+ \installsemicircleparameters%
+ \pgf@x\semicircleradius\relax%
+ \advance\pgf@x-\outersep\relax%
+ \edef\semicircleradius{\the\pgf@x}%
+ \pgfpathmoveto{\pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\rotate}{\semicircleradius}}}%
+ {%
+ \pgftransformrotate{\rotate}%
+ \pgfpatharc{0}{180}{\semicircleradius}%
+ \pgfpathclose%
+ }%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % Check if a reference point has been defined (i.e. \midpoint or \basepoint).
+ %
+ \pgfutil@ifundefined{pgf@semicirclereferencepoint}%
+ {\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@semicirclereferencepoint}%
+ %
+ % Adjust the location of the external point relative to the reference point.
+ %
+ \referencepoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Install the required points and angles.
+ %
+ \installsemicircleparameters%
+ %
+ % Get the angle of the external point to the \referencepoint.
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ \let\externalangle\pgfmathresult%
+ %
+ % *Subtract* the rotation from the external angle.
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\angle\pgfmathresult%
+ \ifx\referencepoint\basepoint%
+ \let\angletoarcstartborder\baseangletoarcstartborder%
+ \let\angletoarcendborder\baseangletoarcendborder%
+ \let\angletoarcstartcorner\baseangletoarcstartcorner%
+ \let\angletoarcendcorner\baseangletoarcendcorner%
+ \let\centerpointdiff\basesemicirclecenterdiff%
+ \else%
+ \ifx\referencepoint\midpoint%
+ \let\angletoarcstartborder\midangletoarcstartborder%
+ \let\angletoarcendborder\midangletoarcendborder%
+ \let\angletoarcstartcorner\midangletoarcstartcorner%
+ \let\angletoarcendcorner\midangletoarcendcorner%
+ \let\centerpointdiff\midsemicirclecenterdiff%
+ \fi\fi%
+ %
+ % Determine if the line will cross the semicircle arc, or the chord.
+ %
+ \ifdim\angle pt>\angletoarcstartborder pt\relax%
+ \let\firstpoint\pgfutil@empty%
+ \let\secondpoint\pgfutil@empty%
+ \else%
+ \ifdim\angle pt>\angletoarcstartcorner pt\relax%
+ \let\firstpoint\arcstartcorner%
+ \let\secondpoint\arcstartborder%
+ \else%
+ \ifdim\angle pt>\angletoarcendcorner pt\relax%
+ \let\firstpoint\arcendcorner%
+ \let\secondpoint\arcstartcorner%
+ \else%
+ \ifdim\angle pt>\angletoarcendborder pt\relax%
+ \let\firstpoint\arcendborder%
+ \let\secondpoint\arcendcorner%
+ \else%
+ \let\firstpoint\pgfutil@empty%
+ \let\secondpoint\pgfutil@empty%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \ifx\firstpoint\pgfutil@empty
+ %
+ % Calculate the angle from the centre of the semicircle to the
+ % point on the semicircle arc which intersects the line from
+ % the external point to the reference point...
+ %
+ \pgfmathanglebetweenlines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\semicirclecenterpoint}{\referencepoint}%
+ \pgfmathsin@{\pgfmathresult}%
+ \let\sineangle\pgfmathresult%
+ \pgf@x\semicircleradius\relax%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
+ \let\reciprocalradius\pgfmathresult%
+ \pgf@x\centerpointdiff\relax%
+ \pgf@x\sineangle\pgf@x%
+ \pgf@x\reciprocalradius\pgf@x%
+ \pgfmathasin@{\pgfmath@tonumber{\pgf@x}}%
+ \pgf@x\pgfmathresult pt\relax%
+ \advance\pgf@x\externalangle pt\relax%
+ \edef\angle{\pgfmath@tonumber{\pgf@x}}%
+ %
+ % ...and thus the point on the border.
+ %
+ \pgfpointadd{\semicirclecenterpoint}{\pgfqpointpolar{\angle}{\semicircleradius}}%
+ \else%
+ %
+ % Calculate the the point where the semicircle chord intersects
+ % the line from the external point to the reference point.
+ %
+ \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\firstpoint}{\secondpoint}%
+ \fi%
+ }%
+}%
% Keys for shape isosceles triangle
%
% /pgf/isosceles triangle apex angle : angle at the apex of the triangle.
\pgfkeys{/pgf/.cd,
- isosceles triangle apex angle/.initial=45,
- isosceles triangle stretches/.is if=pgf@lib@sh@isosceslestrianglestretches
-}
+ isosceles triangle apex angle/.initial=45,
+ isosceles triangle stretches/.is if=pgf@lib@sh@isosceslestrianglestretches
+}%
\newif\ifpgf@lib@sh@isosceslestrianglestretches
-\pgfdeclareshape{isosceles triangle}{
- \savedmacro\trianglepoints{%
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/isosceles triangle apex angle}}%
- \divide\pgf@x2\relax%
- \edef\halfapexangle{\pgfmath@tonumber{\pgf@x}}%
- \addtosavedmacro\halfapexangle%
- %
- \pgfmathtan@{\halfapexangle}%
- \let\tanhalfapexangle\pgfmathresult%
- %
- \pgfmathcot@{\halfapexangle}%
- \let\cothalfapexangle\pgfmathresult%
- %
- \pgfmathsin@{\halfapexangle}%
- \let\sinhalfapexangle\pgfmathresult%
- %
- \pgfmathreciprocal@{\pgfmathresult}%
- \let\cosechalfapexangle\pgfmathresult%
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- %
- \ifpgfshapeborderusesincircle%
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \else%
- \pgf@y\pgf@x%
- \fi%
- \pgf@x1.414213\pgf@x%
- \pgf@y1.414213\pgf@y%
- %
- \pgf@xa\pgf@x%
- \advance\pgf@xa\cosechalfapexangle\pgf@x%
- \pgf@ya\tanhalfapexangle\pgf@xa%
- \else%
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \pgfmathsetcount\c@pgf@counta{+\pgfmathresult}%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \edef\rotate{\the\c@pgf@counta}%
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xa%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xa%
- \fi%
- \fi%
- %
- \pgf@xa2.0\pgf@x%
- \pgf@ya\tanhalfapexangle\pgf@xa%
- \advance\pgf@xa\cothalfapexangle\pgf@y%
- \advance\pgf@ya\pgf@y%
- \fi%
- \addtosavedmacro\rotate%
- \ifdim\pgf@xa=0pt\relax%
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum height}}%
- \fi%
- % Adjust for minimum height and width.
- %
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@ya<.5\pgf@yb%
- \ifpgf@lib@sh@isosceslestrianglestretches%
- \pgf@ya.5\pgf@yb%
- %
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@ya}}{\pgfmath@tonumber{\pgf@xa}}%
- \pgfmathatan@{\pgfmathresult}%
- \let\halfapexangle\pgfmathresult%
- %
- \else%
- \pgf@ya.5\pgf@yb%
- \pgf@xa\cothalfapexangle\pgf@ya%
- \fi%
- \fi%
- %
- \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@xa<\pgf@xb%
- \ifpgf@lib@sh@isosceslestrianglestretches%
- \pgf@xa\pgf@xb%
- %
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@ya}}{\pgfmath@tonumber{\pgf@xa}}%
- \pgfmathatan@{\pgfmathresult}%
- \let\halfapexangle\pgfmathresult%
- %
- \else%
- \pgf@xa\pgf@xb%
- \pgf@ya\tanhalfapexangle\pgf@xa%
- \fi%
- \fi%
- %
- %
- % Now find the ``offset height'' (h'). This is the distance from the
- % center of the node contents to the base of the triangle.
- %
- \ifpgfshapeborderusesincircle%
- %
- % h' = H*sin(a/2) / (1+sin(a/2))
- %
- % where:
- % H = the height of the triangle.
- % a = the apex angle.
- %
- \pgf@xc\pgf@xa%
- \pgfmathsin@{\halfapexangle}%
- \pgf@xc\pgfmathresult\pgf@xc%
- \pgf@yc1pt\relax%
- \advance\pgf@yc\pgfmathresult pt\relax%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@xc}}{\pgfmath@tonumber{\pgf@yc}}
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \else%
- %
- % h' = 0.5*h + (0.5*(W-w)*cos(a/2) - h*sin(a/2))/(1+sin(a/2))
- %
- % where:
- % h = the height of the node contents.
- % w = the width of the node contents.
- % W = the width of the triangle.
- % a = the apex angle.
- %
- \pgf@xc\pgf@ya%
- \advance\pgf@xc-\pgf@y%
- \pgfmathcos@{\halfapexangle}%
- \pgf@xc\pgfmathresult\pgf@xc%
- \pgfmathsin@{\halfapexangle}%
- \advance\pgf@xc-\pgfmathresult\pgf@x%
- \advance\pgf@xc-\pgfmathresult\pgf@x%
- \pgf@yc\pgfmathresult pt\relax%
- \advance\pgf@yc1pt\relax%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@xc}}{\pgfmath@tonumber{\pgf@yc}}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \advance\pgfutil@tempdima\pgf@x%
- \fi%
- \pgfextract@process\apex{%
- \pgf@y0pt%
- \pgf@x\pgf@xa%
- \advance\pgf@x-\pgfutil@tempdima%
- }%
- \addtosavedmacro\apex%
- %
- \pgfextract@process\lowerleft{%
- \pgf@y\pgf@ya%
- \pgf@x-\pgfutil@tempdima%
- }%
- \addtosavedmacro\lowerleft%
- %
- \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@xb<\pgf@yb%
- \pgf@xb\pgf@yb%
- \fi%
- \pgfextract@process\apexanchor{%
- \apex%
- \advance\pgf@x\cosechalfapexangle\pgf@xb%
- }%
- \addtosavedmacro\apexanchor%
- %
- \pgf@yc-\halfapexangle pt\relax%
- \advance\pgf@yc90pt\relax%
- \divide\pgf@yc2\relax%
- \pgfmathcot@{\pgfmath@tonumber{\pgf@yc}}%
- \pgfextract@process\lowerleftanchor{%
- \lowerleft%
- \advance\pgf@y\pgfmathresult\pgf@xb%
- \advance\pgf@x-\pgf@xb%
- }%
- \addtosavedmacro\lowerleftanchor%
- %
- \pgfextract@process\lowerrightanchor{%
- \lowerleftanchor%
- \pgf@y-\pgf@y%
- }%
- \addtosavedmacro\lowerrightanchor%
- }
- \anchor{apex}{%
- \trianglepoints%
- \pgfpointadd{\centerpoint}{%
- \pgfmathrotatepointaround{\apexanchor}{\pgfpointorigin}{\rotate}%
- }%
- }%
- \anchor{left corner}{%
- \trianglepoints%
- \pgfpointadd{\centerpoint}{%
- \pgfmathrotatepointaround{\lowerleftanchor}{\pgfpointorigin}{\rotate}%
- }%
- }%
- \anchor{right corner}{%
- \trianglepoints%
- \pgfpointadd{\centerpoint}{%
- \pgfmathrotatepointaround{\lowerrightanchor}{\pgfpointorigin}{\rotate}%
- }%
- }%
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid west}{%
- \trianglepoints%
- \let\pgf@isoscelestriangle@referencepoint\midpoint%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
- }%
- \anchor{mid east}{%
- \trianglepoints%
- \let\pgf@isoscelestriangle@referencepoint\midpoint%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
- }%
- \anchor{base}{\basepoint}%
- \anchor{base west}{%
- \trianglepoints%
- \let\pgf@isoscelestriangle@referencepoint\basepoint%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
- }%
- \anchor{base east}{%
- \trianglepoints%
- \let\pgf@isoscelestriangle@referencepoint\basepoint%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
- }%
- \anchor{north}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{0pt}{1pt}}%
- }
- \anchor{south}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{0pt}{-1pt}}%
- }
- \anchor{east}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
- }
- \anchor{west}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
- }
- \anchor{north east}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{1pt}}%
- }
- \anchor{south west}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{-1pt}}%
- }
- \anchor{south east}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{-1pt}}%
- }
- \anchor{north west}{%
- \trianglepoints%
- \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{1pt}}%
- }
- \anchor{left side}{%
- \trianglepoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{\pgfpointlineattime{0.5}{\lowerleftanchor}{\apexanchor}}{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{right side}{%
- \trianglepoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{\pgfpointlineattime{0.5}{\lowerrightanchor}{\apexanchor}}{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \anchor{lower side}{%
- \trianglepoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{\pgfpointlineattime{0.5}{\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }
- \backgroundpath{%
- \trianglepoints%
- {%
- \pgftransformshift{\centerpoint}%
- \pgftransformrotate{\rotate}%
- \pgfpathmoveto{\apex}%
- \pgfpathlineto{\lowerleft}%
- \pgfpathlineto{\lowerleft\pgf@y-\pgf@y}%
- \pgfpathclose%
- }%
- }
- \anchorborder{%
- \pgfutil@ifundefined{pgf@isoscelestriangle@referencepoint}{\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@isoscelestriangle@referencepoint}%
- \pgfextract@process\externalpoint{%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \referencepoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \trianglepoints%
- \pgfmathanglebetweenpoints{\referencepoint}{\externalpoint}%
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \pgfmathmod@{\pgfmathresult}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\lowerrightanchor}}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\lowerleftanchor}}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\apexanchor}}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \let\firstpoint\apexanchor%
- \let\secondpoint\lowerleftanchor%
- \else%
- \let\firstpoint\apexanchor%
- \let\secondpoint\lowerrightanchor%
- \fi%
- \else%
- \let\firstpoint\lowerleftanchor%
- \let\secondpoint\lowerrightanchor%
- \fi%
- \else%
- \let\firstpoint\lowerrightanchor%
- \let\secondpoint\apexanchor%
- \fi%
- \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
- {\pgfmathrotatepointaround{\pgfpointadd{\centerpoint}{\firstpoint}}{\centerpoint}{\rotate}}%
- {\pgfmathrotatepointaround{\pgfpointadd{\centerpoint}{\secondpoint}}{\centerpoint}{\rotate}}%
- }%
-}
+\pgfdeclareshape{isosceles triangle}{%
+ \savedmacro\trianglepoints{%
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/isosceles triangle apex angle}}%
+ \divide\pgf@x2\relax%
+ \edef\halfapexangle{\pgfmath@tonumber{\pgf@x}}%
+ \addtosavedmacro\halfapexangle%
+ %
+ \pgfmathtan@{\halfapexangle}%
+ \let\tanhalfapexangle\pgfmathresult%
+ %
+ \pgfmathcot@{\halfapexangle}%
+ \let\cothalfapexangle\pgfmathresult%
+ %
+ \pgfmathsin@{\halfapexangle}%
+ \let\sinhalfapexangle\pgfmathresult%
+ %
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \let\cosechalfapexangle\pgfmathresult%
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ %
+ \ifpgfshapeborderusesincircle%
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \else%
+ \pgf@y\pgf@x%
+ \fi%
+ \pgf@x1.414213\pgf@x%
+ \pgf@y1.414213\pgf@y%
+ %
+ \pgf@xa\pgf@x%
+ \advance\pgf@xa\cosechalfapexangle\pgf@x%
+ \pgf@ya\tanhalfapexangle\pgf@xa%
+ \else%
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \pgfmathsetcount\c@pgf@counta{+\pgfmathresult}%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \edef\rotate{\the\c@pgf@counta}%
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xa%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xa%
+ \fi%
+ \fi%
+ %
+ \pgf@xa2.0\pgf@x%
+ \pgf@ya\tanhalfapexangle\pgf@xa%
+ \advance\pgf@xa\cothalfapexangle\pgf@y%
+ \advance\pgf@ya\pgf@y%
+ \fi%
+ \addtosavedmacro\rotate%
+ \ifdim\pgf@xa=0pt\relax%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum height}}%
+ \fi%
+ % Adjust for minimum height and width.
+ %
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@ya<.5\pgf@yb%
+ \ifpgf@lib@sh@isosceslestrianglestretches%
+ \pgf@ya.5\pgf@yb%
+ %
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@ya}}{\pgfmath@tonumber{\pgf@xa}}%
+ \pgfmathatan@{\pgfmathresult}%
+ \let\halfapexangle\pgfmathresult%
+ %
+ \else%
+ \pgf@ya.5\pgf@yb%
+ \pgf@xa\cothalfapexangle\pgf@ya%
+ \fi%
+ \fi%
+ %
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@xa<\pgf@xb%
+ \ifpgf@lib@sh@isosceslestrianglestretches%
+ \pgf@xa\pgf@xb%
+ %
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@ya}}{\pgfmath@tonumber{\pgf@xa}}%
+ \pgfmathatan@{\pgfmathresult}%
+ \let\halfapexangle\pgfmathresult%
+ %
+ \else%
+ \pgf@xa\pgf@xb%
+ \pgf@ya\tanhalfapexangle\pgf@xa%
+ \fi%
+ \fi%
+ %
+ %
+ % Now find the ``offset height'' (h'). This is the distance from the
+ % center of the node contents to the base of the triangle.
+ %
+ \ifpgfshapeborderusesincircle%
+ %
+ % h' = H*sin(a/2) / (1+sin(a/2))
+ %
+ % where:
+ % H = the height of the triangle.
+ % a = the apex angle.
+ %
+ \pgf@xc\pgf@xa%
+ \pgfmathsin@{\halfapexangle}%
+ \pgf@xc\pgfmathresult\pgf@xc%
+ \pgf@yc1pt\relax%
+ \advance\pgf@yc\pgfmathresult pt\relax%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@xc}}{\pgfmath@tonumber{\pgf@yc}}
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \else%
+ %
+ % h' = 0.5*h + (0.5*(W-w)*cos(a/2) - h*sin(a/2))/(1+sin(a/2))
+ %
+ % where:
+ % h = the height of the node contents.
+ % w = the width of the node contents.
+ % W = the width of the triangle.
+ % a = the apex angle.
+ %
+ \pgf@xc\pgf@ya%
+ \advance\pgf@xc-\pgf@y%
+ \pgfmathcos@{\halfapexangle}%
+ \pgf@xc\pgfmathresult\pgf@xc%
+ \pgfmathsin@{\halfapexangle}%
+ \advance\pgf@xc-\pgfmathresult\pgf@x%
+ \advance\pgf@xc-\pgfmathresult\pgf@x%
+ \pgf@yc\pgfmathresult pt\relax%
+ \advance\pgf@yc1pt\relax%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@xc}}{\pgfmath@tonumber{\pgf@yc}}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \advance\pgfutil@tempdima\pgf@x%
+ \fi%
+ \pgfextract@process\apex{%
+ \pgf@y0pt%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x-\pgfutil@tempdima%
+ }%
+ \addtosavedmacro\apex%
+ %
+ \pgfextract@process\lowerleft{%
+ \pgf@y\pgf@ya%
+ \pgf@x-\pgfutil@tempdima%
+ }%
+ \addtosavedmacro\lowerleft%
+ %
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \pgf@xb\pgf@yb%
+ \fi%
+ \pgfextract@process\apexanchor{%
+ \apex%
+ \advance\pgf@x\cosechalfapexangle\pgf@xb%
+ }%
+ \addtosavedmacro\apexanchor%
+ %
+ \pgf@yc-\halfapexangle pt\relax%
+ \advance\pgf@yc90pt\relax%
+ \divide\pgf@yc2\relax%
+ \pgfmathcot@{\pgfmath@tonumber{\pgf@yc}}%
+ \pgfextract@process\lowerleftanchor{%
+ \lowerleft%
+ \advance\pgf@y\pgfmathresult\pgf@xb%
+ \advance\pgf@x-\pgf@xb%
+ }%
+ \addtosavedmacro\lowerleftanchor%
+ %
+ \pgfextract@process\lowerrightanchor{%
+ \lowerleftanchor%
+ \pgf@y-\pgf@y%
+ }%
+ \addtosavedmacro\lowerrightanchor%
+ }%
+ \anchor{apex}{%
+ \trianglepoints%
+ \pgfpointadd{\centerpoint}{%
+ \pgfmathrotatepointaround{\apexanchor}{\pgfpointorigin}{\rotate}%
+ }%
+ }%
+ \anchor{left corner}{%
+ \trianglepoints%
+ \pgfpointadd{\centerpoint}{%
+ \pgfmathrotatepointaround{\lowerleftanchor}{\pgfpointorigin}{\rotate}%
+ }%
+ }%
+ \anchor{right corner}{%
+ \trianglepoints%
+ \pgfpointadd{\centerpoint}{%
+ \pgfmathrotatepointaround{\lowerrightanchor}{\pgfpointorigin}{\rotate}%
+ }%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid west}{%
+ \trianglepoints%
+ \let\pgf@isoscelestriangle@referencepoint\midpoint%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
+ }%
+ \anchor{mid east}{%
+ \trianglepoints%
+ \let\pgf@isoscelestriangle@referencepoint\midpoint%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base west}{%
+ \trianglepoints%
+ \let\pgf@isoscelestriangle@referencepoint\basepoint%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
+ }%
+ \anchor{base east}{%
+ \trianglepoints%
+ \let\pgf@isoscelestriangle@referencepoint\basepoint%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
+ }%
+ \anchor{north}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{0pt}{1pt}}%
+ }%
+ \anchor{south}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{0pt}{-1pt}}%
+ }%
+ \anchor{east}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{0pt}}%
+ }%
+ \anchor{west}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{1pt}}%
+ }%
+ \anchor{south west}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{-1pt}}%
+ }%
+ \anchor{south east}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{1pt}{-1pt}}%
+ }%
+ \anchor{north west}{%
+ \trianglepoints%
+ \csname pgf@anchor@isosceles triangle@border\endcsname{\pgfqpoint{-1pt}{1pt}}%
+ }%
+ \anchor{left side}{%
+ \trianglepoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{\pgfpointlineattime{0.5}{\lowerleftanchor}{\apexanchor}}{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{right side}{%
+ \trianglepoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{\pgfpointlineattime{0.5}{\lowerrightanchor}{\apexanchor}}{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{lower side}{%
+ \trianglepoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{\pgfpointlineattime{0.5}{\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \backgroundpath{%
+ \trianglepoints%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgftransformrotate{\rotate}%
+ \pgfpathmoveto{\apex}%
+ \pgfpathlineto{\lowerleft}%
+ \pgfpathlineto{\lowerleft\pgf@y-\pgf@y}%
+ \pgfpathclose%
+ }%
+ }%
+ \anchorborder{%
+ \pgfutil@ifundefined{pgf@isoscelestriangle@referencepoint}{\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@isoscelestriangle@referencepoint}%
+ \pgfextract@process\externalpoint{%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \referencepoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \trianglepoints%
+ \pgfmathanglebetweenpoints{\referencepoint}{\externalpoint}%
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \pgfmathmod@{\pgfmathresult}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\lowerrightanchor}}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\lowerleftanchor}}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\centerpoint}{\apexanchor}}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \let\firstpoint\apexanchor%
+ \let\secondpoint\lowerleftanchor%
+ \else%
+ \let\firstpoint\apexanchor%
+ \let\secondpoint\lowerrightanchor%
+ \fi%
+ \else%
+ \let\firstpoint\lowerleftanchor%
+ \let\secondpoint\lowerrightanchor%
+ \fi%
+ \else%
+ \let\firstpoint\lowerrightanchor%
+ \let\secondpoint\apexanchor%
+ \fi%
+ \pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
+ {\pgfmathrotatepointaround{\pgfpointadd{\centerpoint}{\firstpoint}}{\centerpoint}{\rotate}}%
+ {\pgfmathrotatepointaround{\pgfpointadd{\centerpoint}{\secondpoint}}{\centerpoint}{\rotate}}%
+ }%
+}%
@@ -2342,654 +2340,654 @@
%
%
\pgfkeys{/pgf/.cd,
- kite upper vertex angle/.initial=120,
- kite lower vertex angle/.initial=60,
- kite vertex angles/.code={%
- \pgfutil@in@{and}{#1}%
- \ifpgfutil@in@%
- \def\pgf@marshal##1and##2\@@{%
- \pgfkeys{/pgf/kite upper vertex angle=##1}%
- \pgfkeys{/pgf/kite lower vertex angle=##2}%
- }%
- \expandafter\pgf@marshal#1\@@%
- \else%
- \pgfkeys{/pgf/kite upper vertex angle=#1}%
- \pgfkeys{/pgf/kite lower vertex angle=#1}%
- \fi%
- }%
-}
+ kite upper vertex angle/.initial=120,
+ kite lower vertex angle/.initial=60,
+ kite vertex angles/.code={%
+ \pgfutil@in@{and}{#1}%
+ \ifpgfutil@in@%
+ \def\pgf@marshal##1and##2\@@{%
+ \pgfkeys{/pgf/kite upper vertex angle=##1}%
+ \pgfkeys{/pgf/kite lower vertex angle=##2}%
+ }%
+ \expandafter\pgf@marshal#1\@@%
+ \else%
+ \pgfkeys{/pgf/kite upper vertex angle=#1}%
+ \pgfkeys{/pgf/kite lower vertex angle=#1}%
+ \fi%
+ }%
+}%
% Shape kite.
%
-\pgfdeclareshape{kite}{
- \savedmacro\installkiteparameters{%
- %
- % Get the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \edef\outersep{\the\pgf@x}%
- %
- % Calculate the centre, base and mid points of the node.
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \pgfextract@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt\relax%
- }%
- \pgfextract@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % Halve the vertex angles.
- %
- \pgfmathdivide{\pgfkeysvalueof{/pgf/kite upper vertex angle}}{2}%
- \let\halfuppervertexangle\pgfmathresult%
- \pgfmathdivide{\pgfkeysvalueof{/pgf/kite lower vertex angle}}{2}%
- \let\halflowervertexangle\pgfmathresult%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \ifpgfshapeborderusesincircle%
- %
- % Get the rotation.
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- %
- % Get the radis of the incircle.
- %
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \pgf@x1.41421\pgf@x%
- %
- % Get the distances from the upper and lower verticies
- % to the center of the incircle.
- %
- \pgfmathsin@{\halfuppervertexangle}%
- \let\sinehalfuppervertexangle\pgfmathresult%
- \pgfmathreciprocal@{\pgfmathresult}%
- \let\cosechalfuppervertexangle\pgfmathresult%
- \pgf@ya\pgfmathresult\pgf@x%
- \pgfmathsin@{\halflowervertexangle}%
- \let\sinehalflowervertexangle\pgfmathresult%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@yb\pgfmathresult\pgf@x%
- %
- % Now calculate vertical offset (yc) between the center of
- % the incircle, and the intersection of the kite diagonals.
- %
- % yc = x * cosec(a/2) - x * cot(a/2) * (sin(a/2) + sin(b/2)) * cosec(a/2 + b/2)
- %
- % where:
- % x = the incircle radius.
- % a = the upper vertex angle.
- % b = the lower vertex angle.
- %
- \pgf@yc\pgf@x%
- \pgfmathadd@{\halfuppervertexangle}{\halflowervertexangle}%
- \pgfmathcosec@{\pgfmathresult}%
- \pgf@yc\pgfmathresult\pgf@yc%
- \pgfmathadd@{\sinehalfuppervertexangle}{\sinehalflowervertexangle}%
+\pgfdeclareshape{kite}{%
+ \savedmacro\installkiteparameters{%
+ %
+ % Get the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\outersep{\the\pgf@x}%
+ %
+ % Calculate the centre, base and mid points of the node.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfextract@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt\relax%
+ }%
+ \pgfextract@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % Halve the vertex angles.
+ %
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/kite upper vertex angle}}{2}%
+ \let\halfuppervertexangle\pgfmathresult%
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/kite lower vertex angle}}{2}%
+ \let\halflowervertexangle\pgfmathresult%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \ifpgfshapeborderusesincircle%
+ %
+ % Get the rotation.
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ %
+ % Get the radius of the incircle.
+ %
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgf@x1.41421\pgf@x%
+ %
+ % Get the distances from the upper and lower vertices
+ % to the center of the incircle.
+ %
+ \pgfmathsin@{\halfuppervertexangle}%
+ \let\sinehalfuppervertexangle\pgfmathresult%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \let\cosechalfuppervertexangle\pgfmathresult%
+ \pgf@ya\pgfmathresult\pgf@x%
+ \pgfmathsin@{\halflowervertexangle}%
+ \let\sinehalflowervertexangle\pgfmathresult%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@yb\pgfmathresult\pgf@x%
+ %
+ % Now calculate vertical offset (yc) between the center of
+ % the incircle, and the intersection of the kite diagonals.
+ %
+ % yc = x * cosec(a/2) - x * cot(a/2) * (sin(a/2) + sin(b/2)) * cosec(a/2 + b/2)
+ %
+ % where:
+ % x = the incircle radius.
+ % a = the upper vertex angle.
+ % b = the lower vertex angle.
+ %
+ \pgf@yc\pgf@x%
+ \pgfmathadd@{\halfuppervertexangle}{\halflowervertexangle}%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgf@yc\pgfmathresult\pgf@yc%
+ \pgfmathadd@{\sinehalfuppervertexangle}{\sinehalflowervertexangle}%
\pgf@yc\pgfmathresult\pgf@yc%
- \pgfmathcos@{\halfuppervertexangle}%
- \pgf@yc\pgfmathresult\pgf@yc%
- \pgf@yc-\cosechalfuppervertexangle\pgf@yc%
- \advance\pgf@yc\cosechalfuppervertexangle\pgf@x%
- \edef\deltay{\the\pgf@yc}%
- %
- % Now calculate the height of the kite...
- %
- \advance\pgf@ya-\pgf@yc%
- %
- % ...and the depth.
- %
- \advance\pgf@yb\pgf@yc%
- %
- % Get the half width of the widest part of the kite.
- %
- \pgfmathtan@{\halfuppervertexangle}%
- \pgf@xa\pgfmathresult\pgf@ya%
- \else%
- \multiply\pgf@x2\relax%
- \multiply\pgf@y2\relax%
- %
- % Get the rotation (with rounding).
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Calculate the width and height of the node
- % contents, according to any border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \fi%
- \fi%
- %
- % The node contents (total height y) extends a distance ya into the
- % upper isosceles triangle of the kite and a distance yb into the
- % lower isosceles triangle. Thus, the following relationships hold:
- %
- % ya/yb = tan(b/2)/tan(a/2)
- %
- % and y = ya + yb
- %
- % so ya = y * sin(a/2 + b/2) / (cos(a/2) * sin(b/2))
- %
- % where:
- % a = upper vertex angle.
- % b = lower vertex angle.
- %
- \pgfmathadd@{\halfuppervertexangle}{\halflowervertexangle}%
- \pgfmathsin@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@ya\pgfmathresult\pgf@y%
- \pgfmathcos@{\halfuppervertexangle}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgfmathsin@{\halflowervertexangle}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgf@yb\pgf@y%
- \advance\pgf@yb-\pgf@ya%
- %
- % The vertical offset between the center of the node, and
- % the intersection of the kite diagonals is given by:
- %
- % yc = y/2 - ya
- %
- \pgf@yc.5\pgf@y%
- \advance\pgf@yc-\pgf@ya%
- \edef\deltay{\the\pgf@yc}%
- %
- % Get the half width of the widest part of the kite.
- %
- \pgfmathtan@{\halfuppervertexangle}%
- \pgf@xa.5\pgf@x%
- \advance\pgf@xa\pgfmathresult\pgf@ya%
- %
- % Now calculate the height of the kite...
- %
- \pgf@xb.5\pgf@x%
- \pgfmathreciprocal@{\pgfmathresult}%
- \advance\pgf@ya\pgfmathresult\pgf@xb%
- %
- % ...and the depth.
- %
- \pgfmathtan@{\halflowervertexangle}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \advance\pgf@yb\pgfmathresult\pgf@xb%
- \fi%
- %
- % Take into account minimum height and width.
- %
- % ya is the kite height.
- % yb is the kite depth.
- % xa is the kite (half) width.
- %
- \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}%
- \pgf@y\pgf@ya%
- \advance\pgf@y\pgf@yb%
- \ifdim\pgf@y<\pgf@yc%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@y}}%
- \pgf@yc\pgfmathresult\pgf@yc%
- \pgf@xa\pgfmath@tonumber{\pgf@yc}\pgf@xa%
- \pgf@ya\pgfmath@tonumber{\pgf@yc}\pgf@ya%
- \pgf@yb\pgfmath@tonumber{\pgf@yc}\pgf@yb%
- \fi%
- \pgf@x2.0\pgf@xa%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgf@x<\pgf@xc%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
- \pgf@xc\pgfmathresult\pgf@xc%
- \pgf@xa\pgfmath@tonumber{\pgf@xc}\pgf@xa%
- \pgf@ya\pgfmath@tonumber{\pgf@xc}\pgf@ya%
- \pgf@yb\pgfmath@tonumber{\pgf@xc}\pgf@yb%
- \fi%
- \edef\kitehalfwidth{\the\pgf@xa}%
- \edef\kiteheight{\the\pgf@ya}%
- \edef\kitedepth{\the\pgf@yb}%
- %
- % Calculate the basic points on the kite (for the background path).
- %
- \pgfextract@process\toppoint{%
- \centerpoint%
- \advance\pgf@y\deltay\relax%
- \advance\pgf@y\kiteheight%
- }%
- \pgfextract@process\bottompoint{%
- \centerpoint%
- \advance\pgf@y\deltay\relax%
- \advance\pgf@y-\kitedepth%
- }%
- \pgfextract@process\leftpoint{%
- \centerpoint%
- \advance\pgf@y\deltay\relax%
- \advance\pgf@x-\kitehalfwidth%
- }%
- \pgfextract@process\rightpoint{%
- \centerpoint%
- \advance\pgf@y\deltay\relax%
- \advance\pgf@x\kitehalfwidth%
- }%
- %
- % Now calculate the miter length. At the top...
- %
- \pgfmathsin@{\halfuppervertexangle}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@y\outersep\relax%
- \pgf@y\pgfmathresult\pgf@y%
- \edef\topmiter{\the\pgf@y}%
- %
- % ...at the bottom...
- %
- \pgfmathsin@{\halflowervertexangle}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@y\outersep\relax%
- \pgf@y\pgfmathresult\pgf@y%
- \edef\bottommiter{\the\pgf@y}%
- %
- % ...to the right...
- %
- \pgfmathsubtract@{180}{\halflowervertexangle}%
- \pgfmathsubtract@{\pgfmathresult}{\halfuppervertexangle}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \pgfmathsin@{\pgfmathresult}%
- \pgfmathreciprocal@{\pgfmathresult}%
- \pgf@xa\outersep\relax%
- \pgf@xa\pgfmathresult\pgf@xa%
- \pgfmathsubtract@{\halfuppervertexangle}{\halflowervertexangle}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\angle\pgfmathresult%
- \pgfextract@process\rightmiter{%
- \pgfqpointpolar{\angle}{\the\pgf@xa}%
- }%
- %
- % ...and to the left.
- %
- \pgfmathsubtract@{180}{\angle}%
- \let\angle\pgfmathresult%
- \pgfextract@process\leftmiter{%
- \pgfqpointpolar{\angle}{\the\pgf@xa}%
- }%
- %
- % Create the border points.
- %
- \pgfextract@process\topborderpoint{%
- \toppoint%
- \advance\pgf@y\topmiter\relax%
- }%
- \pgfextract@process\bottomborderpoint{%
- \bottompoint%
- \advance\pgf@y-\bottommiter\relax%
- }%
- \pgfextract@process\leftborderpoint{%
- \leftpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \leftmiter%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfextract@process\rightborderpoint{%
- \rightpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \rightmiter%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- % Get the angle from the \centerpoint to the *unrotated points*.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\topborderpoint}%
- \let\angletotoppoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\leftborderpoint}%
- \let\angletoleftpoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\bottomborderpoint}%
- \let\angletobottompoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\rightborderpoint}%
- \let\angletorightpoint\pgfmathresult%
- %
- % ...from the *inversly rotated* \basepoint...
- %
- \pgfextract@process\rotatedbasepoint{%
- \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\topborderpoint}%
- \let\baseangletotoppoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\leftborderpoint}%
- \let\baseangletoleftpoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\bottomborderpoint}%
- \let\baseangletobottompoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\rightborderpoint}%
- \let\baseangletorightpoint\pgfmathresult%
- %
- % ...and from the *inversely rotated* \midpoint.
- %
- \pgfextract@process\rotatedmidpoint{%
- \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\topborderpoint}%
- \let\midangletotoppoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\leftborderpoint}%
- \let\midangletoleftpoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\bottomborderpoint}%
- \let\midangletobottompoint\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\rightborderpoint}%
- \let\midangletorightpoint\pgfmathresult%
- %
- % Calculate a radius guaranteed to be outside the kite.
- %
- \pgfextractx\pgf@xa{\pgfpointdiff{\leftborderpoint}{\rightborderpoint}}%
- \ifdim\pgf@xa<0pt\relax%
- \pgf@xa-\pgf@xa%
- \fi%
- \pgfextracty\pgf@ya{\pgfpointdiff{\topborderpoint}{\bottomborderpoint}}%
- \ifdim\pgf@ya<0pt\relax%
- \pgf@ya-\pgf@ya%
- \fi%
- \ifdim\pgf@ya>\pgf@xa%
- \edef\externalradius{\the\pgf@ya}%
- \else%
- \edef\externalradius{\the\pgf@xa}%
- \fi%
- %
- % Now rotate the points...
- %
- \pgfextract@process\toppoint{%
- \pgfmathrotatepointaround{\toppoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\bottompoint{%
- \pgfmathrotatepointaround{\bottompoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\leftpoint{%
- \pgfmathrotatepointaround{\leftpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\rightpoint{%
- \pgfmathrotatepointaround{\rightpoint}{\centerpoint}{\rotate}%
- }%
- %
- % ...and the border points.
- %
- \pgfextract@process\topborderpoint{%
- \pgfmathrotatepointaround{\topborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\bottomborderpoint{%
- \pgfmathrotatepointaround{\bottomborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\leftborderpoint{%
- \pgfmathrotatepointaround{\leftborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\rightborderpoint{%
- \pgfmathrotatepointaround{\rightborderpoint}{\centerpoint}{\rotate}%
- }%
- %
- % Now save it all.
- %
- \addtosavedmacro{\rotate}%
- \addtosavedmacro{\externalradius}%
- %
- \addtosavedmacro\toppoint%
- \addtosavedmacro\bottompoint%
- \addtosavedmacro\leftpoint%
- \addtosavedmacro\rightpoint%
- %
- \addtosavedmacro\topborderpoint%
- \addtosavedmacro\bottomborderpoint%
- \addtosavedmacro\leftborderpoint%
- \addtosavedmacro\rightborderpoint%
- %
- \addtosavedmacro\angletotoppoint%
- \addtosavedmacro\angletobottompoint%
- \addtosavedmacro\angletoleftpoint%
- \addtosavedmacro\angletorightpoint%
- %
- \addtosavedmacro\baseangletotoppoint%
- \addtosavedmacro\baseangletobottompoint%
- \addtosavedmacro\baseangletoleftpoint%
- \addtosavedmacro\baseangletorightpoint%
- %
- \addtosavedmacro\midangletotoppoint%
- \addtosavedmacro\midangletobottompoint%
- \addtosavedmacro\midangletoleftpoint%
- \addtosavedmacro\midangletorightpoint%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \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{base}{\basepoint}%
- \anchor{base west}{%
- \installkiteparameters%
- \let\pgf@kiteanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{base east}{%
- \installkiteparameters%
- \let\pgf@kiteanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }%
- \anchor{mid}{\midpoint}%
- \anchor{mid west}{%
- \installkiteparameters%
- \let\pgf@kiteanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{mid east}{%
- \installkiteparameters%
- \let\pgf@kiteanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }%
- \anchor{north}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
- \anchor{south}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
- \anchor{east}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{west}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north east}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
- \anchor{south west}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
- \anchor{south east}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \anchor{north west}{%
- \installkiteparameters%
- \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
- \anchor{upper vertex}{%
- \installkiteparameters%
- \topborderpoint}
- \anchor{lower vertex}{%
- \installkiteparameters%
- \bottomborderpoint}
- \anchor{left vertex}{%
- \installkiteparameters%
- \leftborderpoint}
- \anchor{right vertex}{%
- \installkiteparameters%
- \rightborderpoint}
- \anchor{upper left side}{%
- \installkiteparameters%
- \pgfpointlineattime{0.5}{\topborderpoint}{\leftborderpoint}}
- \anchor{lower left side}{%
- \installkiteparameters%
- \pgfpointlineattime{0.5}{\bottomborderpoint}{\leftborderpoint}}
- \anchor{upper right side}{%
- \installkiteparameters%
- \pgfpointlineattime{0.5}{\topborderpoint}{\rightborderpoint}}
- \anchor{lower right side}{%
- \installkiteparameters%
- \pgfpointlineattime{0.5}{\bottomborderpoint}{\rightborderpoint}}
- \backgroundpath{%
- \installkiteparameters%
- \pgfpathmoveto{\toppoint}%
- \pgfpathlineto{\leftpoint}%
- \pgfpathlineto{\bottompoint}%
- \pgfpathlineto{\rightpoint}%
- \pgfpathclose%
- }
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % This allows anchors base east, base west, mid east and mid west,
- % to redefine the `center' of the node to correctly calculate the
- % border points.
- %
- \pgfutil@ifundefined{pgf@kiteanchorborderreferencepoint}%
- {\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@kiteanchorborderreferencepoint}%
- %
- % Adjust the location of the external
- % point relative to the reference point.
- %
- \referencepoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Install the required points and angles.
- %
- \installkiteparameters%
- %
- % Get the angle of the external point relative to \referencepoint.
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- %
- % *Subtract* the rotation from the external angle.
- %
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- \ifx\referencepoint\basepoint%
- \let\angletotoppoint\baseangletotoppoint%
- \let\angletobottompoint\baseangletobottompoint%
- \let\angletoleftpoint\baseangletoleftpoint%
- \let\angletorightpoint\baseangletorightpoint%
- \else%
- \ifx\referencepoint\midpoint%
- \let\angletotoppoint\midangletotoppoint%
- \let\angletobottompoint\midangletobottompoint%
- \let\angletoleftpoint\midangletoleftpoint%
- \let\angletorightpoint\midangletorightpoint%
- \fi\fi%
- %
- % Depending on the rotation, the angle to \rightborderpoint
- % may be smaller than the angle to \topborderpoint.
- %
- \ifdim\angletorightpoint pt<\angletotoppoint pt\relax%
- \ifdim\externalangle pt<\angletorightpoint pt\relax%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\bottomborderpoint%
- \else%
- \ifdim\externalangle pt<\angletotoppoint pt\relax%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\topborderpoint%
- \else%
- \ifdim\externalangle pt<\angletoleftpoint pt\relax%
- \let\firstpoint\topborderpoint%
- \let\secondpoint\leftborderpoint%
- \else%
- \ifdim\externalangle pt<\angletobottompoint pt\relax%
- \let\firstpoint\leftborderpoint%
- \let\secondpoint\bottomborderpoint%
- \else%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\bottomborderpoint%
- \fi%
- \fi%
- \fi%
- \fi%
- \else%
- \ifdim\externalangle pt<\angletotoppoint pt\relax%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\topborderpoint%
- \else%
- \ifdim\externalangle pt<\angletoleftpoint pt\relax%
- \let\firstpoint\leftborderpoint%
- \let\secondpoint\topborderpoint%
- \else%
- \ifdim\externalangle pt<\angletobottompoint pt\relax%
- \let\firstpoint\bottomborderpoint%
- \let\secondpoint\leftborderpoint%
- \else%
- \ifdim\externalangle pt<\angletorightpoint pt\relax%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\bottomborderpoint%
- \else%
- \let\firstpoint\rightborderpoint%
- \let\secondpoint\topborderpoint%
- \fi%
- \fi%
- \fi%
- \fi%
- \fi%
- \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\firstpoint}{\secondpoint}%
- }
-}
+ \pgfmathcos@{\halfuppervertexangle}%
+ \pgf@yc\pgfmathresult\pgf@yc%
+ \pgf@yc-\cosechalfuppervertexangle\pgf@yc%
+ \advance\pgf@yc\cosechalfuppervertexangle\pgf@x%
+ \edef\deltay{\the\pgf@yc}%
+ %
+ % Now calculate the height of the kite...
+ %
+ \advance\pgf@ya-\pgf@yc%
+ %
+ % ...and the depth.
+ %
+ \advance\pgf@yb\pgf@yc%
+ %
+ % Get the half width of the widest part of the kite.
+ %
+ \pgfmathtan@{\halfuppervertexangle}%
+ \pgf@xa\pgfmathresult\pgf@ya%
+ \else%
+ \multiply\pgf@x2\relax%
+ \multiply\pgf@y2\relax%
+ %
+ % Get the rotation (with rounding).
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Calculate the width and height of the node
+ % contents, according to any border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \fi%
+ \fi%
+ %
+ % The node contents (total height y) extends a distance ya into the
+ % upper isosceles triangle of the kite and a distance yb into the
+ % lower isosceles triangle. Thus, the following relationships hold:
+ %
+ % ya/yb = tan(b/2)/tan(a/2)
+ %
+ % and y = ya + yb
+ %
+ % so ya = y * sin(a/2 + b/2) / (cos(a/2) * sin(b/2))
+ %
+ % where:
+ % a = upper vertex angle.
+ % b = lower vertex angle.
+ %
+ \pgfmathadd@{\halfuppervertexangle}{\halflowervertexangle}%
+ \pgfmathsin@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@ya\pgfmathresult\pgf@y%
+ \pgfmathcos@{\halfuppervertexangle}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgfmathsin@{\halflowervertexangle}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgf@yb\pgf@y%
+ \advance\pgf@yb-\pgf@ya%
+ %
+ % The vertical offset between the center of the node, and
+ % the intersection of the kite diagonals is given by:
+ %
+ % yc = y/2 - ya
+ %
+ \pgf@yc.5\pgf@y%
+ \advance\pgf@yc-\pgf@ya%
+ \edef\deltay{\the\pgf@yc}%
+ %
+ % Get the half width of the widest part of the kite.
+ %
+ \pgfmathtan@{\halfuppervertexangle}%
+ \pgf@xa.5\pgf@x%
+ \advance\pgf@xa\pgfmathresult\pgf@ya%
+ %
+ % Now calculate the height of the kite...
+ %
+ \pgf@xb.5\pgf@x%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \advance\pgf@ya\pgfmathresult\pgf@xb%
+ %
+ % ...and the depth.
+ %
+ \pgfmathtan@{\halflowervertexangle}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \advance\pgf@yb\pgfmathresult\pgf@xb%
+ \fi%
+ %
+ % Take into account minimum height and width.
+ %
+ % ya is the kite height.
+ % yb is the kite depth.
+ % xa is the kite (half) width.
+ %
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y\pgf@ya%
+ \advance\pgf@y\pgf@yb%
+ \ifdim\pgf@y<\pgf@yc%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@y}}%
+ \pgf@yc\pgfmathresult\pgf@yc%
+ \pgf@xa\pgfmath@tonumber{\pgf@yc}\pgf@xa%
+ \pgf@ya\pgfmath@tonumber{\pgf@yc}\pgf@ya%
+ \pgf@yb\pgfmath@tonumber{\pgf@yc}\pgf@yb%
+ \fi%
+ \pgf@x2.0\pgf@xa%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<\pgf@xc%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
+ \pgf@xc\pgfmathresult\pgf@xc%
+ \pgf@xa\pgfmath@tonumber{\pgf@xc}\pgf@xa%
+ \pgf@ya\pgfmath@tonumber{\pgf@xc}\pgf@ya%
+ \pgf@yb\pgfmath@tonumber{\pgf@xc}\pgf@yb%
+ \fi%
+ \edef\kitehalfwidth{\the\pgf@xa}%
+ \edef\kiteheight{\the\pgf@ya}%
+ \edef\kitedepth{\the\pgf@yb}%
+ %
+ % Calculate the basic points on the kite (for the background path).
+ %
+ \pgfextract@process\toppoint{%
+ \centerpoint%
+ \advance\pgf@y\deltay\relax%
+ \advance\pgf@y\kiteheight%
+ }%
+ \pgfextract@process\bottompoint{%
+ \centerpoint%
+ \advance\pgf@y\deltay\relax%
+ \advance\pgf@y-\kitedepth%
+ }%
+ \pgfextract@process\leftpoint{%
+ \centerpoint%
+ \advance\pgf@y\deltay\relax%
+ \advance\pgf@x-\kitehalfwidth%
+ }%
+ \pgfextract@process\rightpoint{%
+ \centerpoint%
+ \advance\pgf@y\deltay\relax%
+ \advance\pgf@x\kitehalfwidth%
+ }%
+ %
+ % Now calculate the miter length. At the top...
+ %
+ \pgfmathsin@{\halfuppervertexangle}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@y\outersep\relax%
+ \pgf@y\pgfmathresult\pgf@y%
+ \edef\topmiter{\the\pgf@y}%
+ %
+ % ...at the bottom...
+ %
+ \pgfmathsin@{\halflowervertexangle}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@y\outersep\relax%
+ \pgf@y\pgfmathresult\pgf@y%
+ \edef\bottommiter{\the\pgf@y}%
+ %
+ % ...to the right...
+ %
+ \pgfmathsubtract@{180}{\halflowervertexangle}%
+ \pgfmathsubtract@{\pgfmathresult}{\halfuppervertexangle}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \pgfmathsin@{\pgfmathresult}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@xa\outersep\relax%
+ \pgf@xa\pgfmathresult\pgf@xa%
+ \pgfmathsubtract@{\halfuppervertexangle}{\halflowervertexangle}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\angle\pgfmathresult%
+ \pgfextract@process\rightmiter{%
+ \pgfqpointpolar{\angle}{\the\pgf@xa}%
+ }%
+ %
+ % ...and to the left.
+ %
+ \pgfmathsubtract@{180}{\angle}%
+ \let\angle\pgfmathresult%
+ \pgfextract@process\leftmiter{%
+ \pgfqpointpolar{\angle}{\the\pgf@xa}%
+ }%
+ %
+ % Create the border points.
+ %
+ \pgfextract@process\topborderpoint{%
+ \toppoint%
+ \advance\pgf@y\topmiter\relax%
+ }%
+ \pgfextract@process\bottomborderpoint{%
+ \bottompoint%
+ \advance\pgf@y-\bottommiter\relax%
+ }%
+ \pgfextract@process\leftborderpoint{%
+ \leftpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \leftmiter%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\rightborderpoint{%
+ \rightpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \rightmiter%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ %
+ % Get the angle from the \centerpoint to the *unrotated points*.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\topborderpoint}%
+ \let\angletotoppoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\leftborderpoint}%
+ \let\angletoleftpoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\bottomborderpoint}%
+ \let\angletobottompoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\rightborderpoint}%
+ \let\angletorightpoint\pgfmathresult%
+ %
+ % ...from the *inversely rotated* \basepoint...
+ %
+ \pgfextract@process\rotatedbasepoint{%
+ \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\topborderpoint}%
+ \let\baseangletotoppoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\leftborderpoint}%
+ \let\baseangletoleftpoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\bottomborderpoint}%
+ \let\baseangletobottompoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\rightborderpoint}%
+ \let\baseangletorightpoint\pgfmathresult%
+ %
+ % ...and from the *inversely rotated* \midpoint.
+ %
+ \pgfextract@process\rotatedmidpoint{%
+ \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\topborderpoint}%
+ \let\midangletotoppoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\leftborderpoint}%
+ \let\midangletoleftpoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\bottomborderpoint}%
+ \let\midangletobottompoint\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\rightborderpoint}%
+ \let\midangletorightpoint\pgfmathresult%
+ %
+ % Calculate a radius guaranteed to be outside the kite.
+ %
+ \pgfextractx\pgf@xa{\pgfpointdiff{\leftborderpoint}{\rightborderpoint}}%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@xa-\pgf@xa%
+ \fi%
+ \pgfextracty\pgf@ya{\pgfpointdiff{\topborderpoint}{\bottomborderpoint}}%
+ \ifdim\pgf@ya<0pt\relax%
+ \pgf@ya-\pgf@ya%
+ \fi%
+ \ifdim\pgf@ya>\pgf@xa%
+ \edef\externalradius{\the\pgf@ya}%
+ \else%
+ \edef\externalradius{\the\pgf@xa}%
+ \fi%
+ %
+ % Now rotate the points...
+ %
+ \pgfextract@process\toppoint{%
+ \pgfmathrotatepointaround{\toppoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\bottompoint{%
+ \pgfmathrotatepointaround{\bottompoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\leftpoint{%
+ \pgfmathrotatepointaround{\leftpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\rightpoint{%
+ \pgfmathrotatepointaround{\rightpoint}{\centerpoint}{\rotate}%
+ }%
+ %
+ % ...and the border points.
+ %
+ \pgfextract@process\topborderpoint{%
+ \pgfmathrotatepointaround{\topborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\bottomborderpoint{%
+ \pgfmathrotatepointaround{\bottomborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\leftborderpoint{%
+ \pgfmathrotatepointaround{\leftborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\rightborderpoint{%
+ \pgfmathrotatepointaround{\rightborderpoint}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Now save it all.
+ %
+ \addtosavedmacro{\rotate}%
+ \addtosavedmacro{\externalradius}%
+ %
+ \addtosavedmacro\toppoint%
+ \addtosavedmacro\bottompoint%
+ \addtosavedmacro\leftpoint%
+ \addtosavedmacro\rightpoint%
+ %
+ \addtosavedmacro\topborderpoint%
+ \addtosavedmacro\bottomborderpoint%
+ \addtosavedmacro\leftborderpoint%
+ \addtosavedmacro\rightborderpoint%
+ %
+ \addtosavedmacro\angletotoppoint%
+ \addtosavedmacro\angletobottompoint%
+ \addtosavedmacro\angletoleftpoint%
+ \addtosavedmacro\angletorightpoint%
+ %
+ \addtosavedmacro\baseangletotoppoint%
+ \addtosavedmacro\baseangletobottompoint%
+ \addtosavedmacro\baseangletoleftpoint%
+ \addtosavedmacro\baseangletorightpoint%
+ %
+ \addtosavedmacro\midangletotoppoint%
+ \addtosavedmacro\midangletobottompoint%
+ \addtosavedmacro\midangletoleftpoint%
+ \addtosavedmacro\midangletorightpoint%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \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{base}{\basepoint}%
+ \anchor{base west}{%
+ \installkiteparameters%
+ \let\pgf@kiteanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{base east}{%
+ \installkiteparameters%
+ \let\pgf@kiteanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid west}{%
+ \installkiteparameters%
+ \let\pgf@kiteanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{mid east}{%
+ \installkiteparameters%
+ \let\pgf@kiteanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \installkiteparameters%
+ \csname pgf@anchor@kite@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{upper vertex}{%
+ \installkiteparameters%
+ \topborderpoint}%
+ \anchor{lower vertex}{%
+ \installkiteparameters%
+ \bottomborderpoint}%
+ \anchor{left vertex}{%
+ \installkiteparameters%
+ \leftborderpoint}%
+ \anchor{right vertex}{%
+ \installkiteparameters%
+ \rightborderpoint}%
+ \anchor{upper left side}{%
+ \installkiteparameters%
+ \pgfpointlineattime{0.5}{\topborderpoint}{\leftborderpoint}}%
+ \anchor{lower left side}{%
+ \installkiteparameters%
+ \pgfpointlineattime{0.5}{\bottomborderpoint}{\leftborderpoint}}%
+ \anchor{upper right side}{%
+ \installkiteparameters%
+ \pgfpointlineattime{0.5}{\topborderpoint}{\rightborderpoint}}%
+ \anchor{lower right side}{%
+ \installkiteparameters%
+ \pgfpointlineattime{0.5}{\bottomborderpoint}{\rightborderpoint}}%
+ \backgroundpath{%
+ \installkiteparameters%
+ \pgfpathmoveto{\toppoint}%
+ \pgfpathlineto{\leftpoint}%
+ \pgfpathlineto{\bottompoint}%
+ \pgfpathlineto{\rightpoint}%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % This allows anchors base east, base west, mid east and mid west,
+ % to redefine the `center' of the node to correctly calculate the
+ % border points.
+ %
+ \pgfutil@ifundefined{pgf@kiteanchorborderreferencepoint}%
+ {\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@kiteanchorborderreferencepoint}%
+ %
+ % Adjust the location of the external
+ % point relative to the reference point.
+ %
+ \referencepoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Install the required points and angles.
+ %
+ \installkiteparameters%
+ %
+ % Get the angle of the external point relative to \referencepoint.
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ %
+ % *Subtract* the rotation from the external angle.
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ \ifx\referencepoint\basepoint%
+ \let\angletotoppoint\baseangletotoppoint%
+ \let\angletobottompoint\baseangletobottompoint%
+ \let\angletoleftpoint\baseangletoleftpoint%
+ \let\angletorightpoint\baseangletorightpoint%
+ \else%
+ \ifx\referencepoint\midpoint%
+ \let\angletotoppoint\midangletotoppoint%
+ \let\angletobottompoint\midangletobottompoint%
+ \let\angletoleftpoint\midangletoleftpoint%
+ \let\angletorightpoint\midangletorightpoint%
+ \fi\fi%
+ %
+ % Depending on the rotation, the angle to \rightborderpoint
+ % may be smaller than the angle to \topborderpoint.
+ %
+ \ifdim\angletorightpoint pt<\angletotoppoint pt\relax%
+ \ifdim\externalangle pt<\angletorightpoint pt\relax%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\bottomborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletotoppoint pt\relax%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\topborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletoleftpoint pt\relax%
+ \let\firstpoint\topborderpoint%
+ \let\secondpoint\leftborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletobottompoint pt\relax%
+ \let\firstpoint\leftborderpoint%
+ \let\secondpoint\bottomborderpoint%
+ \else%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\bottomborderpoint%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \ifdim\externalangle pt<\angletotoppoint pt\relax%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\topborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletoleftpoint pt\relax%
+ \let\firstpoint\leftborderpoint%
+ \let\secondpoint\topborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletobottompoint pt\relax%
+ \let\firstpoint\bottomborderpoint%
+ \let\secondpoint\leftborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletorightpoint pt\relax%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\bottomborderpoint%
+ \else%
+ \let\firstpoint\rightborderpoint%
+ \let\secondpoint\topborderpoint%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\firstpoint}{\secondpoint}%
+ }%
+}%
@@ -2999,545 +2997,545 @@
%
\pgfkeys{/pgf/.cd,
- dart tip angle/.initial=45,
- dart tail angle/.initial=135
-}
+ dart tip angle/.initial=45,
+ dart tail angle/.initial=135,
+}%
% Shape dart.
%
\pgfdeclareshape{dart}{%
- \savedmacro\installdartparameters{%
- %
- % Get the halved angles (more useful).
- %
- \pgfmathdivide{\pgfkeysvalueof{/pgf/dart tip angle}}{2}%
- \let\halftipangle\pgfmathresult%
- \pgfmathdivide{\pgfkeysvalueof{/pgf/dart tail angle}}{2}%
- \let\halftailangle\pgfmathresult%
- %
- % Calculate some common results.
- %
- \pgfmathcot@{\halftipangle}%
- \let\cothalftipangle\pgfmathresult%
- %
- % Get the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \edef\outersep{\the\pgf@x}%
- %
- % Calculate the centre, base and mid points of the node.
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \pgfextract@process\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt\relax%
- }%
- \pgfextract@process\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- %
- % Get the (halved) dimension of the node.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- %
- % Get the length of the dart tip.
- %
- \ifpgfshapeborderusesincircle%
- %
- % Get the (unrounded) rotation.
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- %
- % Get the radius of the incircle.
- %
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \pgf@x1.41421\pgf@x%
- %
- % Calculate the length of the dart tip.
- %
- \pgf@xa\cothalftipangle\pgf@x%
- \advance\pgf@xa\pgf@x%
- \else%
- %
- % Get the rotation (with rounding).
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Flip the width and height of the node contents,
- % according to the appropriate border rotation.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \fi%
- \fi%
- %
- % Calculate the length of the dart tip.
- %
- \pgf@xa\cothalftipangle\pgf@y%
- \advance\pgf@xa2.0\pgf@x%
- \fi%
- %
- % Get the (half) separation of the dart tails.
- %
- \pgfmathsubtract@{\halftailangle}{\halftipangle}%
- \pgfmathcosec@{\pgfmathresult}%
- \pgf@ya\pgfmathresult\pgf@xa%
- \pgfmathsin@{\halftipangle}%
- \pgf@ya\pgfmathresult\pgf@ya%
- \pgfmathcos@{\halftipangle}%
- \pgf@ya\pgfmathresult\pgf@ya%
- %
- % Get the total length of the dart...
- %
- \pgf@xb\cothalftipangle\pgf@ya%
- %
- % and hence the length of the tails.
- %
- \pgf@xc-\pgf@xa%
- \advance\pgf@xc\pgf@xb%
- %
- % Adjust for minimum height (length of the dart).
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@xb<\pgf@y%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@xb}}%
- \pgf@y\pgfmathresult\pgf@y%
- \pgf@xa\pgfmath@tonumber{\pgf@y}\pgf@xa%
- \pgf@xc\pgfmath@tonumber{\pgf@y}\pgf@xc%
- \pgf@ya\pgfmath@tonumber{\pgf@y}\pgf@ya%
- \pgf@x\pgfmath@tonumber{\pgf@y}\pgf@x%
- \fi%
- %
- % Adjust for minimum width (tail separation length).
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgf@y.5\pgf@y%
- \ifdim\pgf@ya<\pgf@y%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@ya}}%
- \pgf@ya\pgf@y%
- \pgf@y\pgfmathresult\pgf@y%
- \pgf@xa\pgfmath@tonumber{\pgf@y}\pgf@xa%
- \pgf@xc\pgfmath@tonumber{\pgf@y}\pgf@xc%
- \pgf@x\pgfmath@tonumber{\pgf@y}\pgf@x%
- \fi%
- \edef\dartlength{\the\pgf@xa}%
- \edef\deltax{\the\pgf@x}%
- \edef\taillength{\the\pgf@xc}%
- \edef\halftailseparation{\the\pgf@ya}
- %
- % Create the basic points on the dart (for the backgroundo path).
- %
- \pgfextract@process\tippoint{%
- \centerpoint%
- \advance\pgf@x\dartlength\relax%
- \advance\pgf@x-\deltax\relax%
- }%
- \pgfextract@process\tailcenterpoint{%
- \centerpoint%
- \advance\pgf@x-\deltax\relax%
- }%
- \pgfextract@process\lefttailpoint{%
- \centerpoint%
- \advance\pgf@x-\deltax\relax%
- \advance\pgf@x-\taillength\relax%
- \advance\pgf@y\halftailseparation\relax%
- }%
- \pgfextract@process\righttailpoint{%
- \centerpoint%
- \advance\pgf@x-\deltax\relax%
- \advance\pgf@x-\taillength\relax%
- \advance\pgf@y-\halftailseparation\relax%
- }%
- %
- % Calculate the miter vectors. At the dart tip...
- %
- \pgfextract@process\tipmiter{%
- \pgfmathcosec@{\halftipangle}%
- \pgf@x\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y0pt\relax%
- }%
- %
- % ...at the tail center...
- %
- \pgfextract@process\tailcentermiter{%
- \pgfmathcosec@{\halftailangle}%
- \pgf@x-\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgf@y0pt\relax%
- }%
- %
- % ...at the left tail...
- %
- \pgfmathsubtract@{\halftailangle}{\halftipangle}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\angle\pgfmathresult%
- \pgfmathcosec@{\pgfmathresult}%
- \pgf@x\outersep\relax%
- \pgf@x\pgfmathresult\pgf@x%
- \pgfmathadd@{\angle}{90}%
- \pgfmathsubtract{\pgfmathresult}{\halftailangle}%
- \pgfmathsincos@{\pgfmathresult}%
- \pgf@ya\pgfmathresultx\pgf@x%
- \pgf@xa\pgfmathresulty\pgf@x%
- \pgfextract@process\lefttailmiter{%
- \pgf@x-\pgf@xa%
- \pgf@y\pgf@ya%
- }%
- %
- % ...and the right tail.
- %
- \pgfextract@process\righttailmiter{%
- \pgf@x-\pgf@xa%
- \pgf@y-\pgf@ya%
- }%
- %
- % Create the border points.
- %
- \pgfextract@process\tipborderpoint{%
- \pgfpointadd{\tippoint}{\tipmiter}
- }%
- \pgfextract@process\tailcenterborderpoint{%
- \pgfpointadd{\tailcenterpoint}{\tailcentermiter}%
- }%
- \pgfextract@process\lefttailborderpoint{%
- \pgfpointadd{\lefttailpoint}{\lefttailmiter}%
- }%
- \pgfextract@process\righttailborderpoint{%
- \pgfpointadd{\righttailpoint}{\righttailmiter}%
- }%
- %
- % Calculate the angles between the centerpoint
- % and the *unrotated* borderpoints.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\tipborderpoint}%
- \let\angletotip\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\tailcenterborderpoint}%
- \let\angletotailcenter\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\lefttailborderpoint}%
- \let\angletolefttail\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\righttailborderpoint}%
- \let\angletorighttail\pgfmathresult%
- %
- % Calculate the angles between the *inversly rotated*
- % basepoint and the *unrotated* borderpoints.
- %
- \pgfextract@process\rotatedbasepoint{%
- \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\tipborderpoint}%
- \let\baseangletotip\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\tailcenterborderpoint}%
- \let\baseangletotailcenter\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lefttailborderpoint}%
- \let\baseangletolefttail\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedbasepoint}{\righttailborderpoint}%
- \let\baseangletorighttail\pgfmathresult%
- %
- % Calculate the angles between the *inversly rotated*
- % midpoint and the *unrotated* borderpoints.
- %
- \pgfextract@process\rotatedmidpoint{%
- \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
- }%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\tipborderpoint}%
- \let\midangletotip\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\tailcenterborderpoint}%
- \let\midangletotailcenter\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lefttailborderpoint}%
- \let\midangletolefttail\pgfmathresult%
- \pgfmathanglebetweenpoints{\rotatedmidpoint}{\righttailborderpoint}%
- \let\midangletorighttail\pgfmathresult%
- %
- % Rotate the background path points.
- %
- \pgfextract@process\tippoint{%
- \pgfmathrotatepointaround{\tippoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\tailcenterpoint{%
- \pgfmathrotatepointaround{\tailcenterpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\lefttailpoint{%
- \pgfmathrotatepointaround{\lefttailpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\righttailpoint{%
- \pgfmathrotatepointaround{\righttailpoint}{\centerpoint}{\rotate}%
- }%
- %
- % Calculate a radius guaranteed to be outside the dart.
- %
- \pgfextractx\pgf@xa{\pgfpointdiff{\lefttailborderpoint}{\tipborderpoint}}%
- \pgfextracty\pgf@ya{\pgfpointdiff{\lefttailborderpoint}{\righttailborderpoint}}%
- \ifdim\pgf@xa<0pt\relax%
- \pgf@xa-\pgf@xa%
- \fi%
- \ifdim\pgf@ya<0pt\relax%
- \pgf@ya-\pgf@ya%
- \fi%
- \ifdim\pgf@xa>\pgf@ya%
- \edef\externalradius{\the\pgf@xa}%
- \else%
- \edef\externalradius{\the\pgf@ya}%
- \fi%
- %
- % Rotate the border anchor points.
- %
- \pgfextract@process\tipborderpoint{%
- \pgfmathrotatepointaround{\tipborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\tailcenterborderpoint{%
- \pgfmathrotatepointaround{\tailcenterborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\lefttailborderpoint{%
- \pgfmathrotatepointaround{\lefttailborderpoint}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\righttailborderpoint{%
- \pgfmathrotatepointaround{\righttailborderpoint}{\centerpoint}{\rotate}%
- }%
- %
- % Save everything.
- %
- \addtosavedmacro{\rotate}%
- \addtosavedmacro{\externalradius}%
- %
- \addtosavedmacro{\tippoint}%
- \addtosavedmacro{\tailcenterpoint}%
- \addtosavedmacro{\lefttailpoint}%
- \addtosavedmacro{\righttailpoint}%
- %
- \addtosavedmacro{\tipborderpoint}%
- \addtosavedmacro{\tailcenterborderpoint}%
- \addtosavedmacro{\lefttailborderpoint}%
- \addtosavedmacro{\righttailborderpoint}%
- %
- \addtosavedmacro{\angletotip}%
- \addtosavedmacro{\angletotailcenter}%
- \addtosavedmacro{\angletolefttail}%
- \addtosavedmacro{\angletorighttail}%
- %
- \addtosavedmacro{\baseangletotip}%
- \addtosavedmacro{\baseangletotailcenter}%
- \addtosavedmacro{\baseangletolefttail}%
- \addtosavedmacro{\baseangletorighttail}%
- %
- \addtosavedmacro{\midangletotip}%
- \addtosavedmacro{\midangletotailcenter}%
- \addtosavedmacro{\midangletolefttail}%
- \addtosavedmacro{\midangletorighttail}%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \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{base}{\basepoint}%
- \anchor{base west}{%
- \installdartparameters%
- \let\pgf@dartanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{base east}{%
- \installdartparameters%
- \let\pgf@dartanchorborderreferencepoint\basepoint%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{mid}{\midpoint}%
- \anchor{mid west}{%
- \installdartparameters%
- \let\pgf@dartanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{mid east}{%
- \installdartparameters%
- \let\pgf@dartanchorborderreferencepoint\midpoint%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{north}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
- \anchor{south}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
- \anchor{east}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
- \anchor{west}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
- \anchor{north east}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
- \anchor{south west}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
- \anchor{south east}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \anchor{north west}{%
- \installdartparameters%
- \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
- \anchor{tip}{%
- \installdartparameters%
- \tipborderpoint}
- \anchor{left tail}{%
- \installdartparameters%
- \lefttailborderpoint}
- \anchor{right tail}{%
- \installdartparameters%
- \righttailborderpoint}
- \anchor{tail center}{%
- \installdartparameters%
- \tailcenterborderpoint}
- \anchor{left side}{%
- \installdartparameters%
- \pgfpointlineattime{0.5}{\tipborderpoint}{\lefttailborderpoint}}
- \anchor{right side}{%
- \installdartparameters%
- \pgfpointlineattime{0.5}{\tipborderpoint}{\righttailborderpoint}}
- \backgroundpath{%
- \installdartparameters%
- \pgfpathmoveto{\tippoint}%
- \pgfpathlineto{\lefttailpoint}%
- \pgfpathlineto{\tailcenterpoint}%
- \pgfpathlineto{\righttailpoint}%
- \pgfpathclose%
- }
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % This allows anchors base east, base west, mid east and mid west,
- % to redefine the `center' of the node to correctly calculate the
- % border points.
- %
- \pgfutil@ifundefined{pgf@dartanchorborderreferencepoint}%
- {\let\referencepoint\centerpoint}%
- {\let\referencepoint\pgf@dartanchorborderreferencepoint}%
- %
- % Adjust the location of the external
- % point relative to the reference point.
- %
- \referencepoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Install the required points and angles.
- %
- \installdartparameters%
- %
- % Get the angle of the external point relative to \referencepoint.
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- %
- % *Subtract* the rotation from the external angle.
- %
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- %
- % Get the set of angles for the appropriate border point.
- %
- \ifx\referencepoint\basepoint%
- \let\angletotip\baseangletotip%
- \let\angletotailcenter\baseangletotailcenter%
- \let\angletolefttail\baseangletolefttail%
- \let\angletorighttail\baseangletorighttail%
- \else%
- \ifx\referencepoint\midpoint%
- \let\angletotip\midangletotip%
- \let\angletotailcenter\midangletotailcenter%
- \let\angletolefttail\midangletolefttail%
- \let\angletorighttail\midangletorighttail%
- \fi\fi%
- %
- % Locate the appropriate line on the border...
- %
- \ifdim\externalangle pt<\angletotip pt\relax%
- \let\firstpoint\tipborderpoint%
- \let\secondpoint\righttailborderpoint%
- \else%
- \ifdim\externalangle pt<\angletolefttail pt\relax%
- \let\firstpoint\lefttailborderpoint%
- \let\secondpoint\tipborderpoint%
- \else%
- \ifdim\externalangle pt<\angletotailcenter pt\relax%
- \let\firstpoint\lefttailborderpoint%
- \let\secondpoint\tailcenterborderpoint%
- \else%
- \ifdim\externalangle pt<\angletorighttail pt\relax%
- \let\firstpoint\righttailborderpoint%
- \let\secondpoint\tailcenterborderpoint%
- \else%
- \let\firstpoint\tipborderpoint%
- \let\secondpoint\righttailborderpoint%
- \fi%
- \fi%
- \fi%
- \fi%
- %
- % ...and thus the point on the border.
- %
- \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\firstpoint}{\secondpoint}%
- }%
-}
+ \savedmacro\installdartparameters{%
+ %
+ % Get the halved angles (more useful).
+ %
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/dart tip angle}}{2}%
+ \let\halftipangle\pgfmathresult%
+ \pgfmathdivide{\pgfkeysvalueof{/pgf/dart tail angle}}{2}%
+ \let\halftailangle\pgfmathresult%
+ %
+ % Calculate some common results.
+ %
+ \pgfmathcot@{\halftipangle}%
+ \let\cothalftipangle\pgfmathresult%
+ %
+ % Get the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\outersep{\the\pgf@x}%
+ %
+ % Calculate the centre, base and mid points of the node.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \pgfextract@process\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt\relax%
+ }%
+ \pgfextract@process\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ %
+ % Get the (halved) dimension of the node.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ %
+ % Get the length of the dart tip.
+ %
+ \ifpgfshapeborderusesincircle%
+ %
+ % Get the (unrounded) rotation.
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ %
+ % Get the radius of the incircle.
+ %
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgf@x1.41421\pgf@x%
+ %
+ % Calculate the length of the dart tip.
+ %
+ \pgf@xa\cothalftipangle\pgf@x%
+ \advance\pgf@xa\pgf@x%
+ \else%
+ %
+ % Get the rotation (with rounding).
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Flip the width and height of the node contents,
+ % according to the appropriate border rotation.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \fi%
+ \fi%
+ %
+ % Calculate the length of the dart tip.
+ %
+ \pgf@xa\cothalftipangle\pgf@y%
+ \advance\pgf@xa2.0\pgf@x%
+ \fi%
+ %
+ % Get the (half) separation of the dart tails.
+ %
+ \pgfmathsubtract@{\halftailangle}{\halftipangle}%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgf@ya\pgfmathresult\pgf@xa%
+ \pgfmathsin@{\halftipangle}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ \pgfmathcos@{\halftipangle}%
+ \pgf@ya\pgfmathresult\pgf@ya%
+ %
+ % Get the total length of the dart...
+ %
+ \pgf@xb\cothalftipangle\pgf@ya%
+ %
+ % and hence the length of the tails.
+ %
+ \pgf@xc-\pgf@xa%
+ \advance\pgf@xc\pgf@xb%
+ %
+ % Adjust for minimum height (length of the dart).
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@xb<\pgf@y%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@xb}}%
+ \pgf@y\pgfmathresult\pgf@y%
+ \pgf@xa\pgfmath@tonumber{\pgf@y}\pgf@xa%
+ \pgf@xc\pgfmath@tonumber{\pgf@y}\pgf@xc%
+ \pgf@ya\pgfmath@tonumber{\pgf@y}\pgf@ya%
+ \pgf@x\pgfmath@tonumber{\pgf@y}\pgf@x%
+ \fi%
+ %
+ % Adjust for minimum width (tail separation length).
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@y.5\pgf@y%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@ya}}%
+ \pgf@ya\pgf@y%
+ \pgf@y\pgfmathresult\pgf@y%
+ \pgf@xa\pgfmath@tonumber{\pgf@y}\pgf@xa%
+ \pgf@xc\pgfmath@tonumber{\pgf@y}\pgf@xc%
+ \pgf@x\pgfmath@tonumber{\pgf@y}\pgf@x%
+ \fi%
+ \edef\dartlength{\the\pgf@xa}%
+ \edef\deltax{\the\pgf@x}%
+ \edef\taillength{\the\pgf@xc}%
+ \edef\halftailseparation{\the\pgf@ya}
+ %
+ % Create the basic points on the dart (for the background path).
+ %
+ \pgfextract@process\tippoint{%
+ \centerpoint%
+ \advance\pgf@x\dartlength\relax%
+ \advance\pgf@x-\deltax\relax%
+ }%
+ \pgfextract@process\tailcenterpoint{%
+ \centerpoint%
+ \advance\pgf@x-\deltax\relax%
+ }%
+ \pgfextract@process\lefttailpoint{%
+ \centerpoint%
+ \advance\pgf@x-\deltax\relax%
+ \advance\pgf@x-\taillength\relax%
+ \advance\pgf@y\halftailseparation\relax%
+ }%
+ \pgfextract@process\righttailpoint{%
+ \centerpoint%
+ \advance\pgf@x-\deltax\relax%
+ \advance\pgf@x-\taillength\relax%
+ \advance\pgf@y-\halftailseparation\relax%
+ }%
+ %
+ % Calculate the miter vectors. At the dart tip...
+ %
+ \pgfextract@process\tipmiter{%
+ \pgfmathcosec@{\halftipangle}%
+ \pgf@x\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y0pt\relax%
+ }%
+ %
+ % ...at the tail center...
+ %
+ \pgfextract@process\tailcentermiter{%
+ \pgfmathcosec@{\halftailangle}%
+ \pgf@x-\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@y0pt\relax%
+ }%
+ %
+ % ...at the left tail...
+ %
+ \pgfmathsubtract@{\halftailangle}{\halftipangle}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\angle\pgfmathresult%
+ \pgfmathcosec@{\pgfmathresult}%
+ \pgf@x\outersep\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgfmathadd@{\angle}{90}%
+ \pgfmathsubtract{\pgfmathresult}{\halftailangle}%
+ \pgfmathsincos@{\pgfmathresult}%
+ \pgf@ya\pgfmathresultx\pgf@x%
+ \pgf@xa\pgfmathresulty\pgf@x%
+ \pgfextract@process\lefttailmiter{%
+ \pgf@x-\pgf@xa%
+ \pgf@y\pgf@ya%
+ }%
+ %
+ % ...and the right tail.
+ %
+ \pgfextract@process\righttailmiter{%
+ \pgf@x-\pgf@xa%
+ \pgf@y-\pgf@ya%
+ }%
+ %
+ % Create the border points.
+ %
+ \pgfextract@process\tipborderpoint{%
+ \pgfpointadd{\tippoint}{\tipmiter}
+ }%
+ \pgfextract@process\tailcenterborderpoint{%
+ \pgfpointadd{\tailcenterpoint}{\tailcentermiter}%
+ }%
+ \pgfextract@process\lefttailborderpoint{%
+ \pgfpointadd{\lefttailpoint}{\lefttailmiter}%
+ }%
+ \pgfextract@process\righttailborderpoint{%
+ \pgfpointadd{\righttailpoint}{\righttailmiter}%
+ }%
+ %
+ % Calculate the angles between the centerpoint
+ % and the *unrotated* borderpoints.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\tipborderpoint}%
+ \let\angletotip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\tailcenterborderpoint}%
+ \let\angletotailcenter\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\lefttailborderpoint}%
+ \let\angletolefttail\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\righttailborderpoint}%
+ \let\angletorighttail\pgfmathresult%
+ %
+ % Calculate the angles between the *inversely rotated*
+ % basepoint and the *unrotated* borderpoints.
+ %
+ \pgfextract@process\rotatedbasepoint{%
+ \pgfmathrotatepointaround{\basepoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\tipborderpoint}%
+ \let\baseangletotip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\tailcenterborderpoint}%
+ \let\baseangletotailcenter\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\lefttailborderpoint}%
+ \let\baseangletolefttail\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedbasepoint}{\righttailborderpoint}%
+ \let\baseangletorighttail\pgfmathresult%
+ %
+ % Calculate the angles between the *inversely rotated*
+ % midpoint and the *unrotated* borderpoints.
+ %
+ \pgfextract@process\rotatedmidpoint{%
+ \pgfmathrotatepointaround{\midpoint}{\centerpoint}{-\rotate}%
+ }%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\tipborderpoint}%
+ \let\midangletotip\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\tailcenterborderpoint}%
+ \let\midangletotailcenter\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\lefttailborderpoint}%
+ \let\midangletolefttail\pgfmathresult%
+ \pgfmathanglebetweenpoints{\rotatedmidpoint}{\righttailborderpoint}%
+ \let\midangletorighttail\pgfmathresult%
+ %
+ % Rotate the background path points.
+ %
+ \pgfextract@process\tippoint{%
+ \pgfmathrotatepointaround{\tippoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\tailcenterpoint{%
+ \pgfmathrotatepointaround{\tailcenterpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\lefttailpoint{%
+ \pgfmathrotatepointaround{\lefttailpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\righttailpoint{%
+ \pgfmathrotatepointaround{\righttailpoint}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Calculate a radius guaranteed to be outside the dart.
+ %
+ \pgfextractx\pgf@xa{\pgfpointdiff{\lefttailborderpoint}{\tipborderpoint}}%
+ \pgfextracty\pgf@ya{\pgfpointdiff{\lefttailborderpoint}{\righttailborderpoint}}%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@xa-\pgf@xa%
+ \fi%
+ \ifdim\pgf@ya<0pt\relax%
+ \pgf@ya-\pgf@ya%
+ \fi%
+ \ifdim\pgf@xa>\pgf@ya%
+ \edef\externalradius{\the\pgf@xa}%
+ \else%
+ \edef\externalradius{\the\pgf@ya}%
+ \fi%
+ %
+ % Rotate the border anchor points.
+ %
+ \pgfextract@process\tipborderpoint{%
+ \pgfmathrotatepointaround{\tipborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\tailcenterborderpoint{%
+ \pgfmathrotatepointaround{\tailcenterborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\lefttailborderpoint{%
+ \pgfmathrotatepointaround{\lefttailborderpoint}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\righttailborderpoint{%
+ \pgfmathrotatepointaround{\righttailborderpoint}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Save everything.
+ %
+ \addtosavedmacro{\rotate}%
+ \addtosavedmacro{\externalradius}%
+ %
+ \addtosavedmacro{\tippoint}%
+ \addtosavedmacro{\tailcenterpoint}%
+ \addtosavedmacro{\lefttailpoint}%
+ \addtosavedmacro{\righttailpoint}%
+ %
+ \addtosavedmacro{\tipborderpoint}%
+ \addtosavedmacro{\tailcenterborderpoint}%
+ \addtosavedmacro{\lefttailborderpoint}%
+ \addtosavedmacro{\righttailborderpoint}%
+ %
+ \addtosavedmacro{\angletotip}%
+ \addtosavedmacro{\angletotailcenter}%
+ \addtosavedmacro{\angletolefttail}%
+ \addtosavedmacro{\angletorighttail}%
+ %
+ \addtosavedmacro{\baseangletotip}%
+ \addtosavedmacro{\baseangletotailcenter}%
+ \addtosavedmacro{\baseangletolefttail}%
+ \addtosavedmacro{\baseangletorighttail}%
+ %
+ \addtosavedmacro{\midangletotip}%
+ \addtosavedmacro{\midangletotailcenter}%
+ \addtosavedmacro{\midangletolefttail}%
+ \addtosavedmacro{\midangletorighttail}%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \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{base}{\basepoint}%
+ \anchor{base west}{%
+ \installdartparameters%
+ \let\pgf@dartanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{base east}{%
+ \installdartparameters%
+ \let\pgf@dartanchorborderreferencepoint\basepoint%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid west}{%
+ \installdartparameters%
+ \let\pgf@dartanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{mid east}{%
+ \installdartparameters%
+ \let\pgf@dartanchorborderreferencepoint\midpoint%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \installdartparameters%
+ \csname pgf@anchor@dart@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{tip}{%
+ \installdartparameters%
+ \tipborderpoint}%
+ \anchor{left tail}{%
+ \installdartparameters%
+ \lefttailborderpoint}%
+ \anchor{right tail}{%
+ \installdartparameters%
+ \righttailborderpoint}%
+ \anchor{tail center}{%
+ \installdartparameters%
+ \tailcenterborderpoint}%
+ \anchor{left side}{%
+ \installdartparameters%
+ \pgfpointlineattime{0.5}{\tipborderpoint}{\lefttailborderpoint}}%
+ \anchor{right side}{%
+ \installdartparameters%
+ \pgfpointlineattime{0.5}{\tipborderpoint}{\righttailborderpoint}}%
+ \backgroundpath{%
+ \installdartparameters%
+ \pgfpathmoveto{\tippoint}%
+ \pgfpathlineto{\lefttailpoint}%
+ \pgfpathlineto{\tailcenterpoint}%
+ \pgfpathlineto{\righttailpoint}%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % This allows anchors base east, base west, mid east and mid west,
+ % to redefine the `center' of the node to correctly calculate the
+ % border points.
+ %
+ \pgfutil@ifundefined{pgf@dartanchorborderreferencepoint}%
+ {\let\referencepoint\centerpoint}%
+ {\let\referencepoint\pgf@dartanchorborderreferencepoint}%
+ %
+ % Adjust the location of the external
+ % point relative to the reference point.
+ %
+ \referencepoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Install the required points and angles.
+ %
+ \installdartparameters%
+ %
+ % Get the angle of the external point relative to \referencepoint.
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ %
+ % *Subtract* the rotation from the external angle.
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ %
+ % Get the set of angles for the appropriate border point.
+ %
+ \ifx\referencepoint\basepoint%
+ \let\angletotip\baseangletotip%
+ \let\angletotailcenter\baseangletotailcenter%
+ \let\angletolefttail\baseangletolefttail%
+ \let\angletorighttail\baseangletorighttail%
+ \else%
+ \ifx\referencepoint\midpoint%
+ \let\angletotip\midangletotip%
+ \let\angletotailcenter\midangletotailcenter%
+ \let\angletolefttail\midangletolefttail%
+ \let\angletorighttail\midangletorighttail%
+ \fi\fi%
+ %
+ % Locate the appropriate line on the border...
+ %
+ \ifdim\externalangle pt<\angletotip pt\relax%
+ \let\firstpoint\tipborderpoint%
+ \let\secondpoint\righttailborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletolefttail pt\relax%
+ \let\firstpoint\lefttailborderpoint%
+ \let\secondpoint\tipborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletotailcenter pt\relax%
+ \let\firstpoint\lefttailborderpoint%
+ \let\secondpoint\tailcenterborderpoint%
+ \else%
+ \ifdim\externalangle pt<\angletorighttail pt\relax%
+ \let\firstpoint\righttailborderpoint%
+ \let\secondpoint\tailcenterborderpoint%
+ \else%
+ \let\firstpoint\tipborderpoint%
+ \let\secondpoint\righttailborderpoint%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ %
+ % ...and thus the point on the border.
+ %
+ \pgfpointintersectionoflines{\referencepoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\firstpoint}{\secondpoint}%
+ }%
+}%
@@ -3545,476 +3543,476 @@
%
% /pgf/circular sector angle : the angle at the center of the sector.
%
-\pgfkeys{/pgf/circular sector angle/.initial=60}
+\pgfkeys{/pgf/circular sector angle/.initial=60}%
% Shape circular sector
%
\pgfdeclareshape{circular sector}{%
- \savedmacro\installcircularsectorparameters{%
- %
- % Define a \centerpoint, \basepoint and \midpoint.
- %
- \pgfextract@process\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- %
- % Get the larger of the outer sep.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \edef\outersep{\the\pgf@x}%
- %
- % Half of the sector angle is more useful.
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/circular sector angle}}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\angle\pgfmathresult%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\halfangle\pgfmathresult%
- %
- % Get some useful trigonometric stuff.
- %
- \pgfmathsin@{\halfangle}%
- \let\sinehalfangle\pgfmathresult%
- \pgfmathreciprocal@{\pgfmathresult}%
- \let\cosechalfangle\pgfmathresult%
- \pgfmathabs@{\halfangle}%
- \pgfmathcos@{\pgfmathresult}%
- \let\coshalfangle\pgfmathresult%
- \pgf@x\pgfmathresult pt\relax%
- \pgf@x\cosechalfangle\pgf@x%
- \edef\cothalfangle{\pgfmath@tonumber{\pgf@x}}%
- %
- % Calculate the miter length at the center,
- % according to the outer sep.
- %
- \pgf@x\outersep\relax%
- \pgf@x\cosechalfangle\pgf@x%
- \edef\centermiter{\the\pgf@x}%
- %
- % Get the start and end angles of the arc.
- %
- \pgfmathsubtract@{180}{\halfangle}%
- \let\startangle\pgfmathresult%
- \pgfmathadd@{180}{\halfangle}%
- \let\endangle\pgfmathresult%
- %
- % Get (half) the node dimensions.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- %
- % Calculate the radius of the sector and the `center offset',
- % which is the distance between the center of the node and the
- % center of the sector.
- %
- \ifpgfshapeborderusesincircle%
- %
- % Get the rotation.
- %
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- %
- % Calculate the incircle radius.
- %
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \fi%
- \pgf@x1.41421\pgf@x%
- \pgf@xa\cosechalfangle\pgf@x%
- %
- % xa is the radius, xb the offset.
- %
- \pgf@xb\pgf@xa%
- \advance\pgf@xa\pgf@x%
- \else%
- %
- % Get the rotation (with rounding).
- %
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \afterassignment\pgfmath@gobbletilpgfmath@%
- \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \ifnum\c@pgf@counta<0\relax%
- \advance\c@pgf@counta360\relax%
- \fi%
- \edef\rotate{\the\c@pgf@counta}%
- %
- % Swap the height and width for relevant angles.
- %
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xc\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xc%
- \fi%
- \fi%
- %
- % xa is the radius, xb the offset.
- %
- \pgf@xa\cosechalfangle\pgf@y%
- \pgf@xa\coshalfangle\pgf@xa%
- \advance\pgf@xa\pgf@x%
- \pgf@xb\pgf@xa%
- \advance\pgf@xa\pgf@x%
- \pgfmathveclen@{\pgfmath@tonumber{\pgf@xa}}{\pgfmath@tonumber{\pgf@y}}%
- \pgf@xa\pgfmathresult pt\relax%
- \fi%
- %
- % Adjust for minimum height and width.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}%
- \pgf@x.5\pgf@x%
- \pgfmathsec@{\halfangle}%
- \pgf@xc\pgfmathresult\pgf@xb%
- \ifdim\pgf@xc<0pt\relax%
- \pgf@xc-\pgf@xc%
- \fi%
- \ifdim\pgf@xc<\pgf@x%
- \pgfmathreciprocal{\pgfmath@tonumber{\pgf@xc}}%
- \pgf@xc\pgfmathresult\pgf@x% Increase by ratio.
- \pgf@xa\pgfmath@tonumber{\pgf@xc}\pgf@xa%
- \pgf@xb\pgfmath@tonumber{\pgf@xc}\pgf@xb%
- \fi%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@xa<\pgf@y%
- \pgfmathreciprocal{\pgfmath@tonumber{\pgf@xa}}%
- \pgf@xc\pgfmathresult\pgf@y% Increase by ratio.
- \pgf@xa\pgf@y%
- \pgf@xb\pgfmath@tonumber{\pgf@xc}\pgf@xb%
- \fi%
- \edef\centeroffset{\the\pgf@xb}%
- \edef\radius{\the\pgf@xa}%
- %
- % Calculate the radius at sector border and the arc corners.
- %
- \advance\pgf@xa\outersep\relax%
- \edef\borderradius{\the\pgf@xa}%
- \pgf@x\outersep\relax%
- \pgf@x\cosechalfangle\pgf@x%
- \pgf@x\coshalfangle\pgf@x%
- \advance\pgf@xa\pgf@x%
- \edef\cornerradius{\the\pgf@xa}%
- %
- % Calculate the *unrotated* points for the background path.
- %
- \pgfextract@process\sectorcenter{%
- \centerpoint%
- \advance\pgf@x\centeroffset%
- }%
- \pgfextract@process\arcstart{%
- \pgfqpointpolar{\startangle}{\radius}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \sectorcenter%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- % Calculate the *unrotated* points for the anchor border.
- %
- \pgfextract@process\sectorcenterborder{%
- \sectorcenter%
- \advance\pgf@x\centermiter\relax%
- }%
- \pgfextract@process\arcstartborder{%
- \pgfqpointpolar{\startangle}{\borderradius}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \sectorcenter%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfextract@process\arcendborder{%
- \pgfqpointpolar{\endangle}{\borderradius}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \sectorcenter%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfextract@process\arcstartcorner{%
- \pgfqpointpolar{\startangle}{\cornerradius}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \sectorcenterborder%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfextract@process\arcendcorner{%
- \pgfqpointpolar{\endangle}{\cornerradius}%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \sectorcenterborder%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- % Calculate the *unrotated* corner angles to the \centerpoint.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\sectorcenterborder}%
- \let\angletosectorcenterborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcstartborder}%
- \let\angletoarcstartborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcendborder}%
- \let\angletoarcendborder\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcstartcorner}%
- \let\angletoarcstartcorner\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\arcendcorner}%
- \let\angletoarcendcorner\pgfmathresult%
- %
- % Rotate the background path points around the note center.
- %
- \pgfextract@process\sectorcenter{%
- \pgfmathrotatepointaround{\sectorcenter}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcstart{%
- \pgfmathrotatepointaround{\arcstart}{\centerpoint}{\rotate}%
- }%
- %
- % Rotate the border points around the note center.
- %
- \pgfextract@process\sectorcenterborder{%
- \pgfmathrotatepointaround{\sectorcenterborder}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcstartborder{%
- \pgfmathrotatepointaround{\arcstartborder}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcendborder{%
- \pgfmathrotatepointaround{\arcendborder}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcstartcorner{%
- \pgfmathrotatepointaround{\arcstartcorner}{\centerpoint}{\rotate}%
- }%
- \pgfextract@process\arcendcorner{%
- \pgfmathrotatepointaround{\arcendcorner}{\centerpoint}{\rotate}%
- }%
- %
- % Add the rotation to the start and end angles.
- %
- \pgfmathadd@{\startangle}{\rotate}%
- \let\startangle\pgfmathresult%
- \pgfmathadd@{\endangle}{\rotate}%
- \let\endangle\pgfmathresult%
- %
- % Save everything.
- %
- % NB \addtosavedmacro is currently experimental. May get changed.
- %
- \addtosavedmacro{\rotate}%
- \addtosavedmacro{\centeroffset}%
- %
- \addtosavedmacro{\radius}%
- \addtosavedmacro{\borderradius}%
- \addtosavedmacro{\cornerradius}%
- %
- \addtosavedmacro{\endangle}%
- \addtosavedmacro{\startangle}%
- %
- \addtosavedmacro{\sectorcenter}%
- \addtosavedmacro{\arcstart}%
- %
- \addtosavedmacro{\sectorcenterborder}%
- \addtosavedmacro{\arcstartborder}%
- \addtosavedmacro{\arcendborder}%
- \addtosavedmacro{\arcstartcorner}%
- \addtosavedmacro{\arcendcorner}%
- %
- \addtosavedmacro{\angletosectorcenterborder}%
- \addtosavedmacro{\angletoarcstartborder}%
- \addtosavedmacro{\angletoarcendborder}%
- \addtosavedmacro{\angletoarcstartcorner}%
- \addtosavedmacro{\angletoarcendcorner}%
- }%
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \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{base}{\basepoint}
- \anchor{mid}{\midpoint}
- \anchor{arc start}{%
- \installcircularsectorparameters%
- \arcstartcorner%
- }
- \anchor{arc end}{%
- \installcircularsectorparameters%
- \arcendcorner%
- }
- \anchor{sector center}{%
- \installcircularsectorparameters%
- \sectorcenterborder%
- }
- \anchor{arc center}{%
- \installcircularsectorparameters%
- \pgfmathadd@{\rotate}{180}%
- \let\angle\pgfmathresult%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpointpolar{\angle}{\cornerradius}}%
- }
- \anchor{north}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{0pt}{\cornerradius}}%
- }
- \anchor{south}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{0pt}{-\cornerradius}}%
- }
- \anchor{east}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{0pt}}%
- }
- \anchor{west}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{0pt}}%
- }
- \anchor{north west}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{\cornerradius}}%
- }
- \anchor{south west}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{-\cornerradius}}%
- }
- \anchor{north east}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{\cornerradius}}%
- }
- \anchor{south east}{%
- \installcircularsectorparameters%
- \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{-\cornerradius}}%
- }
- \backgroundpath{%
- \installcircularsectorparameters%
- \pgfpathmoveto{\sectorcenter}%
- \pgfpathlineto{\arcstart}%
- \ifdim\endangle pt>360pt\relax%
- \ifdim\startangle pt>360pt\relax%
- \pgfpatharc{\startangle}{\endangle}{\radius}%
- \else%
- \pgfpatharc{\startangle}{360}{\radius}%
- \pgfpatharc{0}{\endangle}{\radius}%
- \fi%
- \else%
- \pgfpatharc{\startangle}{\endangle}{\radius}%
- \fi%
- \pgfpathclose%
- }%
- \anchorborder{%
- %
- % Save x and y.
- %
- \edef\externalx{\the\pgf@x}%
- \edef\externaly{\the\pgf@y}%
- %
- % Adjust the location of the external point relative to \centerpoint.
- %
- \centerpoint%
- \pgf@xa\externalx\relax%
- \pgf@ya\externaly\relax%
- \advance\pgf@xa\pgf@x%
- \advance\pgf@ya\pgf@y%
- \edef\externalx{\the\pgf@xa}%
- \edef\externaly{\the\pgf@ya}%
- %
- % Install the required points and angles.
- %
- \installcircularsectorparameters%
- %
- % Get the angle of the external point to the \centerpoint.
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
- \let\externalangle\pgfmathresult%
- %
- % *Subtract* the rotation from the external angle.
- %
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\angle\pgfmathresult%
- %
- % Determine if the line will cross the sector arc.
- %
- \ifdim\angle pt>\angletoarcendcorner pt\relax%
- \let\firstpoint\arcendcorner%
- \let\secondpoint\sectorcenterborder%
- \else%
- \ifdim\angle pt>\angletoarcendborder pt\relax%
- \let\firstpoint\arcendborder%
- \let\secondpoint\arcendcorner%
- \else%
- \ifdim\angle pt>\angletoarcstartborder pt\relax%
- \let\firstpoint\pgfutil@empty%
- \let\secondpoint\pgfutil@empty%
- \else%
- \ifdim\angle pt>\angletoarcstartcorner pt\relax%
- \let\firstpoint\arcstartborder
- \let\secondpoint\arcstartcorner
- \else%
- \let\firstpoint\sectorcenterborder%
- \let\secondpoint\arcstartcorner%
- \fi%
- \fi%
- \fi%
- \fi%
- \ifx\firstpoint\pgfutil@empty
- %
- % Calculate the angle from the centre of the semicircle to the
- % point on the semicircle arc which intersects the line from
- % the external point to the reference point...
- %
- \pgfmathanglebetweenlines{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\sectorcenter}{\centerpoint}%
- \pgfmathsin@{\pgfmathresult}%
- \let\sineangle\pgfmathresult%
- \pgf@x\borderradius\relax%
- \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
- \let\reciprocalradius\pgfmathresult%
- \pgf@x\centeroffset\relax%
- \pgf@x\sineangle\pgf@x%
- \pgf@x\reciprocalradius\pgf@x%
- \pgfmathasin@{\pgfmath@tonumber{\pgf@x}}%
- \pgf@x\pgfmathresult pt\relax%
- \advance\pgf@x\externalangle pt\relax%
- \edef\angle{\pgfmath@tonumber{\pgf@x}}%
- %
- % ...and thus the point on the border.
- %
- \pgfpointadd{\sectorcenter}{\pgfqpointpolar{\angle}{\borderradius}}%
- \else%
- %
- % Calculate the the point where the semicircle chord intersects
- % the line from the external point to the reference point.
- %
- \pgfpointintersectionoflines{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
- {\firstpoint}{\secondpoint}%
- \fi%
- }%
-}
+ \savedmacro\installcircularsectorparameters{%
+ %
+ % Define a \centerpoint, \basepoint and \midpoint.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ %
+ % Get the larger of the outer sep.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \edef\outersep{\the\pgf@x}%
+ %
+ % Half of the sector angle is more useful.
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/circular sector angle}}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\angle\pgfmathresult%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\halfangle\pgfmathresult%
+ %
+ % Get some useful trigonometric stuff.
+ %
+ \pgfmathsin@{\halfangle}%
+ \let\sinehalfangle\pgfmathresult%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \let\cosechalfangle\pgfmathresult%
+ \pgfmathabs@{\halfangle}%
+ \pgfmathcos@{\pgfmathresult}%
+ \let\coshalfangle\pgfmathresult%
+ \pgf@x\pgfmathresult pt\relax%
+ \pgf@x\cosechalfangle\pgf@x%
+ \edef\cothalfangle{\pgfmath@tonumber{\pgf@x}}%
+ %
+ % Calculate the miter length at the center,
+ % according to the outer sep.
+ %
+ \pgf@x\outersep\relax%
+ \pgf@x\cosechalfangle\pgf@x%
+ \edef\centermiter{\the\pgf@x}%
+ %
+ % Get the start and end angles of the arc.
+ %
+ \pgfmathsubtract@{180}{\halfangle}%
+ \let\startangle\pgfmathresult%
+ \pgfmathadd@{180}{\halfangle}%
+ \let\endangle\pgfmathresult%
+ %
+ % Get (half) the node dimensions.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ %
+ % Calculate the radius of the sector and the `center offset',
+ % which is the distance between the center of the node and the
+ % center of the sector.
+ %
+ \ifpgfshapeborderusesincircle%
+ %
+ % Get the rotation.
+ %
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ %
+ % Calculate the incircle radius.
+ %
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgf@x1.41421\pgf@x%
+ \pgf@xa\cosechalfangle\pgf@x%
+ %
+ % xa is the radius, xb the offset.
+ %
+ \pgf@xb\pgf@xa%
+ \advance\pgf@xa\pgf@x%
+ \else%
+ %
+ % Get the rotation (with rounding).
+ %
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \ifnum\c@pgf@counta<0\relax%
+ \advance\c@pgf@counta360\relax%
+ \fi%
+ \edef\rotate{\the\c@pgf@counta}%
+ %
+ % Swap the height and width for relevant angles.
+ %
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xc\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xc%
+ \fi%
+ \fi%
+ %
+ % xa is the radius, xb the offset.
+ %
+ \pgf@xa\cosechalfangle\pgf@y%
+ \pgf@xa\coshalfangle\pgf@xa%
+ \advance\pgf@xa\pgf@x%
+ \pgf@xb\pgf@xa%
+ \advance\pgf@xa\pgf@x%
+ \pgfmathveclen@{\pgfmath@tonumber{\pgf@xa}}{\pgfmath@tonumber{\pgf@y}}%
+ \pgf@xa\pgfmathresult pt\relax%
+ \fi%
+ %
+ % Adjust for minimum height and width.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x.5\pgf@x%
+ \pgfmathsec@{\halfangle}%
+ \pgf@xc\pgfmathresult\pgf@xb%
+ \ifdim\pgf@xc<0pt\relax%
+ \pgf@xc-\pgf@xc%
+ \fi%
+ \ifdim\pgf@xc<\pgf@x%
+ \pgfmathreciprocal{\pgfmath@tonumber{\pgf@xc}}%
+ \pgf@xc\pgfmathresult\pgf@x% Increase by ratio.
+ \pgf@xa\pgfmath@tonumber{\pgf@xc}\pgf@xa%
+ \pgf@xb\pgfmath@tonumber{\pgf@xc}\pgf@xb%
+ \fi%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@xa<\pgf@y%
+ \pgfmathreciprocal{\pgfmath@tonumber{\pgf@xa}}%
+ \pgf@xc\pgfmathresult\pgf@y% Increase by ratio.
+ \pgf@xa\pgf@y%
+ \pgf@xb\pgfmath@tonumber{\pgf@xc}\pgf@xb%
+ \fi%
+ \edef\centeroffset{\the\pgf@xb}%
+ \edef\radius{\the\pgf@xa}%
+ %
+ % Calculate the radius at sector border and the arc corners.
+ %
+ \advance\pgf@xa\outersep\relax%
+ \edef\borderradius{\the\pgf@xa}%
+ \pgf@x\outersep\relax%
+ \pgf@x\cosechalfangle\pgf@x%
+ \pgf@x\coshalfangle\pgf@x%
+ \advance\pgf@xa\pgf@x%
+ \edef\cornerradius{\the\pgf@xa}%
+ %
+ % Calculate the *unrotated* points for the background path.
+ %
+ \pgfextract@process\sectorcenter{%
+ \centerpoint%
+ \advance\pgf@x\centeroffset%
+ }%
+ \pgfextract@process\arcstart{%
+ \pgfqpointpolar{\startangle}{\radius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \sectorcenter%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ %
+ % Calculate the *unrotated* points for the anchor border.
+ %
+ \pgfextract@process\sectorcenterborder{%
+ \sectorcenter%
+ \advance\pgf@x\centermiter\relax%
+ }%
+ \pgfextract@process\arcstartborder{%
+ \pgfqpointpolar{\startangle}{\borderradius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \sectorcenter%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\arcendborder{%
+ \pgfqpointpolar{\endangle}{\borderradius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \sectorcenter%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\arcstartcorner{%
+ \pgfqpointpolar{\startangle}{\cornerradius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \sectorcenterborder%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\arcendcorner{%
+ \pgfqpointpolar{\endangle}{\cornerradius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \sectorcenterborder%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ %
+ % Calculate the *unrotated* corner angles to the \centerpoint.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\sectorcenterborder}%
+ \let\angletosectorcenterborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcstartborder}%
+ \let\angletoarcstartborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcendborder}%
+ \let\angletoarcendborder\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcstartcorner}%
+ \let\angletoarcstartcorner\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\arcendcorner}%
+ \let\angletoarcendcorner\pgfmathresult%
+ %
+ % Rotate the background path points around the note center.
+ %
+ \pgfextract@process\sectorcenter{%
+ \pgfmathrotatepointaround{\sectorcenter}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcstart{%
+ \pgfmathrotatepointaround{\arcstart}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Rotate the border points around the note center.
+ %
+ \pgfextract@process\sectorcenterborder{%
+ \pgfmathrotatepointaround{\sectorcenterborder}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcstartborder{%
+ \pgfmathrotatepointaround{\arcstartborder}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcendborder{%
+ \pgfmathrotatepointaround{\arcendborder}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcstartcorner{%
+ \pgfmathrotatepointaround{\arcstartcorner}{\centerpoint}{\rotate}%
+ }%
+ \pgfextract@process\arcendcorner{%
+ \pgfmathrotatepointaround{\arcendcorner}{\centerpoint}{\rotate}%
+ }%
+ %
+ % Add the rotation to the start and end angles.
+ %
+ \pgfmathadd@{\startangle}{\rotate}%
+ \let\startangle\pgfmathresult%
+ \pgfmathadd@{\endangle}{\rotate}%
+ \let\endangle\pgfmathresult%
+ %
+ % Save everything.
+ %
+ % NB \addtosavedmacro is currently experimental. May get changed.
+ %
+ \addtosavedmacro{\rotate}%
+ \addtosavedmacro{\centeroffset}%
+ %
+ \addtosavedmacro{\radius}%
+ \addtosavedmacro{\borderradius}%
+ \addtosavedmacro{\cornerradius}%
+ %
+ \addtosavedmacro{\endangle}%
+ \addtosavedmacro{\startangle}%
+ %
+ \addtosavedmacro{\sectorcenter}%
+ \addtosavedmacro{\arcstart}%
+ %
+ \addtosavedmacro{\sectorcenterborder}%
+ \addtosavedmacro{\arcstartborder}%
+ \addtosavedmacro{\arcendborder}%
+ \addtosavedmacro{\arcstartcorner}%
+ \addtosavedmacro{\arcendcorner}%
+ %
+ \addtosavedmacro{\angletosectorcenterborder}%
+ \addtosavedmacro{\angletoarcstartborder}%
+ \addtosavedmacro{\angletoarcendborder}%
+ \addtosavedmacro{\angletoarcstartcorner}%
+ \addtosavedmacro{\angletoarcendcorner}%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \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{base}{\basepoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{arc start}{%
+ \installcircularsectorparameters%
+ \arcstartcorner%
+ }%
+ \anchor{arc end}{%
+ \installcircularsectorparameters%
+ \arcendcorner%
+ }%
+ \anchor{sector center}{%
+ \installcircularsectorparameters%
+ \sectorcenterborder%
+ }%
+ \anchor{arc center}{%
+ \installcircularsectorparameters%
+ \pgfmathadd@{\rotate}{180}%
+ \let\angle\pgfmathresult%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpointpolar{\angle}{\cornerradius}}%
+ }%
+ \anchor{north}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{0pt}{\cornerradius}}%
+ }%
+ \anchor{south}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{0pt}{-\cornerradius}}%
+ }%
+ \anchor{east}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{0pt}}%
+ }%
+ \anchor{north west}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{\cornerradius}}%
+ }%
+ \anchor{south west}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{-\cornerradius}{-\cornerradius}}%
+ }%
+ \anchor{north east}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{\cornerradius}}%
+ }%
+ \anchor{south east}{%
+ \installcircularsectorparameters%
+ \csname pgf@anchor@circular sector@border\endcsname{\pgfqpoint{\cornerradius}{-\cornerradius}}%
+ }%
+ \backgroundpath{%
+ \installcircularsectorparameters%
+ \pgfpathmoveto{\sectorcenter}%
+ \pgfpathlineto{\arcstart}%
+ \ifdim\endangle pt>360pt\relax%
+ \ifdim\startangle pt>360pt\relax%
+ \pgfpatharc{\startangle}{\endangle}{\radius}%
+ \else%
+ \pgfpatharc{\startangle}{360}{\radius}%
+ \pgfpatharc{0}{\endangle}{\radius}%
+ \fi%
+ \else%
+ \pgfpatharc{\startangle}{\endangle}{\radius}%
+ \fi%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ %
+ % Adjust the location of the external point relative to \centerpoint.
+ %
+ \centerpoint%
+ \pgf@xa\externalx\relax%
+ \pgf@ya\externaly\relax%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ %
+ % Install the required points and angles.
+ %
+ \installcircularsectorparameters%
+ %
+ % Get the angle of the external point to the \centerpoint.
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
+ \let\externalangle\pgfmathresult%
+ %
+ % *Subtract* the rotation from the external angle.
+ %
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\angle\pgfmathresult%
+ %
+ % Determine if the line will cross the sector arc.
+ %
+ \ifdim\angle pt>\angletoarcendcorner pt\relax%
+ \let\firstpoint\arcendcorner%
+ \let\secondpoint\sectorcenterborder%
+ \else%
+ \ifdim\angle pt>\angletoarcendborder pt\relax%
+ \let\firstpoint\arcendborder%
+ \let\secondpoint\arcendcorner%
+ \else%
+ \ifdim\angle pt>\angletoarcstartborder pt\relax%
+ \let\firstpoint\pgfutil@empty%
+ \let\secondpoint\pgfutil@empty%
+ \else%
+ \ifdim\angle pt>\angletoarcstartcorner pt\relax%
+ \let\firstpoint\arcstartborder
+ \let\secondpoint\arcstartcorner
+ \else%
+ \let\firstpoint\sectorcenterborder%
+ \let\secondpoint\arcstartcorner%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \ifx\firstpoint\pgfutil@empty
+ %
+ % Calculate the angle from the centre of the semicircle to the
+ % point on the semicircle arc which intersects the line from
+ % the external point to the reference point...
+ %
+ \pgfmathanglebetweenlines{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\sectorcenter}{\centerpoint}%
+ \pgfmathsin@{\pgfmathresult}%
+ \let\sineangle\pgfmathresult%
+ \pgf@x\borderradius\relax%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgf@x}}%
+ \let\reciprocalradius\pgfmathresult%
+ \pgf@x\centeroffset\relax%
+ \pgf@x\sineangle\pgf@x%
+ \pgf@x\reciprocalradius\pgf@x%
+ \pgfmathasin@{\pgfmath@tonumber{\pgf@x}}%
+ \pgf@x\pgfmathresult pt\relax%
+ \advance\pgf@x\externalangle pt\relax%
+ \edef\angle{\pgfmath@tonumber{\pgf@x}}%
+ %
+ % ...and thus the point on the border.
+ %
+ \pgfpointadd{\sectorcenter}{\pgfqpointpolar{\angle}{\borderradius}}%
+ \else%
+ %
+ % Calculate the the point where the semicircle chord intersects
+ % the line from the external point to the reference point.
+ %
+ \pgfpointintersectionoflines{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
+ {\firstpoint}{\secondpoint}%
+ \fi%
+ }%
+}%
@@ -4023,397 +4021,397 @@
% /pgf/shape aspect : Ratio between the x and y radii of the cylinder end.
% /pgf/cylinder uses custom fill : Use a custom fill for the cylinder.
% /pgf/cylinder end fill : Custom color for the cylinder end.
-% /pgf/cylinder body fill : Custom color for the cylinderbody.
+% /pgf/cylinder body fill : Custom color for the cylinder body.
%
\newif\ifpgfcylinderusescustomfill
\pgfkeys{/pgf/.cd,
- cylinder uses custom fill/.is if=pgfcylinderusescustomfill,
- cylinder end fill/.initial=white,
- cylinder body fill/.initial=white
-}
+ cylinder uses custom fill/.is if=pgfcylinderusescustomfill,
+ cylinder end fill/.initial=white,
+ cylinder body fill/.initial=white,
+}%
\pgfdeclareshape{cylinder}{%
- \savedmacro\getcylinderpoints{%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
- \pgf@x\pgf@xc%
- \advance\pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
- \pgf@y\pgf@yc%
- \advance\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y.5\dp\pgfnodeparttextbox%
- \ifpgfshapeborderusesincircle%
- \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
- \ifdim\pgf@x<\pgf@y%
- \pgf@x\pgf@y%
- \else%
- \pgf@y\pgf@x%
- \fi%
- \pgf@x1.414213\pgf@x%
- \pgf@y1.414213\pgf@y%
- \else%
- \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \pgfmathsetcount\c@pgf@counta{+\pgfmathresult}%
- \advance\c@pgf@counta45\relax%
- \divide\c@pgf@counta90\relax%
- \multiply\c@pgf@counta90\relax%
- \edef\rotate{\the\c@pgf@counta}%
- \ifnum\c@pgf@counta=90\relax%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xa%
- \pgf@yc\pgf@xc%
- \else%
- \ifnum\c@pgf@counta=270\relax%
- \pgf@xa\pgf@x%
- \pgf@x\pgf@y%
- \pgf@y\pgf@xa%
- \pgf@yc\pgf@xc%
- \fi%
- \fi%
- \fi%
- \addtosavedmacro\rotate%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \pgfutil@tempdima\pgfshapeaspect\pgf@ya%
- \pgfutil@tempdimb\pgf@ya%
- %
- % Adjust for minimum height.
- %
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgfutil@tempdimb<.5\pgf@xc\relax%
- \pgfutil@tempdimb.5\pgf@xc%
- \pgf@ya\pgfutil@tempdimb%
- \fi%
- %
- % Calculate how far the node contents can extend into the cylinder bottom.
- %
- \pgf@yb\pgfutil@tempdimb%
- \advance\pgf@yb-\pgf@yc%
- \pgfmathdivide@{\pgfmath@tonumber{\pgf@yb}}{\pgfmath@tonumber{\pgfutil@tempdimb}}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- \let\angle\pgfmathresult%
- \pgf@xb\pgfmathresult\pgfutil@tempdima%
- %
- % Adjust for minimum width.
- %
- \pgf@x.5\pgflinewidth%
- \advance\pgf@x2.0\pgf@xa%
- \advance\pgf@x3.0\pgfutil@tempdima%
- \advance\pgf@x-\pgf@xb%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@x<\pgf@xc%
- \advance\pgf@xc-\pgf@x%
- \advance\pgf@xa.5\pgf@xc%
- \fi%
- %
- % Add the larger of the outer sep to the radii.
- %
- \pgf@x\pgfutil@tempdima\relax%
- \pgf@y\pgfutil@tempdimb\relax%
- \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgf@xc>\pgf@yc%
- \advance\pgf@x\pgf@xc%
- \advance\pgf@y\pgf@xc%
- \edef\outersep{\the\pgf@xc}%
- \else%
- \advance\pgf@x\pgf@yc%
- \advance\pgf@y\pgf@yc%
- \edef\outersep{\the\pgf@yc}%
- \fi%
- \edef\xradius{\the\pgf@x}%
- \edef\yradius{\the\pgf@y}%
- \addtosavedmacro\xradius%
- \addtosavedmacro\yradius%
- \addtosavedmacro\outersep%
- %
- \pgfextract@process\cylindercenter{%
- \pgf@x\pgfutil@tempdima%
- \advance\pgf@x.5\pgflinewidth%
- \advance\pgf@x\pgf@xb%
- \pgf@x.5\pgf@x%
- \pgf@y0pt%
- }%
- \addtosavedmacro\cylindercenter%
- %
- \pgfextract@process\beforetop{%
- \pgf@x\pgf@xa%
- \advance\pgf@x\pgfutil@tempdima%
- \advance\pgf@x.5\pgflinewidth%
- \pgf@y\pgf@ya%
- }%
- \pgfextract@process\afterbottom{%
- \pgf@x-\pgf@xa%
- \advance\pgf@x\pgf@xb%
- \pgf@y\pgf@ya%
- }%
- \addtosavedmacro\beforetop%
- \addtosavedmacro\afterbottom%
- \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}%
- \pgfextract@process\beforetopanchor{%
- \beforetop%
- \advance\pgf@y\pgf@yc%
- }%
- \pgfextract@process\afterbottomanchor{%
- \afterbottom%
- \advance\pgf@y\pgf@yc%
- }%
- \addtosavedmacro\beforetopanchor%
- \addtosavedmacro\afterbottomanchor%
- %
- \beforetopanchor%
- \advance\pgf@x\xradius\relax%
- \ifdim\pgf@x>\pgf@y%
- \edef\externalradius{\the\pgf@x}%
- \else%
- \edef\externalradius{\the\pgf@y}%
- \fi%
- \addtosavedmacro\externalradius%
- }
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }%
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \anchor{center}{\centerpoint}
- \anchor{shape center}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{\pgfpointadd{\cylindercenter}{\centerpoint}}%
- {\centerpoint}{\rotate}%
- }%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \getcylinderpoints%
- \let\pgf@cylinder@referencepoint\midpoint%
- \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
- }%
- \anchor{mid west}{%
- \getcylinderpoints%
- \let\pgf@cylinder@referencepoint\midpoint%
- \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \getcylinderpoints%
- \let\pgf@cylinder@referencepoint\basepoint%
- \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
- }%
- \anchor{base west}{%
- \getcylinderpoints%
- \let\pgf@cylinder@referencepoint\basepoint%
- \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{north}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{0pt}{\externalradius}}%
- }%
- \anchor{south}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{0pt}{-\externalradius}}%
- }%
- \anchor{east}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
- }%
- \anchor{west}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
- }%
- \anchor{north east}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{\externalradius}}%
- }%
- \anchor{south west}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }%
- \anchor{south east}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{-\externalradius}}%
- }%
- \anchor{north west}{%
- \getcylinderpoints%
- \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{\externalradius}}%
- }%
- \anchor{before top}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor}{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \anchor{top}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \beforetop%
- \pgf@y0pt\relax%
- \advance\pgf@x\xradius\relax%
- }{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \anchor{after top}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \anchor{before bottom}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \anchor{bottom}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{%
- \pgfpointadd{%
- \afterbottom%
- \pgf@y0pt\relax%
- \advance\pgf@x-\xradius\relax%
- }{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \anchor{after bottom}{%
- \getcylinderpoints%
- \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor}{\centerpoint}}{\centerpoint}{\rotate}%
- }
- \backgroundpath{%
- \getcylinderpoints%
- {%
- \pgf@x\xradius\relax%
- \advance\pgf@x-\outersep\relax%
- \edef\xradius{\the\pgf@x}%
- \pgf@y\yradius\relax%
- \advance\pgf@y-\outersep\relax%
- \edef\yradius{\the\pgf@y}%
- \pgftransformshift{\centerpoint}%
- \pgftransformrotate{\rotate}%
- \pgfpathmoveto{\afterbottom}%
- \pgfpatharc{90}{270}{\xradius and \yradius}%
- \pgfpathlineto{\beforetop\pgf@y-\pgf@y}%
- \pgfpatharc{-90}{90}{\xradius and \yradius}%
- \pgfpathclose%
- \pgfpathmoveto{\beforetop}%
- \pgfpatharc{90}{270}{\xradius and \yradius}%
- }%
- }%
- \behindbackgroundpath{%
- \ifpgfcylinderusescustomfill%
- \getcylinderpoints%
- \pgf@x\xradius\relax%
- \advance\pgf@x-\outersep\relax%
- \edef\xradius{\the\pgf@x}%
- \pgf@y\yradius\relax%
- \advance\pgf@y-\outersep\relax%
- \edef\yradius{\the\pgf@y}%
- {%
- \pgftransformshift{\centerpoint}%
- \pgftransformrotate{\rotate}%
- \pgfpathmoveto{\afterbottom}%
- \pgfpatharc{90}{270}{\xradius and \yradius}%
- \pgfpathlineto{\beforetop\pgf@y-\pgf@y}%
- \pgfpatharc{270}{90}{\xradius and \yradius}%
- \pgfpathclose%
- \expandafter\pgfsetfillcolor\expandafter{\pgfkeysvalueof{/pgf/cylinder body fill}}%
- \pgfusepath{fill}%
- %
- \pgfpathmoveto{\beforetop}%
- \pgfpatharc{90}{-270}{\xradius and \yradius}%
- \pgfpathclose
- \expandafter\pgfsetfillcolor\expandafter{\pgfkeysvalueof{/pgf/cylinder end fill}}%
- \pgfusepath{fill}%
- }%
- \fi%
- }%
- \anchorborder{%
- \pgfextract@process\externalpoint{}%
- \getcylinderpoints%
- \pgfutil@ifundefined{pgf@cylinder@referencepoint}{\let\referencepoint\centerpoint}{%
- \let\referencepoint\pgf@cylinder@referencepoint}%
- \pgfextract@process\externalpoint{%
- \externalpoint%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \referencepoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \pgfmathsubtract@{\pgfmathresult}{\rotate}%
- \ifdim\pgfmathresult pt<0pt\relax%
- \pgfmathadd@{\pgfmathresult}{360}%
- \fi%
- \let\externalangle\pgfmathresult%
- %
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\afterbottomanchor}{\centerpoint}}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\beforetopanchor}{\centerpoint}}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathrotatepointaround{%
- \pgfmathpointintersectionoflineandarc%
- {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
- {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
- {%
- \beforetop%
- \pgf@xa\pgf@x%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- }%
- {0}{90}{\xradius and \yradius}%
- }{\centerpoint}{\rotate}%
- \else%
- \pgfpointintersectionoflines{%
- \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor}{\centerpoint}}%
- {\centerpoint}{\rotate}}{%
- \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor}{\centerpoint}}%
- {\centerpoint}{\rotate}}%
- {\referencepoint}{\externalpoint}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}%
- \ifdim\externalangle pt>\pgfmathresult pt\relax%
- \pgfmathrotatepointaround{%
- \pgfmathpointintersectionoflineandarc%
- {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
- {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
- {%
- \beforetop%
- \pgf@xa\pgf@x%
- \centerpoint
- \advance\pgf@x\pgf@xa%
- }%
- {270}{360}{\xradius and \yradius}%
- }{\centerpoint}{\rotate}%
- \else%
- \pgfpointintersectionoflines{%
- \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}%
- {\centerpoint}{\rotate}}{%
- \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}%
- {\centerpoint}{\rotate}}%
- {\referencepoint}{\externalpoint}%
- \fi%
- \else%
- \pgfmathrotatepointaround{%
- \pgfmathpointintersectionoflineandarc%
- {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
- {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
- {%
- \afterbottom%
- \pgf@xa\pgf@x%
- \centerpoint
- \advance\pgf@x\pgf@xa%
- }%
- {90}{270}{\xradius and \yradius}%
- }{\centerpoint}{\rotate}%
- \fi%
- \fi%
- }
-}
+ \savedmacro\getcylinderpoints{%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \pgf@x\pgf@xc%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \pgf@y\pgf@yc%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y.5\dp\pgfnodeparttextbox%
+ \ifpgfshapeborderusesincircle%
+ \pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
+ \ifdim\pgf@x<\pgf@y%
+ \pgf@x\pgf@y%
+ \else%
+ \pgf@y\pgf@x%
+ \fi%
+ \pgf@x1.414213\pgf@x%
+ \pgf@y1.414213\pgf@y%
+ \else%
+ \pgfmathmod{\pgfkeysvalueof{/pgf/shape border rotate}}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \pgfmathsetcount\c@pgf@counta{+\pgfmathresult}%
+ \advance\c@pgf@counta45\relax%
+ \divide\c@pgf@counta90\relax%
+ \multiply\c@pgf@counta90\relax%
+ \edef\rotate{\the\c@pgf@counta}%
+ \ifnum\c@pgf@counta=90\relax%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xa%
+ \pgf@yc\pgf@xc%
+ \else%
+ \ifnum\c@pgf@counta=270\relax%
+ \pgf@xa\pgf@x%
+ \pgf@x\pgf@y%
+ \pgf@y\pgf@xa%
+ \pgf@yc\pgf@xc%
+ \fi%
+ \fi%
+ \fi%
+ \addtosavedmacro\rotate%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgfutil@tempdima\pgfshapeaspect\pgf@ya%
+ \pgfutil@tempdimb\pgf@ya%
+ %
+ % Adjust for minimum height.
+ %
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgfutil@tempdimb<.5\pgf@xc\relax%
+ \pgfutil@tempdimb.5\pgf@xc%
+ \pgf@ya\pgfutil@tempdimb%
+ \fi%
+ %
+ % Calculate how far the node contents can extend into the cylinder bottom.
+ %
+ \pgf@yb\pgfutil@tempdimb%
+ \advance\pgf@yb-\pgf@yc%
+ \pgfmathdivide@{\pgfmath@tonumber{\pgf@yb}}{\pgfmath@tonumber{\pgfutil@tempdimb}}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ \let\angle\pgfmathresult%
+ \pgf@xb\pgfmathresult\pgfutil@tempdima%
+ %
+ % Adjust for minimum width.
+ %
+ \pgf@x.5\pgflinewidth%
+ \advance\pgf@x2.0\pgf@xa%
+ \advance\pgf@x3.0\pgfutil@tempdima%
+ \advance\pgf@x-\pgf@xb%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<\pgf@xc%
+ \advance\pgf@xc-\pgf@x%
+ \advance\pgf@xa.5\pgf@xc%
+ \fi%
+ %
+ % Add the larger of the outer sep to the radii.
+ %
+ \pgf@x\pgfutil@tempdima\relax%
+ \pgf@y\pgfutil@tempdimb\relax%
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xc>\pgf@yc%
+ \advance\pgf@x\pgf@xc%
+ \advance\pgf@y\pgf@xc%
+ \edef\outersep{\the\pgf@xc}%
+ \else%
+ \advance\pgf@x\pgf@yc%
+ \advance\pgf@y\pgf@yc%
+ \edef\outersep{\the\pgf@yc}%
+ \fi%
+ \edef\xradius{\the\pgf@x}%
+ \edef\yradius{\the\pgf@y}%
+ \addtosavedmacro\xradius%
+ \addtosavedmacro\yradius%
+ \addtosavedmacro\outersep%
+ %
+ \pgfextract@process\cylindercenter{%
+ \pgf@x\pgfutil@tempdima%
+ \advance\pgf@x.5\pgflinewidth%
+ \advance\pgf@x\pgf@xb%
+ \pgf@x.5\pgf@x%
+ \pgf@y0pt%
+ }%
+ \addtosavedmacro\cylindercenter%
+ %
+ \pgfextract@process\beforetop{%
+ \pgf@x\pgf@xa%
+ \advance\pgf@x\pgfutil@tempdima%
+ \advance\pgf@x.5\pgflinewidth%
+ \pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\afterbottom{%
+ \pgf@x-\pgf@xa%
+ \advance\pgf@x\pgf@xb%
+ \pgf@y\pgf@ya%
+ }%
+ \addtosavedmacro\beforetop%
+ \addtosavedmacro\afterbottom%
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgfextract@process\beforetopanchor{%
+ \beforetop%
+ \advance\pgf@y\pgf@yc%
+ }%
+ \pgfextract@process\afterbottomanchor{%
+ \afterbottom%
+ \advance\pgf@y\pgf@yc%
+ }%
+ \addtosavedmacro\beforetopanchor%
+ \addtosavedmacro\afterbottomanchor%
+ %
+ \beforetopanchor%
+ \advance\pgf@x\xradius\relax%
+ \ifdim\pgf@x>\pgf@y%
+ \edef\externalradius{\the\pgf@x}%
+ \else%
+ \edef\externalradius{\the\pgf@y}%
+ \fi%
+ \addtosavedmacro\externalradius%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{shape center}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{\pgfpointadd{\cylindercenter}{\centerpoint}}%
+ {\centerpoint}{\rotate}%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \getcylinderpoints%
+ \let\pgf@cylinder@referencepoint\midpoint%
+ \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{mid west}{%
+ \getcylinderpoints%
+ \let\pgf@cylinder@referencepoint\midpoint%
+ \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \getcylinderpoints%
+ \let\pgf@cylinder@referencepoint\basepoint%
+ \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{base west}{%
+ \getcylinderpoints%
+ \let\pgf@cylinder@referencepoint\basepoint%
+ \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{0pt}{\externalradius}}%
+ }%
+ \anchor{south}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{0pt}{-\externalradius}}%
+ }%
+ \anchor{east}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{0pt}}%
+ }%
+ \anchor{west}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{0pt}}%
+ }%
+ \anchor{north east}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{\externalradius}}%
+ }%
+ \anchor{south west}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{-\externalradius}}%
+ }%
+ \anchor{south east}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{\externalradius}{-\externalradius}}%
+ }%
+ \anchor{north west}{%
+ \getcylinderpoints%
+ \pgf@anchor@cylinder@border{\pgfqpoint{-\externalradius}{\externalradius}}%
+ }%
+ \anchor{before top}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor}{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \anchor{top}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \beforetop%
+ \pgf@y0pt\relax%
+ \advance\pgf@x\xradius\relax%
+ }{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \anchor{after top}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \anchor{before bottom}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \anchor{bottom}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{%
+ \pgfpointadd{%
+ \afterbottom%
+ \pgf@y0pt\relax%
+ \advance\pgf@x-\xradius\relax%
+ }{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \anchor{after bottom}{%
+ \getcylinderpoints%
+ \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor}{\centerpoint}}{\centerpoint}{\rotate}%
+ }%
+ \backgroundpath{%
+ \getcylinderpoints%
+ {%
+ \pgf@x\xradius\relax%
+ \advance\pgf@x-\outersep\relax%
+ \edef\xradius{\the\pgf@x}%
+ \pgf@y\yradius\relax%
+ \advance\pgf@y-\outersep\relax%
+ \edef\yradius{\the\pgf@y}%
+ \pgftransformshift{\centerpoint}%
+ \pgftransformrotate{\rotate}%
+ \pgfpathmoveto{\afterbottom}%
+ \pgfpatharc{90}{270}{\xradius and \yradius}%
+ \pgfpathlineto{\beforetop\pgf@y-\pgf@y}%
+ \pgfpatharc{-90}{90}{\xradius and \yradius}%
+ \pgfpathclose%
+ \pgfpathmoveto{\beforetop}%
+ \pgfpatharc{90}{270}{\xradius and \yradius}%
+ }%
+ }%
+ \behindbackgroundpath{%
+ \ifpgfcylinderusescustomfill%
+ \getcylinderpoints%
+ \pgf@x\xradius\relax%
+ \advance\pgf@x-\outersep\relax%
+ \edef\xradius{\the\pgf@x}%
+ \pgf@y\yradius\relax%
+ \advance\pgf@y-\outersep\relax%
+ \edef\yradius{\the\pgf@y}%
+ {%
+ \pgftransformshift{\centerpoint}%
+ \pgftransformrotate{\rotate}%
+ \pgfpathmoveto{\afterbottom}%
+ \pgfpatharc{90}{270}{\xradius and \yradius}%
+ \pgfpathlineto{\beforetop\pgf@y-\pgf@y}%
+ \pgfpatharc{270}{90}{\xradius and \yradius}%
+ \pgfpathclose%
+ \expandafter\pgfsetfillcolor\expandafter{\pgfkeysvalueof{/pgf/cylinder body fill}}%
+ \pgfusepath{fill}%
+ %
+ \pgfpathmoveto{\beforetop}%
+ \pgfpatharc{90}{-270}{\xradius and \yradius}%
+ \pgfpathclose
+ \expandafter\pgfsetfillcolor\expandafter{\pgfkeysvalueof{/pgf/cylinder end fill}}%
+ \pgfusepath{fill}%
+ }%
+ \fi%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{}%
+ \getcylinderpoints%
+ \pgfutil@ifundefined{pgf@cylinder@referencepoint}{\let\referencepoint\centerpoint}{%
+ \let\referencepoint\pgf@cylinder@referencepoint}%
+ \pgfextract@process\externalpoint{%
+ \externalpoint%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \referencepoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \pgfmathsubtract@{\pgfmathresult}{\rotate}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\externalangle\pgfmathresult%
+ %
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\afterbottomanchor}{\centerpoint}}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\beforetopanchor}{\centerpoint}}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathrotatepointaround{%
+ \pgfmathpointintersectionoflineandarc%
+ {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
+ {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
+ {%
+ \beforetop%
+ \pgf@xa\pgf@x%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ }%
+ {0}{90}{\xradius and \yradius}%
+ }{\centerpoint}{\rotate}%
+ \else%
+ \pgfpointintersectionoflines{%
+ \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor}{\centerpoint}}%
+ {\centerpoint}{\rotate}}{%
+ \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor}{\centerpoint}}%
+ {\centerpoint}{\rotate}}%
+ {\referencepoint}{\externalpoint}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\referencepoint}{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}%
+ \ifdim\externalangle pt>\pgfmathresult pt\relax%
+ \pgfmathrotatepointaround{%
+ \pgfmathpointintersectionoflineandarc%
+ {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
+ {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
+ {%
+ \beforetop%
+ \pgf@xa\pgf@x%
+ \centerpoint
+ \advance\pgf@x\pgf@xa%
+ }%
+ {270}{360}{\xradius and \yradius}%
+ }{\centerpoint}{\rotate}%
+ \else%
+ \pgfpointintersectionoflines{%
+ \pgfmathrotatepointaround{\pgfpointadd{\afterbottomanchor\pgf@y-\pgf@y}{\centerpoint}}%
+ {\centerpoint}{\rotate}}{%
+ \pgfmathrotatepointaround{\pgfpointadd{\beforetopanchor\pgf@y-\pgf@y}{\centerpoint}}%
+ {\centerpoint}{\rotate}}%
+ {\referencepoint}{\externalpoint}%
+ \fi%
+ \else%
+ \pgfmathrotatepointaround{%
+ \pgfmathpointintersectionoflineandarc%
+ {\pgfmathrotatepointaround{\externalpoint}{\centerpoint}{-\rotate}}%
+ {\pgfmathrotatepointaround{\referencepoint}{\centerpoint}{-\rotate}}%
+ {%
+ \afterbottom%
+ \pgf@xa\pgf@x%
+ \centerpoint
+ \advance\pgf@x\pgf@xa%
+ }%
+ {90}{270}{\xradius and \yradius}%
+ }{\centerpoint}{\rotate}%
+ \fi%
+ \fi%
+ }%
+}%
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex
index 5466b1a27f2..fe64c707c1a 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex
@@ -7,28 +7,28 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.misc.code.tex,v 1.5 2013/07/18 14:15:25 tantau Exp $
+\ProvidesFileRCS{pgflibraryshapes.misc.code.tex}
\pgfdeclareshape{cross out}
-{
- \inheritsavedanchors[from=rectangle] % this is nearly a rectangle
- \inheritanchorborder[from=rectangle]
- \inheritanchor[from=rectangle]{north}
- \inheritanchor[from=rectangle]{north west}
- \inheritanchor[from=rectangle]{north east}
- \inheritanchor[from=rectangle]{center}
- \inheritanchor[from=rectangle]{west}
- \inheritanchor[from=rectangle]{east}
- \inheritanchor[from=rectangle]{mid}
- \inheritanchor[from=rectangle]{mid west}
- \inheritanchor[from=rectangle]{mid east}
- \inheritanchor[from=rectangle]{base}
- \inheritanchor[from=rectangle]{base west}
- \inheritanchor[from=rectangle]{base east}
- \inheritanchor[from=rectangle]{south}
- \inheritanchor[from=rectangle]{south west}
- \inheritanchor[from=rectangle]{south east}
+{%
+ \inheritsavedanchors[from=rectangle]% % this is nearly a rectangle
+ \inheritanchorborder[from=rectangle]%
+ \inheritanchor[from=rectangle]{north}%
+ \inheritanchor[from=rectangle]{north west}%
+ \inheritanchor[from=rectangle]{north east}%
+ \inheritanchor[from=rectangle]{center}%
+ \inheritanchor[from=rectangle]{west}%
+ \inheritanchor[from=rectangle]{east}%
+ \inheritanchor[from=rectangle]{mid}%
+ \inheritanchor[from=rectangle]{mid west}%
+ \inheritanchor[from=rectangle]{mid east}%
+ \inheritanchor[from=rectangle]{base}%
+ \inheritanchor[from=rectangle]{base west}%
+ \inheritanchor[from=rectangle]{base east}%
+ \inheritanchor[from=rectangle]{south}%
+ \inheritanchor[from=rectangle]{south west}%
+ \inheritanchor[from=rectangle]{south east}%
\foregroundpath{
% store lower right in xa/ya and upper right in xb/yb
\southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
@@ -39,440 +39,440 @@
\pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
\pgfsetarrowsstart{}
\pgfsetarrowsend{}
- }
-}
+ }%
+}%
\pgfdeclareshape{strike out}
-{
- \inheritsavedanchors[from=rectangle] % this is nearly a rectangle
- \inheritanchorborder[from=rectangle]
- \inheritanchor[from=rectangle]{north}
- \inheritanchor[from=rectangle]{north west}
- \inheritanchor[from=rectangle]{north east}
- \inheritanchor[from=rectangle]{center}
- \inheritanchor[from=rectangle]{west}
- \inheritanchor[from=rectangle]{east}
- \inheritanchor[from=rectangle]{mid}
- \inheritanchor[from=rectangle]{mid west}
- \inheritanchor[from=rectangle]{mid east}
- \inheritanchor[from=rectangle]{base}
- \inheritanchor[from=rectangle]{base west}
- \inheritanchor[from=rectangle]{base east}
- \inheritanchor[from=rectangle]{south}
- \inheritanchor[from=rectangle]{south west}
- \inheritanchor[from=rectangle]{south east}
+{%
+ \inheritsavedanchors[from=rectangle]% % this is nearly a rectangle
+ \inheritanchorborder[from=rectangle]%
+ \inheritanchor[from=rectangle]{north}%
+ \inheritanchor[from=rectangle]{north west}%
+ \inheritanchor[from=rectangle]{north east}%
+ \inheritanchor[from=rectangle]{center}%
+ \inheritanchor[from=rectangle]{west}%
+ \inheritanchor[from=rectangle]{east}%
+ \inheritanchor[from=rectangle]{mid}%
+ \inheritanchor[from=rectangle]{mid west}%
+ \inheritanchor[from=rectangle]{mid east}%
+ \inheritanchor[from=rectangle]{base}%
+ \inheritanchor[from=rectangle]{base west}%
+ \inheritanchor[from=rectangle]{base east}%
+ \inheritanchor[from=rectangle]{south}%
+ \inheritanchor[from=rectangle]{south west}%
+ \inheritanchor[from=rectangle]{south east}%
\foregroundpath{
\pgfpathmoveto{\southwest}
\pgfpathlineto{\northeast}
\pgfsetarrowsstart{}
\pgfsetarrowsend{}
- }
-}
+ }%
+}%
% Rounded rectangle
\pgfkeys{/pgf/.cd,
- rounded rectangle west arc/.initial=convex,
- rounded rectangle east arc/.initial=convex,
- rounded rectangle left arc/.style={/pgf/rounded rectangle west arc=#1},%
- rounded rectangle right arc/.style={/pgf/rounded rectangle east arc=#1},%
- rounded rectangle arc length/.initial=180%
+ rounded rectangle west arc/.initial=convex,
+ rounded rectangle east arc/.initial=convex,
+ rounded rectangle left arc/.style={/pgf/rounded rectangle west arc=#1},%
+ rounded rectangle right arc/.style={/pgf/rounded rectangle east arc=#1},%
+ rounded rectangle arc length/.initial=180%
}%
\def\pgf@lib@sh@misc@rr@text@concave{concave}%
\def\pgf@lib@sh@misc@rr@text@convex{convex}%
\pgfdeclareshape{rounded rectangle}{%
- \savedmacro\westarc{%
- \edef\westarc{\pgfkeysvalueof{/pgf/rounded rectangle west arc}}%
- }
- \savedmacro\eastarc{%
- \edef\eastarc{\pgfkeysvalueof{/pgf/rounded rectangle east arc}}%
- }
- \savedmacro\roundedrectanglepoints{%
- %
- % Get half the arc angle, a.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/rounded rectangle arc length}}%
- \pgf@x=.5\pgf@x%
- \edef\halfarcangle{\pgfmath@tonumber{\pgf@x}}%
- \addtosavedmacro\halfarcangle%
- %
- % Get the (half) node dimensions x & y.
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \edef\innerxsep{\the\pgf@x}%
- \pgf@xa=0.5\wd\pgfnodeparttextbox%
- \edef\halftextwidth{\the\pgf@xa}%
- \addtosavedmacro\halftextwidth%
- \advance\pgf@x by\pgf@xa%
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \edef\innerysep{\the\pgf@y}%
- \pgf@ya=.5\ht\pgfnodeparttextbox%
- \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
- \edef\halftextheight{\the\pgf@ya}%
- \addtosavedmacro\halftextheight%
- \advance\pgf@y by\pgf@ya%
- %
- % Adjust for minimum height
- %
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgf@y<.5\pgf@yb%
- \pgf@y=.5\pgf@yb%
- \fi%
- \edef\halfheight{\the\pgf@y}%
- \addtosavedmacro\halfheight%
- %
- % Calculate the radius of the arc ends.
- %
- \pgfmathcosec@{\halfarcangle}%
- \pgf@ya=\pgfmathresult\pgf@y%
- \edef\radius{\the\pgf@ya}%
- \addtosavedmacro\radius%
- %
- % Arc width = r - r*cos(a/2).
- %
- \pgfmathcos@{\halfarcangle}%
- \pgf@xa=\pgf@ya%
- \advance\pgf@xa by-\pgfmathresult\pgf@ya%
- %
- % When the node contents are pushed inside a convex arc,
- % the resulting chord has a height r - r*cos(asin(0.5*h/r)).
- %
- \pgfmathdivide{\halftextheight}{\radius}%
- \pgfmathasin@{\pgfmathresult}%
- \pgfmathcos@{\pgfmathresult}%
- \pgf@xb=\pgf@ya%
- \advance\pgf@xb by-\pgfmathresult\pgf@ya%
- %
- % Adjust for minimum width.
- %
- \edef\westarc{\pgfkeysvalueof{/pgf/rounded rectangle west arc}}%
- \edef\eastarc{\pgfkeysvalueof{/pgf/rounded rectangle east arc}}%
- %
- \pgfutil@tempdima=2.0\pgf@x% x still holds the half width.
- \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
- \advance\pgfutil@tempdima by\pgf@xa%
- \else%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \advance\pgfutil@tempdima by\pgf@xb%
- \fi%
- \fi%
- %
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
- \advance\pgfutil@tempdima by\pgf@xa%
- \else%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \advance\pgfutil@tempdima by\pgf@xb%
- \fi%
- \fi%
- %
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgfutil@tempdima<\pgfutil@tempdimb%
- \advance\pgfutil@tempdimb by-\pgfutil@tempdima%
- \divide\pgfutil@tempdimb by2\relax%
- \edef\xoffset{\the\pgfutil@tempdimb}%
- \else%
- \let\xoffset=\innerxsep%
- \fi%
- %
- % The node is made wider if convex arcs overlap.
- %
- \pgf@x=\halftextwidth\relax%
- \advance\pgf@x by\xoffset\relax%
- \pgf@xc=\pgf@ya%
- \advance\pgf@xc by-\pgf@xb%
- \ifdim\pgf@xc>\pgf@x\relax%
- \advance\pgf@xc by-\pgf@x%
- \advance\pgf@xc by\xoffset\relax%
- \edef\xoffset{\the\pgf@xc}%
- \fi%
- \addtosavedmacro\xoffset%
- %
- \pgf@x=\halftextwidth\relax%
- \advance\pgf@x by\xoffset\relax%
- \edef\halfwidth{\the\pgf@x}%
- \addtosavedmacro\halfwidth%
- %
- \edef\arcwidth{\the\pgf@xa}%
- \addtosavedmacro\arcwidth%
- %
- \edef\chordwidth{\the\pgf@xb}%
- \addtosavedmacro\chordwidth%
- %
- \pgfmathsetlengthmacro\outerxsep{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlengthmacro\outerysep{\pgfkeysvalueof{/pgf/outer ysep}}%
- \addtosavedmacro\outerxsep%
- \addtosavedmacro\outerysep%
- %
- % calculate some horizontal adjustments made for the default miter
- % drawn when an arc meets the north or south side of the node path.
- %
- \ifdim\halfarcangle pt=90pt\relax% Avoid division by zero.
- \def\concavexshift{0pt}%
- \else%
- % For a concave arc: outer xsep * cosec((90-a/2)/2)*cos((90-a/2)/2).
- \pgfmathsubtract@{90}{\halfarcangle}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\angletemp=\pgfmathresult%
- \pgf@x=\outerxsep\relax%
- \pgfmathcosec@{\angletemp}%
- \pgf@x=\pgfmathresult\pgf@x%
- \pgfmathcos@{\angletemp}%
- \pgf@x=\pgfmathresult\pgf@x%
- \edef\concavexshift{\the\pgf@x}%
- \fi%
- \addtosavedmacro\concavexshift%
- %
- \ifdim\halfarcangle pt=90pt\relax% Avoid division by zero.
- \def\convexxshift{0pt}%
- \else%
- % For a convex arc: outer xsep * cosec((90+a/2)/2)*cos((90+a/2)/2).
- \pgfmathadd@{90}{\halfarcangle}%
- \pgfmathdivide@{\pgfmathresult}{2}%
- \let\angletemp=\pgfmathresult%
- \pgf@x=\outerxsep\relax%
- \pgfmathcosec@{\angletemp}%
- \pgf@x=\pgfmathresult\pgf@x%
- \pgfmathcos@{\angletemp}%
- \pgf@x=\pgfmathresult\pgf@x%
- \edef\convexxshift{\the\pgf@x}%
- \fi%
- \addtosavedmacro\convexxshift%
- }%
- \saveddimen\halflinewidth{\pgf@x.5\pgflinewidth}%
- \savedanchor\centerpoint{%
- \pgf@x=.5\wd\pgfnodeparttextbox%
- \pgf@y=.5\ht\pgfnodeparttextbox%
- \advance\pgf@y by-.5\dp\pgfnodeparttextbox%
- }
- \savedanchor\midpoint{%
- \pgf@x=.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \savedanchor\basepoint{%
- \pgf@x=.5\wd\pgfnodeparttextbox%
- \pgf@y=0pt\relax%
- }
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid west}{%
- \csname pgf@anchor@rounded rectangle@west\endcsname%
- \pgf@xc=\pgf@x%
- \midpoint%
- \pgf@x=\pgf@xc%
- }%
- \anchor{mid east}{%
- \csname pgf@anchor@rounded rectangle@east\endcsname%
- \pgf@xc=\pgf@x%
- \midpoint%
- \pgf@x=\pgf@xc%
- }%
- \anchor{base}{\basepoint}%
- \anchor{base west}{%
- \csname pgf@anchor@rounded rectangle@west\endcsname%
- \pgf@xc=\pgf@x%
- \basepoint%
- \pgf@x=\pgf@xc%
- }%
- \anchor{base east}{%
- \csname pgf@anchor@rounded rectangle@east\endcsname%
- \pgf@xc=\pgf@x%
- \basepoint%
- \pgf@x=\pgf@xc%
- }%
- \anchor{north}{%
- \roundedrectanglepoints%
- \pgfpointadd{\centerpoint}{\pgfpoint{+0pt}{\halfheight+\outerysep}}%
- }%
- \anchor{south}{%
- \roundedrectanglepoints%
- \pgfpointadd{\centerpoint}{\pgfpoint{+0pt}{-\halfheight-\outerysep}}%
- }%
- \anchor{west}{%
- \roundedrectanglepoints%
- \pgfpointadd{\centerpoint}{%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
- \pgfpoint{-\halfwidth-\arcwidth-\concavexshift}{+0pt}%
- \else%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpoint{-\halfwidth-\chordwidth-\outerxsep}{+0pt}%
- \else%
- \pgfpoint{-\halfwidth-\outerxsep}{+0pt}%
- \fi%
- \fi%
- }%
- }%
- \anchor{north west}{%
- \roundedrectanglepoints%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth-\convexxshift}{+0pt}}%
- \else%
- \csname pgf@anchor@rounded rectangle@west\endcsname%
- \fi%
- \pgf@xc=\pgf@x%
- \csname pgf@anchor@rounded rectangle@north\endcsname%
- \pgf@x=\pgf@xc%
- }%
- \anchor{south west}{%
- \roundedrectanglepoints%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth-\convexxshift}{+0pt}}%
- \else%
- \csname pgf@anchor@rounded rectangle@west\endcsname%
- \fi%
- \pgf@xc=\pgf@x%
- \csname pgf@anchor@rounded rectangle@south\endcsname%
- \pgf@x=\pgf@xc%
- }%
- \anchor{east}{%
- \roundedrectanglepoints%
- \pgfpointadd{\centerpoint}{%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
- \pgfpoint{\halfwidth+\arcwidth+\concavexshift}{+0pt}%
- \else%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpoint{\halfwidth+\chordwidth+\outerxsep}{+0pt}%
- \else%
- \pgfpoint{\halfwidth+\outerxsep}{+0pt}%
- \fi%
- \fi%
- }%
- }%
- \anchor{north east}{%
- \roundedrectanglepoints%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\arcwidth+\convexxshift}{+0pt}}%
- \else%
- \csname pgf@anchor@rounded rectangle@east\endcsname%
- \fi%
- \pgf@xc=\pgf@x%
- \csname pgf@anchor@rounded rectangle@north\endcsname%
- \pgf@x=\pgf@xc%
- }%
- \anchor{south east}{%
- \roundedrectanglepoints%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\arcwidth+\convexxshift}{+0pt}}%
- \else%
- \csname pgf@anchor@rounded rectangle@east\endcsname%
- \fi%
- \pgf@xc=\pgf@x%
- \csname pgf@anchor@rounded rectangle@south\endcsname%
- \pgf@x=\pgf@xc%
- }%
- \backgroundpath{%
- {%
- \roundedrectanglepoints%
- \pgftransformshift{\centerpoint}%
- \pgfpathmoveto{\pgfpoint{0pt}{\halfheight}}%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
- \pgfpathlineto{\pgfpoint{\halfwidth+\arcwidth}{+\halfheight}}%
- \pgfpatharc{180-\halfarcangle}{180+\halfarcangle}{+\radius}%
- \else%
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpathlineto{\pgfpoint{\halfwidth+\chordwidth-\arcwidth}{+\halfheight}}%
- \pgfpatharc{+\halfarcangle}{+-\halfarcangle}{+\radius}%
- \else%
- \pgfpathlineto{\pgfqpoint{\halfwidth}{\halfheight}}%
- \pgfpathlineto{\pgfqpoint{\halfwidth}{-\halfheight}}%
- \fi%
- \fi%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
- \pgfpathlineto{\pgfpoint{-\halfwidth-\arcwidth}{+-\halfheight}}%
- \pgfpatharc{+-\halfarcangle}{+\halfarcangle}{+\radius}%
- \else%
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfpathlineto{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth}{+-\halfheight}}%
- \pgfpatharc{180+\halfarcangle}{180-\halfarcangle}{+\radius}%
- \else%
- \pgfpathlineto{\pgfqpoint{-\halfwidth}{-\halfheight}}%
- \pgfpathlineto{\pgfqpoint{-\halfwidth}{\halfheight}}%
- \fi%
- \fi%
- \pgfpathclose%
- }%
- }
- \anchorborder{%
- \pgfextract@process\externalpoint{%
- \pgfextract@process\externalpoint{}%
- \pgfpointadd{\centerpoint}{\externalpoint}%
- }%
- \roundedrectanglepoints%
- %
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle=\pgfmathresult%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@north west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@north east\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- % Between north east and east.
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfextract@process\arccenter{%
- \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\radius}{+0pt}}%
- }%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {\arccenter}{0}{\halfarcangle}{\radius+\outerxsep and \radius+\outerysep}%
- \else%
- \pgfpointintersectionoflines%
- {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
- {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
- {\externalpoint}{\centerpoint}%
- \fi%
- \else%
- % Between north west and north east.
- \pgfpointintersectionoflines%
- {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
- {\csname pgf@anchor@rounded rectangle@north west\endcsname}%
- {\externalpoint}{\centerpoint}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@south west\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- % Between south west and north west.
- \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfextract@process\arccenter{%
- \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\radius}{+0pt}}%
- }%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {\arccenter}{180-\halfarcangle}{180+\halfarcangle}{\radius+\outerxsep and \radius+\outerysep}%
- \else%
- \pgfpointintersectionoflines%
- {\csname pgf@anchor@rounded rectangle@north west\endcsname}%
- {\csname pgf@anchor@rounded rectangle@south west\endcsname}%
- {\externalpoint}{\centerpoint}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@south east\endcsname}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax%
- % Between south east and south west.
- \pgfpointintersectionoflines%
- {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
- {\csname pgf@anchor@rounded rectangle@south west\endcsname}%
- {\externalpoint}{\centerpoint}%
- \else%
- % Between east and south east.
- \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
- \pgfextract@process\arccenter{%
- \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\radius}{+0pt}}%
- }%
- \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
- {\arccenter}{360-\halfarcangle}{360}{\radius+\outerxsep and \radius+\outerysep}%
- \else%
- \pgfpointintersectionoflines%
- {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
- {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
- {\externalpoint}{\centerpoint}%
- \fi%
- \fi%
- \fi%
- \fi%
- }
-}
+ \savedmacro\westarc{%
+ \edef\westarc{\pgfkeysvalueof{/pgf/rounded rectangle west arc}}%
+ }%
+ \savedmacro\eastarc{%
+ \edef\eastarc{\pgfkeysvalueof{/pgf/rounded rectangle east arc}}%
+ }%
+ \savedmacro\roundedrectanglepoints{%
+ %
+ % Get half the arc angle, a.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/rounded rectangle arc length}}%
+ \pgf@x=.5\pgf@x%
+ \edef\halfarcangle{\pgfmath@tonumber{\pgf@x}}%
+ \addtosavedmacro\halfarcangle%
+ %
+ % Get the (half) node dimensions x & y.
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \edef\innerxsep{\the\pgf@x}%
+ \pgf@xa=0.5\wd\pgfnodeparttextbox%
+ \edef\halftextwidth{\the\pgf@xa}%
+ \addtosavedmacro\halftextwidth%
+ \advance\pgf@x by\pgf@xa%
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \edef\innerysep{\the\pgf@y}%
+ \pgf@ya=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
+ \edef\halftextheight{\the\pgf@ya}%
+ \addtosavedmacro\halftextheight%
+ \advance\pgf@y by\pgf@ya%
+ %
+ % Adjust for minimum height
+ %
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@yb%
+ \pgf@y=.5\pgf@yb%
+ \fi%
+ \edef\halfheight{\the\pgf@y}%
+ \addtosavedmacro\halfheight%
+ %
+ % Calculate the radius of the arc ends.
+ %
+ \pgfmathcosec@{\halfarcangle}%
+ \pgf@ya=\pgfmathresult\pgf@y%
+ \edef\radius{\the\pgf@ya}%
+ \addtosavedmacro\radius%
+ %
+ % Arc width = r - r*cos(a/2).
+ %
+ \pgfmathcos@{\halfarcangle}%
+ \pgf@xa=\pgf@ya%
+ \advance\pgf@xa by-\pgfmathresult\pgf@ya%
+ %
+ % When the node contents are pushed inside a convex arc,
+ % the resulting chord has a height r - r*cos(asin(0.5*h/r)).
+ %
+ \pgfmathdivide{\halftextheight}{\radius}%
+ \pgfmathasin@{\pgfmathresult}%
+ \pgfmathcos@{\pgfmathresult}%
+ \pgf@xb=\pgf@ya%
+ \advance\pgf@xb by-\pgfmathresult\pgf@ya%
+ %
+ % Adjust for minimum width.
+ %
+ \edef\westarc{\pgfkeysvalueof{/pgf/rounded rectangle west arc}}%
+ \edef\eastarc{\pgfkeysvalueof{/pgf/rounded rectangle east arc}}%
+ %
+ \pgfutil@tempdima=2.0\pgf@x% x still holds the half width.
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
+ \advance\pgfutil@tempdima by\pgf@xa%
+ \else%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \advance\pgfutil@tempdima by\pgf@xb%
+ \fi%
+ \fi%
+ %
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
+ \advance\pgfutil@tempdima by\pgf@xa%
+ \else%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \advance\pgfutil@tempdima by\pgf@xb%
+ \fi%
+ \fi%
+ %
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgfutil@tempdima<\pgfutil@tempdimb%
+ \advance\pgfutil@tempdimb by-\pgfutil@tempdima%
+ \divide\pgfutil@tempdimb by2\relax%
+ \edef\xoffset{\the\pgfutil@tempdimb}%
+ \else%
+ \let\xoffset=\innerxsep%
+ \fi%
+ %
+ % The node is made wider if convex arcs overlap.
+ %
+ \pgf@x=\halftextwidth\relax%
+ \advance\pgf@x by\xoffset\relax%
+ \pgf@xc=\pgf@ya%
+ \advance\pgf@xc by-\pgf@xb%
+ \ifdim\pgf@xc>\pgf@x\relax%
+ \advance\pgf@xc by-\pgf@x%
+ \advance\pgf@xc by\xoffset\relax%
+ \edef\xoffset{\the\pgf@xc}%
+ \fi%
+ \addtosavedmacro\xoffset%
+ %
+ \pgf@x=\halftextwidth\relax%
+ \advance\pgf@x by\xoffset\relax%
+ \edef\halfwidth{\the\pgf@x}%
+ \addtosavedmacro\halfwidth%
+ %
+ \edef\arcwidth{\the\pgf@xa}%
+ \addtosavedmacro\arcwidth%
+ %
+ \edef\chordwidth{\the\pgf@xb}%
+ \addtosavedmacro\chordwidth%
+ %
+ \pgfmathsetlengthmacro\outerxsep{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlengthmacro\outerysep{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \addtosavedmacro\outerxsep%
+ \addtosavedmacro\outerysep%
+ %
+ % calculate some horizontal adjustments made for the default miter
+ % drawn when an arc meets the north or south side of the node path.
+ %
+ \ifdim\halfarcangle pt=90pt\relax% Avoid division by zero.
+ \def\concavexshift{0pt}%
+ \else%
+ % For a concave arc: outer xsep * cosec((90-a/2)/2)*cos((90-a/2)/2).
+ \pgfmathsubtract@{90}{\halfarcangle}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\angletemp=\pgfmathresult%
+ \pgf@x=\outerxsep\relax%
+ \pgfmathcosec@{\angletemp}%
+ \pgf@x=\pgfmathresult\pgf@x%
+ \pgfmathcos@{\angletemp}%
+ \pgf@x=\pgfmathresult\pgf@x%
+ \edef\concavexshift{\the\pgf@x}%
+ \fi%
+ \addtosavedmacro\concavexshift%
+ %
+ \ifdim\halfarcangle pt=90pt\relax% Avoid division by zero.
+ \def\convexxshift{0pt}%
+ \else%
+ % For a convex arc: outer xsep * cosec((90+a/2)/2)*cos((90+a/2)/2).
+ \pgfmathadd@{90}{\halfarcangle}%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\angletemp=\pgfmathresult%
+ \pgf@x=\outerxsep\relax%
+ \pgfmathcosec@{\angletemp}%
+ \pgf@x=\pgfmathresult\pgf@x%
+ \pgfmathcos@{\angletemp}%
+ \pgf@x=\pgfmathresult\pgf@x%
+ \edef\convexxshift{\the\pgf@x}%
+ \fi%
+ \addtosavedmacro\convexxshift%
+ }%
+ \saveddimen\halflinewidth{\pgf@x.5\pgflinewidth}%
+ \savedanchor\centerpoint{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=0pt\relax%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid west}{%
+ \csname pgf@anchor@rounded rectangle@west\endcsname%
+ \pgf@xc=\pgf@x%
+ \midpoint%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{mid east}{%
+ \csname pgf@anchor@rounded rectangle@east\endcsname%
+ \pgf@xc=\pgf@x%
+ \midpoint%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base west}{%
+ \csname pgf@anchor@rounded rectangle@west\endcsname%
+ \pgf@xc=\pgf@x%
+ \basepoint%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{base east}{%
+ \csname pgf@anchor@rounded rectangle@east\endcsname%
+ \pgf@xc=\pgf@x%
+ \basepoint%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{north}{%
+ \roundedrectanglepoints%
+ \pgfpointadd{\centerpoint}{\pgfpoint{+0pt}{\halfheight+\outerysep}}%
+ }%
+ \anchor{south}{%
+ \roundedrectanglepoints%
+ \pgfpointadd{\centerpoint}{\pgfpoint{+0pt}{-\halfheight-\outerysep}}%
+ }%
+ \anchor{west}{%
+ \roundedrectanglepoints%
+ \pgfpointadd{\centerpoint}{%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
+ \pgfpoint{-\halfwidth-\arcwidth-\concavexshift}{+0pt}%
+ \else%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpoint{-\halfwidth-\chordwidth-\outerxsep}{+0pt}%
+ \else%
+ \pgfpoint{-\halfwidth-\outerxsep}{+0pt}%
+ \fi%
+ \fi%
+ }%
+ }%
+ \anchor{north west}{%
+ \roundedrectanglepoints%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth-\convexxshift}{+0pt}}%
+ \else%
+ \csname pgf@anchor@rounded rectangle@west\endcsname%
+ \fi%
+ \pgf@xc=\pgf@x%
+ \csname pgf@anchor@rounded rectangle@north\endcsname%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{south west}{%
+ \roundedrectanglepoints%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth-\convexxshift}{+0pt}}%
+ \else%
+ \csname pgf@anchor@rounded rectangle@west\endcsname%
+ \fi%
+ \pgf@xc=\pgf@x%
+ \csname pgf@anchor@rounded rectangle@south\endcsname%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{east}{%
+ \roundedrectanglepoints%
+ \pgfpointadd{\centerpoint}{%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
+ \pgfpoint{\halfwidth+\arcwidth+\concavexshift}{+0pt}%
+ \else%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpoint{\halfwidth+\chordwidth+\outerxsep}{+0pt}%
+ \else%
+ \pgfpoint{\halfwidth+\outerxsep}{+0pt}%
+ \fi%
+ \fi%
+ }%
+ }%
+ \anchor{north east}{%
+ \roundedrectanglepoints%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\arcwidth+\convexxshift}{+0pt}}%
+ \else%
+ \csname pgf@anchor@rounded rectangle@east\endcsname%
+ \fi%
+ \pgf@xc=\pgf@x%
+ \csname pgf@anchor@rounded rectangle@north\endcsname%
+ \pgf@x=\pgf@xc%
+ }%
+ \anchor{south east}{%
+ \roundedrectanglepoints%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\arcwidth+\convexxshift}{+0pt}}%
+ \else%
+ \csname pgf@anchor@rounded rectangle@east\endcsname%
+ \fi%
+ \pgf@xc=\pgf@x%
+ \csname pgf@anchor@rounded rectangle@south\endcsname%
+ \pgf@x=\pgf@xc%
+ }%
+ \backgroundpath{%
+ {%
+ \roundedrectanglepoints%
+ \pgftransformshift{\centerpoint}%
+ \pgfpathmoveto{\pgfpoint{0pt}{\halfheight}}%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@concave%
+ \pgfpathlineto{\pgfpoint{\halfwidth+\arcwidth}{+\halfheight}}%
+ \pgfpatharc{180-\halfarcangle}{180+\halfarcangle}{+\radius}%
+ \else%
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpathlineto{\pgfpoint{\halfwidth+\chordwidth-\arcwidth}{+\halfheight}}%
+ \pgfpatharc{+\halfarcangle}{+-\halfarcangle}{+\radius}%
+ \else%
+ \pgfpathlineto{\pgfqpoint{\halfwidth}{\halfheight}}%
+ \pgfpathlineto{\pgfqpoint{\halfwidth}{-\halfheight}}%
+ \fi%
+ \fi%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@concave%
+ \pgfpathlineto{\pgfpoint{-\halfwidth-\arcwidth}{+-\halfheight}}%
+ \pgfpatharc{+-\halfarcangle}{+\halfarcangle}{+\radius}%
+ \else%
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfpathlineto{\pgfpoint{-\halfwidth-\chordwidth+\arcwidth}{+-\halfheight}}%
+ \pgfpatharc{180+\halfarcangle}{180-\halfarcangle}{+\radius}%
+ \else%
+ \pgfpathlineto{\pgfqpoint{-\halfwidth}{-\halfheight}}%
+ \pgfpathlineto{\pgfqpoint{-\halfwidth}{\halfheight}}%
+ \fi%
+ \fi%
+ \pgfpathclose%
+ }%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{%
+ \pgfextract@process\externalpoint{}%
+ \pgfpointadd{\centerpoint}{\externalpoint}%
+ }%
+ \roundedrectanglepoints%
+ %
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle=\pgfmathresult%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@north west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@north east\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ % Between north east and east.
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfextract@process\arccenter{%
+ \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\radius}{+0pt}}%
+ }%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {\arccenter}{0}{\halfarcangle}{\radius+\outerxsep and \radius+\outerysep}%
+ \else%
+ \pgfpointintersectionoflines%
+ {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
+ {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
+ {\externalpoint}{\centerpoint}%
+ \fi%
+ \else%
+ % Between north west and north east.
+ \pgfpointintersectionoflines%
+ {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
+ {\csname pgf@anchor@rounded rectangle@north west\endcsname}%
+ {\externalpoint}{\centerpoint}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@south west\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ % Between south west and north west.
+ \ifx\westarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfextract@process\arccenter{%
+ \pgfpointadd{\centerpoint}{\pgfpoint{-\halfwidth-\chordwidth+\radius}{+0pt}}%
+ }%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {\arccenter}{180-\halfarcangle}{180+\halfarcangle}{\radius+\outerxsep and \radius+\outerysep}%
+ \else%
+ \pgfpointintersectionoflines%
+ {\csname pgf@anchor@rounded rectangle@north west\endcsname}%
+ {\csname pgf@anchor@rounded rectangle@south west\endcsname}%
+ {\externalpoint}{\centerpoint}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rounded rectangle@south east\endcsname}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax%
+ % Between south east and south west.
+ \pgfpointintersectionoflines%
+ {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
+ {\csname pgf@anchor@rounded rectangle@south west\endcsname}%
+ {\externalpoint}{\centerpoint}%
+ \else%
+ % Between east and south east.
+ \ifx\eastarc\pgf@lib@sh@misc@rr@text@convex%
+ \pgfextract@process\arccenter{%
+ \pgfpointadd{\centerpoint}{\pgfpoint{\halfwidth+\chordwidth-\radius}{+0pt}}%
+ }%
+ \pgfmathpointintersectionoflineandarc{\externalpoint}{\centerpoint}%
+ {\arccenter}{360-\halfarcangle}{360}{\radius+\outerxsep and \radius+\outerysep}%
+ \else%
+ \pgfpointintersectionoflines%
+ {\csname pgf@anchor@rounded rectangle@north east\endcsname}%
+ {\csname pgf@anchor@rounded rectangle@south east\endcsname}%
+ {\externalpoint}{\centerpoint}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
@@ -483,74 +483,74 @@
% /pgf/chamfered rectangle xsep : set the extent of the x chamferling.
% /pgf/chamfered rectangle ysep : set the extent of the y chamferling.
-\pgfkeys{/pgf/chamfered rectangle corners/.store in=\pgf@lib@sh@misc@cr@corners}
-\pgfkeys{/tikz/chamfered rectangle corners/.store in=\pgf@lib@sh@misc@cr@corners}
+\pgfkeys{/pgf/chamfered rectangle corners/.store in=\pgf@lib@sh@misc@cr@corners}%
+\pgfkeys{/tikz/chamfered rectangle corners/.store in=\pgf@lib@sh@misc@cr@corners}%
\def\pgf@lib@sh@misc@cr@chamferall{chamfer all}%
-\def\pgf@lib@sh@misc@cr@chamfer{chamfer}
+\def\pgf@lib@sh@misc@cr@chamfer{chamfer}%
\let\pgf@lib@sh@misc@cr@corners\pgf@lib@sh@misc@cr@chamferall
\def\pgf@lib@sh@misc@cr@getcorners{%
- \let\northeastcorner\pgfutil@empty%
- \let\southeastcorner\pgfutil@empty%
- \let\southwestcorner\pgfutil@empty%
- \let\northwestcorner\pgfutil@empty%
- \expandafter\pgfutil@in@\expandafter{\pgf@lib@sh@misc@cr@corners}{chamfer all}%
- \ifpgfutil@in@%
- \let\northeastcorner\pgf@lib@sh@misc@cr@round%
- \let\southeastcorner\pgf@lib@sh@misc@cr@round%
- \let\southwestcorner\pgf@lib@sh@misc@cr@round%
- \let\northwestcorner\pgf@lib@sh@misc@cr@round%
- \let\pgf@next\relax%
- \else%
- \let\pgf@next\pgf@lib@sh@misc@cr@parsecorners%
- \fi%
- \pgf@next}
+ \let\northeastcorner\pgfutil@empty%
+ \let\southeastcorner\pgfutil@empty%
+ \let\southwestcorner\pgfutil@empty%
+ \let\northwestcorner\pgfutil@empty%
+ \expandafter\pgfutil@in@\expandafter{\pgf@lib@sh@misc@cr@corners}{chamfer all}%
+ \ifpgfutil@in@%
+ \let\northeastcorner\pgf@lib@sh@misc@cr@round%
+ \let\southeastcorner\pgf@lib@sh@misc@cr@round%
+ \let\southwestcorner\pgf@lib@sh@misc@cr@round%
+ \let\northwestcorner\pgf@lib@sh@misc@cr@round%
+ \let\pgf@next\relax%
+ \else%
+ \let\pgf@next\pgf@lib@sh@misc@cr@parsecorners%
+ \fi%
+ \pgf@next}%
\def\pgf@lib@sh@misc@cr@parsecorners{%
- \expandafter\pgf@@chamferedrectangle@parsecorners\pgf@lib@sh@misc@cr@corners,\pgf@stop,%
-}
-
+ \expandafter\pgf@@chamferedrectangle@parsecorners\pgf@lib@sh@misc@cr@corners,\pgf@stop,%
+}%
+
\def\pgf@@chamferedrectangle@parsecorners#1,{%
- \ifx#1\pgf@stop%
- \let\pgf@next\relax%
- \else%
- \pgfutil@in@{@#1@}{@north east@@top left@}%
- \ifpgfutil@in@%
- \let\northeastcorner\pgf@lib@sh@misc@cr@chamfer%
- \else%
- \pgfutil@in@{@#1@}{@south east@@bottom right@}%
- \ifpgfutil@in@%
- \let\southeastcorner\pgf@lib@sh@misc@cr@chamfer%
- \else%
- \pgfutil@in@{@#1@}{@south west@@bottom left@}%
- \ifpgfutil@in@%
- \let\southwestcorner\pgf@lib@sh@misc@cr@chamfer%
- \else%
- \pgfutil@in@{@#1@}{@north west@@top right@}%
- \ifpgfutil@in@%
- \let\northwestcorner\pgf@lib@sh@misc@cr@round%
- \fi%
- \fi%
- \fi%
- \fi%
- \let\pgf@next\pgf@@@chamferedrectangle@parsecorners%
- \fi%
- \pgf@next%
-}
+ \ifx#1\pgf@stop%
+ \let\pgf@next\relax%
+ \else%
+ \pgfutil@in@{@#1@}{@north east@@top left@}%
+ \ifpgfutil@in@%
+ \let\northeastcorner\pgf@lib@sh@misc@cr@chamfer%
+ \else%
+ \pgfutil@in@{@#1@}{@south east@@bottom right@}%
+ \ifpgfutil@in@%
+ \let\southeastcorner\pgf@lib@sh@misc@cr@chamfer%
+ \else%
+ \pgfutil@in@{@#1@}{@south west@@bottom left@}%
+ \ifpgfutil@in@%
+ \let\southwestcorner\pgf@lib@sh@misc@cr@chamfer%
+ \else%
+ \pgfutil@in@{@#1@}{@north west@@top right@}%
+ \ifpgfutil@in@%
+ \let\northwestcorner\pgf@lib@sh@misc@cr@round%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \let\pgf@next\pgf@@@chamferedrectangle@parsecorners%
+ \fi%
+ \pgf@next%
+}%
\def\pgf@@@chamferedrectangle@parsecorners{%
- \pgfutil@ifnextchar x{\pgf@@chamferedrectangle@parsecorners}{\pgf@@chamferedrectangle@parsecorners}%
+ \pgfutil@ifnextchar x{\pgf@@chamferedrectangle@parsecorners}{\pgf@@chamferedrectangle@parsecorners}%
}%
\pgfkeys{/pgf/.cd,
- chamfered rectangle angle/.initial=45,%
- chamfered rectangle xsep/.initial=.666ex,%
- chamfered rectangle ysep/.initial=.666ex%
-}
+ chamfered rectangle angle/.initial=45,%
+ chamfered rectangle xsep/.initial=.666ex,%
+ chamfered rectangle ysep/.initial=.666ex%
+}%
\pgfkeys{/pgf/chamfered rectangle sep/.style={%
- /pgf/chamfered rectangle xsep=#1,/pgf/chamfered rectangle ysep=#1}%
-}
+ /pgf/chamfered rectangle xsep=#1,/pgf/chamfered rectangle ysep=#1}%
+}%
@@ -559,569 +559,569 @@
%
%
\pgfdeclareshape{chamfered rectangle}{%
- \savedmacro\getchamferedrectanglepoints{%
- \pgf@lib@sh@misc@cr@getcorners%
- %
- % Get the node dimensions.
- %
- \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
- \advance\pgf@xa.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
- \advance\pgf@ya.5\ht\pgfnodeparttextbox%
- \advance\pgf@ya.5\dp\pgfnodeparttextbox%
- %
- % Get chamfer stuff.
- %
- \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/chamfered rectangle angle}}%
- \ifdim\pgfutil@tempdima<89pt\relax%
- \ifdim\pgfutil@tempdima<1pt\relax%
- \pgfutil@tempdima1pt\relax%
- \fi%
- \else%
- \pgfutil@tempdima89pt\relax%
- \fi%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima90pt\relax%
- \pgfmathtan@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \let\tanangle\pgfmathresult%
- \pgfmathcot@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \let\cotangle\pgfmathresult%
- \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/chamfered rectangle xsep}}%
- \pgf@yc\tanangle\pgf@xb%
- \ifdim\pgf@yc>\pgf@ya%
- \pgf@yc\pgf@ya%
- \pgf@xb\cotangle\pgf@yc%
- \fi%
- \pgfmathcot@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/chamfered rectangle ysep}}%
- \pgf@xc\cotangle\pgf@yb%
- \ifdim\pgf@xc>\pgf@xa%
- \pgf@xc\pgf@xa%
- \pgf@yb\tanangle\pgf@xc%
- \fi%
- %
- % Check for minimum width and height%
- %
- \pgfutil@tempdima\pgf@xa%
- \advance\pgfutil@tempdima\pgf@xb%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
- \ifdim\pgfutil@tempdima<.5\pgfutil@tempdimb%
- \pgf@xa.5\pgfutil@tempdimb%
- \advance\pgf@xa-\pgf@xb%
- \fi%
- \pgfutil@tempdima\pgf@ya%
- \advance\pgfutil@tempdima\pgf@yb%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
- \ifdim\pgfutil@tempdima<.5\pgfutil@tempdimb%
- \pgf@ya.5\pgfutil@tempdimb%
- \advance\pgf@ya-\pgf@yb%
- \fi%
- %
- % Define the background path points.
- %
- \pgfextract@process\centerpoint{%
- \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
- \pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}%
- \pgfmathaddtolength\pgf@y{+-.5\dp\pgfnodeparttextbox}%
- }%
- \pgfextract@process\beforenortheast{%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@ya%
- \advance\pgf@y-\pgf@yc%
- }%
- \pgfextract@process\northeast{%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- \ifx\northeastcorner\pgfutil@empty%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y\pgf@yb%
- \fi%
- }%
- \pgfextract@process\afternortheast{%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@x-\pgf@xc%
- \advance\pgf@y\pgf@ya%
- \advance\pgf@y\pgf@yb%
- }%
- \pgfextract@process\northwest{%
- \centerpoint%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@y\pgf@ya%
- \ifx\northwestcorner\pgfutil@empty%
- \advance\pgf@x-\pgf@xb%
- \advance\pgf@y\pgf@yb%
- \fi%
- }%
- \pgfextract@process\beforesouthwest{%
- \centerpoint%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@x-\pgf@xb%
- \advance\pgf@y-\pgf@ya%
- \advance\pgf@y\pgf@yc%
- }%
- \pgfextract@process\southwest{%
- \centerpoint%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@y-\pgf@ya%
- \ifx\southwestcorner\pgfutil@empty%
- \advance\pgf@x-\pgf@xb%
- \advance\pgf@y-\pgf@yb%
- \fi%
- }%
- \pgfextract@process\aftersouthwest{%
- \centerpoint%
- \advance\pgf@x-\pgf@xa%
- \advance\pgf@x\pgf@xc%
- \advance\pgf@y-\pgf@ya%
- \advance\pgf@y-\pgf@yb%
- }%
- \pgfextract@process\southeast{%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y-\pgf@ya%
- \ifx\southeastcorner\pgfutil@empty%
- \advance\pgf@x\pgf@xb%
- \advance\pgf@y-\pgf@yb%
- \fi%
- }%
- %
- % Calculate the `miter' vectors.
- %
- \pgfmathanglebetweenlines{\beforenortheast}{\afternortheast}{\beforenortheast}%
- {\beforesouthwest\pgf@ya\pgf@y\beforenortheast\pgf@y\pgf@ya}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \ifdim\pgfutil@tempdima>180pt\relax%
- \advance\pgfutil@tempdima-180pt\relax%
- \fi%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/outer xsep}}%
- \ifdim\pgfutil@tempdima<90pt\relax%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \pgfutil@tempdima0pt\relax%
- \else%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima90pt\relax%
- \fi%
- \pgfextract@process\before@ne@anchor{%
- \beforenortheast%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfextract@process\before@sw@anchor{%
- \beforesouthwest%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \pgfqpointpolar{-\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- \pgfmathanglebetweenlines{\afternortheast}{\aftersouthwest\pgf@xa\pgf@x\afternortheast\pgf@x\pgf@xa}%
- {\afternortheast}{\beforenortheast}%
- \pgfutil@tempdima\pgfmathresult pt\relax%
- \ifdim\pgfutil@tempdima>270pt\relax%
- \advance\pgfutil@tempdima-270pt\relax%
- \fi%
- \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/outer ysep}}%
- \ifdim\pgfutil@tempdima<90pt\relax%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \pgfutil@tempdima90pt\relax%
- \else%
- \pgfutil@tempdima.5\pgfutil@tempdima%
- \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
- \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
- \fi%
- %
- \pgfextract@process\after@ne@anchor{%
- \afternortheast%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfutil@tempdima-\pgfutil@tempdima%
- \advance\pgfutil@tempdima180pt\relax%
- \pgfextract@process\after@sw@anchor{%
- \aftersouthwest
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \pgfqpointpolar{-\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \addtosavedmacro\before@ne@anchor%
- \addtosavedmacro\after@ne@anchor%
- \addtosavedmacro\before@sw@anchor%
- \addtosavedmacro\after@sw@anchor%
- \pgfextract@process\ne@anchor{%
- \ifx\northeastcorner\pgfutil@empty%
- \northeast%
- \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \else%
- \pgfpointlineattime{0.5}{\before@ne@anchor}{\after@ne@anchor}%
- \fi%
- }%
- \pgfextract@process\nw@anchor{%
- \ifx\northwestcorner\pgfutil@empty%
- \northwest%
- \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \else%
- \pgfpointlineattime{0.5}{%
- \before@ne@anchor%
- \pgf@ya\pgf@y
- \before@sw@anchor%
- \pgf@y\pgf@ya%
- }{%
- \after@ne@anchor%
- \pgf@ya\pgf@y
- \after@sw@anchor%
- \pgf@y\pgf@ya%
- }%
- \fi%
- }%
- \pgfextract@process\sw@anchor{%
- \ifx\southwestcorner\pgfutil@empty%
- \southwest%
- \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
- \else%
- \pgfpointlineattime{0.5}{\before@sw@anchor}{\after@sw@anchor}%
- \fi%
- }%
- \pgfextract@process\se@anchor{%
- \ifx\southeastcorner\pgfutil@empty%
- \southeast%
- \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
- \else%
- \pgfpointlineattime{0.5}{%
- \before@ne@anchor%
- \pgf@xa\pgf@x
- \before@sw@anchor%
- \pgf@x\pgf@xa%
- }{%
- \after@ne@anchor%
- \pgf@xa\pgf@x
- \after@sw@anchor%
- \pgf@x\pgf@xa%
- }%
- \fi%
- }%
- \addtosavedmacro\ne@anchor%
- \addtosavedmacro\nw@anchor%
- \addtosavedmacro\sw@anchor%
- \addtosavedmacro\se@anchor%
- }%
- \savedanchor\centerpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }%
- \savedanchor\midpoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+.5ex}%
- }%
- \savedanchor\basepoint{%
- \pgf@x.5\wd\pgfnodeparttextbox%
- \pgf@y0pt%
- }%
- \anchor{center}{\centerpoint}%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \getchamferedrectanglepoints%
- \midpoint%
- \pgf@ya\pgf@y%
- \pgf@process{%
- \before@sw@anchor%
- \pgf@ya\pgf@y%
- \before@ne@anchor%
- \pgf@y\pgf@ya
- }%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\after@sw@anchor\pgf@ya\pgf@y\after@ne@anchor\pgf@y\pgf@ya}%
- \else%
- \pgf@process{\before@ne@anchor}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor}%
- \else%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor}%
- {\after@ne@anchor}%
- \fi%
- \fi%
- }%
- \anchor{mid west}{%
- \getchamferedrectanglepoints%
- \midpoint%
- \pgf@ya\pgf@y%
- \pgf@process{\before@sw@anchor}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor}{\after@sw@anchor}%
- \else%
- \pgf@process{\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor}%
- \else%
- \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\after@ne@anchor\pgf@ya\pgf@y\after@sw@anchor\pgf@y\pgf@ya}%
- \fi%
- \fi%
- }%
- \anchor{base}{\basepoint}%
- \anchor{base east}{%
- \getchamferedrectanglepoints%
- \basepoint%
- \pgf@ya\pgf@y%
- \pgf@process{%
- \before@sw@anchor%
- \pgf@ya\pgf@y%
- \before@ne@anchor%
- \pgf@y\pgf@ya
- }%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\after@sw@anchor\pgf@ya\pgf@y\after@ne@anchor\pgf@y\pgf@ya}%
- \else%
- \pgf@process{\before@ne@anchor}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor}%
- \else%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor}%
- {\after@ne@anchor}%
- \fi%
- \fi%
- }%
- \anchor{base west}{%
- \getchamferedrectanglepoints%
- \basepoint%
- \pgf@ya\pgf@y%
- \pgf@process{\before@sw@anchor}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor}{\after@sw@anchor}%
- \else%
- \pgf@process{\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- \ifdim\pgf@ya<\pgf@y%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@sw@anchor}%
- \else%
- \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- {\after@ne@anchor\pgf@ya\pgf@y\after@sw@anchor\pgf@y\pgf@ya}%
- \fi%
- \fi%
- }%
- \anchor{before north east}{\getchamferedrectanglepoints\before@ne@anchor}%
- \anchor{north east}{\getchamferedrectanglepoints\ne@anchor}%
- \anchor{after north east}{\getchamferedrectanglepoints\after@ne@anchor}%
- \anchor{north}{%
- \getchamferedrectanglepoints%
- \centerpoint%
- \pgf@xa\pgf@x%
- \after@ne@anchor%
- \pgf@x\pgf@xa}%
- \anchor{before north west}{%
- \getchamferedrectanglepoints%
- \after@sw@anchor%
- \pgf@xa\pgf@x%
- \after@ne@anchor%
- \pgf@x\pgf@xa}%
- \anchor{north west}{\getchamferedrectanglepoints\nw@anchor}%
- \anchor{after north west}{%
- \getchamferedrectanglepoints%
- \before@sw@anchor%
- \pgf@xa\pgf@x%
- \before@ne@anchor%
- \pgf@x\pgf@xa}%
- \anchor{west}{%
- \getchamferedrectanglepoints%
- \centerpoint%
- \pgf@ya\pgf@y%
- \before@sw@anchor%
- \pgf@y\pgf@ya}%
- \anchor{before south west}{\getchamferedrectanglepoints\before@sw@anchor}%
- \anchor{south west}{\getchamferedrectanglepoints\sw@anchor}%
- \anchor{after south west}{\getchamferedrectanglepoints\after@sw@anchor}%
- \anchor{south}{%
- \getchamferedrectanglepoints%
- \centerpoint%
- \pgf@xa\pgf@x%
- \after@sw@anchor%
- \pgf@x\pgf@xa}%
- \anchor{before south east}{%
- \getchamferedrectanglepoints%
- \after@sw@anchor%
- \pgf@ya\pgf@y%
- \after@ne@anchor%
- \pgf@y\pgf@ya}%
- \anchor{south east}{\getchamferedrectanglepoints\se@anchor}%
- \anchor{after south east}{%
- \getchamferedrectanglepoints%
- \before@sw@anchor%
- \pgf@ya\pgf@y%
- \before@ne@anchor%
- \pgf@y\pgf@ya}%
- \anchor{east}{%
- \getchamferedrectanglepoints%
- \centerpoint%
- \pgf@ya\pgf@y%
- \before@ne@anchor%
- \pgf@y\pgf@ya}%
- \backgroundpath{%
- \pgfpathmoveto{\beforenortheast}%
- \pgfpathlineto{\northeast}%
- \pgfpathlineto{\afternortheast}%
- \pgfpathlineto{\aftersouthwest\pgf@xa\pgf@x\afternortheast\pgf@x\pgf@xa}%
- \pgfpathlineto{\northwest}%
- \pgfpathlineto{\beforesouthwest\pgf@xa\pgf@x\beforenortheast\pgf@x\pgf@xa}%
- \pgfpathlineto{\beforesouthwest}%
- \pgfpathlineto{\southwest}%
- \pgfpathlineto{\aftersouthwest}%
- \pgfpathlineto{\aftersouthwest\pgf@ya\pgf@y\afternortheast\pgf@y\pgf@ya}%
- \pgfpathlineto{\southeast}%
- \pgfpathlineto{\beforesouthwest\pgf@ya\pgf@y\beforenortheast\pgf@y\pgf@ya}%
- \pgfpathclose%
- }
- \anchorborder{%
- \pgfextract@process\externalpoint{%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
- \let\externalangle\pgfmathresult%
- \getchamferedrectanglepoints%
- \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% west.
- \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% north.
- \pgfmathanglebetweenpoints{\centerpoint}{\ne@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% north east.
- \pgfmathanglebetweenpoints{\centerpoint}{\before@ne@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% before north east.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\centerpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}{\before@ne@anchor}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\before@ne@anchor}{\ne@anchor}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\after@ne@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% after north east.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\ne@anchor}{\after@ne@anchor}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\after@ne@anchor}{\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\nw@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% north west.
- \pgfmathanglebetweenpoints{\centerpoint}{\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% before north west.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- {\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
- {\nw@anchor}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% after north west.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\nw@anchor}{\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
- {\before@sw@anchor\pgf@xa\pgf@x\centerpoint\pgf@x\pgf@xa}%
- \fi%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% south.
- \pgfmathanglebetweenpoints{\centerpoint}{\sw@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% south west.
- \pgfmathanglebetweenpoints{\centerpoint}{\before@sw@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% before south west.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\before@sw@anchor\pgf@xa\pgf@x\centerpoint\pgf@x\pgf@xa}%
- {\before@sw@anchor}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\before@sw@anchor}{\sw@anchor}%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\after@sw@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% after south west.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\sw@anchor}{\after@sw@anchor}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\after@sw@anchor}{\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
- \fi%
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\se@anchor}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% south east.
- \pgfmathanglebetweenpoints{\centerpoint}{\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% before south east.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
- {\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}{\se@anchor}
- \fi%
- \else%
- \pgfmathanglebetweenpoints{\centerpoint}{\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
- \ifdim\externalangle pt<\pgfmathresult pt\relax% after south east.
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\se@anchor}{\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
- \else%
- \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
- {\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
- {\centerpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
- \fi%
- \fi%
- \fi%
- \fi%
- }%
-}
+ \savedmacro\getchamferedrectanglepoints{%
+ \pgf@lib@sh@misc@cr@getcorners%
+ %
+ % Get the node dimensions.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@xa.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@ya.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya.5\dp\pgfnodeparttextbox%
+ %
+ % Get chamfer stuff.
+ %
+ \pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/chamfered rectangle angle}}%
+ \ifdim\pgfutil@tempdima<89pt\relax%
+ \ifdim\pgfutil@tempdima<1pt\relax%
+ \pgfutil@tempdima1pt\relax%
+ \fi%
+ \else%
+ \pgfutil@tempdima89pt\relax%
+ \fi%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima90pt\relax%
+ \pgfmathtan@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \let\tanangle\pgfmathresult%
+ \pgfmathcot@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \let\cotangle\pgfmathresult%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/chamfered rectangle xsep}}%
+ \pgf@yc\tanangle\pgf@xb%
+ \ifdim\pgf@yc>\pgf@ya%
+ \pgf@yc\pgf@ya%
+ \pgf@xb\cotangle\pgf@yc%
+ \fi%
+ \pgfmathcot@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/chamfered rectangle ysep}}%
+ \pgf@xc\cotangle\pgf@yb%
+ \ifdim\pgf@xc>\pgf@xa%
+ \pgf@xc\pgf@xa%
+ \pgf@yb\tanangle\pgf@xc%
+ \fi%
+ %
+ % Check for minimum width and height%
+ %
+ \pgfutil@tempdima\pgf@xa%
+ \advance\pgfutil@tempdima\pgf@xb%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgfutil@tempdima<.5\pgfutil@tempdimb%
+ \pgf@xa.5\pgfutil@tempdimb%
+ \advance\pgf@xa-\pgf@xb%
+ \fi%
+ \pgfutil@tempdima\pgf@ya%
+ \advance\pgfutil@tempdima\pgf@yb%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgfutil@tempdima<.5\pgfutil@tempdimb%
+ \pgf@ya.5\pgfutil@tempdimb%
+ \advance\pgf@ya-\pgf@yb%
+ \fi%
+ %
+ % Define the background path points.
+ %
+ \pgfextract@process\centerpoint{%
+ \pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
+ \pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}%
+ \pgfmathaddtolength\pgf@y{+-.5\dp\pgfnodeparttextbox}%
+ }%
+ \pgfextract@process\beforenortheast{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@ya%
+ \advance\pgf@y-\pgf@yc%
+ }%
+ \pgfextract@process\northeast{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ \ifx\northeastcorner\pgfutil@empty%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ \fi%
+ }%
+ \pgfextract@process\afternortheast{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@x-\pgf@xc%
+ \advance\pgf@y\pgf@ya%
+ \advance\pgf@y\pgf@yb%
+ }%
+ \pgfextract@process\northwest{%
+ \centerpoint%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ \ifx\northwestcorner\pgfutil@empty%
+ \advance\pgf@x-\pgf@xb%
+ \advance\pgf@y\pgf@yb%
+ \fi%
+ }%
+ \pgfextract@process\beforesouthwest{%
+ \centerpoint%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@x-\pgf@xb%
+ \advance\pgf@y-\pgf@ya%
+ \advance\pgf@y\pgf@yc%
+ }%
+ \pgfextract@process\southwest{%
+ \centerpoint%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \ifx\southwestcorner\pgfutil@empty%
+ \advance\pgf@x-\pgf@xb%
+ \advance\pgf@y-\pgf@yb%
+ \fi%
+ }%
+ \pgfextract@process\aftersouthwest{%
+ \centerpoint%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@x\pgf@xc%
+ \advance\pgf@y-\pgf@ya%
+ \advance\pgf@y-\pgf@yb%
+ }%
+ \pgfextract@process\southeast{%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \ifx\southeastcorner\pgfutil@empty%
+ \advance\pgf@x\pgf@xb%
+ \advance\pgf@y-\pgf@yb%
+ \fi%
+ }%
+ %
+ % Calculate the `miter' vectors.
+ %
+ \pgfmathanglebetweenlines{\beforenortheast}{\afternortheast}{\beforenortheast}%
+ {\beforesouthwest\pgf@ya\pgf@y\beforenortheast\pgf@y\pgf@ya}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \ifdim\pgfutil@tempdima>180pt\relax%
+ \advance\pgfutil@tempdima-180pt\relax%
+ \fi%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \ifdim\pgfutil@tempdima<90pt\relax%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \pgfutil@tempdima0pt\relax%
+ \else%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima90pt\relax%
+ \fi%
+ \pgfextract@process\before@ne@anchor{%
+ \beforenortheast%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfextract@process\before@sw@anchor{%
+ \beforesouthwest%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgfqpointpolar{-\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ %
+ \pgfmathanglebetweenlines{\afternortheast}{\aftersouthwest\pgf@xa\pgf@x\afternortheast\pgf@x\pgf@xa}%
+ {\afternortheast}{\beforenortheast}%
+ \pgfutil@tempdima\pgfmathresult pt\relax%
+ \ifdim\pgfutil@tempdima>270pt\relax%
+ \advance\pgfutil@tempdima-270pt\relax%
+ \fi%
+ \pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgfutil@tempdima<90pt\relax%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \pgfutil@tempdima90pt\relax%
+ \else%
+ \pgfutil@tempdima.5\pgfutil@tempdima%
+ \pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
+ \pgfutil@tempdimb\pgfmathresult\pgfutil@tempdimb%
+ \fi%
+ %
+ \pgfextract@process\after@ne@anchor{%
+ \afternortheast%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfutil@tempdima-\pgfutil@tempdima%
+ \advance\pgfutil@tempdima180pt\relax%
+ \pgfextract@process\after@sw@anchor{%
+ \aftersouthwest
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgfqpointpolar{-\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \addtosavedmacro\before@ne@anchor%
+ \addtosavedmacro\after@ne@anchor%
+ \addtosavedmacro\before@sw@anchor%
+ \addtosavedmacro\after@sw@anchor%
+ \pgfextract@process\ne@anchor{%
+ \ifx\northeastcorner\pgfutil@empty%
+ \northeast%
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \else%
+ \pgfpointlineattime{0.5}{\before@ne@anchor}{\after@ne@anchor}%
+ \fi%
+ }%
+ \pgfextract@process\nw@anchor{%
+ \ifx\northwestcorner\pgfutil@empty%
+ \northwest%
+ \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \else%
+ \pgfpointlineattime{0.5}{%
+ \before@ne@anchor%
+ \pgf@ya\pgf@y
+ \before@sw@anchor%
+ \pgf@y\pgf@ya%
+ }{%
+ \after@ne@anchor%
+ \pgf@ya\pgf@y
+ \after@sw@anchor%
+ \pgf@y\pgf@ya%
+ }%
+ \fi%
+ }%
+ \pgfextract@process\sw@anchor{%
+ \ifx\southwestcorner\pgfutil@empty%
+ \southwest%
+ \pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
+ \else%
+ \pgfpointlineattime{0.5}{\before@sw@anchor}{\after@sw@anchor}%
+ \fi%
+ }%
+ \pgfextract@process\se@anchor{%
+ \ifx\southeastcorner\pgfutil@empty%
+ \southeast%
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
+ \else%
+ \pgfpointlineattime{0.5}{%
+ \before@ne@anchor%
+ \pgf@xa\pgf@x
+ \before@sw@anchor%
+ \pgf@x\pgf@xa%
+ }{%
+ \after@ne@anchor%
+ \pgf@xa\pgf@x
+ \after@sw@anchor%
+ \pgf@x\pgf@xa%
+ }%
+ \fi%
+ }%
+ \addtosavedmacro\ne@anchor%
+ \addtosavedmacro\nw@anchor%
+ \addtosavedmacro\sw@anchor%
+ \addtosavedmacro\se@anchor%
+ }%
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+.5ex}%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y0pt%
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \getchamferedrectanglepoints%
+ \midpoint%
+ \pgf@ya\pgf@y%
+ \pgf@process{%
+ \before@sw@anchor%
+ \pgf@ya\pgf@y%
+ \before@ne@anchor%
+ \pgf@y\pgf@ya%
+ }%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\after@sw@anchor\pgf@ya\pgf@y\after@ne@anchor\pgf@y\pgf@ya}%
+ \else%
+ \pgf@process{\before@ne@anchor}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor}%
+ {\after@ne@anchor}%
+ \fi%
+ \fi%
+ }%
+ \anchor{mid west}{%
+ \getchamferedrectanglepoints%
+ \midpoint%
+ \pgf@ya\pgf@y%
+ \pgf@process{\before@sw@anchor}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor}{\after@sw@anchor}%
+ \else%
+ \pgf@process{\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\midpoint}{\midpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\after@ne@anchor\pgf@ya\pgf@y\after@sw@anchor\pgf@y\pgf@ya}%
+ \fi%
+ \fi%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \getchamferedrectanglepoints%
+ \basepoint%
+ \pgf@ya\pgf@y%
+ \pgf@process{%
+ \before@sw@anchor%
+ \pgf@ya\pgf@y%
+ \before@ne@anchor%
+ \pgf@y\pgf@ya%
+ }%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\after@sw@anchor\pgf@ya\pgf@y\after@ne@anchor\pgf@y\pgf@ya}%
+ \else%
+ \pgf@process{\before@ne@anchor}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor}%
+ {\after@ne@anchor}%
+ \fi%
+ \fi%
+ }%
+ \anchor{base west}{%
+ \getchamferedrectanglepoints%
+ \basepoint%
+ \pgf@ya\pgf@y%
+ \pgf@process{\before@sw@anchor}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor}{\after@sw@anchor}%
+ \else%
+ \pgf@process{\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ \ifdim\pgf@ya<\pgf@y%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@sw@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\basepoint}{\basepoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\before@ne@anchor\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ {\after@ne@anchor\pgf@ya\pgf@y\after@sw@anchor\pgf@y\pgf@ya}%
+ \fi%
+ \fi%
+ }%
+ \anchor{before north east}{\getchamferedrectanglepoints\before@ne@anchor}%
+ \anchor{north east}{\getchamferedrectanglepoints\ne@anchor}%
+ \anchor{after north east}{\getchamferedrectanglepoints\after@ne@anchor}%
+ \anchor{north}{%
+ \getchamferedrectanglepoints%
+ \centerpoint%
+ \pgf@xa\pgf@x%
+ \after@ne@anchor%
+ \pgf@x\pgf@xa}%
+ \anchor{before north west}{%
+ \getchamferedrectanglepoints%
+ \after@sw@anchor%
+ \pgf@xa\pgf@x%
+ \after@ne@anchor%
+ \pgf@x\pgf@xa}%
+ \anchor{north west}{\getchamferedrectanglepoints\nw@anchor}%
+ \anchor{after north west}{%
+ \getchamferedrectanglepoints%
+ \before@sw@anchor%
+ \pgf@xa\pgf@x%
+ \before@ne@anchor%
+ \pgf@x\pgf@xa}%
+ \anchor{west}{%
+ \getchamferedrectanglepoints%
+ \centerpoint%
+ \pgf@ya\pgf@y%
+ \before@sw@anchor%
+ \pgf@y\pgf@ya}%
+ \anchor{before south west}{\getchamferedrectanglepoints\before@sw@anchor}%
+ \anchor{south west}{\getchamferedrectanglepoints\sw@anchor}%
+ \anchor{after south west}{\getchamferedrectanglepoints\after@sw@anchor}%
+ \anchor{south}{%
+ \getchamferedrectanglepoints%
+ \centerpoint%
+ \pgf@xa\pgf@x%
+ \after@sw@anchor%
+ \pgf@x\pgf@xa}%
+ \anchor{before south east}{%
+ \getchamferedrectanglepoints%
+ \after@sw@anchor%
+ \pgf@ya\pgf@y%
+ \after@ne@anchor%
+ \pgf@y\pgf@ya}%
+ \anchor{south east}{\getchamferedrectanglepoints\se@anchor}%
+ \anchor{after south east}{%
+ \getchamferedrectanglepoints%
+ \before@sw@anchor%
+ \pgf@ya\pgf@y%
+ \before@ne@anchor%
+ \pgf@y\pgf@ya}%
+ \anchor{east}{%
+ \getchamferedrectanglepoints%
+ \centerpoint%
+ \pgf@ya\pgf@y%
+ \before@ne@anchor%
+ \pgf@y\pgf@ya}%
+ \backgroundpath{%
+ \pgfpathmoveto{\beforenortheast}%
+ \pgfpathlineto{\northeast}%
+ \pgfpathlineto{\afternortheast}%
+ \pgfpathlineto{\aftersouthwest\pgf@xa\pgf@x\afternortheast\pgf@x\pgf@xa}%
+ \pgfpathlineto{\northwest}%
+ \pgfpathlineto{\beforesouthwest\pgf@xa\pgf@x\beforenortheast\pgf@x\pgf@xa}%
+ \pgfpathlineto{\beforesouthwest}%
+ \pgfpathlineto{\southwest}%
+ \pgfpathlineto{\aftersouthwest}%
+ \pgfpathlineto{\aftersouthwest\pgf@ya\pgf@y\afternortheast\pgf@y\pgf@ya}%
+ \pgfpathlineto{\southeast}%
+ \pgfpathlineto{\beforesouthwest\pgf@ya\pgf@y\beforenortheast\pgf@y\pgf@ya}%
+ \pgfpathclose%
+ }%
+ \anchorborder{%
+ \pgfextract@process\externalpoint{%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
+ \let\externalangle\pgfmathresult%
+ \getchamferedrectanglepoints%
+ \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@ya\pgf@y\before@sw@anchor\pgf@y\pgf@ya}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% west.
+ \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% north.
+ \pgfmathanglebetweenpoints{\centerpoint}{\ne@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% north east.
+ \pgfmathanglebetweenpoints{\centerpoint}{\before@ne@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% before north east.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\centerpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}{\before@ne@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\before@ne@anchor}{\ne@anchor}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\after@ne@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% after north east.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\ne@anchor}{\after@ne@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\after@ne@anchor}{\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\nw@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% north west.
+ \pgfmathanglebetweenpoints{\centerpoint}{\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% before north west.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\centerpoint\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ {\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\after@sw@anchor\pgf@xa\pgf@x\after@ne@anchor\pgf@x\pgf@xa}%
+ {\nw@anchor}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% after north west.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\nw@anchor}{\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\before@sw@anchor\pgf@xa\pgf@x\before@ne@anchor\pgf@x\pgf@xa}%
+ {\before@sw@anchor\pgf@xa\pgf@x\centerpoint\pgf@x\pgf@xa}%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% south.
+ \pgfmathanglebetweenpoints{\centerpoint}{\sw@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% south west.
+ \pgfmathanglebetweenpoints{\centerpoint}{\before@sw@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% before south west.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\before@sw@anchor\pgf@xa\pgf@x\centerpoint\pgf@x\pgf@xa}%
+ {\before@sw@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\before@sw@anchor}{\sw@anchor}%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\after@sw@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% after south west.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\sw@anchor}{\after@sw@anchor}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\after@sw@anchor}{\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\se@anchor}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% south east.
+ \pgfmathanglebetweenpoints{\centerpoint}{\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% before south east.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
+ {\centerpoint\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\after@ne@anchor\pgf@xa\pgf@x\after@sw@anchor\pgf@x\pgf@xa}{\se@anchor}
+ \fi%
+ \else%
+ \pgfmathanglebetweenpoints{\centerpoint}{\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
+ \ifdim\externalangle pt<\pgfmathresult pt\relax% after south east.
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\se@anchor}{\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
+ \else%
+ \pgfpointintersectionoflines{\centerpoint}{\externalpoint}%
+ {\before@ne@anchor\pgf@xa\pgf@x\before@sw@anchor\pgf@x\pgf@xa}%
+ {\centerpoint\pgf@ya\pgf@y\before@ne@anchor\pgf@y\pgf@ya}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }%
+}%
\endinput
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex
index 15d7baf090c..2866923c529 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex
@@ -7,7 +7,7 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex,v 1.2 2010/01/07 01:12:23 vibrovski Exp $
+\ProvidesFileRCS{pgflibraryshapes.multipart.code.tex}
\newbox\pgfnodepartlowerbox
@@ -21,11 +21,11 @@
% Parts: text, lower
\pgfdeclareshape{circle split}
-{
+{%
%
% Node parts
%
- \nodeparts{text,lower}
+ \nodeparts{text,lower}%
%
% Anchors
@@ -46,44 +46,44 @@
\advance\pgf@y by-.5\pgflinewidth%
\advance\pgf@y by-\dp\pgfnodeparttextbox%
\advance\pgf@y by-.5\pgflinewidth%
- }
-
+ }%
+
\saveddimen\radius{%
- %
- % Caculate ``height radius''
+ %
+ % Calculate ``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%
+ %
+ % 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''
- %
+ %
+ % Calculate ``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%
@@ -105,73 +105,73 @@
\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}}%
+ % 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}}%
+ %
+ % Now, add larger of outer separations.
+ %
+ \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}
+ %
+ \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]
+ \inheritbackgroundpath[from=circle]%
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \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%
+ \advance\pgfutil@tempdima by-.5\pgflinewidth%
\pgfsetshortenstart{0pt}%
\pgfsetshortenend{0pt}%
- \pgfsetarrows{-}%
+ \pgfsetarrows{-}%
\pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpoint{-1\pgfutil@tempdima}{0pt}}}%
\pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}}%
\pgfusepath{stroke}%
- }
-}
+ }%
+}%
%
@@ -181,7 +181,7 @@
\pgfdeclareshape{circle solidus}{%
% Node parts
- \nodeparts{text,lower}%
+ \nodeparts{text,lower}%
% Anchors
% solidus slants at 45 degrees
% text placement minimizes the required radius,
@@ -297,23 +297,23 @@
\pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpoint{0.437\pgfutil@tempdima}{0.437\pgfutil@tempdima}}}%
\pgfusepath{stroke}%
}%
-}
+}%
\def\pgf@lib@sh@newbox{\csname newbox\endcsname}% Get round outer.
\def\pgf@lib@sh@toalpha#1{%
- \ifcase#1\relax%
- \or one\or two\or three\or four\or five\or six\or seven\or eight\or nine\or ten%
- \or eleven\or twelve\or thirteen\or fourteen\or fifteen%
- \or sixteen\or seventeen\or eighteen\or nineteen\or twenty%
- \else%
- twenty%
- \fi%
-}
+ \ifcase#1\relax%
+ \or one\or two\or three\or four\or five\or six\or seven\or eight\or nine\or ten%
+ \or eleven\or twelve\or thirteen\or fourteen\or fifteen%
+ \or sixteen\or seventeen\or eighteen\or nineteen\or twenty%
+ \else%
+ twenty%
+ \fi%
+}%
-\def\pgf@lib@sh@getalpha#1#2{\expandafter\edef\expandafter#1\expandafter{\pgf@lib@sh@toalpha{#2}}}
+\def\pgf@lib@sh@getalpha#1#2{\expandafter\edef\expandafter#1\expandafter{\pgf@lib@sh@toalpha{#2}}}%
\newbox\pgfnodeparttwobox
\newbox\pgfnodepartthreebox
@@ -325,25 +325,25 @@
\let\pgfnodepartfourthbox=\pgfnodepartfourbox
\def\pgf@lib@sh@allocateboxes#1{%
- \c@pgf@counta=#1\relax%
- \pgfmathloop%
- \ifnum\c@pgf@counta>4\relax%
- \pgfutil@ifundefined{pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box}%
- {%
- \expandafter\pgf@lib@sh@newbox\csname pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box\endcsname%
- }%
- {}%
- \advance\c@pgf@counta by-1\relax%
- \repeatpgfmathloop%
-}
+ \c@pgf@counta=#1\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>4\relax%
+ \pgfutil@ifundefined{pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box}%
+ {%
+ \expandafter\pgf@lib@sh@newbox\csname pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box\endcsname%
+ }%
+ {}%
+ \advance\c@pgf@counta by-1\relax%
+ \repeatpgfmathloop%
+}%
-\def\pgf@lib@sh@rs@lefttext{left}
-\def\pgf@lib@sh@rs@righttext{right}
-\def\pgf@lib@sh@rs@centertext{center}
-\def\pgf@lib@sh@rs@bottomtext{bottom}
-\def\pgf@lib@sh@rs@toptext{top}
-\def\pgf@lib@sh@rs@basetext{base}
-\def\pgf@lib@sh@rs@nonetext{none}
+\def\pgf@lib@sh@rs@lefttext{left}%
+\def\pgf@lib@sh@rs@righttext{right}%
+\def\pgf@lib@sh@rs@centertext{center}%
+\def\pgf@lib@sh@rs@bottomtext{bottom}%
+\def\pgf@lib@sh@rs@toptext{top}%
+\def\pgf@lib@sh@rs@basetext{base}%
+\def\pgf@lib@sh@rs@nonetext{none}%
\newif\ifpgfrectanglesplithorizontal
@@ -353,900 +353,902 @@
\let\pgf@lib@sh@rs@every@emptypart=\pgfutil@empty
\let\pgf@lib@sh@rs@every@part=\pgfutil@empty
-\def\pgf@lib@sh@rs@list@fill{none}
+\def\pgf@lib@sh@rs@list@fill{none}%
\pgfkeys{/pgf/.cd,
- rectangle split parts/.initial=4,
- rectangle split part align/.initial=center,
- rectangle split horizontal/.is if=pgfrectanglesplithorizontal,
- rectangle split ignore empty parts/.is if=pgfrectanglesplitignoreemptyparts,
- rectangle split empty part width/.code={%
- \pgfmathsetlength\pgf@x{#1}
- \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width\the\pgf@x height0ptdepth0pt\relax}%
- \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
- \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
- \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
- },%
- rectangle split empty part width=1ex,
- rectangle split empty part height/.code={%
- \pgfmathsetlength\pgf@x{#1}
- \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight\the\pgf@x depth0pt\relax}%
- \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
- \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
- \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
- },%
- rectangle split empty part height=1ex,
- rectangle split empty part depth/.code={%
- \pgfmathsetlength\pgf@x{#1}
- \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight0ptdepth\the\pgf@x\relax}%
- \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
- \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
- \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
- },%
- rectangle split empty part depth=0ex,
- rectangle split every empty part/.store in=\pgf@lib@sh@rs@every@emptypart,
- rectangle split part fill/.code=\def\pgf@lib@sh@rs@list@fill{#1}\pgfrectanglesplitusecustomfilltrue,
- rectangle split uses custom fill/.is if=pgfrectanglesplitusecustomfill,
- rectangle split draw splits/.is if=pgfrectanglesplitdrawsplits,
- rectangle split allocate boxes/.code=\pgf@lib@sh@allocateboxes{#1}
-}
+ rectangle split parts/.initial=4,
+ rectangle split part align/.initial=center,
+ rectangle split horizontal/.is if=pgfrectanglesplithorizontal,
+ rectangle split ignore empty parts/.is if=pgfrectanglesplitignoreemptyparts,
+ rectangle split empty part width/.code={%
+ \pgfmathsetlength\pgf@x{#1}
+ \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width\the\pgf@x height0ptdepth0pt\relax}%
+ \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
+ \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
+ \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
+ },%
+ rectangle split empty part width=1ex,
+ rectangle split empty part height/.code={%
+ \pgfmathsetlength\pgf@x{#1}
+ \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight\the\pgf@x depth0pt\relax}%
+ \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
+ \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
+ \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
+ },%
+ rectangle split empty part height=1ex,
+ rectangle split empty part depth/.code={%
+ \pgfmathsetlength\pgf@x{#1}
+ \edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight0ptdepth\the\pgf@x\relax}%
+ \def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
+ \expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
+ \expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
+ },%
+ rectangle split empty part depth=0ex,
+ rectangle split every empty part/.store in=\pgf@lib@sh@rs@every@emptypart,
+ rectangle split part fill/.code=\def\pgf@lib@sh@rs@list@fill{#1}\pgfrectanglesplitusecustomfilltrue,
+ rectangle split uses custom fill/.is if=pgfrectanglesplitusecustomfill,
+ rectangle split draw splits/.is if=pgfrectanglesplitdrawsplits,
+ rectangle split allocate boxes/.code=\pgf@lib@sh@allocateboxes{#1},
+}%
\def\pgf@lib@sh@rs@process@list#1#2{%
- \c@pgf@counta=1\relax%
- \c@pgf@countb=#2\relax%
- \edef\pgf@lib@sh@rs@temp{#1}%
- \expandafter\pgf@lib@sh@rs@@process@list\pgf@lib@sh@rs@temp,\pgf@stop,}
+ \c@pgf@counta=1\relax%
+ \c@pgf@countb=#2\relax%
+ \edef\pgf@lib@sh@rs@temp{#1}%
+ \expandafter\pgf@lib@sh@rs@@process@list\pgf@lib@sh@rs@temp,\pgf@stop,
+}%
\def\pgf@lib@sh@rs@@process@list{%
- \pgfutil@ifnextchar x{\pgf@lib@sh@rs@@@process@list}%
- {\pgf@lib@sh@rs@@@process@list}}
-
+ \pgfutil@ifnextchar x{\pgf@lib@sh@rs@@@process@list}%
+ {\pgf@lib@sh@rs@@@process@list}
+}%
+
\def\pgf@lib@sh@rs@@@process@list#1,{%
- \ifx#1\pgf@stop%
- \let\pgf@next\pgf@lib@sh@rs@@@@process@list%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\c@pgf@counta}%
- \def\pgf@lib@sh@rs@lastalign{#1}%
- \pgfutil@namedef{pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item}{#1}%
- \let\pgf@next\pgf@lib@sh@rs@@process@list%
- \advance\c@pgf@counta by1\relax%
- \fi%
- \pgf@next}
+ \ifx#1\pgf@stop%
+ \let\pgf@next\pgf@lib@sh@rs@@@@process@list%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\c@pgf@counta}%
+ \def\pgf@lib@sh@rs@lastalign{#1}%
+ \pgfutil@namedef{pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item}{#1}%
+ \let\pgf@next\pgf@lib@sh@rs@@process@list%
+ \advance\c@pgf@counta by1\relax%
+ \fi%
+ \pgf@next}%
\def\pgf@lib@sh@rs@@@@process@list{%
- \pgfmathloop%
- \ifnum\c@pgf@counta>\c@pgf@countb%
- \else%
- \expandafter\edef\csname pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item\endcsname%
- {\pgf@lib@sh@rs@lastalign}%
- \advance\c@pgf@counta by1\relax%
- \repeatpgfmathloop%
-}
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>\c@pgf@countb%
+ \else%
+ \expandafter\edef\csname pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item\endcsname%
+ {\pgf@lib@sh@rs@lastalign}%
+ \advance\c@pgf@counta by1\relax%
+ \repeatpgfmathloop%
+}%
-\pgf@lib@sh@allocateboxes{20}
+\pgf@lib@sh@allocateboxes{20}%
\pgfdeclareshape{rectangle split}{%
- \savedmacro\rectanglesplitparameters{%
- \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/rectangle split parts}}%
- \edef\parts{\the\c@pgf@counta}%
- \addtosavedmacro\parts%
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
- \edef\innerxsep{\the\pgf@x}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
- \edef\innerysep{\the\pgf@y}%
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
- \edef\outerxsep{\the\pgf@x}%
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
- \edef\outerysep{\the\pgf@y}%
- \addtosavedmacro\outerxsep%
- \addtosavedmacro\outerysep%
- %
- \pgf@x=0pt\relax% Widest box.
- \pgf@y=0pt\relax% Tallest box.
- %
- \pgfutil@tempdima=0pt\relax% Maximum box height.
- \pgfutil@tempdimb=0pt\relax% Maximum box depth.
- %
- % Get the dimensions of the boxes...
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\let\expandafter\pgf@lib@sh@box\expandafter=%
- \csname pgfnodepart\pgf@lib@sh@rs@number box\endcsname%
- \pgf@xa=\wd\pgf@lib@sh@box%
- \pgf@ya=\ht\pgf@lib@sh@box%
- \pgf@yb=\dp\pgf@lib@sh@box%
- %
- % Test to see if the box is empty...
- %
- \expandafter\def\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname{\relax}%
- \ifdim\pgf@xa=0pt\relax%
- \ifdim\pgf@ya=0pt\relax%
- \ifdim\pgf@yb=0pt\relax%
- %
- % ...It is. So...
- %
- \ifpgfrectanglesplitignoreemptyparts%
- %
- % ...flag this if we are ignoring parts...
- %
- \expandafter\let\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
- \else%
- %
- % ...otherwise insert the code for every empty part.
- %
- \setbox\pgf@lib@sh@box=\hbox{{\pgf@lib@sh@rs@every@emptypart}}%
- \pgf@xa=\wd\pgf@lib@sh@box%
- \pgf@ya=\ht\pgf@lib@sh@box%
- \pgf@yb=\dp\pgf@lib@sh@box%
- \fi%
- \fi%
- \fi%
- \fi%
- \expandafter\edef\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname{\the\pgf@xa}%
- \expandafter\edef\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname{\the\pgf@ya}%
- \expandafter\edef\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname{\the\pgf@yb}%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname%
- %
- % ...saving the widest box...
- %
- \ifdim\pgf@xa>\pgf@x%
- \pgf@x=\pgf@xa%
- \fi%
- %
- % ...the maximum height and depth...
- %
- \ifdim\pgf@ya>\pgfutil@tempdima%
- \pgfutil@tempdima=\pgf@ya%
- \fi%
- \ifdim\pgf@yb>\pgfutil@tempdimb%
- \pgfutil@tempdimb=\pgf@yb%
- \fi%
- %
- % ...and the tallest box.
- %
- \pgf@yc=\pgfutil@tempdima%
- \advance\pgf@yc by\pgfutil@tempdimb%
- \ifdim\pgf@yc>\pgf@y%
- \pgf@y=\pgf@yc%
- \fi%
- \repeatpgfmathloop%
- %
- \edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
- \edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
- %
- \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}%
- \advance\pgf@x by-\innerxsep\relax%
- \advance\pgf@x by-\innerxsep\relax%
- \pgf@xa=\pgf@x%
- \advance\pgf@xa by-\pgf@lib@sh@rs@max@width\relax%
- \ifdim\pgf@xa>0pt\relax%
- \edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
- \fi%
- %
- \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
- \advance\pgf@y by-\innerysep\relax%
- \advance\pgf@y by-\innerysep\relax%
- \pgf@ya=\pgf@y%
- \advance\pgf@ya by-\pgf@lib@sh@rs@max@totalheight\relax%
- \ifdim\pgf@ya>0pt\relax%
- \edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
- \fi%
- %
- % Get the alignment of each node part box.
- %
- \pgf@lib@sh@rs@process@list{\pgfkeysvalueof{/pgf/rectangle split part align}}{\parts}%
- %
- % Are we splitting horizontally or vertically?
- %
- \ifpgfrectanglesplithorizontal%
- %
- % Calculate the origins of each node part box.
- %
- \pgf@x=0pt\relax%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \ifpgfrectanglesplitignoreemptyparts%
- \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
- \pgf@lib@sh@rs@lastanchor%
- \fi%
- \fi%
- %
- % Adjust for alignment.
- %
- \expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
- \pgf@lib@sh@rs@bottomtext%
- \pgf@y=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
- \else%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
- \pgf@lib@sh@rs@toptext%
- \pgf@y=-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@y by\pgf@lib@sh@rs@max@totalheight\relax%
- \else%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
- \pgf@lib@sh@rs@basetext%
- \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
- \advance\pgf@y by-\pgfutil@tempdima%
- \advance\pgf@y by\pgfutil@tempdimb%
- \divide\pgf@y by2\relax%
- \else%
- \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
- \advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@y by\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
- \divide\pgf@y by2\relax%
- \fi%
- \fi%
- \fi%
- %
- % Re-adjust as the first box is at the origin.
- %
- \ifnum\pgfmathcounter=1\relax%
- \edef\pgf@lib@sh@rs@yoffset{\the\pgf@y}%
- \pgf@y=0pt\relax%
- \pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
- \addtosavedmacro\pgf@lib@sh@rs@anchor@one%
- \let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
- \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
- \else
- \advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
- \advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
- \advance\pgf@x by\innerxsep\relax%
- \advance\pgf@x by\pgflinewidth%
- \advance\pgf@x by\innerxsep\relax%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
- \expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \fi%
- \fi%
- \repeatpgfmathloop%
- %
- % Calculate some anchors.
- %
- \pgfextract@process\northeast{%
- \pgf@lib@sh@rs@lastanchor%
- \advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
- \advance\pgf@x by\innerxsep\relax%
- \advance\pgf@x by\outerxsep\relax%
- \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
- \advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
- \advance\pgf@y by\innerysep\relax%
- \advance\pgf@y by\outerysep\relax%
- }%
- \addtosavedmacro\northeast%
- \pgfextract@process\southwest{%
- \pgf@lib@sh@rs@anchor@one%
- \advance\pgf@x by-\innerxsep\relax%
- \advance\pgf@x by-\outerxsep\relax%
- \pgf@y=-\pgf@lib@sh@rs@yoffset\relax%
- \advance\pgf@y by-\innerysep\relax%
- \advance\pgf@y by-\outerysep\relax%
- }%
- \addtosavedmacro\southwest%
- %
- \pgfextract@process\centerpoint{%
- \pgfpointadd{\southwest}{\northeast}%
- \divide\pgf@x by2\relax%
- \divide\pgf@y by2\relax%
- }%
- \addtosavedmacro\centerpoint%
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \else%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \pgf@xa=\pgf@x%
- \pgf@xb=\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@xa by0.5\pgf@xb%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname{%
- \southwest%
- \pgf@x=\pgf@xa%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname{%
- \northeast%
- \pgf@x=\pgf@xa%
- }%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname%
- \ifnum\pgfmathcounter=\parts%
- \else%
- \advance\pgf@xa by0.5\pgf@xb%
- \advance\pgf@xa by\innerxsep\relax%
- \advance\pgf@xa by.5\pgflinewidth%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname{%
- \southwest%
- \pgf@x=\pgf@xa%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname{%
- \northeast%
- \pgf@x=\pgf@xa%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
- \centerpoint%
- \pgf@x=\pgf@xa%
- }%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
- \fi%
- \fi%
- \repeatpgfmathloop%
- \else%
- %
- % Calculate the origins of each node part box.
- %
- \pgf@y=0pt\relax%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \ifpgfrectanglesplitignoreemptyparts%
- \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
- \pgf@lib@sh@rs@lastanchor%
- \fi%
- \fi%
- %
- % Adjust for alignment.
- %
- \expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
- \pgf@lib@sh@rs@lefttext%
- \pgf@x=0pt\relax%
- \else%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
- \pgf@lib@sh@rs@righttext%
- \pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
- \else%
- \pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
- \divide\pgf@x by2\relax%
- \fi%
- \fi%
- %
- % Re-adjust as the first box is at the origin.
- %
- \ifnum\pgfmathcounter=1\relax%
- \edef\pgf@lib@sh@rs@xoffset{\the\pgf@x}%
- \pgf@x=0pt\relax%
- \pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
- \addtosavedmacro\pgf@lib@sh@rs@anchor@one%
- \let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
- \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
- \else
- \advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
- \advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
- \advance\pgf@y by-\innerysep\relax%
- \advance\pgf@y by-\pgflinewidth%
- \advance\pgf@y by-\innerysep\relax%
- \advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
- \expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \fi%
- \fi%
- \repeatpgfmathloop%
- %
- % Calculate some anchors.
- %
- \pgfextract@process\northeast{%
- \pgf@x=\pgf@lib@sh@rs@max@width\relax%
- \advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
- \advance\pgf@x by\innerxsep\relax%
- \advance\pgf@x by\outerxsep\relax%
- \pgf@y=\pgf@lib@sh@rs@height@one\relax%
- \advance\pgf@y by\innerysep\relax%
- \advance\pgf@y by\outerysep\relax%
- \advance\pgf@y by.5\pgflinewidth%
- }%
- \addtosavedmacro\northeast%
- \pgfextract@process\southwest{%
- \pgf@lib@sh@rs@lastanchor%
- \pgf@x=-\pgf@lib@sh@rs@xoffset\relax%
- \advance\pgf@x by-\innerxsep\relax%
- \advance\pgf@x by-\outerxsep\relax%
- \advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
- \advance\pgf@y by-\innerysep\relax%
- \advance\pgf@y by-\outerysep\relax%
- \advance\pgf@y by-.5\pgflinewidth%
- }%
- \addtosavedmacro\southwest%
- %
- \pgfextract@process\centerpoint{%
- \pgfpointadd{\southwest}{\northeast}%
- \divide\pgf@x by2\relax%
- \divide\pgf@y by2\relax%
- }%
- \addtosavedmacro\centerpoint%
- %
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \else%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \pgf@ya=\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@y by0.5\pgf@ya%
- \pgf@ya=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@y by-0.5\pgf@ya%
- \pgf@ya=\pgf@y%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname{%
- \southwest%
- \pgf@y=\pgf@ya%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname{%
- \northeast%
- \pgf@y=\pgf@ya%
- }%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname%
- \ifnum\pgfmathcounter=\parts%
- \else%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
- \pgf@ya=\pgf@y%
- \advance\pgf@ya by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
- \advance\pgf@ya by-\innerysep\relax%
- \advance\pgf@ya by-.5\pgflinewidth%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname{%
- \southwest%
- \pgf@y=\pgf@ya%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname{%
- \northeast%
- \pgf@y=\pgf@ya%
- }%
- \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
- \centerpoint%
- \pgf@y=\pgf@ya%
- }%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
- \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
- \fi%
- \fi%
- \repeatpgfmathloop%
- \fi%
- }%
- \savedanchor\basepoint{%
- \pgf@x=0.5\wd\pgfnodeparttextbox%
- \pgf@y=0pt\relax%
- }
- \savedanchor\midpoint{%
- \pgf@x=0.5\wd\pgfnodeparttextbox%
- \pgfmathsetlength\pgf@y{+0.5ex}%
- }
- \anchor{center}{%
- \rectanglesplitparameters%
- \centerpoint%
- }%
- \anchor{base}{\basepoint}
- \anchor{base east}{%
- \rectanglesplitparameters%
- \northeast%
- \pgf@y=0pt\relax%
- }%
- \anchor{base west}{%
- \rectanglesplitparameters%
- \southwest%
- \pgf@y=0pt\relax%
- }%
- \anchor{mid}{\midpoint}%
- \anchor{mid east}{%
- \rectanglesplitparameters%
- \northeast%
- \pgf@xa=\pgf@x%
- \midpoint%
- \pgf@x=\pgf@xa%
- }%
- \anchor{mid west}{%
- \rectanglesplitparameters%
- \southwest%
- \pgf@xa=\pgf@x%
- \midpoint%
- \pgf@x=\pgf@xa%
- }%
- \anchor{north}{%
- \rectanglesplitparameters%
- \centerpoint%
- \pgf@xa=\pgf@x%
- \northeast%
- \pgf@x=\pgf@xa%
- }
- \anchor{south}{%
- \rectanglesplitparameters%
- \centerpoint%
- \pgf@xa=\pgf@x%
- \southwest%
- \pgf@x=\pgf@xa%
- }
- \anchor{east}{%
- \rectanglesplitparameters%
- \centerpoint%
- \pgf@ya=\pgf@y%
- \northeast%
- \pgf@y=\pgf@ya%
- }
- \anchor{west}{%
- \rectanglesplitparameters%
- \centerpoint%
- \pgf@ya=\pgf@y%
- \southwest%
- \pgf@y=\pgf@ya%
- }
- \anchor{north east}{%
- \rectanglesplitparameters%
- \northeast%
- }
- \anchor{north west}{%
- \rectanglesplitparameters%
- \northeast%
- \pgf@ya=\pgf@y%
- \southwest%
- \pgf@y=\pgf@ya%
- }
- \anchor{south west}{%
- \rectanglesplitparameters%
- \southwest%
- }
- \anchor{south east}{%
- \rectanglesplitparameters%
- \southwest%
- \pgf@ya=\pgf@y%
- \northeast%
- \pgf@y=\pgf@ya%
- }
- \behindbackgroundpath{%
- \ifpgfrectanglesplitusecustomfill%
- \pgf@lib@sh@rs@process@list{\pgf@lib@sh@rs@list@fill}{\parts}%
- {%
- \ifpgfrectanglesplithorizontal%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
- \csname pgf@anchor@rectangle split@south west\endcsname%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- \ifnum\pgfmathcounter=\parts%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
- \csname pgf@anchor@rectangle split@north east\endcsname%
- \else%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
- \csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split north\endcsname%
- \fi%
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \else%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
- \else%
- \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
- \pgf@lib@sh@rs@fill@bottomleft%
- \advance\pgf@y by\outerysep\relax%
- \ifnum\pgfmathcounter=1\relax%
- \advance\pgf@x by\outerxsep\relax%
- \fi%
- }%
- \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
- \pgf@lib@sh@rs@fill@topright%
- \advance\pgf@y by-\outerysep\relax%
- \ifnum\pgfmathcounter=\parts\relax%
- \advance\pgf@x by-\outerxsep\relax%
- \fi%
- }%
- \ifnum\pgfmathcounter>1\relax%
- \begingroup\pgfsetcornersarced{\pgfpointorigin}%
- \fi%
- \pgfpathmoveto{%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@xa=\pgf@x%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@x=\pgf@xa%
- }%
- \pgfpathlineto{\pgf@lib@sh@rs@fill@bottomleft}%
- \pgfpathlineto{%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@xa=\pgf@x%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@x=\pgf@xa%
- }%
- \ifnum\pgfmathcounter>1\relax%
- \endgroup%
- \fi%
- \ifnum\pgfmathcounter<\parts%
- \begingroup\pgfsetcornersarced{\pgfpointorigin}%
- \fi%
- \pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
- \pgfpathclose%
- \ifnum\pgfmathcounter<\parts%
- \endgroup%
- \fi%
- \pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
- \pgfusepath{fill}%
- \fi%
- \fi%
- \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@ya=\pgf@y%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@y=\pgf@ya%
- \advance\pgf@y by-\outerysep%
- }%
- \repeatpgfmathloop%
- \else%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
- \csname pgf@anchor@rectangle split@north east\endcsname%
- \pgfmathloop%
- \ifnum\pgfmathcounter>\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- \ifnum\pgfmathcounter=\parts%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
- \csname pgf@anchor@rectangle split@south west\endcsname%
- \else%
- \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
- \csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split west\endcsname%
- \fi%
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \else%
- \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
- \else%
- \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
- \pgf@lib@sh@rs@fill@bottomleft%
- \advance\pgf@x by\outerxsep\relax%
- \ifnum\parts=1\relax%
- \advance\pgf@y by\outerysep\relax%
- \else%
- \ifnum\pgfmathcounter=\parts
- \advance\pgf@y by\outerysep\relax%
- \fi%
- \fi%
- }%
- \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
- \pgf@lib@sh@rs@fill@topright%
- \advance\pgf@x by-\outerxsep\relax%
- \ifnum\parts=1\relax%
- \advance\pgf@y by-\outerysep\relax%
- \else%
- \ifnum\pgfmathcounter=1\relax%
- \advance\pgf@y by-\outerysep\relax%
- \fi%
- \fi%
- }%
- \pgfpathmoveto{\pgf@lib@sh@rs@fill@bottomleft}%
- \ifnum\pgfmathcounter>1\relax%
- \begingroup\pgfsetcornersarced{\pgfpointorigin}%
- \fi%
- \pgfpathlineto{%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@xa=\pgf@x%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@x=\pgf@xa%
- }%
- \pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
- \ifnum\pgfmathcounter>1\relax%
- \endgroup%%
- \fi%
- \ifnum\pgfmathcounter<\parts%
- \begingroup\pgfsetcornersarced{\pgfpointorigin}%
- \fi%
- \pgfpathlineto{%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@xa=\pgf@x%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@x=\pgf@xa%
- }%
- \pgfpathclose%
- \ifnum\pgfmathcounter<\parts%
- \endgroup%
- \fi%
- \pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
- \pgfusepath{fill}%
- \fi%
- \fi%
- \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
- \pgf@lib@sh@rs@fill@topright%
- \pgf@xa=\pgf@x%
- \pgf@lib@sh@rs@fill@bottomleft%
- \pgf@x=\pgf@xa%
- \advance\pgf@x by\outerxsep\relax%
- }%
- \repeatpgfmathloop%
- \fi%
- }%
- \fi%
- }%
- \backgroundpath{%
- \begingroup%
- \pgfextract@process\southwest{%
- \southwest%
- \advance\pgf@x by\outerxsep\relax%
- \advance\pgf@y by\outerysep\relax%
- }%
- \pgfextract@process\northeast{%
- \northeast%
- \advance\pgf@x by-\outerxsep\relax%
- \advance\pgf@y by-\outerysep\relax%
- }%
- \pgfpathrectangle{\southwest}{\pgfpointdiff{\southwest}{\northeast}}%
- \endgroup%
- \ifpgfrectanglesplitdrawsplits%
- \pgfmathloop%
- \ifnum\pgfmathcounter=\parts%
- \else%
- \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
- %
- \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
- \else%
- \pgfpathmoveto{%
- \ifpgfrectanglesplithorizontal%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
- \advance\pgf@y by-\outerysep\relax%
- \else%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
- \advance\pgf@x by-\outerxsep\relax%
- \fi%
- }%
- \pgfpathlineto{%
- \ifpgfrectanglesplithorizontal%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
- \advance\pgf@y by\outerysep\relax%
- \else%
- \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
- \advance\pgf@x by\outerxsep\relax%
- \fi%
- }%
- \fi%
- \repeatpgfmathloop%
- \fi%
- }%
- \anchorborder{%
- \pgfutil@tempdima\pgf@x%
- \pgfutil@tempdimb\pgf@y%
- \rectanglesplitparameters%
- \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}%
- }%
+ \savedmacro\rectanglesplitparameters{%
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/rectangle split parts}}%
+ \edef\parts{\the\c@pgf@counta}%
+ \addtosavedmacro\parts%
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \edef\innerxsep{\the\pgf@x}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \edef\innerysep{\the\pgf@y}%
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \edef\outerxsep{\the\pgf@x}%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \edef\outerysep{\the\pgf@y}%
+ \addtosavedmacro\outerxsep%
+ \addtosavedmacro\outerysep%
+ %
+ \pgf@x=0pt\relax% Widest box.
+ \pgf@y=0pt\relax% Tallest box.
+ %
+ \pgfutil@tempdima=0pt\relax% Maximum box height.
+ \pgfutil@tempdimb=0pt\relax% Maximum box depth.
+ %
+ % Get the dimensions of the boxes...
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\let\expandafter\pgf@lib@sh@box\expandafter=%
+ \csname pgfnodepart\pgf@lib@sh@rs@number box\endcsname%
+ \pgf@xa=\wd\pgf@lib@sh@box%
+ \pgf@ya=\ht\pgf@lib@sh@box%
+ \pgf@yb=\dp\pgf@lib@sh@box%
+ %
+ % Test to see if the box is empty...
+ %
+ \expandafter\def\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname{\relax}%
+ \ifdim\pgf@xa=0pt\relax%
+ \ifdim\pgf@ya=0pt\relax%
+ \ifdim\pgf@yb=0pt\relax%
+ %
+ % ...It is. So...
+ %
+ \ifpgfrectanglesplitignoreemptyparts%
+ %
+ % ...flag this if we are ignoring parts...
+ %
+ \expandafter\let\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
+ \else%
+ %
+ % ...otherwise insert the code for every empty part.
+ %
+ \setbox\pgf@lib@sh@box=\hbox{{\pgf@lib@sh@rs@every@emptypart}}%
+ \pgf@xa=\wd\pgf@lib@sh@box%
+ \pgf@ya=\ht\pgf@lib@sh@box%
+ \pgf@yb=\dp\pgf@lib@sh@box%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \expandafter\edef\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname{\the\pgf@xa}%
+ \expandafter\edef\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname{\the\pgf@ya}%
+ \expandafter\edef\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname{\the\pgf@yb}%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname%
+ %
+ % ...saving the widest box...
+ %
+ \ifdim\pgf@xa>\pgf@x%
+ \pgf@x=\pgf@xa%
+ \fi%
+ %
+ % ...the maximum height and depth...
+ %
+ \ifdim\pgf@ya>\pgfutil@tempdima%
+ \pgfutil@tempdima=\pgf@ya%
+ \fi%
+ \ifdim\pgf@yb>\pgfutil@tempdimb%
+ \pgfutil@tempdimb=\pgf@yb%
+ \fi%
+ %
+ % ...and the tallest box.
+ %
+ \pgf@yc=\pgfutil@tempdima%
+ \advance\pgf@yc by\pgfutil@tempdimb%
+ \ifdim\pgf@yc>\pgf@y%
+ \pgf@y=\pgf@yc%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ \edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
+ \edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
+ %
+ \pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}%
+ \advance\pgf@x by-\innerxsep\relax%
+ \advance\pgf@x by-\innerxsep\relax%
+ \pgf@xa=\pgf@x%
+ \advance\pgf@xa by-\pgf@lib@sh@rs@max@width\relax%
+ \ifdim\pgf@xa>0pt\relax%
+ \edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
+ \fi%
+ %
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
+ \advance\pgf@y by-\innerysep\relax%
+ \advance\pgf@y by-\innerysep\relax%
+ \pgf@ya=\pgf@y%
+ \advance\pgf@ya by-\pgf@lib@sh@rs@max@totalheight\relax%
+ \ifdim\pgf@ya>0pt\relax%
+ \edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
+ \fi%
+ %
+ % Get the alignment of each node part box.
+ %
+ \pgf@lib@sh@rs@process@list{\pgfkeysvalueof{/pgf/rectangle split part align}}{\parts}%
+ %
+ % Are we splitting horizontally or vertically?
+ %
+ \ifpgfrectanglesplithorizontal%
+ %
+ % Calculate the origins of each node part box.
+ %
+ \pgf@x=0pt\relax%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \ifpgfrectanglesplitignoreemptyparts%
+ \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
+ \pgf@lib@sh@rs@lastanchor%
+ \fi%
+ \fi%
+ %
+ % Adjust for alignment.
+ %
+ \expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
+ \pgf@lib@sh@rs@bottomtext%
+ \pgf@y=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
+ \else%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
+ \pgf@lib@sh@rs@toptext%
+ \pgf@y=-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@y by\pgf@lib@sh@rs@max@totalheight\relax%
+ \else%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
+ \pgf@lib@sh@rs@basetext%
+ \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
+ \advance\pgf@y by-\pgfutil@tempdima%
+ \advance\pgf@y by\pgfutil@tempdimb%
+ \divide\pgf@y by2\relax%
+ \else%
+ \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
+ \advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@y by\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
+ \divide\pgf@y by2\relax%
+ \fi%
+ \fi%
+ \fi%
+ %
+ % Re-adjust as the first box is at the origin.
+ %
+ \ifnum\pgfmathcounter=1\relax%
+ \edef\pgf@lib@sh@rs@yoffset{\the\pgf@y}%
+ \pgf@y=0pt\relax%
+ \pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
+ \addtosavedmacro\pgf@lib@sh@rs@anchor@one%
+ \let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
+ \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
+ \else
+ \advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
+ \advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
+ \advance\pgf@x by\innerxsep\relax%
+ \advance\pgf@x by\pgflinewidth%
+ \advance\pgf@x by\innerxsep\relax%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \fi%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ % Calculate some anchors.
+ %
+ \pgfextract@process\northeast{%
+ \pgf@lib@sh@rs@lastanchor%
+ \advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
+ \advance\pgf@x by\innerxsep\relax%
+ \advance\pgf@x by\outerxsep\relax%
+ \pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
+ \advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
+ \advance\pgf@y by\innerysep\relax%
+ \advance\pgf@y by\outerysep\relax%
+ }%
+ \addtosavedmacro\northeast%
+ \pgfextract@process\southwest{%
+ \pgf@lib@sh@rs@anchor@one%
+ \advance\pgf@x by-\innerxsep\relax%
+ \advance\pgf@x by-\outerxsep\relax%
+ \pgf@y=-\pgf@lib@sh@rs@yoffset\relax%
+ \advance\pgf@y by-\innerysep\relax%
+ \advance\pgf@y by-\outerysep\relax%
+ }%
+ \addtosavedmacro\southwest%
+ %
+ \pgfextract@process\centerpoint{%
+ \pgfpointadd{\southwest}{\northeast}%
+ \divide\pgf@x by2\relax%
+ \divide\pgf@y by2\relax%
+ }%
+ \addtosavedmacro\centerpoint%
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \else%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \pgf@xa=\pgf@x%
+ \pgf@xb=\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@xa by0.5\pgf@xb%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname{%
+ \southwest%
+ \pgf@x=\pgf@xa%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname{%
+ \northeast%
+ \pgf@x=\pgf@xa%
+ }%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname%
+ \ifnum\pgfmathcounter=\parts%
+ \else%
+ \advance\pgf@xa by0.5\pgf@xb%
+ \advance\pgf@xa by\innerxsep\relax%
+ \advance\pgf@xa by.5\pgflinewidth%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname{%
+ \southwest%
+ \pgf@x=\pgf@xa%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname{%
+ \northeast%
+ \pgf@x=\pgf@xa%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
+ \centerpoint%
+ \pgf@x=\pgf@xa%
+ }%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
+ \fi%
+ \fi%
+ \repeatpgfmathloop%
+ \else%
+ %
+ % Calculate the origins of each node part box.
+ %
+ \pgf@y=0pt\relax%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \ifpgfrectanglesplitignoreemptyparts%
+ \expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
+ \pgf@lib@sh@rs@lastanchor%
+ \fi%
+ \fi%
+ %
+ % Adjust for alignment.
+ %
+ \expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
+ \pgf@lib@sh@rs@lefttext%
+ \pgf@x=0pt\relax%
+ \else%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
+ \pgf@lib@sh@rs@righttext%
+ \pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
+ \else%
+ \pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
+ \divide\pgf@x by2\relax%
+ \fi%
+ \fi%
+ %
+ % Re-adjust as the first box is at the origin.
+ %
+ \ifnum\pgfmathcounter=1\relax%
+ \edef\pgf@lib@sh@rs@xoffset{\the\pgf@x}%
+ \pgf@x=0pt\relax%
+ \pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
+ \addtosavedmacro\pgf@lib@sh@rs@anchor@one%
+ \let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
+ \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
+ \else
+ \advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
+ \advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
+ \advance\pgf@y by-\innerysep\relax%
+ \advance\pgf@y by-\pgflinewidth%
+ \advance\pgf@y by-\innerysep\relax%
+ \advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \fi%
+ \fi%
+ \repeatpgfmathloop%
+ %
+ % Calculate some anchors.
+ %
+ \pgfextract@process\northeast{%
+ \pgf@x=\pgf@lib@sh@rs@max@width\relax%
+ \advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
+ \advance\pgf@x by\innerxsep\relax%
+ \advance\pgf@x by\outerxsep\relax%
+ \pgf@y=\pgf@lib@sh@rs@height@one\relax%
+ \advance\pgf@y by\innerysep\relax%
+ \advance\pgf@y by\outerysep\relax%
+ \advance\pgf@y by.5\pgflinewidth%
+ }%
+ \addtosavedmacro\northeast%
+ \pgfextract@process\southwest{%
+ \pgf@lib@sh@rs@lastanchor%
+ \pgf@x=-\pgf@lib@sh@rs@xoffset\relax%
+ \advance\pgf@x by-\innerxsep\relax%
+ \advance\pgf@x by-\outerxsep\relax%
+ \advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
+ \advance\pgf@y by-\innerysep\relax%
+ \advance\pgf@y by-\outerysep\relax%
+ \advance\pgf@y by-.5\pgflinewidth%
+ }%
+ \addtosavedmacro\southwest%
+ %
+ \pgfextract@process\centerpoint{%
+ \pgfpointadd{\southwest}{\northeast}%
+ \divide\pgf@x by2\relax%
+ \divide\pgf@y by2\relax%
+ }%
+ \addtosavedmacro\centerpoint%
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \else%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \pgf@ya=\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@y by0.5\pgf@ya%
+ \pgf@ya=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@y by-0.5\pgf@ya%
+ \pgf@ya=\pgf@y%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname{%
+ \southwest%
+ \pgf@y=\pgf@ya%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname{%
+ \northeast%
+ \pgf@y=\pgf@ya%
+ }%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname%
+ \ifnum\pgfmathcounter=\parts%
+ \else%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
+ \pgf@ya=\pgf@y%
+ \advance\pgf@ya by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
+ \advance\pgf@ya by-\innerysep\relax%
+ \advance\pgf@ya by-.5\pgflinewidth%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname{%
+ \southwest%
+ \pgf@y=\pgf@ya%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname{%
+ \northeast%
+ \pgf@y=\pgf@ya%
+ }%
+ \expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
+ \centerpoint%
+ \pgf@y=\pgf@ya%
+ }%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
+ \expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
+ \fi%
+ \fi%
+ \repeatpgfmathloop%
+ \fi%
+ }%
+ \savedanchor\basepoint{%
+ \pgf@x=0.5\wd\pgfnodeparttextbox%
+ \pgf@y=0pt\relax%
+ }%
+ \savedanchor\midpoint{%
+ \pgf@x=0.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{+0.5ex}%
+ }%
+ \anchor{center}{%
+ \rectanglesplitparameters%
+ \centerpoint%
+ }%
+ \anchor{base}{\basepoint}%
+ \anchor{base east}{%
+ \rectanglesplitparameters%
+ \northeast%
+ \pgf@y=0pt\relax%
+ }%
+ \anchor{base west}{%
+ \rectanglesplitparameters%
+ \southwest%
+ \pgf@y=0pt\relax%
+ }%
+ \anchor{mid}{\midpoint}%
+ \anchor{mid east}{%
+ \rectanglesplitparameters%
+ \northeast%
+ \pgf@xa=\pgf@x%
+ \midpoint%
+ \pgf@x=\pgf@xa%
+ }%
+ \anchor{mid west}{%
+ \rectanglesplitparameters%
+ \southwest%
+ \pgf@xa=\pgf@x%
+ \midpoint%
+ \pgf@x=\pgf@xa%
+ }%
+ \anchor{north}{%
+ \rectanglesplitparameters%
+ \centerpoint%
+ \pgf@xa=\pgf@x%
+ \northeast%
+ \pgf@x=\pgf@xa%
+ }%
+ \anchor{south}{%
+ \rectanglesplitparameters%
+ \centerpoint%
+ \pgf@xa=\pgf@x%
+ \southwest%
+ \pgf@x=\pgf@xa%
+ }%
+ \anchor{east}{%
+ \rectanglesplitparameters%
+ \centerpoint%
+ \pgf@ya=\pgf@y%
+ \northeast%
+ \pgf@y=\pgf@ya%
+ }%
+ \anchor{west}{%
+ \rectanglesplitparameters%
+ \centerpoint%
+ \pgf@ya=\pgf@y%
+ \southwest%
+ \pgf@y=\pgf@ya%
+ }%
+ \anchor{north east}{%
+ \rectanglesplitparameters%
+ \northeast%
+ }%
+ \anchor{north west}{%
+ \rectanglesplitparameters%
+ \northeast%
+ \pgf@ya=\pgf@y%
+ \southwest%
+ \pgf@y=\pgf@ya%
+ }%
+ \anchor{south west}{%
+ \rectanglesplitparameters%
+ \southwest%
+ }%
+ \anchor{south east}{%
+ \rectanglesplitparameters%
+ \southwest%
+ \pgf@ya=\pgf@y%
+ \northeast%
+ \pgf@y=\pgf@ya%
+ }%
+ \behindbackgroundpath{%
+ \ifpgfrectanglesplitusecustomfill%
+ \pgf@lib@sh@rs@process@list{\pgf@lib@sh@rs@list@fill}{\parts}%
+ {%
+ \ifpgfrectanglesplithorizontal%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
+ \csname pgf@anchor@rectangle split@south west\endcsname%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ \ifnum\pgfmathcounter=\parts%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
+ \csname pgf@anchor@rectangle split@north east\endcsname%
+ \else%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
+ \csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split north\endcsname%
+ \fi%
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \else%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
+ \else%
+ \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \advance\pgf@y by\outerysep\relax%
+ \ifnum\pgfmathcounter=1\relax%
+ \advance\pgf@x by\outerxsep\relax%
+ \fi%
+ }%
+ \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
+ \pgf@lib@sh@rs@fill@topright%
+ \advance\pgf@y by-\outerysep\relax%
+ \ifnum\pgfmathcounter=\parts\relax%
+ \advance\pgf@x by-\outerxsep\relax%
+ \fi%
+ }%
+ \ifnum\pgfmathcounter>1\relax%
+ \begingroup\pgfsetcornersarced{\pgfpointorigin}%
+ \fi%
+ \pgfpathmoveto{%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@xa=\pgf@x%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@x=\pgf@xa%
+ }%
+ \pgfpathlineto{\pgf@lib@sh@rs@fill@bottomleft}%
+ \pgfpathlineto{%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@xa=\pgf@x%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@x=\pgf@xa%
+ }%
+ \ifnum\pgfmathcounter>1\relax%
+ \endgroup%
+ \fi%
+ \ifnum\pgfmathcounter<\parts%
+ \begingroup\pgfsetcornersarced{\pgfpointorigin}%
+ \fi%
+ \pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
+ \pgfpathclose%
+ \ifnum\pgfmathcounter<\parts%
+ \endgroup%
+ \fi%
+ \pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
+ \pgfusepath{fill}%
+ \fi%
+ \fi%
+ \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@ya=\pgf@y%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@y=\pgf@ya%
+ \advance\pgf@y by-\outerysep%
+ }%
+ \repeatpgfmathloop%
+ \else%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
+ \csname pgf@anchor@rectangle split@north east\endcsname%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ \ifnum\pgfmathcounter=\parts%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
+ \csname pgf@anchor@rectangle split@south west\endcsname%
+ \else%
+ \expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
+ \csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split west\endcsname%
+ \fi%
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \else%
+ \expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
+ \else%
+ \pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \advance\pgf@x by\outerxsep\relax%
+ \ifnum\parts=1\relax%
+ \advance\pgf@y by\outerysep\relax%
+ \else%
+ \ifnum\pgfmathcounter=\parts
+ \advance\pgf@y by\outerysep\relax%
+ \fi%
+ \fi%
+ }%
+ \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
+ \pgf@lib@sh@rs@fill@topright%
+ \advance\pgf@x by-\outerxsep\relax%
+ \ifnum\parts=1\relax%
+ \advance\pgf@y by-\outerysep\relax%
+ \else%
+ \ifnum\pgfmathcounter=1\relax%
+ \advance\pgf@y by-\outerysep\relax%
+ \fi%
+ \fi%
+ }%
+ \pgfpathmoveto{\pgf@lib@sh@rs@fill@bottomleft}%
+ \ifnum\pgfmathcounter>1\relax%
+ \begingroup\pgfsetcornersarced{\pgfpointorigin}%
+ \fi%
+ \pgfpathlineto{%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@xa=\pgf@x%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@x=\pgf@xa%
+ }%
+ \pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
+ \ifnum\pgfmathcounter>1\relax%
+ \endgroup%%
+ \fi%
+ \ifnum\pgfmathcounter<\parts%
+ \begingroup\pgfsetcornersarced{\pgfpointorigin}%
+ \fi%
+ \pgfpathlineto{%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@xa=\pgf@x%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@x=\pgf@xa%
+ }%
+ \pgfpathclose%
+ \ifnum\pgfmathcounter<\parts%
+ \endgroup%
+ \fi%
+ \pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
+ \pgfusepath{fill}%
+ \fi%
+ \fi%
+ \pgfextract@process\pgf@lib@sh@rs@fill@topright{%
+ \pgf@lib@sh@rs@fill@topright%
+ \pgf@xa=\pgf@x%
+ \pgf@lib@sh@rs@fill@bottomleft%
+ \pgf@x=\pgf@xa%
+ \advance\pgf@x by\outerxsep\relax%
+ }%
+ \repeatpgfmathloop%
+ \fi%
+ }%
+ \fi%
+ }%
+ \backgroundpath{%
+ \begingroup%
+ \pgfextract@process\southwest{%
+ \southwest%
+ \advance\pgf@x by\outerxsep\relax%
+ \advance\pgf@y by\outerysep\relax%
+ }%
+ \pgfextract@process\northeast{%
+ \northeast%
+ \advance\pgf@x by-\outerxsep\relax%
+ \advance\pgf@y by-\outerysep\relax%
+ }%
+ \pgfpathrectangle{\southwest}{\pgfpointdiff{\southwest}{\northeast}}%
+ \endgroup%
+ \ifpgfrectanglesplitdrawsplits%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter=\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ %
+ \expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
+ \else%
+ \pgfpathmoveto{%
+ \ifpgfrectanglesplithorizontal%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
+ \advance\pgf@y by-\outerysep\relax%
+ \else%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
+ \advance\pgf@x by-\outerxsep\relax%
+ \fi%
+ }%
+ \pgfpathlineto{%
+ \ifpgfrectanglesplithorizontal%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
+ \advance\pgf@y by\outerysep\relax%
+ \else%
+ \csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
+ \advance\pgf@x by\outerxsep\relax%
+ \fi%
+ }%
+ \fi%
+ \repeatpgfmathloop%
+ \fi%
+ }%
+ \anchorborder{%
+ \pgfutil@tempdima\pgf@x%
+ \pgfutil@tempdimb\pgf@y%
+ \rectanglesplitparameters%
+ \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%
+ }%
+ %
+ % Hackery to install the correct number of node parts.
+ %
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@rectangle split\endcsname{%
+ \let\pgf@lib@sh@rs@temp=\pgfutil@empty%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter=\parts%
+ \expandafter\edef\csname pgf@sh@boxes@rectangle split\endcsname%
+ {\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter}}%
+ \else%
+ \edef\pgf@lib@sh@rs@temp{\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter},}%
+ \repeatpgfmathloop%
}%
- \pgf@marshall%
- \pgf@xa\pgf@x%
- \pgf@ya\pgf@y%
- \centerpoint%
- \advance\pgf@x\pgf@xa%
- \advance\pgf@y\pgf@ya%
- }%
- %
- % Hackery to install the correct number of node parts.
- %
- \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@rectangle split\endcsname{%
- \let\pgf@lib@sh@rs@temp=\pgfutil@empty%
- \pgfmathloop%
- \ifnum\pgfmathcounter=\parts%
- \expandafter\edef\csname pgf@sh@boxes@rectangle split\endcsname%
- {\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter}}%
- \else%
- \edef\pgf@lib@sh@rs@temp{\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter},}%
- \repeatpgfmathloop%
- }%
-}
+}%
\pgfutil@for\pgf@lib@sh@rs@temp:={one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty}\do{%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp}{\noexpand\pgf@lib@sh@rs@anchor@one}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split}%
- {\noexpand\centerpoint}%
- {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split north\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north}%
- {\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
- {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split south\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south}%
- {\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space north\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north}%
- {\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space south\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south}%
- {\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split east\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east}%
- {\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
- {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split west\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west}%
- {\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space east\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east}%
- {\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east\noexpand\endcsname}%
- }%
- \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space west\endcsname{%
- \noexpand\rectanglesplitparameters%
- \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west}%
- {\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
- {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west\noexpand\endcsname}%
- }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp}{\noexpand\pgf@lib@sh@rs@anchor@one}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split}%
+ {\noexpand\centerpoint}%
+ {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split north\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north}%
+ {\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
+ {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split south\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south}%
+ {\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space north\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north}%
+ {\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space south\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south}%
+ {\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split east\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east}%
+ {\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
+ {\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split west\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west}%
+ {\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space east\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east}%
+ {\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east\noexpand\endcsname}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space west\endcsname{%
+ \noexpand\rectanglesplitparameters%
+ \noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west}%
+ {\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
+ {\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west\noexpand\endcsname}%
+ }%
}%
-\pgfutil@namelet{pgf@anchor@rectangle split@text east}{pgf@anchor@rectangle split@one east}
-\pgfutil@namelet{pgf@anchor@rectangle split@text west}{pgf@anchor@rectangle split@one west}
-\pgfutil@namelet{pgf@anchor@rectangle split@text split}{pgf@anchor@rectangle split@one split}
-\pgfutil@namelet{pgf@anchor@rectangle split@text split east}{pgf@anchor@rectangle split@one split east}
-\pgfutil@namelet{pgf@anchor@rectangle split@text split west}{pgf@anchor@rectangle split@one split west}
+\pgfutil@namelet{pgf@anchor@rectangle split@text east}{pgf@anchor@rectangle split@one east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@text west}{pgf@anchor@rectangle split@one west}%
+\pgfutil@namelet{pgf@anchor@rectangle split@text split}{pgf@anchor@rectangle split@one split}%
+\pgfutil@namelet{pgf@anchor@rectangle split@text split east}{pgf@anchor@rectangle split@one split east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@text split west}{pgf@anchor@rectangle split@one split west}%
-\pgfutil@namelet{pgf@anchor@rectangle split@second}{pgf@anchor@rectangle split@two}
-\pgfutil@namelet{pgf@anchor@rectangle split@second east}{pgf@anchor@rectangle split@two east}
-\pgfutil@namelet{pgf@anchor@rectangle split@second west}{pgf@anchor@rectangle split@two west}
-\pgfutil@namelet{pgf@anchor@rectangle split@second split}{pgf@anchor@rectangle split@two split}
-\pgfutil@namelet{pgf@anchor@rectangle split@second split east}{pgf@anchor@rectangle split@two split east}
-\pgfutil@namelet{pgf@anchor@rectangle split@second split west}{pgf@anchor@rectangle split@two split west}
+\pgfutil@namelet{pgf@anchor@rectangle split@second}{pgf@anchor@rectangle split@two}%
+\pgfutil@namelet{pgf@anchor@rectangle split@second east}{pgf@anchor@rectangle split@two east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@second west}{pgf@anchor@rectangle split@two west}%
+\pgfutil@namelet{pgf@anchor@rectangle split@second split}{pgf@anchor@rectangle split@two split}%
+\pgfutil@namelet{pgf@anchor@rectangle split@second split east}{pgf@anchor@rectangle split@two split east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@second split west}{pgf@anchor@rectangle split@two split west}%
-\pgfutil@namelet{pgf@anchor@rectangle split@third}{pgf@anchor@rectangle split@three}
-\pgfutil@namelet{pgf@anchor@rectangle split@third east}{pgf@anchor@rectangle split@three east}
-\pgfutil@namelet{pgf@anchor@rectangle split@third west}{pgf@anchor@rectangle split@three west}
-\pgfutil@namelet{pgf@anchor@rectangle split@third split}{pgf@anchor@rectangle split@three split}
-\pgfutil@namelet{pgf@anchor@rectangle split@third split east}{pgf@anchor@rectangle split@three split east}
-\pgfutil@namelet{pgf@anchor@rectangle split@third split west}{pgf@anchor@rectangle split@three split west}
+\pgfutil@namelet{pgf@anchor@rectangle split@third}{pgf@anchor@rectangle split@three}%
+\pgfutil@namelet{pgf@anchor@rectangle split@third east}{pgf@anchor@rectangle split@three east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@third west}{pgf@anchor@rectangle split@three west}%
+\pgfutil@namelet{pgf@anchor@rectangle split@third split}{pgf@anchor@rectangle split@three split}%
+\pgfutil@namelet{pgf@anchor@rectangle split@third split east}{pgf@anchor@rectangle split@three split east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@third split west}{pgf@anchor@rectangle split@three split west}%
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth}{pgf@anchor@rectangle split@four}
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth east}{pgf@anchor@rectangle split@four east}
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth west}{pgf@anchor@rectangle split@four west}
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth split}{pgf@anchor@rectangle split@four split}
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth split east}{pgf@anchor@rectangle split@four split east}
-\pgfutil@namelet{pgf@anchor@rectangle split@fourth split west}{pgf@anchor@rectangle split@four split west}
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth}{pgf@anchor@rectangle split@four}%
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth east}{pgf@anchor@rectangle split@four east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth west}{pgf@anchor@rectangle split@four west}%
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth split}{pgf@anchor@rectangle split@four split}%
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth split east}{pgf@anchor@rectangle split@four split east}%
+\pgfutil@namelet{pgf@anchor@rectangle split@fourth split west}{pgf@anchor@rectangle split@four split west}%
@@ -1254,101 +1256,101 @@
% 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%
- }%
-}
+ \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
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex
index efa492cc024..a6e925346d6 100644
--- a/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex
@@ -7,35 +7,35 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
-\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/shapes/pgflibraryshapes.symbols.code.tex,v 1.6 2013/09/11 06:15:59 vibrovski Exp $
+\ProvidesFileRCS{pgflibraryshapes.symbols.code.tex}
\pgfdeclareshape{forbidden sign}
-{
- \inheritsavedanchors[from=circle] % this is nearly a circle
- \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}
- \inheritbackgroundpath[from=circle]
+{%
+ \inheritsavedanchors[from=circle]% this is nearly a circle
+ \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}%
+ \inheritbackgroundpath[from=circle]%
\foregroundpath{
\centerpoint%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgfutil@tempdima=\radius%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \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%
@@ -45,37 +45,37 @@
\pgfpathlineto{\pgfpointadd{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\pgfqpoint{0.707107\pgfutil@tempdima}{0.707107\pgfutil@tempdima}}}
\pgfsetarrowsstart{}
\pgfsetarrowsend{}
- }
-}
+ }%
+}%
\pgfdeclareshape{correct forbidden sign}
-{
- \inheritsavedanchors[from=circle] % this is nearly a circle
- \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}
- \inheritbackgroundpath[from=circle]
+{%
+ \inheritsavedanchors[from=circle]% this is nearly a circle
+ \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}%
+ \inheritbackgroundpath[from=circle]%
\foregroundpath{
\centerpoint%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgfutil@tempdima=\radius%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \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%
@@ -85,8 +85,8 @@
\pgfpathlineto{\pgfpointadd{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\pgfqpoint{-0.707107\pgfutil@tempdima}{0.707107\pgfutil@tempdima}}}
\pgfsetarrowsstart{}
\pgfsetarrowsend{}
- }
-}
+ }%
+}%
@@ -107,31 +107,31 @@
\fi%
\pgfkeyslet{/pgf/random starburst}{\pgfmathresult}%
}%
-}
-\pgfkeys{/pgf/random starburst=100}
+}%
+\pgfkeys{/pgf/random starburst=100}%
-\pgfkeys{/pgf/starburst point height/.value required}
+\pgfkeys{/pgf/starburst point height/.value required}%
\pgfkeys{/pgf/starburst point height/.code={%
\pgfmathparse{#1}%
\edef\pgfmathresult{\pgfmathresult pt}%
\pgfkeyslet{/pgf/starburst point height}{\pgfmathresult}%
}%
}%
-\pgfkeys{/pgf/starburst point height=.5cm}
+\pgfkeys{/pgf/starburst point height=.5cm}%
-\pgfkeys{/pgf/starburst points/.value required}
+\pgfkeys{/pgf/starburst points/.value required}%
\pgfkeys{/pgf/starburst points/.code={%
\pgfmathtruncatemacro\pgfmathresult{#1}%
\pgfkeyslet{/pgf/starburst points}{\pgfmathresult}%
- }%
+ }%
}%
-\pgfkeys{/pgf/starburst points=17}
+\pgfkeys{/pgf/starburst points=17}%
\pgfdeclareshape{starburst}{%
\savedmacro\anglestep{%
\pgfmathdivide@{180}{\pgfkeysvalueof{/pgf/starburst points}}%
\let\anglestep\pgfmathresult%
- }
+ }%
\savedmacro\calculatestarburstpoints{%
%
% Get the angle step.
@@ -162,11 +162,11 @@
\pgf@x\pgf@y%
\fi%
\edef\outersep{\the\pgf@x}%
- %
+ %
% Get the node dimensions.
- %
+ %
\pgfmathsetlength\pgf@x{+\pgfkeysvalueof{/pgf/inner xsep}}%
- \pgfmathaddtolength\pgf@x{+.5\wd\pgfnodeparttextbox}%
+ \pgfmathaddtolength\pgf@x{+.5\wd\pgfnodeparttextbox}%
\pgfmathsetlength\pgf@y{+\pgfkeysvalueof{/pgf/inner ysep}}%
\pgfmathaddtolength\pgf@y{+.5\ht\pgfnodeparttextbox}%
\pgfmathaddtolength\pgf@y{+.5\dp\pgfnodeparttextbox}%
@@ -215,15 +215,15 @@
\edef\rotate{\the\c@pgf@counta}%
%
% ...or not.
- %
+ %
\pgf@x=1.41421\pgf@x%
\pgf@y=1.41421\pgf@y%
\fi%
\addtosavedmacro{\rotate}%
- %
+ %
% Adjust innerradius for minimum width and height.
%
- \pgf@xa\pgf@x%
+ \pgf@xa\pgf@x%
\pgfmathsetlength\pgf@xb{+\pgfkeysvalueof{/pgf/starburst point height}}%
\advance\pgf@xa\pgf@xb%
\pgfmathsetlength\pgf@xc{+\pgfkeysvalueof{/pgf/minimum width}}%
@@ -231,14 +231,14 @@
\pgf@x.5\pgf@xc%
\advance\pgf@x-\pgf@xb%
\fi%
- \pgf@ya\pgf@y%
+ \pgf@ya\pgf@y%
\pgfmathsetlength\pgf@yb{+\pgfkeysvalueof{/pgf/starburst point height}}%
\advance\pgf@ya\pgf@yb%
\pgfmathsetlength\pgf@yc{+\pgfkeysvalueof{/pgf/minimum height}}%
\ifdim\pgf@ya<.5\pgf@yc%
\pgf@y.5\pgf@yc%
\advance\pgf@y-\pgf@yb%
- \fi%
+ \fi%
\edef\xinnerradius{\the\pgf@x}%
\edef\yinnerradius{\the\pgf@y}%
\addtosavedmacro{\xinnerradius}%
@@ -255,9 +255,9 @@
%
% Set the seed for the random number generator.
%
- \pgfmathsetseed{\pgfkeysvalueof{/pgf/random starburst}}%
+ \pgfmathsetseed{\pgfkeysvalueof{/pgf/random starburst}}%
%
- % Now create the points on the shape and also
+ % Now create the points on the shape and also
% the miter length and angle for each point.
%
\def\angle{90}% Start at the top.
@@ -270,7 +270,7 @@
% As 3 consecutive points are required to be defined for miter
% calculations, it is necessary to go over the first two points
% again.
- %
+ %
\c@pgf@countc\totalpoints\relax%
\advance\c@pgf@countc2\relax%
\edef\looppoints{\the\c@pgf@countc}%
@@ -280,8 +280,8 @@
%
% Cycle the point definitions.
%
- \let\firstpoint\secondpoint%
- \let\secondpoint\thirdpoint%
+ \let\firstpoint\secondpoint%
+ \let\secondpoint\thirdpoint%
\ifnum\pgfmathcounter>\looppoints%
\else%
\ifnum\pgfmathcounter>\totalpoints%
@@ -324,14 +324,14 @@
\centerpoint%
\advance\pgf@x\pgf@xa%
\advance\pgf@y\pgf@ya%
- }%
+ }%
\fi%
%
% Add the points to the saved macro.
%
\expandafter\let\expandafter\thirdpoint\csname point@\the\c@pgf@counta @\endcsname%
\expandafter\addtosavedmacro\expandafter{\csname point@\the\c@pgf@counta @\endcsname}%
- \fi%
+ \fi%
%
% It is only possible to do the miter calculations if three points are defined.
%
@@ -376,12 +376,12 @@
\expandafter\edef\csname angletoborderpoint@\the\c@pgf@countb @\endcsname{\pgfmathresult}%
\expandafter\addtosavedmacro\expandafter{\csname angletoborderpoint@\the\c@pgf@countb @\endcsname}%
%
- % Rotatee the border points and save.
+ % Rotate the border points and save.
%
\expandafter\pgfextract@process\csname borderpoint@\the\c@pgf@countb @\endcsname{%
\pgfmathrotatepointaround{\borderpoint}{\centerpoint}{\rotate}%
}%
- \expandafter\addtosavedmacro\expandafter{\csname borderpoint@\the\c@pgf@countb @\endcsname}%
+ \expandafter\addtosavedmacro\expandafter{\csname borderpoint@\the\c@pgf@countb @\endcsname}%
%
% Now create the anchors.
%
@@ -405,7 +405,7 @@
\fi%
\fi%
\pgfmathadd@{\angle}{\anglestep}%
- \pgfmathmod@{\pgfmathresult}{360}%
+ \pgfmathmod@{\pgfmathresult}{360}%
\let\angle\pgfmathresult%
\advance\c@pgf@counta1\relax%
\ifnum\c@pgf@counta>\totalpoints%
@@ -416,7 +416,7 @@
\c@pgf@countb1\relax%
\fi%
\repeatpgfmathloop%
- }
+ }%
\savedanchor\centerpoint{%
\pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
\pgfmathsetlength\pgf@y{+.5\ht\pgfnodeparttextbox}%
@@ -430,42 +430,42 @@
\pgfmathsetlength\pgf@x{+.5\wd\pgfnodeparttextbox}%
\pgf@y0pt\relax%
}%
- \anchor{center}{\centerpoint}
- \anchor{base}{\basepoint}
- \anchor{mid}{\midpoint}
+ \anchor{center}{\centerpoint}%
+ \anchor{base}{\basepoint}%
+ \anchor{mid}{\midpoint}%
\anchor{north}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
- }
+ }%
\anchor{south}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
- }
+ }%
\anchor{east}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
- }
+ }%
\anchor{west}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
- }
+ }%
\anchor{north west}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
- }
+ }%
\anchor{south west}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
- }
+ }%
\anchor{north east}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
- }
+ }%
\anchor{south east}{%
\calculatestarburstpoints%
\csname pgf@anchor@starburst@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
- }
- \backgroundpath{%
+ }%
+ \backgroundpath{%
\calculatestarburstpoints%
\pgfmathloop%
\ifnum\pgfmathcounter>\totalpoints%
@@ -479,8 +479,8 @@
%\pgfmathrotatepointaround{\csname point@\pgfmathcounter @\endcsname}{\centerpoint}{\rotate}}%
\csname point@\pgfmathcounter @\endcsname}
\repeatpgfmathloop%
- \pgfpathclose%
- }
+ \pgfpathclose%
+ }%
\anchorborder{%
%
% Save x and y.
@@ -488,7 +488,7 @@
\edef\externalx{\the\pgf@x}%
\edef\externaly{\the\pgf@y}%
%
- % Adjust the location of the external
+ % Adjust the location of the external
% point relative to \centerpoint.
%
\centerpoint%
@@ -544,9 +544,9 @@
\c@pgf@counta\pgfmathcounter%
\else%
\ifdim\externalangle pt<\csname angletoborderpoint@\pgfmathcounter @\endcsname pt\relax%
- \c@pgf@counta\pgfmathcounter%
+ \c@pgf@counta\pgfmathcounter%
\fi%
- \fi%
+ \fi%
\repeatpgfmathloop%
\edef\first{\the\c@pgf@counta}%
\advance\c@pgf@counta-1\relax%
@@ -561,7 +561,7 @@
\pgfpointintersectionoflines{\centerpoint}{\pgfqpoint{\externalx}{\externaly}}%
{\csname borderpoint@\first @\endcsname}{\csname borderpoint@\second @\endcsname}%
}%
-}
+}%
@@ -578,7 +578,7 @@
cloud puffs/.initial=10,
cloud puff arc/.initial=150,
cloud ignores aspect/.is if=pgfcloudignoresaspect,
- cloud anchors use ellipse/.is if=pgfcloudanchorsuseellipse
+ cloud anchors use ellipse/.is if=pgfcloudanchorsuseellipse,
}%
@@ -586,12 +586,12 @@
%
\pgfkeys{/pgf/.cd,
aspect/.code={\pgfsetshapeaspect{#1}},% this for tikz...
- shape aspect/.initial=1,% but this is consistent with other pgfset stuff.
+ shape aspect/.initial=1,% but this is consistent with other pgfset stuff.
shape aspect/.code={%
\pgfkeys{/pgf/aspect=#1}%
\pgfkeyssetvalue{/pgf/shape aspect}{#1}
}%
-}
+}%
\def\pgfsetshapeaspect#1{%
\def\pgfshapeaspect{#1}%
@@ -601,11 +601,11 @@
\c@pgf@counta=\pgfutil@tempdima\relax% 8192*determinant
\pgfutil@tempdima=8192pt%
\divide\pgfutil@tempdima by\c@pgf@counta%
- \edef\pgfshapeaspectinverse{\pgf@sys@tonumber{\pgfutil@tempdima}}
-}
+ \edef\pgfshapeaspectinverse{\pgf@sys@tonumber{\pgfutil@tempdima}}%
+}%
+
+\pgfsetshapeaspect{1}%
-\pgfsetshapeaspect{1}
-%
% Shape cloud.
%
@@ -653,7 +653,7 @@
\edef\yinnerradius{\the\pgf@yc}%
%
% Get the larger of the outer sep.
- %
+ %
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
\ifdim\pgf@x<\pgf@y%
@@ -667,7 +667,7 @@
% and the radius of that arc, is constant:
%
% g = .5 * sec((180-a)/2)
- %
+ %
\pgfmathsubtract{180}{\arc}%
\pgfmathdivide@{\pgfmathresult}{2}%
\let\tempangle\pgfmathresult%
@@ -677,7 +677,7 @@
\addtosavedmacro\arcradiusquotient%
%
% In addition, the quotient of the distance between the start and
- % end point of a puffs circular arc and the height of that arc
+ % end point of a puffs circular arc and the height of that arc
% (ignoring rotation), is also constant:
%
% h = .5 * (1-sin((180-a)/2))/cos((180-a)/2)
@@ -688,20 +688,20 @@
\let\archeightquotient\pgfmathresult%
\addtosavedmacro\archeightquotient%
%
- % Minimum size is applied to the circum-ellipse (i.e. the ellipse
- % that passes through the extremeties of each puff). Thus, the
- % relationship between the radii of the elliptical incircle ("inellipse"?)
- % of the cloud (x and y) and the radii of the circum-ellispe (X and Y),
- % is given by
+ % Minimum size is applied to the circum-ellipse (i.e. the ellipse
+ % that passes through the extremities of each puff). Thus, the
+ % relationship between the radii of the elliptical incircle ("inellipse"?)
+ % of the cloud (x and y) and the radii of the circum-ellipse (X and Y),
+ % is given by
%
- % X = 2(x*cos(p/2) + ky)
+ % X = 2(x*cos(p/2) + ky)
% Y = 2(y*cos(p/2) + kx)
- %
+ %
% where:
% k = sin(p/2)*((1-cos(a/2))/sin(a/2))
- % p = the angle between each puff (i.e. 360/<puffs>)
+ % p = the angle between each puff (i.e. 360/<puffs>)
% a = the length of arc of the puff.
- %
+ %
\pgfmathdivide{\arc}{2}%
\let\halfarcangle\pgfmathresult%
\pgfmathcos@{\pgfmathresult}%
@@ -747,10 +747,10 @@
\edef\youterradius{\the\pgf@ya}%
\addtosavedmacro\youterradius%
%
- % Now recalculate `in-ellispe' radii:
+ % Now recalculate `in-ellipse' radii:
%
- % x = (X'cos(p/2)-kY')/cos^2(p/2)-k^2,
- % y = (Y'cos(p/2)-kX')/cos^2(p/2)-k^2,
+ % x = (X'cos(p/2)-kY')/cos^2(p/2)-k^2,
+ % y = (Y'cos(p/2)-kX')/cos^2(p/2)-k^2,
%
\pgf@xc\k pt\relax%
\pgf@xc-\k\pgf@xc%
@@ -803,23 +803,23 @@
\addtosavedmacro\cosquarterarc%
\addtosavedmacro\tanquarterarc%
%
- }
+ }%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ }%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+.5ex}%
- }
+ }%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
- \anchor{center}{\centerpoint}
- \anchor{mid}{\midpoint}
- \anchor{base}{\basepoint}
+ }%
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\midpoint}%
+ \anchor{base}{\basepoint}%
\anchor{north}{%
\getradii%
\csname pgf@anchor@cloud@border\endcsname{\pgfqpoint{0pt}{\youterradius}}%
@@ -877,9 +877,9 @@
\csname pgf@anchor@cloud@border\endcsname{\pgf@sh}%
}%
%
- % Each `puff' is a circular arc of length a, drawn using two a/2
- % arcs (a < 180), approximated by Bezier curves.
- % Due to TeX rounding errors, it is sometimes necessary to `force'
+ % Each `puff' is a circular arc of length a, drawn using two a/2
+ % arcs (a < 180), approximated by Bezier curves.
+ % Due to TeX rounding errors, it is sometimes necessary to `force'
% the arc to end at a specific point. So...
%
% @article{riskus2006,
@@ -927,7 +927,7 @@
\pgfpointadd{\centerpoint}{%
\pgfpointpolar{+\angle}{+\xinnerradius and +\yinnerradius}%
}%
- }%
+ }%
\fi%
%
% Get some useful cloud parameters from \arcstartpoint and \arcendpoint.
@@ -944,7 +944,7 @@
\pgfmathcos@{\arcrotate}%
\let\cosarcrotate\pgfmathresult%
%
- % Calculate the amount by which to scale the control
+ % Calculate the amount by which to scale the control
% points, in order to approximate an a/2 arc with radius x.
%
\pgf@x\arcradius\relax%
@@ -995,11 +995,11 @@
%
% Get the second control point for the first arc (length a/2)...
%
- \pgfextract@process\controltwo{%
+ \pgfextract@process\controltwo{%
\pgf@x0.55228475pt\relax%
\pgf@x\sinquarterarc\pgf@x% k * sin(a/2)
\pgf@y-0.55228475pt\relax%
- \pgf@y\cosquarterarc\pgf@y% -k * cos(a/2)
+ \pgf@y\cosquarterarc\pgf@y% -k * cos(a/2)
%
% ...scale, rotate and shift.
%
@@ -1032,7 +1032,7 @@
%
% First control point for the second arc...
%
- \pgfextract@process\controlone{%
+ \pgfextract@process\controlone{%
\pgf@x0.55228475pt\relax%
\pgf@x\sinquarterarc\pgf@x% k * sin(a/2)
\pgf@y0.55228475pt\relax%
@@ -1055,11 +1055,11 @@
%
% Second control point for the second arc.
%
- \pgfextract@process\controltwo{%
+ \pgfextract@process\controltwo{%
\pgf@x0.55228475pt\relax%
\pgf@x\sinquarterarc\pgf@x% k * sin(a/2)
\pgf@y-0.55228475pt\relax%
- \pgf@y\cosquarterarc\pgf@y% -k * cos(a/2)
+ \pgf@y\cosquarterarc\pgf@y% -k * cos(a/2)
%
% ...scale, rotate and shift.
%
@@ -1095,7 +1095,7 @@
%
% Get the inner radii and trig. constants.
%
- \getradii%
+ \getradii%
%
%
%
@@ -1116,9 +1116,9 @@
\pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
\let\externalangle\pgfmathresult%
%
- % 1. Locate the correct puff:
+ % 1. Locate the correct puff:
%
- % Get end angle of the relavent puff arc.
+ % Get end angle of the relevant puff arc.
%
\pgfmathdivide@{\anglestep}{2}%
\let\halfanglestep\pgfmathresult%
@@ -1136,7 +1136,7 @@
\pgfmathadd@{\endangle}{\anglestep}%
\let\endangle\pgfmathresult%
%
- % Calculate the `miter point'. This is the point between
+ % Calculate the `miter point'. This is the point between
% each puff, and takes into account the outer sep.
%
\pgfextract@process\miterpoint{%
@@ -1210,12 +1210,12 @@
\pgfpointadd{\centerpoint}{%
\pgfpointpolar{+\startangle}{+\xinnerradius and +\yinnerradius}%
}%
- }%
+ }%
\pgfextract@process\arcendpoint{%
\pgfpointadd{\centerpoint}{%
\pgfpointpolar{+\endangle}{+\xinnerradius and +\yinnerradius}%
}%
- }%
+ }%
%
% Get some useful cloud parameters from \arcstartpoint and \arcendpoint.
%
@@ -1232,9 +1232,9 @@
\fi%
%
% 2. Locate the angle on the circular arc which forms the puff.
- %
- % Essentially a binary search to find the angle on the circular
- % arc, which provides the nearset estimate to the border point.
+ %
+ % Essentially a binary search to find the angle on the circular
+ % arc, which provides the nearest estimate to the border point.
%
\let\s\halfcomplementarc% The start of the arc.
\pgfmathadd@{\s}{\arc}%
@@ -1247,7 +1247,7 @@
\pgfmathadd@{\e}{\s}%
\pgfmathdivide@{\pgfmathresult}{2}%
\let\p\pgfmathresult% The point halfway between \s and \e.
- \ifdim\p pt=\s pt\relax%
+ \ifdim\p pt=\s pt\relax%
\else%
%
% Get the point on the circular arc.
@@ -1288,7 +1288,7 @@
\ifdim\pgfmathresult pt<\m pt\relax%
\let\m\pgfmathresult%
\let\n\p%
- \fi%
+ \fi%
\repeatpgfmathloop%
%
% Use the nearest estimate as the anchor angle.
@@ -1304,8 +1304,8 @@
\fi%
}% Again, Phew!
%
- % Now, a sneaky hack. This means an arbitrary `puff' anchors
- % can be used for positiong the cloud shape. This is needed
+ % Now, a sneaky hack. This means an arbitrary `puff' anchors
+ % can be used for positioning the cloud shape. This is needed
% if a cloud is positioned using the `puff <n+1>' anchor, where
% n is the number of puffs of any previously drawn cloud.
%
@@ -1319,12 +1319,12 @@
}%
}{\c@pgf@counta0\relax}%
\advance\c@pgf@counta-1\relax%
- \repeatpgfmathloop%
+ \repeatpgfmathloop%
}%
-}
+}%
% \pgf@sh@@cloudpuffanchor
-%
+%
% Internal macro for calculating the anchors puff 1, puff 2, ... etc.
%
\def\pgf@sh@@cloudpuffanchor#1{%
@@ -1352,7 +1352,7 @@
\pgfpointadd{\centerpoint}{%
\pgfpointpolar{+\angle}{+\xinnerradius and +\yinnerradius}%
}%
- }%
+ }%
%
% Get some useful cloud parameters from \arcstartpoint and \arcendpoint.
%
@@ -1365,11 +1365,11 @@
\pgfpointadd{\circlecenterpoint}{%
\pgfqpointpolar{\anchorangle}{\outerarcradius}%
}%
-}
+}%
% \pgf@sh@cloudpuffparameters
%
-% Internal macro to calculate some common arc parameters which
+% Internal macro to calculate some common arc parameters which
% are required when calculating radii, drawing the background
% path and calculating border anchors.
%
@@ -1411,7 +1411,7 @@
\pgfmathrotatepointaround{\circlecenterpoint}{\pgfpointorigin}{\arcslope}%
}%
}%
-}
+}%
@@ -1427,7 +1427,7 @@
%
\let\pgf@lib@sh@signal@direction=#2%
\edef\pgf@lib@sh@temp{#1}%
- \expandafter\pgf@lib@sh@signal@@parsedirection\pgf@lib@sh@temp\pgf@stop}
+ \expandafter\pgf@lib@sh@signal@@parsedirection\pgf@lib@sh@temp\pgf@stop}%
\def\pgf@lib@sh@signal@@parsedirection#1\pgf@stop{%
\pgfutil@in@{and}{#1}%
@@ -1436,7 +1436,7 @@
\else%
\pgf@lib@sh@signal@@@parsedirection#1 and #1\pgf@lib%
\fi
-}
+}%
\def\pgf@lib@sh@signal@@@parsedirection#1 and #2\pgf@lib{%
\pgfutil@in@{nowhere}{#1}%
\ifpgfutil@in@
@@ -1444,7 +1444,7 @@
\pgf@lib@sh@signal@@@@parsedirection{#1}%
\pgf@lib@sh@signal@@@@parsedirection{#2}%
\fi%
-}
+}%
\def\pgf@lib@sh@signal@@@@parsedirection#1{%
\pgfutil@in@{ #1 }{ east right }%
\ifpgfutil@in@%
@@ -1470,7 +1470,7 @@
\let\pgf@lib@sh@signal@east=\pgf@lib@sh@signal@nowhere%
\let\pgf@lib@sh@signal@west=\pgf@lib@sh@signal@nowhere%
\fi%
-}
+}%
% Keys for signal shape:
@@ -1478,8 +1478,8 @@
\pgfkeys{/pgf/.cd,
signal pointer angle/.initial=90,
signal to/.initial=east,
- signal from/.initial=nowhere
-}
+ signal from/.initial=nowhere,
+}%
\pgfdeclareshape{signal}{%
\savedmacro\installsignalparameters{%
@@ -1490,7 +1490,7 @@
\let\pgf@lib@sh@signal@west=\pgf@lib@sh@signal@nowhere%
%
\pgf@lib@sh@signal@parsedirection{\pgfkeysvalueof{/pgf/signal from}}{\pgf@lib@sh@signal@from}%
- \pgf@lib@sh@signal@parsedirection{\pgfkeysvalueof{/pgf/signal to}}{\pgf@lib@sh@signal@to}%
+ \pgf@lib@sh@signal@parsedirection{\pgfkeysvalueof{/pgf/signal to}}{\pgf@lib@sh@signal@to}%
%
% Define a centerpoint.
%
@@ -1531,7 +1531,7 @@
\fi%
\pgf@yc=\pgf@y%
%
- % Calculate the miter due to the line width, at the pointer apex...
+ % Calculate the miter due to the line width, at the pointer apex...
%
\pgf@x=\cosechalfpointerangle\pgf@y%
\edef\pointerapexmiter{\the\pgf@x}%
@@ -1559,7 +1559,7 @@
\pgfmathsubtract@{90}{\halfpointerangle}%
\pgfmathtan@{\pgfmathresult}%
\pgf@xb=\pgfmathresult\pgf@ya%
- %
+ %
% ...and up.
%
\pgf@yb=\pgfmathresult\pgf@xa%
@@ -1704,7 +1704,7 @@
\addtosavedmacro{\southeast}%
\addtosavedmacro{\northwest}%
%
- % Calculate the `miter vectors' (i.e. +outer sep).
+ % Calculate the `miter vectors' (i.e. +outer sep).
%
\pgfextract@process\northmiter{%
\pgf@x0pt%
@@ -1749,7 +1749,7 @@
\ifx\pgf@lib@sh@signal@east\pgf@lib@sh@signal@to%
\pgfqpointpolar{\complementquarterpointerangle}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
\fi%
\ifx\pgf@lib@sh@signal@north\pgf@lib@sh@signal@from%
\pgfqpointpolar{\complementquarterpointerangle}{\fromcornermiter}%
@@ -1757,7 +1757,7 @@
\ifx\pgf@lib@sh@signal@north\pgf@lib@sh@signal@to%
\pgfqpointpolar{\quarterpointerangle}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
}%
\pgfextract@process\southeastmiter{%
\ifx\pgf@lib@sh@signal@east\pgf@lib@sh@signal@nowhere%
@@ -1770,7 +1770,7 @@
\ifx\pgf@lib@sh@signal@east\pgf@lib@sh@signal@to%
\pgfqpointpolar{-\complementquarterpointerangle}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
\fi%
\ifx\pgf@lib@sh@signal@south\pgf@lib@sh@signal@from%
\pgfqpointpolar{-\complementquarterpointerangle}{\fromcornermiter}
@@ -1778,7 +1778,7 @@
\ifx\pgf@lib@sh@signal@south\pgf@lib@sh@signal@to%
\pgfqpointpolar{-\quarterpointerangle}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
}%
\pgfextract@process\southwestmiter{%
\ifx\pgf@lib@sh@signal@west\pgf@lib@sh@signal@nowhere%
@@ -1793,7 +1793,7 @@
\pgfmathadd@{\complementquarterpointerangle}{180}%
\expandafter\pgfqpointpolar\expandafter{\pgfmathresult}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
\fi%
\ifx\pgf@lib@sh@signal@south\pgf@lib@sh@signal@from%
\pgfmathadd@{\complementquarterpointerangle}{180}%
@@ -1803,7 +1803,7 @@
\pgfmathadd@{\quarterpointerangle}{180}%
\expandafter\pgfqpointpolar\expandafter{\pgfmathresult}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
}%
\pgfextract@process\northwestmiter{%
\ifx\pgf@lib@sh@signal@west\pgf@lib@sh@signal@nowhere%
@@ -1818,7 +1818,7 @@
\pgfmathsubtract@{180}{\complementquarterpointerangle}%
\expandafter\pgfqpointpolar\expandafter{\pgfmathresult}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
\fi%
\ifx\pgf@lib@sh@signal@north\pgf@lib@sh@signal@from%
\pgfmathsubtract@{180}{\complementquarterpointerangle}%
@@ -1828,7 +1828,7 @@
\pgfmathsubtract@{180}{\quarterpointerangle}%
\expandafter\pgfqpointpolar\expandafter{\pgfmathresult}{\tocornermiter}%
\fi%
- \fi%
+ \fi%
}%
\addtosavedmacro{\northmiter}%
\addtosavedmacro{\southmiter}%
@@ -1872,7 +1872,7 @@
\addtosavedmacro{\anchornortheast}%
\addtosavedmacro{\anchorsouthwest}%
\addtosavedmacro{\anchorsoutheast}%
- \addtosavedmacro{\anchornorthwest}%
+ \addtosavedmacro{\anchornorthwest}%
}%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
@@ -1912,7 +1912,7 @@
\let\secondpoint\anchornortheast%
\fi%
\pgfpointintersectionoflines{\basepoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
+ {\firstpoint}{\secondpoint}%
}%
\anchor{base west}{%
\installsignalparameters%
@@ -1937,7 +1937,7 @@
\let\secondpoint\anchornorthwest%
\fi%
\pgfpointintersectionoflines{\basepoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
+ {\firstpoint}{\secondpoint}%
}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{%
@@ -1963,7 +1963,7 @@
\let\secondpoint\anchornortheast%
\fi%
\pgfpointintersectionoflines{\midpoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
+ {\firstpoint}{\secondpoint}%
}%
\anchor{mid west}{%
\installsignalparameters%
@@ -1988,7 +1988,7 @@
\let\secondpoint\anchornorthwest%
\fi%
\pgfpointintersectionoflines{\midpoint}{\externalpoint}%
- {\firstpoint}{\secondpoint}%
+ {\firstpoint}{\secondpoint}%
}%
\anchor{north}{\installsignalparameters\anchornorth}%
\anchor{south}{\installsignalparameters\anchorsouth}%
@@ -2009,7 +2009,7 @@
\pgfpathlineto{\west}%
\pgfpathlineto{\northwest}%
\pgfpathclose%
- }
+ }%
\anchorborder{%
%
% Save x and y.
@@ -2017,7 +2017,7 @@
\edef\externalx{\the\pgf@x}%
\edef\externaly{\the\pgf@y}%
%
- % Adjust the location of the external
+ % Adjust the location of the external
% point relative to \centerpoint.
%
\centerpoint%
@@ -2105,14 +2105,14 @@
tape bend top/.initial=in and out,
tape bend bottom/.initial=in and out,
tape bend/.style={/pgf/tape bend top=#1, /pgf/tape bend bottom=#1},
- tape bend height/.initial=5pt
-}
+ tape bend height/.initial=5pt,
+}%
-\def\pgf@lib@sh@inandouttext{in and out}
-\def\pgf@lib@sh@outandintext{out and in}
-\def\pgf@lib@sh@nonetext{none}
+\def\pgf@lib@sh@inandouttext{in and out}%
+\def\pgf@lib@sh@outandintext{out and in}%
+\def\pgf@lib@sh@nonetext{none}%
-\pgfdeclareshape{tape}{
+\pgfdeclareshape{tape}{%
\savedmacro\tapedimensions{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x.5\wd\pgfnodeparttextbox%
@@ -2159,7 +2159,7 @@
\ifx\bottombendstyle\pgf@lib@sh@nonetext%
\else%
\advance\pgf@y-\pgfutil@tempdima%
- \fi%
+ \fi%
%
\pgfutil@tempdima3.414213\pgfutil@tempdima% 1 / (1-sin(45))
\edef\bendyradius{\the\pgfutil@tempdima}%
@@ -2172,7 +2172,7 @@
\edef\innerbendyradius{\the\pgfutil@tempdima}%
\addtosavedmacro\innerbendyradius%
%
- \pgfutil@tempdima0.707106\pgf@x% cos(45)
+ \pgfutil@tempdima0.707106\pgf@x% cos(45)
\edef\bendxradius{\the\pgfutil@tempdima}%
\addtosavedmacro\bendxradius%
\advance\pgfutil@tempdima\outerxsep%
@@ -2213,20 +2213,20 @@
\let\cothalfangleout\pgfmathresult%
\addtosavedmacro\cothalfangleout%
%
- }
+ }%
\savedanchor{\centerpoint}{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y.5\ht\pgfnodeparttextbox%
- \advance\pgf@y-.5\dp\pgfnodeparttextbox%
- }
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
\savedanchor{\midpoint}{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
- }
+ }%
\savedanchor{\basepoint}{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt%
- }
+ }%
\anchor{center}{\centerpoint}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{\tapedimensions\midpoint\advance\pgf@x\outerhalfwidth}%
@@ -2236,30 +2236,30 @@
\anchor{base west}{\tapedimensions\basepoint\advance\pgf@x-\outerhalfwidth}%
\anchor{north}{%
\csname pgf@anchor@tape@north east\endcsname%
- \pgf@ya\pgf@y%
+ \pgf@ya\pgf@y%
\csname pgf@anchor@tape@north west\endcsname%
- \advance\pgf@ya\pgf@y%
+ \advance\pgf@ya\pgf@y%
\centerpoint%
\pgf@y.5\pgf@ya%
- }
+ }%
\anchor{south}{%
\csname pgf@anchor@tape@south east\endcsname%
- \pgf@ya\pgf@y%
+ \pgf@ya\pgf@y%
\csname pgf@anchor@tape@south west\endcsname%
- \advance\pgf@ya\pgf@y%
+ \advance\pgf@ya\pgf@y%
\centerpoint%
\pgf@y.5\pgf@ya%
- }
+ }%
\anchor{east}{%
\tapedimensions%
\centerpoint%
\advance\pgf@x\outerhalfwidth%
- }
+ }%
\anchor{west}{%
\tapedimensions%
\centerpoint%
\advance\pgf@x-\outerhalfwidth%
- }
+ }%
\anchor{north east}{%
\tapedimensions%
\centerpoint%
@@ -2268,15 +2268,15 @@
\pgf@yc\outerysep%
\ifx\topbendstyle\pgf@lib@sh@inandouttext%
\advance\pgf@y\halfbendheight%
- \advance\pgf@y\cothalfangleout\pgf@yc%
+ \advance\pgf@y\cothalfangleout\pgf@yc%
\else%
- \ifx\topbendstyle\pgf@lib@sh@outandintext%
+ \ifx\topbendstyle\pgf@lib@sh@outandintext%
\advance\pgf@y\halfbendheight%
- \advance\pgf@y\cothalfanglein\pgf@yc%
+ \advance\pgf@y\cothalfanglein\pgf@yc%
\else%
\advance\pgf@y\pgf@yc%
\fi%
- \fi%
+ \fi%
}%
\anchor{north west}{%
\tapedimensions%
@@ -2286,15 +2286,15 @@
\pgf@yc\outerysep%
\ifx\topbendstyle\pgf@lib@sh@inandouttext%
\advance\pgf@y\halfbendheight%
- \advance\pgf@y\cothalfanglein\pgf@yc%
+ \advance\pgf@y\cothalfanglein\pgf@yc%
\else%
\ifx\topbendstyle\pgf@lib@sh@outandintext%
\advance\pgf@y\halfbendheight%
- \advance\pgf@y\cothalfangleout\pgf@yc%
+ \advance\pgf@y\cothalfangleout\pgf@yc%
\else%
\advance\pgf@y\pgf@yc%
\fi%
- \fi%
+ \fi%
}%
\anchor{south east}{%
\tapedimensions%
@@ -2304,15 +2304,15 @@
\pgf@yc\outerysep%
\ifx\topbendstyle\pgf@lib@sh@outandintext%
\advance\pgf@y-\halfbendheight%
- \advance\pgf@y-\cothalfangleout\pgf@yc%
+ \advance\pgf@y-\cothalfangleout\pgf@yc%
\else%
- \ifx\topbendstyle\pgf@lib@sh@inandouttext%
+ \ifx\topbendstyle\pgf@lib@sh@inandouttext%
\advance\pgf@y-\halfbendheight%
- \advance\pgf@y-\cothalfanglein\pgf@yc%
+ \advance\pgf@y-\cothalfanglein\pgf@yc%
\else%
\advance\pgf@y-\pgf@yc%
\fi%
- \fi%
+ \fi%
}%
\anchor{south west}{%
\tapedimensions%
@@ -2322,24 +2322,24 @@
\pgf@yc\outerysep%
\ifx\topbendstyle\pgf@lib@sh@outandintext%
\advance\pgf@y-\halfbendheight%
- \advance\pgf@y-\cothalfanglein\pgf@yc%
+ \advance\pgf@y-\cothalfanglein\pgf@yc%
\else%
\ifx\topbendstyle\pgf@lib@sh@inandouttext%
\advance\pgf@y-\halfbendheight%
- \advance\pgf@y-\cothalfangleout\pgf@yc%
+ \advance\pgf@y-\cothalfangleout\pgf@yc%
\else%
\advance\pgf@y-\pgf@yc%
\fi%
- \fi%
+ \fi%
}%
\backgroundpath{%
\tapedimensions%
%
\pgf@xc\halfwidth%
- \pgf@yc\halfheight%
+ \pgf@yc\halfheight%
%
\pgf@xc\bendxradius%
- \pgf@yc\bendyradius%
+ \pgf@yc\bendyradius%
{%
\pgftransformshift{\centerpoint}%
\pgfpathmoveto{\pgfqpoint{-\halfwidth}{0pt}}%
@@ -2372,8 +2372,8 @@
\fi%
\fi%
\pgfpathclose%
- }%
- }
+ }%
+ }%
\anchorborder{%
\pgf@xa\pgf@x%
\pgf@ya\pgf@y%
@@ -2554,7 +2554,7 @@
\fi%
\fi%
}%
-}
+}%
@@ -2568,36 +2568,36 @@
\pgfkeys{/pgf/.cd,
magnifying glass handle angle/.initial=-45,
- magnifying glass handle aspect/.initial=1.5
-}
+ magnifying glass handle aspect/.initial=1.5,
+}%
\pgfdeclareshape{magnifying glass}
-{
- \inheritsavedanchors[from=circle] % this is nearly a circle
- \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}
- \inheritbackgroundpath[from=circle]
+{%
+ \inheritsavedanchors[from=circle]% this is nearly a circle
+ \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}%
+ \inheritbackgroundpath[from=circle]%
\foregroundpath{
\centerpoint%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgfutil@tempdima=\radius%
- \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
- \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \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%
@@ -2609,16 +2609,16 @@
{\pgfpointpolar{\pgfkeysvalueof{/pgf/magnifying glass handle angle}}{\pgfutil@tempdima+\pgfutil@tempdima*(\pgfkeysvalueof{/pgf/magnifying glass handle aspect})}}}
\pgfsetarrowsstart{}
\pgfsetarrowsend{}
- }
-}
+ }%
+}%
\pgfkeys{%
/pgf/magnetic tape tail/.initial=0.15,
/pgf/magnetic tape tail extend/.initial=0cm,
-}
-\pgfdeclareshape{magnetic tape}{
- \nodeparts{text}
+}%
+\pgfdeclareshape{magnetic tape}{%
+ \nodeparts{text}%
\savedmacro\installparameters{%
%
\pgf@x=0.5\wd\pgfnodeparttextbox%
@@ -2651,8 +2651,8 @@
\pgfmathparse{max(\pgfkeysvalueof{/pgf/magnetic tape tail extend},0)}%
\edef\tailextend{\pgfmathresult pt}%
%
- \pgfmathparse{min(max(\pgfkeysvalueof{/pgf/magnetic tape tail},0),1)}%
- \pgf@xa=\pgfmathresult\pgf@x%
+ \pgfmathparse{min(max(\pgfkeysvalueof{/pgf/magnetic tape tail},0),1)}%
+ \pgf@xa=\pgfmathresult\pgf@x%
\edef\tailheight{\the\pgf@xa}%
%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
@@ -2689,38 +2689,38 @@
\addtosavedmacro\tailtopangle%
\addtosavedmacro\tailbottomangle%
\addtosavedmacro\centerpoint%
- }
- \savedanchor{\base}{\pgfqpoint{0.5\wd\pgfnodeparttextbox}{0pt}}
- \savedanchor{\mid}{\pgfqpoint{0.5\wd\pgfnodeparttextbox}{0pt}\pgfmathsetlength\pgf@y{.5ex}}
+ }%
+ \savedanchor{\base}{\pgfqpoint{0.5\wd\pgfnodeparttextbox}{0pt}}%
+ \savedanchor{\mid}{\pgfqpoint{0.5\wd\pgfnodeparttextbox}{0pt}\pgfmathsetlength\pgf@y{.5ex}}%
\anchor{center}{\installparameters\centerpoint}% \addtosavedmacro\outerradius%
- \anchor{base}{\base}
- \anchor{mid}{\mid}
- \anchor{base west}{\installparameters\pgfpointadd{\base}{\pgfqpoint{-\outerradius}{0pt}}}
- \anchor{base east}{\installparameters\pgfpointadd{\base}{\pgfqpoint{\outerradius}{0pt}}}
- \anchor{mid west}{\installparameters\pgfpointadd{\mid}{\pgfqpoint{-\outerradius}{0pt}}}
- \anchor{mid east}{\installparameters\pgfpointadd{\mid}{\pgfqpoint{\outerradius}{0pt}}}
+ \anchor{base}{\base}%
+ \anchor{mid}{\mid}%
+ \anchor{base west}{\installparameters\pgfpointadd{\base}{\pgfqpoint{-\outerradius}{0pt}}}%
+ \anchor{base east}{\installparameters\pgfpointadd{\base}{\pgfqpoint{\outerradius}{0pt}}}%
+ \anchor{mid west}{\installparameters\pgfpointadd{\mid}{\pgfqpoint{-\outerradius}{0pt}}}%
+ \anchor{mid east}{\installparameters\pgfpointadd{\mid}{\pgfqpoint{\outerradius}{0pt}}}%
\anchor{north}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{\outerradius}}}%
\anchor{north east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpointpolar{45}{\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpointpolar{45}{\outerradius}}}%
\anchor{south}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{-\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{-\outerradius}}}%
\anchor{south east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpoint{\outerradius}{-\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpoint{\outerradius}{-\outerradius}}}%
\anchor{east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpoint{\outerradius}{0pt}}}
+ \pgfpointadd{\centerpoint}{\pgfqpoint{\outerradius}{0pt}}}%
\anchor{south west}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpointpolar{225}{\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpointpolar{225}{\outerradius}}}%
\anchor{west}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpoint{-\outerradius}{0pt}}}
+ \pgfpointadd{\centerpoint}{\pgfqpoint{-\outerradius}{0pt}}}%
\anchor{north west}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfqpointpolar{135}{\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfqpointpolar{135}{\outerradius}}}%
\anchor{tail east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius+\outersep+\tailheight/2}}}
+ \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius+\outersep+\tailheight/2}}}%
\anchor{tail south east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius}}}
+ \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius}}}%
\anchor{tail north east}{\installparameters%
- \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius+\outersep+\tailheight+\outersep}}}
+ \pgfpointadd{\centerpoint}{\pgfpoint{\radius+\tailextend+\outersep}{-\outerradius+\outersep+\tailheight+\outersep}}}%
\backgroundpath{
%
\installparameters%
@@ -2733,7 +2733,7 @@
\pgfpathlineto{\pgfpoint{\radius+\tailextend}{-\radius+\tailheight}}%
\pgfpathclose%
}%
- }
+ }%
\anchorborder{%
\pgfextract@process\externalpoint{}%
\installparameters%
@@ -2742,34 +2742,34 @@
\pgfpointadd{\centerpoint}{%
\pgfpointborderellipse%
{\externalpoint}%
- {\pgfqpoint{\outerradius}{\outerradius}}%
+ {\pgfqpoint{\outerradius}{\outerradius}}%
}%
\else%
\ifdim\pgfmathresult pt<\tailbottomangle pt\relax%
\pgfpointadd{\centerpoint}{%
\pgfpointintersectionoflines%
{\externalpoint}{\pgfpointorigin}%
- {\pgfqpoint{0pt}{-\outerradius}}{\pgfqpoint{\outerradius}{-\outerradius}}%
+ {\pgfqpoint{0pt}{-\outerradius}}{\pgfqpoint{\outerradius}{-\outerradius}}%
}%
\else%
\ifdim\pgfmathresult pt<\tailtopangle pt\relax%
\pgfpointadd{\centerpoint}{%
\pgfpointintersectionoflines%
{\externalpoint}{\pgfpointorigin}%
- {\pgfqpoint{\outerradius}{\outerradius}}{\pgfqpoint{\outerradius}{-\outerradius}}%
+ {\pgfqpoint{\outerradius}{\outerradius}}{\pgfqpoint{\outerradius}{-\outerradius}}%
}%
\else%
\pgfpointadd{\centerpoint}{%
\pgfpointborderellipse%
{\externalpoint}%
- {\pgfqpoint{\outerradius}{\outerradius}}%
+ {\pgfqpoint{\outerradius}{\outerradius}}%
}%
\fi%
\fi%
\fi%
- }
-}
+ }%
+}%
% Local Variables:
% tab-width: 2
-% End: \ No newline at end of file
+% End: