diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callouts.code.tex | 1570 |
1 files changed, 785 insertions, 785 deletions
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 |