You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2361 lines
89 KiB
2361 lines
89 KiB
% Copyright 2007 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{pgflibraryshapes.arrows.code.tex}
|
|
|
|
|
|
% keys for shape single arrow
|
|
%
|
|
% /pgf/single arrow tip angle
|
|
% /pgf/single arrow head extend
|
|
% /pgf/single arrow head indent
|
|
|
|
\pgfkeys{/pgf/.cd,
|
|
single arrow tip angle/.initial=90,
|
|
single arrow head extend/.initial=.25cm,
|
|
single arrow head indent/.initial=0cm,
|
|
}%
|
|
|
|
% Shape single arrow
|
|
%
|
|
%
|
|
\pgfdeclareshape{single arrow}{%
|
|
\savedmacro\getsinglearrowpoints{%
|
|
%
|
|
% Get the outer sep.
|
|
%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
|
|
\edef\xoutersep{\the\pgf@x}%
|
|
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
|
|
\edef\youtersep{\the\pgf@y}%
|
|
%
|
|
% Get the node dimensions.
|
|
%
|
|
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
|
|
\advance\pgf@xa.5\wd\pgfnodeparttextbox%
|
|
\advance\pgf@xa.5\pgflinewidth%
|
|
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
|
|
\advance\pgf@ya.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@ya.5\dp\pgfnodeparttextbox%
|
|
\advance\pgf@ya.5\pgflinewidth%
|
|
\ifpgfshapeborderusesincircle%
|
|
\ifdim\pgf@xa<\pgf@ya%
|
|
\pgf@xa\pgf@ya%
|
|
\fi%
|
|
\pgf@xa1.41421\pgf@xa%
|
|
\pgf@ya\pgf@xa%
|
|
\pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
|
|
\ifdim\xoutersep>\youtersep\relax%
|
|
\let\youtersep\xoutersep%
|
|
\else%
|
|
\let\xoutersep\youtersep%
|
|
\fi%
|
|
\else%
|
|
%
|
|
% Round the rotation.
|
|
%
|
|
\pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
|
|
\pgfmathmod@{\rotate}{360}%
|
|
\afterassignment\pgfmath@gobbletilpgfmath@%
|
|
\expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
|
|
\advance\c@pgf@counta45\relax%
|
|
\divide\c@pgf@counta90\relax%
|
|
\multiply\c@pgf@counta90\relax%
|
|
\ifnum\c@pgf@counta<0\relax%
|
|
\advance\c@pgf@counta360\relax%
|
|
\fi%
|
|
\edef\rotate{\the\c@pgf@counta}%
|
|
%
|
|
% Calculate the width and height of the node
|
|
% contents, according to any border rotation.
|
|
%
|
|
\ifnum\c@pgf@counta=90\relax%
|
|
\pgf@x\pgf@xa%
|
|
\pgf@xa\pgf@ya%
|
|
\pgf@ya\pgf@x%
|
|
\let\pgfmathresult\xoutersep%
|
|
\let\xoutersep\youtersep%
|
|
\let\youtersep\pgfmathresult%
|
|
\else%
|
|
\ifnum\c@pgf@counta=270\relax%
|
|
\pgf@x\pgf@xa%
|
|
\pgf@xa\pgf@ya%
|
|
\pgf@ya\pgf@x%
|
|
\let\pgfmathresult\xoutersep%
|
|
\let\xoutersep\youtersep%
|
|
\let\youtersep\pgfmathresult%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\addtosavedmacro\rotate%
|
|
%
|
|
% Get some useful trig stuff.
|
|
%
|
|
\pgfmathdivide{\pgfkeysvalueof{/pgf/single arrow tip angle}}{2}%
|
|
\let\halftipangle\pgfmathresult%
|
|
\pgfmathcosec@{\halftipangle}%
|
|
\let\cosechalftipangle\pgfmathresult%
|
|
\pgfmathcos@{\halftipangle}%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
|
|
\edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgfmathreciprocal@{\pgfmathresult}%
|
|
\let\sechalftipangle\pgfmathresult%
|
|
\pgfmathsin@{\halftipangle}%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
|
|
\edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
%
|
|
% Get the single arrow head extend, and adjust for minimum width.
|
|
%
|
|
\pgf@xb\pgf@ya%
|
|
\pgf@xb\cothalftipangle\pgf@xb%
|
|
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/single arrow head extend}}%
|
|
\pgf@yc\pgf@xc%
|
|
\advance\pgf@xc\pgf@ya%
|
|
\pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
|
|
\ifdim\pgf@xc<.5\pgfutil@tempdimb%
|
|
\pgfutil@tempdimb.5\pgfutil@tempdimb%
|
|
\pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
|
|
\pgf@ya\pgfmathresult\pgf@ya%
|
|
\pgf@xc\pgfmathresult\pgf@xc%
|
|
\pgf@yc\pgfmathresult\pgf@yc%
|
|
\pgf@xb\pgfmathresult\pgf@xb%
|
|
\fi%
|
|
%
|
|
% Now calculate the height of the arrow and adjust for minimum height.
|
|
%
|
|
\advance\pgf@xc-\pgf@ya%
|
|
\pgf@xc\cothalftipangle\pgf@xc%
|
|
\pgf@xa2.0\pgf@xa%
|
|
\advance\pgf@xa\pgf@xb%
|
|
\pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
|
|
\ifdim\pgf@xa<\pgfutil@tempdimb%
|
|
\pgf@xa\pgfutil@tempdimb%
|
|
\fi%
|
|
\advance\pgf@xa-\pgf@xb%
|
|
\pgf@xa.5\pgf@xa%
|
|
\pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/single arrow head indent}}%
|
|
%
|
|
% Now:
|
|
%
|
|
% xa - .5 * width of the node minus xb.
|
|
% ya - .5 * height of the node contents.
|
|
% xb - distance from the end of the node contents to the arrow tip.
|
|
% xc - distance from the end of the node contents to the back end of the arrow head.
|
|
% yc - distance from the top of the node contents to the top end of the arrow head.
|
|
%
|
|
\pgfsavepgf@process\centerpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
|
|
}%
|
|
\pgfsavepgf@process\basepoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y0pt%
|
|
}%
|
|
\pgfsavepgf@process\midpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@y{+.5ex}%
|
|
}%
|
|
%
|
|
% As the arrow is symmetrical it can be described by only four points:
|
|
%
|
|
\pgfsavepgf@process\arrowtip{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x\pgf@xb%
|
|
\pgf@y0pt\relax%
|
|
}%
|
|
\pgfsavepgf@process\beforearrowtip{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x-\pgf@xc%
|
|
\pgf@y\pgf@ya%
|
|
\advance\pgf@y\pgf@yc%
|
|
}%
|
|
\pgfsavepgf@process\beforearrowhead{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x-\pgf@xc%
|
|
\advance\pgf@x\pgfutil@tempdima%
|
|
\pgf@y\pgf@ya%
|
|
}%
|
|
\pgfsavepgf@process\afterarrowtail{%
|
|
\pgf@x-\pgf@xa%
|
|
\pgf@y\pgf@ya%
|
|
}%
|
|
%
|
|
% Calculate the anchor point at the arrow tip...
|
|
%
|
|
\pgfsavepgf@process\arrowtipanchor{%
|
|
\pgfpointadd{\centerpoint}{\arrowtip}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\advance\pgf@x\cosechalftipangle\pgf@xa%
|
|
}%
|
|
\advance\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\edef\externalradius{\the\pgf@x}%
|
|
\addtosavedmacro\externalradius%
|
|
%
|
|
% ...and the rest of the points.
|
|
%
|
|
\pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima.5\pgfutil@tempdima%
|
|
\pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgf@xa\pgfmathresult\pgf@xa%
|
|
\pgfutil@tempdima-\pgfutil@tempdima%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\advance\pgfutil@tempdima-\halftipangle pt\relax%
|
|
%
|
|
\pgfsavepgf@process\beforearrowtipanchor{%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
|
|
\pgf@xb\pgf@x%
|
|
\pgf@yb\pgf@y%
|
|
\pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
|
|
\advance\pgf@x\pgf@xb%
|
|
\advance\pgf@y\pgf@yb%
|
|
}%
|
|
\pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
|
|
\pgfutil@tempdima-\pgfmathresult pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdima.5\pgfutil@tempdima%
|
|
\pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\pgf@xa\pgfmathresult\pgf@xa%
|
|
\pgfutil@tempdima-\pgfutil@tempdima%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfsavepgf@process\beforearrowheadanchor{%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
|
|
\pgf@xb\pgf@x%
|
|
\pgf@yb\pgf@y%
|
|
\pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
|
|
\advance\pgf@x\pgf@xb%
|
|
\advance\pgf@y\pgf@yb%
|
|
}%
|
|
\pgfsavepgf@process\afterarrowtailanchor{%
|
|
\pgfpointadd{\centerpoint}{\afterarrowtail}%
|
|
\advance\pgf@x-\xoutersep\relax%
|
|
\advance\pgf@y\youtersep\relax%
|
|
}%
|
|
%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
|
|
\let\center@angle@beforearrowtip\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\beforearrowheadanchor}%
|
|
\let\center@angle@beforearrowhead\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\afterarrowtailanchor}%
|
|
\let\center@angle@afterarrowtail\pgfmathresult%
|
|
\addtosavedmacro\center@angle@beforearrowtip%
|
|
\addtosavedmacro\center@angle@beforearrowhead%
|
|
\addtosavedmacro\center@angle@afterarrowtail%
|
|
%
|
|
\pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
|
|
\let\mid@angle@beforearrowtip\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\midpoint}{\beforearrowheadanchor}%
|
|
\let\mid@angle@beforearrowhead\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\midpoint}{\afterarrowtailanchor}%
|
|
\let\mid@angle@afterarrowtail\pgfmathresult%
|
|
\addtosavedmacro\mid@angle@beforearrowtip%
|
|
\addtosavedmacro\mid@angle@beforearrowhead%
|
|
\addtosavedmacro\mid@angle@afterarrowtail%
|
|
%
|
|
\pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
|
|
\let\base@angle@beforearrowtip\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\basepoint}{\beforearrowheadanchor}%
|
|
\let\base@angle@beforearrowhead\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\basepoint}{\afterarrowtailanchor}%
|
|
\let\base@angle@afterarrowtail\pgfmathresult%
|
|
\addtosavedmacro\base@angle@beforearrowtip%
|
|
\addtosavedmacro\base@angle@beforearrowhead%
|
|
\addtosavedmacro\base@angle@afterarrowtail%
|
|
%
|
|
\addtosavedmacro\arrowtipanchor%
|
|
\addtosavedmacro\beforearrowtipanchor%
|
|
\addtosavedmacro\beforearrowheadanchor%
|
|
\addtosavedmacro\afterarrowtailanchor%
|
|
}%
|
|
\savedanchor\centerpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
|
|
}%
|
|
\savedanchor\midpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@y{+0.5ex}%
|
|
}%
|
|
\savedanchor\basepoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y0pt%
|
|
}%
|
|
\anchor{center}{\centerpoint}%
|
|
\anchor{mid}{\midpoint}%
|
|
\anchor{mid east}{%
|
|
\getsinglearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\midpoint%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{mid west}{%
|
|
\getsinglearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\midpoint%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{base}{\basepoint}%
|
|
\anchor{base east}{%
|
|
\getsinglearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\basepoint%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{base west}{%
|
|
\getsinglearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\basepoint%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{north}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
|
|
}%
|
|
\anchor{south}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
|
|
}%
|
|
\anchor{east}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{west}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{north east}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
|
|
}%
|
|
\anchor{south east}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
|
|
}%
|
|
\anchor{south west}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
|
|
}%
|
|
\anchor{north west}{%
|
|
\getsinglearrowpoints%
|
|
\csname pgf@anchor@single arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
|
|
}%
|
|
\anchor{before head}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{before tip}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{tip}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after tip}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after head}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{before tail}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after tail}{%
|
|
\getsinglearrowpoints%
|
|
\pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{tail}{%
|
|
\getsinglearrowpoints%
|
|
\pgfpointlineattime{0.5}{%
|
|
\pgfmathrotatepointaround{\afterarrowtailanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
{%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
}%
|
|
\backgroundpath{%
|
|
{%
|
|
\pgftransformshift{\centerpoint}%
|
|
\pgftransformrotate{\rotate}%
|
|
\pgfpathmoveto{\arrowtip}%
|
|
\pgfpathlineto{\beforearrowtip}%
|
|
\pgfpathlineto{\beforearrowhead}%
|
|
\pgfpathlineto{\afterarrowtail}%
|
|
\pgfpathlineto{\afterarrowtail\pgf@y-\pgf@y}%
|
|
\pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
|
|
\pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
|
|
}%
|
|
\pgfpathclose%
|
|
}%
|
|
\anchorborder{%
|
|
\pgfsavepgf@process\externalpoint{}%
|
|
\getsinglearrowpoints%
|
|
\pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
|
|
{\let\referencepoint\pgf@singlearrow@referencepoint}%
|
|
\pgfsavepgf@process\externalpoint{%
|
|
\externalpoint%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@ya\pgf@y%
|
|
\referencepoint%
|
|
\advance\pgf@x\pgf@xa%
|
|
\advance\pgf@y\pgf@ya}%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
|
|
\pgfmathsubtract@{\pgfmathresult}{\rotate}%
|
|
\ifdim\pgfmathresult pt<0pt\relax%
|
|
\pgfmathadd@{\pgfmathresult}{360}%
|
|
\fi%
|
|
\let\externalangle\pgfmathresult%
|
|
\pgf@x\externalangle pt\relax%
|
|
\ifx\referencepoint\midpoint%
|
|
\pgf@xa\mid@angle@beforearrowtip pt\relax%
|
|
\pgf@xb\mid@angle@beforearrowhead pt\relax%
|
|
\pgf@xc\mid@angle@afterarrowtail pt\relax%
|
|
\else%
|
|
\ifx\referencepoint\basepoint%
|
|
\pgf@xa\base@angle@beforearrowtip pt\relax%
|
|
\pgf@xb\base@angle@beforearrowhead pt\relax%
|
|
\pgf@xc\base@angle@afterarrowtail pt\relax%
|
|
\else%
|
|
\pgf@xa\center@angle@beforearrowtip pt\relax%
|
|
\pgf@xb\center@angle@beforearrowhead pt\relax%
|
|
\pgf@xc\center@angle@afterarrowtail pt\relax%
|
|
\fi%
|
|
\fi%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\let\firstpoint\arrowtipanchor%
|
|
\let\secondpoint\beforearrowtipanchor%
|
|
\else%
|
|
\ifdim\pgf@x<\pgf@xb%
|
|
\ifdim\pgf@xb<\pgf@xa%
|
|
\let\firstpoint\arrowtipanchor%
|
|
\let\secondpoint\beforearrowtipanchor%
|
|
\else%
|
|
\let\firstpoint\beforearrowheadanchor%
|
|
\let\secondpoint\beforearrowtipanchor%
|
|
\fi%
|
|
\else%
|
|
\ifdim\pgf@x<\pgf@xc%
|
|
\let\firstpoint\beforearrowheadanchor%
|
|
\let\secondpoint\afterarrowtailanchor%
|
|
\else%
|
|
\pgf@xc-\pgf@xc%
|
|
\advance\pgf@xc360pt\relax%
|
|
\ifdim\pgf@x<\pgf@xc%
|
|
\let\firstpoint\afterarrowtailanchor%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\else%
|
|
\pgf@xa-\pgf@xa%
|
|
\advance\pgf@xa360pt\relax%
|
|
\pgf@xb-\pgf@xb%
|
|
\advance\pgf@xb360pt\relax%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\ifdim\pgf@x<\pgf@xb%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\afterarrowtailanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\else%
|
|
\ifdim\pgf@xb<\pgf@xa%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\else%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\arrowtipanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\fi%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\fi%
|
|
\else%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}%
|
|
}%
|
|
\let\secondpoint\arrowtipanchor%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
|
|
}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
|
|
}%
|
|
\pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
|
|
{\firstpoint}{\secondpoint}%
|
|
}%
|
|
}%
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% keys for shape double arrow
|
|
%
|
|
% /pgf/double arrow tip angle
|
|
% /pgf/double arrow head sep
|
|
|
|
\pgfkeys{/pgf/.cd,
|
|
double arrow tip angle/.initial=90,
|
|
double arrow head extend/.initial=.25cm,
|
|
double arrow head indent/.initial=0cm,
|
|
}%
|
|
|
|
% Shape double arrow
|
|
%
|
|
%
|
|
\pgfdeclareshape{double arrow}{%
|
|
\savedmacro\getdoublearrowpoints{%
|
|
%
|
|
% Get the outer sep.
|
|
%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
|
|
\edef\xoutersep{\the\pgf@x}%
|
|
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
|
|
\edef\youtersep{\the\pgf@y}%
|
|
%
|
|
% Get the node dimensions.
|
|
%
|
|
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}%
|
|
\advance\pgf@xa.5\wd\pgfnodeparttextbox%
|
|
\advance\pgf@xa.5\pgflinewidth%
|
|
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}%
|
|
\advance\pgf@ya.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@ya.5\dp\pgfnodeparttextbox%
|
|
\advance\pgf@ya.5\pgflinewidth%
|
|
\ifpgfshapeborderusesincircle%
|
|
\ifdim\pgf@xa<\pgf@ya%
|
|
\pgf@xa\pgf@ya%
|
|
\fi%
|
|
\pgf@xa1.41421\pgf@xa%
|
|
\pgf@ya\pgf@xa%
|
|
\pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}%
|
|
\ifdim\xoutersep>\youtersep\relax%
|
|
\let\youtersep\xoutersep%
|
|
\else%
|
|
\let\xoutersep\youtersep%
|
|
\fi%
|
|
\else%
|
|
%
|
|
% Round the rotation.
|
|
%
|
|
\pgfmathsetmacro\rotate{\pgfkeysvalueof{/pgf/shape border rotate}}
|
|
\pgfmathmod@{\rotate}{360}%
|
|
\afterassignment\pgfmath@gobbletilpgfmath@%
|
|
\expandafter\c@pgf@counta\pgfmathresult\relax\pgfmath@%
|
|
\advance\c@pgf@counta45\relax%
|
|
\divide\c@pgf@counta90\relax%
|
|
\multiply\c@pgf@counta90\relax%
|
|
\ifnum\c@pgf@counta<0\relax%
|
|
\advance\c@pgf@counta360\relax%
|
|
\fi%
|
|
\edef\rotate{\the\c@pgf@counta}%
|
|
%
|
|
% Calculate the width and height of the node
|
|
% contents, according to any border rotation.
|
|
%
|
|
\ifnum\c@pgf@counta=90\relax%
|
|
\pgf@x\pgf@xa%
|
|
\pgf@xa\pgf@ya%
|
|
\pgf@ya\pgf@x%
|
|
\let\pgfmathresult\xoutersep%
|
|
\let\xoutersep\youtersep%
|
|
\let\youtersep\pgfmathresult%
|
|
\else%
|
|
\ifnum\c@pgf@counta=270\relax%
|
|
\pgf@x\pgf@xa%
|
|
\pgf@xa\pgf@ya%
|
|
\pgf@ya\pgf@x%
|
|
\let\pgfmathresult\xoutersep%
|
|
\let\xoutersep\youtersep%
|
|
\let\youtersep\pgfmathresult%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\addtosavedmacro\rotate%
|
|
%
|
|
% Get some useful trig stuff.
|
|
%
|
|
\pgfmathdivide{\pgfkeysvalueof{/pgf/double arrow tip angle}}{2}%
|
|
\let\halftipangle\pgfmathresult%
|
|
\pgfmathcosec@{\halftipangle}%
|
|
\let\cosechalftipangle\pgfmathresult%
|
|
\pgfmathcos@{\halftipangle}%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima\cosechalftipangle\pgfutil@tempdima%
|
|
\edef\cothalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgfmathreciprocal@{\pgfmathresult}%
|
|
\let\sechalftipangle\pgfmathresult%
|
|
\pgfmathsin@{\halftipangle}%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima\sechalftipangle\pgfutil@tempdima%
|
|
\edef\tanhalftipangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
%
|
|
% Get the double arrow head extend, and adjust for minimum width.
|
|
%
|
|
\pgf@xb\pgf@ya%
|
|
\pgf@xb\cothalftipangle\pgf@xb%
|
|
\pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/double arrow head extend}}%
|
|
\pgf@yc\pgf@xc%
|
|
\advance\pgf@xc\pgf@ya%
|
|
\pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum width}}%
|
|
\ifdim\pgf@xc<.5\pgfutil@tempdimb%
|
|
\pgfutil@tempdimb.5\pgfutil@tempdimb%
|
|
\pgfmathdivide@{\pgfmath@tonumber{\pgfutil@tempdimb}}{\pgfmath@tonumber{\pgf@xc}}%
|
|
\pgf@ya\pgfmathresult\pgf@ya%
|
|
\pgf@xc\pgfmathresult\pgf@xc%
|
|
\pgf@yc\pgfmathresult\pgf@yc%
|
|
\pgf@xb\pgfmathresult\pgf@xb%
|
|
\fi%
|
|
%
|
|
% Now calculate the height of the arrow and adjust for minimum height.
|
|
%
|
|
\advance\pgf@xc-\pgf@ya%
|
|
\pgf@xc\cothalftipangle\pgf@xc%
|
|
\advance\pgf@xa\pgf@xb%
|
|
\pgf@xa2.0\pgf@xa%
|
|
\pgfmathsetlength\pgfutil@tempdimb{\pgfkeysvalueof{/pgf/minimum height}}%
|
|
\ifdim\pgf@xa<\pgfutil@tempdimb%
|
|
\pgf@xa\pgfutil@tempdimb%
|
|
\fi%
|
|
\pgf@xa.5\pgf@xa%
|
|
\advance\pgf@xa-\pgf@xb%
|
|
\pgfmathsetlength\pgfutil@tempdima{\pgfkeysvalueof{/pgf/double arrow head indent}}%
|
|
%
|
|
% Now:
|
|
%
|
|
% xa - .5 * width of the node minus xb.
|
|
% ya - .5 * height of the node contents.
|
|
% xb - distance from the end of the node contents to the arrow tip.
|
|
% xc - distance from the end of the node contents to the back end of the arrow head.
|
|
% yc - distance from the top of the node contents to the top end of the arrow head.
|
|
%
|
|
\pgfsavepgf@process\centerpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
|
|
}%
|
|
\pgfsavepgf@process\basepoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y0pt%
|
|
}%
|
|
\pgfsavepgf@process\midpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@y{+.5ex}%
|
|
}%
|
|
%
|
|
% As the arrow is symmetrical it can be described by only 3 points:
|
|
%
|
|
\pgfsavepgf@process\arrowtip{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x\pgf@xb%
|
|
\pgf@y0pt\relax%
|
|
}%
|
|
\pgfsavepgf@process\beforearrowtip{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x-\pgf@xc%
|
|
\pgf@y\pgf@ya%
|
|
\advance\pgf@y\pgf@yc%
|
|
}%
|
|
\pgfsavepgf@process\beforearrowhead{%
|
|
\pgf@x\pgf@xa%
|
|
\advance\pgf@x-\pgf@xc%
|
|
\advance\pgf@x\pgfutil@tempdima%
|
|
\pgf@y\pgf@ya%
|
|
}%
|
|
%
|
|
% Calculate the anchor point at the arrow tip.
|
|
%
|
|
\pgfsavepgf@process\arrowtipanchor{%
|
|
\pgfpointadd{\centerpoint}{\arrowtip}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\advance\pgf@x\cosechalftipangle\pgf@xa%
|
|
}%
|
|
\advance\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\edef\externalradius{\the\pgf@x}%
|
|
\addtosavedmacro\externalradius%
|
|
%
|
|
%
|
|
\pgfmathanglebetweenlines{\beforearrowtip}{\beforearrowhead}{\beforearrowtip}{\arrowtip}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\pgfutil@tempdima\pgfmathresult pt\relax%
|
|
\pgfutil@tempdima.5\pgfutil@tempdima%
|
|
\pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgf@xa\pgfmathresult\pgf@xa%
|
|
\pgfutil@tempdima-\pgfutil@tempdima%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\advance\pgfutil@tempdima-\halftipangle pt\relax%
|
|
\pgfsavepgf@process\beforearrowtipanchor{%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
|
|
\pgf@xb\pgf@x%
|
|
\pgf@yb\pgf@y%
|
|
\pgf@process{\pgfpointadd{\centerpoint}{\beforearrowtip}}%
|
|
\advance\pgf@x\pgf@xb%
|
|
\advance\pgf@y\pgf@yb%
|
|
}%
|
|
\pgfmathanglebetweenpoints{\beforearrowhead}{\beforearrowtip}%
|
|
\pgfutil@tempdima-\pgfmathresult pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdima.5\pgfutil@tempdima%
|
|
\pgfmathcosec@{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\pgf@xa\xoutersep\relax%
|
|
\pgf@xa\pgfmathresult\pgf@xa%
|
|
\pgfutil@tempdima-\pgfutil@tempdima%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfsavepgf@process\beforearrowheadanchor{%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgf@xa}%
|
|
\pgf@xb\pgf@x%
|
|
\pgf@yb\pgf@y%
|
|
\pgf@process{\pgfpointadd{\centerpoint}{\beforearrowhead}}%
|
|
\advance\pgf@x\pgf@xb%
|
|
\advance\pgf@y\pgf@yb%
|
|
}%
|
|
%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\beforearrowtipanchor}%
|
|
\let\center@angle@beforearrowtip\pgfmathresult%
|
|
\addtosavedmacro\center@angle@beforearrowtip%
|
|
%
|
|
\pgfmathanglebetweenpoints{\midpoint}{\beforearrowtipanchor}%
|
|
\let\mid@angle@beforearrowtip\pgfmathresult%
|
|
\addtosavedmacro\mid@angle@beforearrowtip%
|
|
%
|
|
\pgfmathanglebetweenpoints{\basepoint}{\beforearrowtipanchor}%
|
|
\let\base@angle@beforearrowtip\pgfmathresult%
|
|
\addtosavedmacro\base@angle@beforearrowtip%
|
|
%
|
|
\addtosavedmacro\arrowtipanchor%
|
|
\addtosavedmacro\beforearrowtipanchor%
|
|
\addtosavedmacro\beforearrowheadanchor%
|
|
}%
|
|
\savedanchor\centerpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
|
|
}%
|
|
\savedanchor\midpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@y{+0.5ex}%
|
|
}%
|
|
\savedanchor\basepoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y0pt%
|
|
}%
|
|
\anchor{center}{\centerpoint}%
|
|
\anchor{mid}{\midpoint}%
|
|
\anchor{mid east}{%
|
|
\getdoublearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\midpoint%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{mid west}{%
|
|
\getdoublearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\midpoint%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{base}{\basepoint}%
|
|
\anchor{base east}{%
|
|
\getdoublearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\basepoint%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{base west}{%
|
|
\getdoublearrowpoints%
|
|
\let\pgf@singlearrow@referencepoint\basepoint%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{north}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{\externalradius}}%
|
|
}%
|
|
\anchor{south}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{0pt}{-\externalradius}}%
|
|
}%
|
|
\anchor{east}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{west}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{0pt}}%
|
|
}%
|
|
\anchor{north east}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{\externalradius}}%
|
|
}%
|
|
\anchor{south east}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{\externalradius}{-\externalradius}}%
|
|
}%
|
|
\anchor{south west}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{-\externalradius}}%
|
|
}%
|
|
\anchor{north west}{%
|
|
\getdoublearrowpoints%
|
|
\csname pgf@anchor@double arrow@border\endcsname{\pgfqpoint{-\externalradius}{\externalradius}}%
|
|
}%
|
|
\anchor{before head 1}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{\beforearrowheadanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{before tip 1}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{\beforearrowtipanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{tip 1}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{\arrowtipanchor}{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after tip 1}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after head 1}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{before head 2}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{before tip 2}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{tip 2}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\arrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after tip 2}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\anchor{after head 2}{%
|
|
\getdoublearrowpoints%
|
|
\pgfmathrotatepointaround{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@x-\pgf@x%
|
|
}{\centerpoint}}%
|
|
{\centerpoint}{\rotate}%
|
|
}%
|
|
\backgroundpath{%
|
|
{%
|
|
\pgftransformshift{\centerpoint}%
|
|
\pgftransformrotate{\rotate}%
|
|
\pgfpathmoveto{\arrowtip}%
|
|
\pgfpathlineto{\beforearrowtip}%
|
|
\pgfpathlineto{\beforearrowhead}%
|
|
\pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x}%
|
|
\pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x}%
|
|
\pgfpathlineto{\arrowtip\pgf@x-\pgf@x}%
|
|
\pgfpathlineto{\beforearrowtip\pgf@x-\pgf@x\pgf@y-\pgf@y}%
|
|
\pgfpathlineto{\beforearrowhead\pgf@x-\pgf@x\pgf@y-\pgf@y}%
|
|
\pgfpathlineto{\beforearrowhead\pgf@y-\pgf@y}%
|
|
\pgfpathlineto{\beforearrowtip\pgf@y-\pgf@y}%
|
|
}%
|
|
\pgfpathclose%
|
|
}%
|
|
\anchorborder{%
|
|
\pgfsavepgf@process\externalpoint{}%
|
|
\getdoublearrowpoints%
|
|
\pgfutil@ifundefined{pgf@singlearrow@referencepoint}{\let\referencepoint\centerpoint}%
|
|
{\let\referencepoint\pgf@singlearrow@referencepoint}%
|
|
\pgfsavepgf@process\externalpoint{%
|
|
\externalpoint%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@ya\pgf@y%
|
|
\referencepoint%
|
|
\advance\pgf@x\pgf@xa%
|
|
\advance\pgf@y\pgf@ya}%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
|
|
\pgfmathsubtract@{\pgfmathresult}{\rotate}%
|
|
\ifdim\pgfmathresult pt<0pt\relax%
|
|
\pgfmathadd@{\pgfmathresult}{360}%
|
|
\fi%
|
|
\let\externalangle\pgfmathresult%
|
|
\pgf@x\externalangle pt\relax%
|
|
\ifx\referencepoint\midpoint%
|
|
\pgf@xa\mid@angle@beforearrowtip pt\relax%
|
|
\else%
|
|
\ifx\referencepoint\basepoint%
|
|
\pgf@xa\base@angle@beforearrowtip pt\relax%
|
|
\else%
|
|
\pgf@xa\center@angle@beforearrowtip pt\relax%
|
|
\fi%
|
|
\fi%
|
|
\ifdim\pgf@x<180pt\relax%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\let\firstpoint\arrowtipanchor%
|
|
\let\secondpoint\beforearrowtipanchor%
|
|
\else%
|
|
\pgf@xa-\pgf@xa%
|
|
\advance\pgf@xa180pt\relax%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\let\firstpoint\beforearrowheadanchor%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@x-\pgf@x
|
|
}{\centerpoint}}%
|
|
\else%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@x-\pgf@x
|
|
}{\centerpoint}}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\arrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgf@xa-\pgf@xa%
|
|
\advance\pgf@xa360pt\relax%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\pgf@xa-\pgf@xa%
|
|
\advance\pgf@xa540pt\relax%
|
|
\ifdim\pgf@x<\pgf@xa%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\arrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
}{\centerpoint}}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowtipanchor}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
\else%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\centerpoint}{\beforearrowheadanchor}%
|
|
\pgf@y-\pgf@y%
|
|
}{\centerpoint}}%
|
|
\fi%
|
|
\else%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfpointadd{%
|
|
\pgfpointdiff{\beforearrowtipanchor}{\centerpoint}%
|
|
\pgf@x-\pgf@x%
|
|
}{\centerpoint}}%
|
|
\let\secondpoint\arrowtipanchor%
|
|
\fi%
|
|
\fi%
|
|
\pgfsavepgf@process\firstpoint{%
|
|
\pgfmathrotatepointaround{\firstpoint}{\centerpoint}{\rotate}%
|
|
}%
|
|
\pgfsavepgf@process\secondpoint{%
|
|
\pgfmathrotatepointaround{\secondpoint}{\centerpoint}{\rotate}%
|
|
}%
|
|
\pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
|
|
{\firstpoint}{\secondpoint}%
|
|
}%
|
|
}%
|
|
|
|
|
|
|
|
|
|
%
|
|
% Internal macros for the arrow box/shape.
|
|
%
|
|
\def\pgf@lib@arrowbox@parsearrowlength#1#2#3{%
|
|
\edef\pgf@lib@temp{#3}%
|
|
\edef\pgf@lib@marshal{%
|
|
\noexpand\pgfutil@in@{none}{\pgf@lib@temp}%
|
|
}%
|
|
\pgf@lib@marshal%
|
|
\ifpgfutil@in@%
|
|
#10pt\relax%
|
|
\else%
|
|
\afterassignment\pgfmath@gobbletilpgfmath@%
|
|
\expandafter#1\pgf@lib@temp\relax\pgfmath@%
|
|
%
|
|
\edef\pgf@lib@marshal{%
|
|
\noexpand\pgfutil@in@{from center}{\pgf@lib@temp}%
|
|
}%
|
|
\pgf@lib@marshal%
|
|
\ifpgfutil@in@%
|
|
\else%
|
|
\ifdim#1>0pt\relax%
|
|
\advance#1#2\relax%
|
|
\fi%
|
|
\fi%
|
|
\fi}%
|
|
|
|
\def\pgf@lib@arrowbox@parsearrows#1{%
|
|
\pgfkeys{/pgf/.cd,%
|
|
arrow box west arrow=0pt,
|
|
arrow box east arrow=0pt,
|
|
arrow box south arrow=0pt,
|
|
arrow box north arrow=0pt
|
|
}%
|
|
\def\pgf@lib@arrowbox@extend{0pt}%
|
|
\edef\pgf@lib@temp{#1}%
|
|
\expandafter\pgf@lib@arrowbox@@parsearrows\pgf@lib@temp,\pgf@lib@arrowbox@parsearrows,
|
|
}%
|
|
|
|
|
|
\def\pgf@lib@arrowbox@@parsearrows#1,{%
|
|
\ifx\pgf@lib@arrowbox@parsearrows#1%
|
|
\let\pgflib@next\relax%
|
|
\else%
|
|
\pgfutil@in@:{#1}%
|
|
\ifpgfutil@in@%
|
|
\pgf@lib@arrowbox@getextend#1\pgf@lib%
|
|
\else%
|
|
\def\pgf@lib@arrowbox@direction{#1}%
|
|
\fi%
|
|
\edef\pgf@marshal{%
|
|
\noexpand\pgfkeys{/pgf/arrow box \pgf@lib@arrowbox@direction\space arrow=\pgf@lib@arrowbox@extend}%
|
|
}%
|
|
\pgf@marshal%
|
|
\let\pgflib@next\pgf@lib@arrowbox@@@parsearrows%
|
|
\fi%
|
|
\pgflib@next%
|
|
}%
|
|
\def\pgf@lib@arrowbox@@@parsearrows{%
|
|
\pgfutil@ifnextchar x{\relax\pgf@lib@arrowbox@@parsearrows}{\relax\pgf@lib@arrowbox@@parsearrows}%
|
|
}%
|
|
|
|
\def\pgf@lib@arrowbox@getextend#1:#2\pgf@lib{%
|
|
\def\pgf@lib@arrowbox@direction{#1}%
|
|
\def\pgf@lib@arrowbox@extend{#2}%
|
|
}%
|
|
|
|
%
|
|
% /pgf/arrow box north arrow
|
|
% /pgf/arrow box south arrow
|
|
% /pgf/arrow box west arrow
|
|
% /pgf/arrow box east arrow
|
|
% /pgf/arrow box arrows
|
|
% /pgf/arrow box shaft width
|
|
% /pgf/arrow box head extend
|
|
% /pgf/arrow box head indent
|
|
% /pgf/arrow box tip angle
|
|
%
|
|
\pgfkeys{/pgf/.cd,
|
|
arrow box west arrow/.initial=.5cm,
|
|
arrow box east arrow/.initial=.5cm,
|
|
arrow box south arrow/.initial=.5cm,
|
|
arrow box north arrow/.initial=.5cm,
|
|
arrow box shaft width/.initial=.125cm,
|
|
arrow box head extend/.initial=.125cm,
|
|
arrow box head indent/.initial=0cm,
|
|
arrow box tip angle/.initial=90,
|
|
}%
|
|
|
|
%
|
|
% arrow box/Shape.
|
|
%
|
|
\pgfdeclareshape{arrow box}{%
|
|
\saveddimen\shaftwidth{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
|
|
}%
|
|
%
|
|
% Calculate far the arrows extend from the center of the node.
|
|
%
|
|
\savedmacro\arrowboxpoints{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
|
|
\advance\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
|
|
\ifdim\pgf@x<.5\pgf@xa%
|
|
\pgf@x.5\pgf@xa%
|
|
\fi%
|
|
\pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
|
|
%
|
|
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
|
|
\advance\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y.5\dp\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
|
|
\ifdim\pgf@y<.5\pgf@ya%
|
|
\pgf@y.5\pgf@ya%
|
|
\fi%
|
|
\pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
|
|
%
|
|
\edef\halfboxwidth{\the\pgf@x}%
|
|
\edef\halfboxheight{\the\pgf@y}%
|
|
\pgfextract@process\arrowboxcorner{}%
|
|
\addtosavedmacro\arrowboxcorner%
|
|
%
|
|
\pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
|
|
{\pgfkeysvalueof{/pgf/arrow box west arrow}}%
|
|
\edef\westextend{\the\pgf@x}%
|
|
\addtosavedmacro\westextend%
|
|
%
|
|
\pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxwidth}%
|
|
{\pgfkeysvalueof{/pgf/arrow box east arrow}}%
|
|
\edef\eastextend{\the\pgf@x}%
|
|
\addtosavedmacro\eastextend%
|
|
%
|
|
\pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
|
|
{\pgfkeysvalueof{/pgf/arrow box north arrow}}%
|
|
\edef\northextend{\the\pgf@x}%
|
|
\addtosavedmacro\northextend%
|
|
%
|
|
\pgf@lib@arrowbox@parsearrowlength\pgf@x{\halfboxheight}%
|
|
{\pgfkeysvalueof{/pgf/arrow box south arrow}}%
|
|
\edef\southextend{\the\pgf@x}%
|
|
\addtosavedmacro\southextend%
|
|
}%
|
|
\saveddimen\arrowheadextend{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
|
|
}%
|
|
\saveddimen\arrowheadindent{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head indent}}%
|
|
}%
|
|
%
|
|
% Calculate the `miter' angle for the outer sep at the arrow tip.
|
|
%
|
|
\savedmacro\arrowtipmiterangle{%
|
|
\pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
|
|
\pgfmathdivide@{\pgfmathresult}{2}%
|
|
\let\arrowtipmiterangle\pgfmathresult%
|
|
}%
|
|
%
|
|
% Calculate the `miter' angle for the outer sep at the point just
|
|
% before the arrow tip.
|
|
%
|
|
\savedmacro\arrowheadangles{%
|
|
%
|
|
% Calculate the `miter' angle and its cosecant at the arrow tip...
|
|
%
|
|
\pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
|
|
\pgfmathdivide@{\pgfmathresult}{2}%
|
|
\let\arrowtipmiterangle\pgfmathresult%
|
|
\addtosavedmacro\arrowtipmiterangle%
|
|
\pgfmathcosec@{\arrowtipmiterangle}%
|
|
\let\cosecarrowtipmiterangle\pgfmathresult%
|
|
\addtosavedmacro\cosecarrowtipmiterangle%
|
|
%
|
|
% ...before the arrow head...
|
|
%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/arrow box head extend}}%
|
|
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head indent}}%
|
|
\ifdim\pgf@y=0pt\relax%
|
|
\def\pgfmathresult{90}%
|
|
\else%
|
|
\ifdim\pgf@y<0pt\relax%
|
|
\pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
|
|
\pgfmathatan@{\pgfmathresult}%
|
|
\pgfmathadd@{\pgfmathresult}{180}%
|
|
\else%
|
|
\pgfmathdivide@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
|
|
\pgfmathatan@{\pgfmathresult}%
|
|
\fi%
|
|
\fi%
|
|
\pgfmathdivide@{\pgfmathresult}{2}%
|
|
\let\beforearrowheadmiterangle\pgfmathresult%
|
|
\addtosavedmacro\beforearrowheadmiterangle%
|
|
\pgfmathcosec@{\beforearrowheadmiterangle}%
|
|
\let\cosecbeforearrowheadmiterangle\pgfmathresult%
|
|
\addtosavedmacro\cosecbeforearrowheadmiterangle%
|
|
%
|
|
% ...and before the arrow tip.
|
|
%
|
|
\pgfutil@tempdima-\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima90pt\relax%
|
|
\pgfutil@tempdimb\beforearrowheadmiterangle pt\relax%
|
|
\pgfutil@tempdimb2.0\pgfutil@tempdimb%
|
|
\advance\pgfutil@tempdimb-90pt\relax%
|
|
\advance\pgfutil@tempdima\pgfutil@tempdimb%
|
|
\divide\pgfutil@tempdima2\relax%
|
|
\edef\beforearrowtipmiterangle{\pgfmath@tonumber{\pgfutil@tempdima}}%
|
|
\addtosavedmacro\beforearrowtipmiterangle%
|
|
\pgfmathcosec@{\beforearrowtipmiterangle}%
|
|
\let\cosecbeforearrowtipmiterangle\pgfmathresult%
|
|
\addtosavedmacro\cosecbeforearrowtipmiterangle%
|
|
}%
|
|
\saveddimen\outerxsep{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
|
|
}%
|
|
\saveddimen\outerysep{%
|
|
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer ysep}}%
|
|
}%
|
|
%
|
|
% Calculate the (path) point immediately prior to an arrow tip.
|
|
%
|
|
\savedanchor\beforearrowtip{%
|
|
\pgfmathparse{\pgfkeysvalueof{/pgf/arrow box tip angle}}%
|
|
\pgfmathdivide@{\pgfmathresult}{2}%
|
|
\pgfmathcot@{\pgfmathresult}%
|
|
\let\cothalfangle\pgfmathresult%
|
|
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/arrow box shaft width}}%
|
|
\pgf@y.5\pgf@y%
|
|
\pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/arrow box head extend}}%
|
|
\pgf@y\pgf@y%
|
|
\pgf@x\cothalfangle\pgf@y%
|
|
}%
|
|
\savedanchor\centerpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y.5\ht\pgfnodeparttextbox%
|
|
\advance\pgf@y-.5\dp\pgfnodeparttextbox%
|
|
}%
|
|
\savedanchor\basepoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgf@y0pt\relax%
|
|
}%
|
|
\savedanchor\midpoint{%
|
|
\pgf@x.5\wd\pgfnodeparttextbox%
|
|
\pgfmathsetlength\pgf@y{+.5ex}%
|
|
}%
|
|
\anchor{center}{\centerpoint}%
|
|
\anchor{mid}{\midpoint}%
|
|
\anchor{mid east}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
|
|
\csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
|
|
\else%
|
|
\arrowboxcorner%
|
|
\pgf@xa\pgf@x%
|
|
\midpoint%
|
|
\advance\pgf@x\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{mid west}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\let\pgf@lib@shapes@arrowbox@referencepoint\midpoint%
|
|
\csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
|
|
\else%
|
|
\arrowboxcorner%
|
|
\pgf@xa\pgf@x%
|
|
\midpoint%
|
|
\advance\pgf@x-\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{base}{\basepoint}%
|
|
\anchor{base east}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
|
|
\csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{\eastextend}{0pt}};
|
|
\else%
|
|
\arrowboxcorner%
|
|
\pgf@xa\pgf@x%
|
|
\basepoint%
|
|
\advance\pgf@x\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{base west}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\let\pgf@lib@shapes@arrowbox@referencepoint\basepoint%
|
|
\csname pgf@anchor@arrow box@border\endcsname{\pgfqpoint{-\westextend}{0pt}};
|
|
\else%
|
|
\arrowboxcorner%
|
|
\pgf@xa\pgf@x%
|
|
\basepoint%
|
|
\advance\pgf@x-\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{north}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\csname pgf@anchor@arrow box@north arrow tip\endcsname%
|
|
\else%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner}%
|
|
\pgf@ya\pgf@y%
|
|
\centerpoint%
|
|
\pgf@y\pgf@ya%
|
|
\fi%
|
|
}%
|
|
\anchor{south}{%
|
|
\arrowboxpoints%
|
|
\ifdim\southextend>0pt\relax%
|
|
\csname pgf@anchor@arrow box@south arrow tip\endcsname%
|
|
\else%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
|
|
\pgf@ya\pgf@y%
|
|
\centerpoint%
|
|
\pgf@y\pgf@ya%
|
|
\fi%
|
|
}%
|
|
\anchor{east}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\csname pgf@anchor@arrow box@east arrow tip\endcsname%
|
|
\else%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner}%
|
|
\pgf@xa\pgf@x%
|
|
\centerpoint%
|
|
\pgf@x\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{west}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\csname pgf@anchor@arrow box@west arrow tip\endcsname%
|
|
\else%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
|
|
\pgf@xa\pgf@x%
|
|
\centerpoint%
|
|
\pgf@x\pgf@xa%
|
|
\fi%
|
|
}%
|
|
\anchor{north east}{%
|
|
\arrowboxpoints%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner}%
|
|
}%
|
|
\anchor{north west}{%
|
|
\arrowboxpoints%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x}%
|
|
}%
|
|
\anchor{south west}{%
|
|
\arrowboxpoints%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
|
|
}%
|
|
\anchor{south east}{%
|
|
\arrowboxpoints%
|
|
\pgfpointadd{\centerpoint}{\arrowboxcorner\pgf@y-\pgf@y}%
|
|
}%
|
|
\anchor{before east arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
\advance\pgf@y\outerysep\relax%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before east arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before east arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
}%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{east arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\centerpoint%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\pgf@xa\outerxsep\relax%
|
|
\pgfmathcosec@{\arrowtipmiterangle}%
|
|
\advance\pgf@x\pgfmathresult\pgf@xa%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after east arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
}%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after east arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after east arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
\advance\pgf@y\outerysep\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
%
|
|
\anchor{before west arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
\advance\pgf@y\outerysep\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before west arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\westextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before west arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\westextend\relax%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{west arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\centerpoint%
|
|
\advance\pgf@x-\westextend\relax%
|
|
\pgf@xa\outerxsep\relax%
|
|
\pgfmathcosec@{\arrowtipmiterangle}%
|
|
\advance\pgf@x-\pgfmathresult\pgf@xa%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after west arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\westextend\relax%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after west arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima180pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\westextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after west arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
\advance\pgf@y\outerysep\relax%
|
|
\pgf@x-\pgf@x%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@west\endcsname%
|
|
\fi%
|
|
}%
|
|
%
|
|
\anchor{before north arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
\advance\pgf@x-\outerxsep\relax%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before north arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima270pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before north arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-90pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@x\pgf@y%
|
|
\pgf@y-\pgf@xa%
|
|
\advance\pgf@y\northextend\relax%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{north arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\centerpoint%
|
|
\advance\pgf@y\northextend\relax%
|
|
\pgf@ya\outerysep\relax%
|
|
\pgfmathcosec@{\arrowtipmiterangle}%
|
|
\advance\pgf@y\pgfmathresult\pgf@ya%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after north arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-90pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@x\pgf@y%
|
|
\pgf@y-\pgf@xa%
|
|
\advance\pgf@y\northextend\relax%
|
|
}%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after north arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima270pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after north arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
\advance\pgf@x\outerxsep\relax%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@north\endcsname%
|
|
\fi%
|
|
}%
|
|
%
|
|
\anchor{before south arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\southextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
\advance\pgf@x\outerxsep\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before south arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima270pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{before south arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-90pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@x\pgf@y%
|
|
\pgf@y-\pgf@xa%
|
|
\advance\pgf@y\northextend\relax%
|
|
}%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{south arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\southextend>0pt\relax%
|
|
\centerpoint%
|
|
\advance\pgf@y-\southextend\relax%
|
|
\pgf@ya\outerysep\relax%
|
|
\pgfmathcosec@{\arrowtipmiterangle}%
|
|
\advance\pgf@y-\pgfmathresult\pgf@ya%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@east\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after south arrow tip}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima\arrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima\beforearrowtipmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima-90pt\relax%
|
|
\pgfutil@tempdimb\outerxsep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowtipmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@x%
|
|
\pgf@x\pgf@y%
|
|
\pgf@y-\pgf@xa%
|
|
\advance\pgf@y\northextend\relax%
|
|
}%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after south arrow head}{%
|
|
\arrowboxpoints%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\pgfpointadd{%
|
|
\arrowheadangles%
|
|
\pgfutil@tempdima-\beforearrowheadmiterangle pt\relax%
|
|
\advance\pgfutil@tempdima270pt\relax%
|
|
\pgfutil@tempdimb\outerysep\relax%
|
|
\pgfutil@tempdimb\cosecbeforearrowheadmiterangle\pgfutil@tempdimb%
|
|
\pgfqpointpolar{\pgfmath@tonumber{\pgfutil@tempdima}}{\the\pgfutil@tempdimb}%
|
|
}%
|
|
{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
\anchor{after south arrow}{%
|
|
\arrowboxpoints%
|
|
\ifdim\southextend>0pt\relax%
|
|
\pgfpointadd{\centerpoint}{%
|
|
\arrowboxcorner%
|
|
\pgf@x-\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
\advance\pgf@x-\outerxsep\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\else%
|
|
\csname pgf@anchor@arrow box@south\endcsname%
|
|
\fi%
|
|
}%
|
|
%
|
|
\backgroundpath{%
|
|
\arrowboxpoints%
|
|
\pgfextract@process\arrowboxcorner{%
|
|
\arrowboxcorner%
|
|
\pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
|
|
\pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
|
|
}%
|
|
{%
|
|
\pgftransformshift{\centerpoint}%
|
|
\pgfpathmoveto{\arrowboxcorner}%
|
|
\ifdim\eastextend>0pt\relax%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\pgf@x\eastextend\relax%
|
|
\pgf@y0pt\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@x-\pgf@x%
|
|
\advance\pgf@x\eastextend\relax%
|
|
\advance\pgf@x\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y-.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y-.5\pgf@y%
|
|
}%
|
|
\fi%
|
|
\pgfpathlineto{\arrowboxcorner\pgf@y-\pgf@y}%
|
|
\ifdim\southextend>0pt\relax%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@y\pgf@x%
|
|
\advance\pgf@y-\southextend\relax%
|
|
\advance\pgf@y-\arrowheadindent\relax%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@y%
|
|
\pgf@y\pgf@x%
|
|
\advance\pgf@y-\southextend\relax%
|
|
\pgf@x\pgf@xa%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\pgf@x0pt\relax%
|
|
\pgf@y-\southextend\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@y%
|
|
\pgf@y\pgf@x%
|
|
\advance\pgf@y-\southextend\relax%
|
|
\pgf@x-\pgf@xa%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@y\pgf@x%
|
|
\advance\pgf@y-\southextend\relax%
|
|
\advance\pgf@y-\arrowheadindent\relax%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x-.5\pgf@x%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x-.5\pgf@x%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\fi%
|
|
\pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x\pgf@y-\pgf@y}%
|
|
\ifdim\westextend>0pt\relax%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x-\pgf@x
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y-.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\advance\pgf@x-\westextend\relax%
|
|
\advance\pgf@x-\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y-.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\advance\pgf@x-\westextend\relax%
|
|
\pgf@y-\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\pgf@x-\westextend\relax%
|
|
\pgf@y0pt\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\advance\pgf@x-\westextend\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\advance\pgf@x-\westextend\relax%
|
|
\advance\pgf@x-\arrowheadindent\relax%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x-\pgf@x%
|
|
\pgf@y\shaftwidth\relax%
|
|
\pgf@y.5\pgf@y%
|
|
}%
|
|
\fi%
|
|
\pgfpathlineto{\arrowboxcorner\pgf@x-\pgf@x}%
|
|
\ifdim\northextend>0pt\relax%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x-.5\pgf@x%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x-.5\pgf@x%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@y%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\pgf@x-\pgf@xa%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\pgf@x0pt\relax%
|
|
\pgf@y\northextend\relax%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@xa\pgf@y%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\pgf@x\pgf@xa%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\beforearrowtip%
|
|
\pgf@y-\pgf@x%
|
|
\advance\pgf@y\northextend\relax%
|
|
\advance\pgf@y\arrowheadindent\relax%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\pgfpathlineto{%
|
|
\arrowboxcorner%
|
|
\pgf@x\shaftwidth\relax%
|
|
\pgf@x.5\pgf@x%
|
|
}%
|
|
\fi%
|
|
\pgfpathclose%
|
|
}%
|
|
}%
|
|
\anchorborder{%
|
|
\pgfextract@process\externalpoint{}%
|
|
\pgfutil@ifundefined{pgf@lib@shapes@arrowbox@referencepoint}%
|
|
{\let\referencepoint\centerpoint}{\let\referencepoint\pgf@lib@shapes@arrowbox@referencepoint}%
|
|
\pgfextract@process\externalpoint{%
|
|
\pgfpointadd{\referencepoint}{\externalpoint}%
|
|
}%
|
|
\pgfmathanglebetweenpoints{\centerpoint}{\externalpoint}%
|
|
\let\externalangle\pgfmathresult%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@west\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@north\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@north east\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before east arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{east arrow tip}%
|
|
\def\secondpoint{before east arrow tip}%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before east arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{before east arrow head}%
|
|
\def\secondpoint{before east arrow}%
|
|
\else%
|
|
\def\firstpoint{before east arrow}%
|
|
\def\secondpoint{north east}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after north arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after north arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{north east}%
|
|
\def\secondpoint{after north arrow}%
|
|
\else%
|
|
\def\firstpoint{after north arrow}%
|
|
\def\secondpoint{after north arrow head}%
|
|
\fi%
|
|
\else%
|
|
\def\firstpoint{after north arrow tip}%
|
|
\def\secondpoint{north arrow tip}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@north west\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before north arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{north arrow tip}%
|
|
\def\secondpoint{before north arrow tip}%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before north arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{before north head}%
|
|
\def\secondpoint{before north arrow}%
|
|
\else%
|
|
\def\firstpoint{before north arrow}%
|
|
\def\secondpoint{north west}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after west arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after west arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{north west}%
|
|
\def\secondpoint{after west arrow}%
|
|
\else%
|
|
\def\firstpoint{after west arrow}%
|
|
\def\secondpoint{after west arrow head}%
|
|
\fi%
|
|
\else%
|
|
\def\firstpoint{after west arrow tip}%
|
|
\def\secondpoint{west arrow tip}%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@south arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@south west\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before west arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{west arrow tip}%
|
|
\def\secondpoint{before west arrow tip}%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before west arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{before west arrow head}%
|
|
\def\secondpoint{before west arrow}%
|
|
\else%
|
|
\def\firstpoint{before west arrow}%
|
|
\def\secondpoint{south west}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after south arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after south arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{south west}%
|
|
\def\secondpoint{after south arrow}%
|
|
\else%
|
|
\def\firstpoint{after south arrow}%
|
|
\def\secondpoint{after south arrow head}%
|
|
\fi%
|
|
\else%
|
|
\def\firstpoint{after south arrow tip}%
|
|
\def\secondpoint{south arrow tip}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@south east\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before south arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{south arrow tip}%
|
|
\def\secondpoint{before south arrow tip}%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@before south arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{before south arrow head}%
|
|
\def\secondpoint{before south arrow}%
|
|
\else%
|
|
\def\firstpoint{before south arrow}%
|
|
\def\secondpoint{south east}%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after east arrow tip\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\pgfmathanglebetweenpoints{\referencepoint}%
|
|
{\csname pgf@anchor@arrow box@after east arrow\endcsname}%
|
|
\ifdim\externalangle pt<\pgfmathresult pt\relax%
|
|
\def\firstpoint{south east}%
|
|
\def\secondpoint{after east arrow}%
|
|
\else%
|
|
\def\firstpoint{after east arrow}%
|
|
\def\secondpoint{after east arrow head}%
|
|
\fi%
|
|
\else%
|
|
\def\firstpoint{after east arrow tip}%
|
|
\def\secondpoint{east arrow tip}%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\pgfpointintersectionoflines{\referencepoint}{\externalpoint}%
|
|
{\csname pgf@anchor@arrow box@\firstpoint\endcsname}%
|
|
{\csname pgf@anchor@arrow box@\secondpoint\endcsname}%
|
|
}%
|
|
}%
|
|
|
|
|
|
|
|
|
|
\endinput
|
|
|