summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex1229
1 files changed, 1229 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex
new file mode 100644
index 00000000000..802c85a41b9
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex
@@ -0,0 +1,1229 @@
+% Copyright 2006 by Till Tantau and Mark Wibrow
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex,v 1.1 2007/06/08 11:24:59 tantau Exp $
+
+\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''
+ %
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yb{\pgfshapeinnerysep}%
+ \advance\pgf@y by\pgf@yb%
+ %
+ % Caculate ``width radius''
+ %
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xb{\pgfshapeinnerxsep}%
+ \advance\pgf@x by\pgf@xb%
+ %
+ % Adjust
+ %
+ \pgf@x=1.4142136\pgf@x%
+ \pgf@y=1.4142136\pgf@y%
+ %
+ % Adjust hieght, if necessary
+ %
+ \pgfmathsetlength\pgf@yc{\pgfshapeminheight}%
+ \ifdim\pgf@y<.5\pgf@yc%
+ \pgf@y=.5\pgf@yc%
+ \fi%
+ %
+ % Adjust width, if necessary
+ %
+ \pgfmathsetlength\pgf@xc{\pgfshapeminwidth}%
+ \ifdim\pgf@x<.5\pgf@xc%
+ \pgf@x=.5\pgf@xc%
+ \fi%
+ %
+ % Add outer sep
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfshapeouterxsep}%
+ \pgfmathsetlength{\pgf@yb}{\pgfshapeouterysep}%
+ \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{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}
+ \pgf@xa=\pgf@x%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by-\pgf@xa%
+ \pgfmathsetlength\pgf@y{.5ex}
+ }
+ \anchor{base west}
+ {%
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by-\pgf@xa%
+ \pgf@y=0pt
+ }
+ \anchor{north west}
+ {
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by-0.707107\pgf@xa
+ \advance\pgf@y by0.707107\pgf@ya
+ }
+ \anchor{south west}
+ {
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \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}
+ \pgf@xa=\pgf@x%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by\pgf@xa%
+ \pgfmathsetlength\pgf@y{.5ex}
+ }
+ \anchor{base east}
+ {%
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by\pgf@xa%
+ \pgf@y=0pt
+ }
+ \anchor{north east}
+ {
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by0.707107\pgf@xa
+ \advance\pgf@y by0.707107\pgf@ya
+ }
+ \anchor{south east}
+ {
+ \pgf@process{\radius}
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\centerpoint}
+ \advance\pgf@x by0.707107\pgf@xa
+ \advance\pgf@y by-0.707107\pgf@ya
+ }
+ \anchorborder{
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderellipse
+ {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}
+ {\noexpand\radius}%
+ }%
+ \pgf@marshal%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \centerpoint%
+ \advance\pgf@x by\pgf@xa%
+ \advance\pgf@y by\pgf@ya%
+ }
+
+ %
+ % Background path
+ %
+ \backgroundpath
+ {
+ \pgf@process{\radius}%
+ \pgfutil@tempdima=\pgf@x%
+ \pgfutil@tempdimb=\pgf@y%
+ \pgfmathsetlength{\pgf@xb}{\pgfshapeouterxsep}%
+ \pgfmathsetlength{\pgf@yb}{\pgfshapeouterysep}%
+ \advance\pgfutil@tempdima by-\pgf@xb%
+ \advance\pgfutil@tempdimb by-\pgf@yb%
+ \pgfpathellipse{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}{\pgfqpoint{0pt}{\pgfutil@tempdimb}}%
+ }
+}
+
+
+
+
+% Set the recommended shape aspect ratio
+%
+% #1 = aspect ratio
+%
+% Example:
+%
+% \pgfsetshapeminwidth{1.5}
+
+\def\pgfsetshapeaspect#1{%
+ \def\pgfshapeaspect{#1}%
+ % Invert
+ \pgfutil@tempdima=#1pt%
+ \pgfutil@tempdima=.125\pgfutil@tempdima%
+ \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}}
+}
+\pgfsetshapeaspect{1}
+
+
+
+\pgfdeclareshape{diamond}
+{
+ \savedanchor\outernortheast{%
+ %
+ % Calculate width and height of the inner rectangle
+ %
+ \pgf@xa=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xc{\pgfshapeinnerxsep}%
+ \advance\pgf@xa by\pgf@xc%
+ \pgf@ya=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yc{\pgfshapeinnerysep}%
+ \advance\pgf@ya by\pgf@yc%
+ %
+ % Calculate width and height of diamond
+ %
+ \pgf@x=\pgf@xa%
+ \advance\pgf@x by\pgfshapeaspect\pgf@ya%
+ \pgf@y=\pgfshapeaspectinverse\pgf@xa%
+ \advance\pgf@y by\pgf@ya%
+ %
+ % Check against minimum height/width
+ %
+ \pgfmathsetlength\pgf@xb{\pgfshapeminwidth}%
+ \ifdim\pgf@x<\pgf@xb%
+ % yes, too small. Enlarge...
+ \pgf@x=\pgf@xb%
+ \fi%
+ \pgfmathsetlength\pgf@yb{\pgfshapeminheight}%
+ \ifdim\pgf@y<\pgf@yb%
+ % yes, too small. Enlarge...
+ \pgf@y=\pgf@yb%
+ \fi%
+ %
+ % Add outer border
+ %
+ \pgfmathsetlength\pgf@xa{\pgfshapeouterxsep}%
+ \advance\pgf@x by\pgf@xa%
+ \pgfmathsetlength\pgf@ya{\pgfshapeouterysep}%
+ \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
+ %
+ \anchor{text}{\text}%
+ \anchor{center}{\pgfpointorigin}%
+ \anchor{mid}{%
+ \pgf@process{\text}%
+ \pgf@x=0pt%
+ \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}
+ \anchorborder{%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\outernortheast}%
+ \ifdim\pgf@xa>0pt%
+ \else%
+ \pgf@x=-\pgf@x%
+ \fi%
+ \ifdim\pgf@ya>0pt%
+ \else%
+ \pgf@y=-\pgf@y%
+ \fi%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointintersectionoflines
+ {\noexpand\pgfpointorigin}
+ {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}
+ {\noexpand\pgfqpoint{\the\pgf@x}{0pt}}
+ {\noexpand\pgfqpoint{0pt}{\the\pgf@y}}%
+ }%
+ \pgf@process{\pgf@marshal}%
+ }
+
+ %
+ % Background path
+ %
+ \backgroundpath{
+ \pgf@process{\outernortheast}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgfmathsetlength{\pgf@xa}{\pgfshapeouterxsep}%
+ \pgfmathsetlength{\pgf@ya}{\pgfshapeouterysep}%
+ \advance\pgf@xc by-1.414213\pgf@xa%
+ \advance\pgf@yc by-1.414213\pgf@ya%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xc}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgf@yc}}%
+ \pgfpathlineto{\pgfqpoint{-\pgf@xc}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{0pt}{-\pgf@yc}}%
+ \pgfpathclose%
+ }
+}
+
+
+
+
+% \pgfsetstarpoints
+%
+% Set the number of points on a star.
+%
+\def\pgfsetstarpoints#1{%
+ \pgfmathsetcounter{pgf@counta}{#1}%
+ \edef\pgfstarpoints{\the\c@pgfmath@counta}}
+\pgfsetstarpoints{5}
+
+% \pgfsetstarpointheight
+%
+% Set the height of the points (this is the
+% distance between the outer and inner point
+% radii).
+%
+\def\pgfsetstarpointheight#1{%
+ \pgfmathparse{#1}%
+ \edef\pgfstarpointheight{\pgfmathresult pt}}
+\pgfsetstarpointheight{12pt}
+
+% \pgfsetstarpointratio
+%
+% Set the ratio between the outer and
+% inner point radii.
+%
+\def\pgfsetstarpointratio#1{%
+ \pgfmathparse{#1}%
+ \edef\pgfstarpointratio{\pgfmathresult}%
+ \def\pgfstarpointheight{-16383pt}% If negative, the ratio is used.
+}
+\pgfsetstarpointratio{1.75}
+
+% \pgfsetstarrrotate
+%
+% Set the angle of rotation of the star
+% border. This can be decimal.
+%
+\def\pgfsetstarrotate#1{%
+ \pgfmathparse{#1}%
+ \edef\pgfstarrotate{\pgfmathresult}}%
+\pgfsetstarrotate{0}
+
+% Shape star.
+%
+\pgfdeclareshape{star}{%
+ \saveddimen{\points}{\pgf@x\pgfstarpoints pt}%
+ \saveddimen{\pointratio}{\pgf@x\pgfstarpointratio pt}%
+ \saveddimen{\rotate}{\pgf@x\pgfstarrotate pt}%
+ \saveddimen{\pointheight}{\pgf@x\pgfstarpointheight}%
+ \saveddimen{\minimumsize}{%
+ \pgfmathsetlength\pgf@x{\pgfshapeminwidth}%
+ \pgfmathsetlength\pgf@y{\pgfshapeminheight}%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi}%
+ \saveddimen{\outersep}{%
+ \pgfmathsetlength\pgf@x{\pgfshapeouterxsep}%
+ \pgfmathsetlength\pgf@y{\pgfshapeouterysep}%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi}%
+ \savedanchor{\centerpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+ \saveddimen{\innerpointradius}{%
+ %
+ % The innerpoint radius is the radius of the circle which
+ % can safely encompass the node textbox.
+ %
+ \pgfmathsetlength\pgf@x{\pgfshapeinnerxsep}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfshapeinnerysep}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgfmathveclen@{\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@x\pgfmathresult pt\relax%
+ }%
+ %
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}%
+ \anchor{base}{\centerpoint\pgf@y=0pt}%
+ \anchor{north}{\pgf@anchor@star@border{\pgfpoint{+0pt}{+\outerpointradius}}}%
+ \anchor{south}{\pgf@anchor@star@border{\pgfpoint{+0pt}{+-\outerpointradius}}}%
+ \anchor{east}{\pgf@anchor@star@border{\pgfpoint{+\outerpointradius}{+0pt}}}%
+ \anchor{west}{\pgf@anchor@star@border{\pgfpoint{+-\outerpointradius}{+0pt}}}%
+ \anchor{north east}{\pgf@anchor@star@border{\pgfpoint{+\outerpointradius}{+\outerpointradius}}}%
+ \anchor{north west}{\pgf@anchor@star@border{\pgfpoint{+-\outerpointradius}{+\outerpointradius}}}%
+ \anchor{south east}{\pgf@anchor@star@border{\pgfpoint{+\outerpointradius}{+-\outerpointradius}}}%
+ \anchor{south west}{\pgf@anchor@star@border{\pgfpoint{+-\outerpointradius}{+-\outerpointradius}}}%
+ %
+ \backgroundpath{%
+ %
+ % Redefine stuff for ease of use.
+ %
+ \pgf@x\points%
+ \c@pgf@counta\pgf@x%
+ \divide\c@pgf@counta65536\relax%
+ \edef\points{\the\c@pgf@counta}%
+ \pgf@x\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@x\pointratio%
+ \edef\pointratio{\pgf@sys@tonumber{\pgf@x}}%
+ %
+ % Calculate radii.
+ %
+ \pgf@x\innerpointradius\relax%
+ \edef\innerradius{\the\pgf@x}%
+ \pgf@xa\pointheight\relax%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@x\pointratio\pgf@x%
+ \else%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ \pgf@xb\pgf@x%
+ \pgf@xc\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xc%
+ \pgf@x.5\pgf@xc%
+ \fi%
+ \edef\outerradius{\the\pgf@x}%
+ \ifdim\pgf@x>\pgf@xb%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgfmathreciprocal{\pointratio}%
+ \pgf@xc\pgfmathresult\pgf@x\relax%
+ \edef\innerradius{\the\pgf@xc}%
+ \else%
+ \pgf@xc\pgf@x\relax%
+ \advance\pgf@xc-\pointheight%
+ \edef\innerradius{\the\pgf@xc}%
+ \fi%
+ \fi%
+ %
+ % Get the total number of points (inner + outer)...
+ %
+ \c@pgf@counta\points%
+ \advance\c@pgf@counta\c@pgf@counta%
+ \edef\numpoints{\the\c@pgf@counta}%
+ %
+ % ...and hence the angle between points.
+ %
+ \pgf@x360pt\relax%
+ \divide\pgf@x\c@pgf@counta%
+ \edef\staranglestep{\the\pgf@x}%
+ %
+ % Start at 90 degrees (star always points up)...
+ %
+ \pgf@x90pt\relax%
+ %
+ % ...unless rotation is applied.
+ %
+ \pgf@xa\rotate pt\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\starangle{\the\pgf@x}%
+ \let\starradius=\outerradius%
+ %
+ % Move to first point.
+ %
+ \pgfpathmoveto{%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\starangle}{+\starradius}}%
+ }%
+ \def\staranchorname{pgf@anchor@star@outer point}%
+ \pgfmathloop%
+ %
+ % Create anchors. Manually \xdef as \gdef is normally used by \anchor.
+ %
+ \c@pgf@counta\pgfmathcounter\relax%
+ \advance\c@pgf@counta1\relax%
+ \divide\c@pgf@counta2\relax%
+ \expandafter\xdef\csname\staranchorname\space\the\c@pgf@counta\endcsname{%
+ \noexpand\pgf@lib@shapesstaranchor{\pgfmathcounter}%
+ }%
+ \ifnum\pgfmathcounter=\numpoints\relax% Stop.
+ \else%
+ \ifodd\pgfmathcounter%
+ \let\starradius\innerradius%
+ \def\staranchorname{pgf@anchor@star@inner point}%
+ \else%
+ \let\starradius\outerradius%
+ \def\staranchorname{pgf@anchor@star@outer point}%
+ \fi%
+ \pgf@x\starangle\relax%
+ \advance\pgf@x\staranglestep\relax%
+ \edef\starangle{\the\pgf@x}%
+ \pgfpathlineto{%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\starangle}{+\starradius}}%
+ }%
+ \repeatpgfmathloop%
+ \pgfpathclose%
+ }%
+ %
+ \anchorborder{%
+ %
+ % Save x and y.
+ %
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ %
+ % Redefine stuff for ease of use.
+ %
+ \pgf@x\points%
+ \c@pgf@counta\pgf@x%
+ \divide\c@pgf@counta65536\relax%
+ \edef\points{\the\c@pgf@counta}%
+ \pgf@x\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@x\pointratio%
+ \edef\pointratio{\pgf@sys@tonumber{\pgf@x}}%
+ %
+ % Calculate the location of the external
+ % point relative to the node center.
+ %
+ \centerpoint%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ \pgf@process{\pgfpointdiff{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}}%
+ %
+ % First approximate the angle of the external point...
+ %
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@xa-\pgf@xa%
+ \fi%
+ \ifdim\pgf@ya<0pt\relax%
+ \pgf@ya-\pgf@ya%
+ \fi%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@x\pgf@xa%
+ \pgf@y\pgf@ya%
+ \else%
+ \pgf@x\pgf@ya%
+ \pgf@y\pgf@xa%
+ \fi%
+ \ifdim\pgf@y=0pt\relax%
+ \pgf@x0pt%
+ \else%
+ \pgfmathreciprocal@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgf@x\pgfmathresult\pgf@x%
+ \fi%
+ \multiply\pgf@x1000\relax%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\the\pgf@x\relax\pgfmath@%
+ \expandafter\pgf@x\csname pgfmath@atan@\the\c@pgf@counta\endcsname pt\relax%
+ \ifdim\pgfmath@ya>\pgfmath@xa\relax%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x90pt%
+ \fi%
+ \ifdim\pgf@xb<0pt%
+ \ifdim\pgf@yb>0pt%
+ \pgf@x-\pgf@x%
+ \fi%
+ \advance\pgf@x180pt\relax%
+ \else%
+ \ifdim\pgf@yb<0pt%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x360pt\relax%
+ \fi\fi%
+ %
+ % ...then adjust, as star points start at 90 degrees...
+ %
+ \advance\pgf@x-90pt\relax%
+ \ifdim\pgf@x<0pt\relax%
+ \advance\pgf@x360pt\relax%
+ \fi%
+ %
+ % ...and also for rotation.
+ %
+ \advance\pgf@x-\rotate pt\relax%
+ \ifdim\pgf@x<0pt\relax%
+ \advance\pgf@x360pt\relax%
+ \fi%
+ %
+ % Now, locate the start and end points on the star border segment...
+ %
+ \c@pgf@counta\points\relax%
+ \pgf@y180pt\relax%
+ \divide\pgf@y\c@pgf@counta\relax%
+ \pgfmathreciprocal@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgf@x\pgfmathresult\pgf@x%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\the\pgf@x\relax\pgfmath@%
+ %
+ % ...and hence, the start and end angles of the star border segment.
+ %
+ \pgf@x\pgf@y%
+ \multiply\pgf@x\c@pgf@counta%
+ \advance\pgf@x90pt%
+ \advance\pgf@x\rotate pt\relax%
+ \edef\firstangle{\the\pgf@x}%
+ \advance\c@pgf@counta1\relax%
+ \pgf@x\pgf@y%
+ \multiply\pgf@x\c@pgf@counta%
+ \advance\pgf@x\rotate pt\relax%
+ \advance\pgf@x90pt%
+ \edef\secondangle{\the\pgf@x}%
+ %
+ % Get the radii and add the outer sep...
+ %
+ \pgf@x\innerpointradius\relax%
+ \edef\innerradius{\the\pgf@x}%
+ \pgf@xa\pointheight\relax%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@x\pointratio\pgf@x%
+ \else%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ \pgf@xb\pgf@x%
+ \pgf@xc\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xc%
+ \pgf@x.5\pgf@xc%
+ \fi%
+ \edef\outerradius{\the\pgf@x}%
+ \ifdim\pgf@x>\pgf@xb%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgfmathreciprocal{\pointratio}%
+ \pgf@xc\pgfmathresult\pgf@x\relax%
+ \edef\innerradius{\the\pgf@xc}%
+ \else%
+ \pgf@xc\pgf@x\relax%
+ \advance\pgf@xc-\pgf@xb%
+ \edef\innerradius{\the\pgf@xc}%
+ \fi%
+ \fi%
+ \pgf@xa\outersep\relax%
+ \pgf@x\outerradius\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\outerradius{\the\pgf@x}%
+ \pgf@x\innerradius\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\innerradius{\the\pgf@x}%
+ \ifodd\c@pgf@counta%
+ \let\firstradii\outerradius%
+ \let\secondradii\innerradius%
+ \else%
+ \let\firstradii\innerradius%
+ \let\secondradii\outerradius%
+ \fi%
+ %
+ % ...and calculate the point on the intersection of
+ % the line from the external point to \centerpoint and
+ % the relevant segment of the star border.
+ %
+ \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\firstangle}{+\firstradii}}%
+ }%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\secondangle}{+\secondradii}}%
+ }%
+ }%
+}%
+
+
+% \pgf@lib@shapesstaranchor
+%
+% Used internally to calculate inner point and
+% outer point anchor positions 'on line'.
+%
+\def\pgf@lib@shapesstaranchor#1{%
+ %
+ % Redefine stuff for ease of use.
+ %
+ \pgf@x\points%
+ \c@pgf@counta\pgf@x%
+ \divide\c@pgf@counta65536\relax%
+ \edef\points{\the\c@pgf@counta}%
+ \pgf@x\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@x\pointratio%
+ \edef\pointratio{\pgf@sys@tonumber{\pgf@x}}%
+ %
+ % Caculate radii.
+ %
+ \pgf@x\innerpointradius%
+ \edef\innerradius{\the\pgf@x}%
+ \pgf@xa\pointheight\relax%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@x\pointratio\pgf@x%
+ \else%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ \pgf@xb\pgf@x%
+ \pgf@xc\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xc%
+ \pgf@x.5\pgf@xc%
+ \fi%
+ \edef\outerradius{\the\pgf@x}%
+ \ifdim\pgf@x>\pgf@xb%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgfmathreciprocal{\pointratio}%
+ \pgf@xc\pgfmathresult\pgf@x\relax%
+ \edef\innerradius{\the\pgf@xc}%
+ \else%
+ \pgf@xc\pgf@x\relax%
+ \advance\pgf@xc-\pgf@xb%
+ \edef\innerradius{\the\pgf@xc}%
+ \fi%
+ \fi%
+ %
+ % Add the outer sep.
+ %
+ \pgf@xa\outersep%
+ \pgf@x\outerradius\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\outerradius{\the\pgf@x}%
+ \pgf@x\innerradius\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\innerradius{\the\pgf@x}%
+ %
+ % Calculate the angle.
+ %
+ \c@pgf@counta\points%
+ \pgf@x180pt\relax%
+ \divide\pgf@x\c@pgf@counta%
+ \c@pgf@counta#1\relax%
+ \advance\c@pgf@counta-1\relax%
+ \multiply\pgf@x\c@pgf@counta%
+ \pgf@xa\rotate pt\relax%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@x90pt\relax%
+ \edef\starangle{\the\pgf@x}%
+ \ifodd\c@pgf@counta%
+ \let\starradius\innerradius%
+ \else%
+ \let\starradius\outerradius%
+ \fi%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{\starangle}{\starradius}}%
+}%
+
+
+% \pgfsetpolygonsides
+%
+% Set the number of sides on a polygon.
+%
+\def\pgfsetpolygonsides#1{%
+ \pgfmathsetcounter{pgf@counta}{#1}%
+ \edef\pgfpolygonsides{\the\c@pgfmath@counta}}
+\pgfsetpolygonsides{6}
+
+% \pgfsetpolygonrotate
+%
+% Set the angle of rotation of the polygon
+% border. This can be decimal.
+%
+\def\pgfsetpolygonrotate#1{%
+ \pgfmathparse{#1}%
+ \edef\pgfpolygonrotate{\pgfmathresult}}%
+\pgfsetpolygonrotate{0}
+
+
+% Regular polygon shape.
+%
+%
+\pgfdeclareshape{regular polygon}{%
+ %
+ % Saved dimensions.
+ %
+ \saveddimen{\sides}{\pgf@x\pgfpolygonsides pt}%
+ \saveddimen{\rotate}{\pgf@x\pgfpolygonrotate pt}%
+ \saveddimen{\minimumsize}{%
+ \pgfmathsetlength\pgf@x{\pgfshapeminwidth}%
+ \pgfmathsetlength\pgf@y{\pgfshapeminheight}%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi}%
+ \saveddimen{\outersep}{%
+ \pgfmathsetlength\pgf@x{\pgfshapeouterxsep}%
+ \pgfmathsetlength\pgf@y{\pgfshapeouterysep}%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi}%
+ \saveddimen{\radius}{%
+ %
+ % The radius calculated here is the radius of the circle which
+ % can safely encompass the node textbox. This corresponds to the
+ % distance from the centre of the polygon to the mid-point of the
+ % of the sides of the polygon. The desired radius for the corners
+ % of the polygon has to calculated `on-line' as the saved dimen
+ % \sides is not available here.
+ %
+ \pgfmathsetlength\pgf@x{\pgfshapeinnerxsep}%
+ \advance\pgf@x.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@y{\pgfshapeinnerysep}%
+ \advance\pgf@y.5\ht\pgfnodeparttextbox%
+ \ifdim\pgf@y>\pgf@x%
+ \pgf@x\pgf@y%
+ \fi%
+ \pgfmathveclen@{\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@x\pgfmathresult pt\relax%
+ }%
+
+ %
+ % Saved anchors.
+ %
+ \savedanchor{\centerpoint}{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }%
+
+ %
+ % Other anchors.
+ %
+ \anchor{center}{\centerpoint}%
+ \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}%
+ \anchor{base}{\centerpoint\pgf@y=0pt}%
+ \anchor{north}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+0pt}{+\radius}}}%
+ \anchor{south}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+0pt}{+-\radius}}}%
+ \anchor{east}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+\radius}{+0pt}}}%
+ \anchor{west}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+-\radius}{+0pt}}}%
+ \anchor{north east}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+\radius}{+\radius}}}%
+ \anchor{north west}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+-\radius}{+\radius}}}%
+ \anchor{south east}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+\radius}{+-\radius}}}%
+ \anchor{south west}{\csname pgf@anchor@regular polygon@border\endcsname{\pgfpoint{+-\radius}{+-\radius}}}%
+
+ %
+ % Background path.
+ %
+ \backgroundpath{%
+ %
+ % Redefine some stuff for ease of use.
+ %
+ \pgf@x\sides%
+ \c@pgf@counta\pgf@x%
+ \divide\c@pgf@counta65536\relax%
+ \edef\sides{\the\c@pgf@counta}%
+ \pgf@x\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@x}}%
+ %
+ % Get the inner angle.
+ %
+ \pgf@y360pt\relax%
+ \divide\pgf@y\sides%
+ \edef\polygonanglestep{\the\pgf@y}%
+ %
+ % Now recalculate the polygon *corner* radius.
+ %
+ \pgf@y.5\pgf@y%
+ \pgfmathcos@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\radius\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \pgf@xa\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \edef\polygonradius{\the\pgf@x}%
+ %
+ % Every polygon is drawn so that a side is at the bottom...
+ %
+ \pgf@x90pt\relax%
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x-\pgf@y%
+ \fi%
+ %
+ % ...unless rotation is applied.
+ %
+ \pgf@xa\rotate pt\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\polygonangle{\the\pgf@x}%
+ %
+ % Move to first point.
+ %
+ \pgfpathmoveto{%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\polygonangle}{+\polygonradius}}%
+ }%
+ \pgfmathloop%
+ %
+ % Create anchors. Manually \xdef as \gdef is normally used by \anchor.
+ %
+ \expandafter\xdef\csname pgf@anchor@regular polygon@corner\space\pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@shapescorneranchor{\pgfmathcounter}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@regular polygon@side\space\pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@shapessideanchor{\pgfmathcounter}%
+ }%
+ \ifnum\pgfmathcounter=\sides\relax% Stop.
+ \else%
+ \pgf@x\polygonangle\relax%
+ \advance\pgf@x\polygonanglestep\relax%
+ \edef\polygonangle{\the\pgf@x}%
+ \pgfpathlineto{%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\polygonangle}{+\polygonradius}}%
+ }%
+ \repeatpgfmathloop%
+ \pgfpathclose%
+ }%
+
+ %
+ % Anchor border.
+ %
+ \anchorborder{%
+ %
+ % Save the external point.
+ %
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@xa\pgf@x%
+ \advance\pgf@ya\pgf@y%
+ \edef\externalx{\the\pgf@xa}%
+ \edef\externaly{\the\pgf@ya}%
+ \pgf@process{\pgfpointdiff{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}}%
+ %
+ % Approximate the angle of the external point...
+ %
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \ifdim\pgf@xa<0pt\relax%
+ \pgf@xa-\pgf@xa%
+ \fi%
+ \ifdim\pgf@ya<0pt\relax%
+ \pgf@ya-\pgf@ya%
+ \fi%
+ \ifdim\pgf@ya>\pgf@xa%
+ \pgf@x\pgf@xa%
+ \pgf@y\pgf@ya%
+ \else%
+ \pgf@x\pgf@ya%
+ \pgf@y\pgf@xa%
+ \fi%
+ \ifdim\pgf@y=0pt\relax%
+ \pgf@x0pt%
+ \else%
+ \pgfmathreciprocal@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgf@x\pgfmathresult\pgf@x%
+ \fi%
+ \multiply\pgf@x1000\relax%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\the\pgf@x\relax\pgfmath@%
+ \expandafter\pgf@x\csname pgfmath@atan@\the\c@pgf@counta\endcsname pt\relax%
+ \ifdim\pgfmath@ya>\pgfmath@xa\relax%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x90pt%
+ \fi%
+ \ifdim\pgf@xb<0pt%
+ \ifdim\pgf@yb>0pt%
+ \pgf@x-\pgf@x%
+ \fi%
+ \advance\pgf@x180pt\relax%
+ \else%
+ \ifdim\pgf@yb<0pt%
+ \pgf@x-\pgf@x%
+ \advance\pgf@x360pt\relax%
+ \fi\fi%
+ %
+ % ...(redefine stuff for ease of use)...
+ %
+ \pgf@y\sides%
+ \c@pgf@counta\pgf@y%
+ \divide\c@pgf@counta65536\relax%
+ \edef\sides{\the\c@pgf@counta}%
+ \pgf@y\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@y}}%
+ %
+ % ...now adjust angle, for the number of polygon sides...
+ %
+ \advance\pgf@x-90pt\relax%
+ \pgf@xa180pt\relax%
+ \divide\pgf@xa\sides%
+ %
+ % ...and for if the there is an even number of sides...
+ %
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x\pgf@xa%
+ \fi%
+ \ifdim\pgf@x<0pt\relax%
+ \advance\pgf@x360pt\relax%
+ \fi%
+ %
+ % ...and also for rotation.
+ %
+ \advance\pgf@x-\rotate pt\relax%
+ \ifdim\pgf@x<0pt\relax%
+ \advance\pgf@x360pt\relax%
+ \fi%
+ %
+ % Now, locate the start and end points on the polygon border segment...
+ %
+ \c@pgf@counta\sides\relax%
+ \pgf@y360pt\relax%
+ \divide\pgf@y\c@pgf@counta\relax%
+ \pgfmathreciprocal@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgf@x\pgfmathresult\pgf@x%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgf@counta\the\pgf@x\relax\pgfmath@%
+ %
+ % ...and hence, the start and end angles of the polygon border segment.
+ %
+ \pgf@x\pgf@y%
+ \multiply\pgf@x\c@pgf@counta%
+ \advance\pgf@x90pt%
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x-\pgf@xa%
+ \fi%
+ \advance\pgf@x\rotate pt\relax%
+ \edef\firstangle{\the\pgf@x}%
+ \advance\c@pgf@counta1\relax%
+ \pgf@x\pgf@y%
+ \multiply\pgf@x\c@pgf@counta%
+ \advance\pgf@x\rotate pt\relax%
+ \advance\pgf@x90pt%
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x-\pgf@xa%
+ \fi%
+ \edef\secondangle{\the\pgf@x}%
+ %
+ % Get the inner angle.
+ %
+ \pgf@y360pt\relax%
+ \divide\pgf@y\sides%
+ %
+ % Now recalculate the polygon *corner* radius...
+ %
+ \pgf@y.5\pgf@y%
+ \pgfmathcos@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\radius\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \edef\polygonradius{\the\pgf@x}%
+ %
+ % ...and add the outer sep to the corner radius...
+ %
+ \pgf@xa\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \pgf@xa\outersep\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\radius{\the\pgf@x}%
+ %
+ % ...and calculate the point on the intersection of
+ % the line from the external point to \centerpoint and
+ % the segment of the star border.
+ %
+ \pgfpointintersectionoflines{\centerpoint}{\pgfpoint{+\externalx}{+\externaly}}%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\firstangle}{+\radius}}%
+ }%
+ {%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{+\secondangle}{+\radius}}%
+ }%
+ }%
+}%
+
+
+% \pgf@lib@shapespolygoncorneranchor
+%
+% Used internally to calculate corner anchor positions.
+%
+\def\pgf@lib@shapescorneranchor#1{%
+ %
+ % Redefine stuff for ease of use.
+ %
+ \pgf@y\sides%
+ \c@pgf@counta\pgf@y%
+ \divide\c@pgf@counta65536\relax%
+ \edef\sides{\the\c@pgf@counta}%
+ \pgf@y\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@y}}%
+ %
+ % Get the inner angle.
+ %
+ \pgf@y360pt\relax%
+ \divide\pgf@y\sides\relax%
+ \edef\polgonanglestep{\pgf@sys@tonumber{\pgf@y}}%
+ %
+ % Recalculate the polygon corner radius...
+ %
+ \pgf@y.5\pgf@y%
+ \pgfmathcos@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\radius\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ \edef\polygonradius{\the\pgf@x}%
+ %
+ % ...adjust for minimum size...
+ %
+ \pgf@xa\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ %
+ % ...and add the outer sep.
+ %
+ \pgf@xa\outersep\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\polygonradius{\the\pgf@x}%
+ %
+ % Calculate the angle.
+ %
+ \c@pgf@counta#1\relax%
+ \advance\c@pgf@counta-1\relax%
+ \pgf@x2.0\pgf@y%
+ \multiply\pgf@x\c@pgf@counta%
+ \pgf@xa\rotate pt\relax%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@x90pt\relax%
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x-\pgf@y%
+ \fi%
+ \edef\polygonangle{\the\pgf@x}%
+ \pgfpointadd{\centerpoint}%
+ {\pgfpointpolar{\polygonangle}{\polygonradius}}%
+}%
+
+% \pgf@lib@shapespolygonsideanchor
+%
+% Used internally to calculate side anchor positions.
+%
+\def\pgf@lib@shapessideanchor#1{%
+ %
+ % Redefine stuff for ease of use.
+ %
+ \pgf@y\sides%
+ \c@pgf@counta\pgf@y%
+ \divide\c@pgf@counta65536\relax%
+ \edef\sides{\the\c@pgf@counta}%
+ \pgf@y\rotate%
+ \edef\rotate{\pgf@sys@tonumber{\pgf@y}}%
+ %
+ % Get the inner angle.
+ %
+ \pgf@y360pt\relax%
+ \divide\pgf@y\sides\relax%
+ \edef\polygonanglestep{\the\pgf@y}%
+ %
+ % Recalculate the polygon corner radius...
+ %
+ \pgf@y.5\pgf@y%
+ \pgfmathcos@{\pgf@sys@tonumber{\pgf@y}}%
+ \pgfmathreciprocal@{\pgfmathresult}%
+ \pgf@x\radius\relax%
+ \pgf@x\pgfmathresult\pgf@x%
+ %
+ % ...adjust for minimum size...
+ %
+ \pgf@xa\minimumsize\relax%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ %
+ % and add the outer sep.
+ %
+ \pgf@xa\outersep\relax%
+ \advance\pgf@x\pgf@xa%
+ \edef\polygonradius{\the\pgf@x}%
+ %
+ % Calculate the angle.
+ %
+ \pgf@y\polygonanglestep%
+ \c@pgf@counta#1\relax%
+ \advance\c@pgf@counta-1\relax%
+ \pgf@x\polygonanglestep pt\relax%
+ \multiply\pgf@x\c@pgf@counta%
+ \pgf@xa\rotate pt\relax%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@x90pt\relax%
+ \ifodd\sides%
+ \else%
+ \advance\pgf@x-.5\pgf@y%
+ \fi%
+ \edef\firstangle{\the\pgf@x}%
+ \advance\pgf@x\pgf@y%
+ \edef\secondangle{\the\pgf@x}%
+ \pgfpointlineattime{0.5}{%
+ \pgfpointadd{\centerpoint}{\pgfpointpolar{+\firstangle}{+\polygonradius}}%
+ }{%
+ \pgfpointadd{\centerpoint}{\pgfpointpolar{+\secondangle}{+\polygonradius}}%
+ }%
+}%
+
+
+
+\endinput