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, 0 insertions, 1229 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
deleted file mode 100644
index 802c85a41b9..00000000000
--- a/Master/texmf-dist/tex/generic/pgf/libraries/pgflibraryshapes.geometric.code.tex
+++ /dev/null
@@ -1,1229 +0,0 @@
-% 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