Current File : //usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex |
% Copyright 2018 by Till Tantau
%
% 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{tikzlibraryfit.code.tex}
\pgfkeys{/tikz/fit/.code=\tikz@lib@fit{#1},
/tikz/rotate fit/.code=\def\tikz@lib@fit@rotate{#1}\pgfkeysalso{/tikz/rotate=#1}
}%
\def\tikz@lib@fit@rotate{0}%
\def\tikz@lib@fit#1{%
\pgf@xb=-16000pt\relax%
\pgf@xa=16000pt\relax%
\pgf@yb=-16000pt\relax%
\pgf@ya=16000pt\relax%
%
\pgfmathsetmacro\tikz@lib@fit@rotate{\tikz@lib@fit@rotate}%
%
% Now iterate over the coordinates
\tikz@lib@fit@scan#1\pgf@stop%
% Now, let's see what has happened
\ifdim\pgf@xa>\pgf@xa%
% Nothing... Ok, let's just ignore this.
\else%
% Ok, compute center and width and height
\pgf@x=\pgf@xb%
\advance\pgf@x by-\pgf@xa%
\pgf@y=\pgf@yb%
\advance\pgf@y by-\pgf@ya%
\advance\pgf@xa by.5\pgf@x%
\advance\pgf@ya by.5\pgf@y%
\ifdim\tikz@lib@fit@rotate pt=0pt\relax%
{%
\pgftransforminvert%
\pgf@pos@transform{\pgf@xa}{\pgf@ya}%
\global\pgf@xa\pgf@xa
\global\pgf@ya\pgf@ya
}
\else%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
{%
\pgf@xc=\pgf@xa%
\pgf@yc=\pgf@ya%
\pgftransforminvert%
\pgf@pos@transform{\pgf@xc}{\pgf@yc}%
\pgftransformreset%
\pgftransformrotate{\tikz@lib@fit@rotate}%
\pgf@pos@transform{\pgf@xc}{\pgf@yc}%
\global\pgf@x=\pgf@xc%
\global\pgf@y=\pgf@yc%
}%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\pgf@x=\pgf@xc%
\pgf@y=\pgf@yc%
\fi%
\edef\tikz@node@at{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
\pgfkeysalso{/tikz/anchor=center,/tikz/text badly centered}%
\pgfkeysalso{/tikz/text width/.expanded=\the\pgf@x}%
\pgf@x=\pgf@y%
\pgf@y=.5\pgf@y%
\pgfkeysalso{
/tikz/transform shape=false,
/tikz/text height/.expanded=\the\pgf@y-.5\dp\pgfnodeparttextbox,
/tikz/text depth/.expanded=\the\pgf@x-\noexpand\the\ht\pgfnodeparttextbox}%
\pgfkeysalso{every fit/.try}%
\fi%
}%
\def\tikz@lib@fit@scan{%
\pgfutil@ifnextchar\pgf@stop{\pgfutil@gobble}
{\tikz@scan@one@point\tikz@lib@fit@scan@handle}}%
\def\tikz@lib@fit@scan@handle#1{%
\iftikz@shapeborder%
% Ok, fit all four external anchors, if they exist
\tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{west}}%
\tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{east}}%
\tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{north}}%
\tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{south}}%
\else%
\tikz@lib@fit@adjust{#1}%
\fi%
\tikz@lib@fit@scan%
}%
\def\tikz@lib@fit@adjust#1{%
\ifdim\tikz@lib@fit@rotate pt=0pt\relax%
\pgf@process{\pgfpointtransformed{#1}}%
\else%
{%
\pgf@process{\pgfpointtransformed{#1}}%
\pgf@xc=\pgf@x%
\pgf@yc=\pgf@y%
\pgfgettransform\tikz@lib@fit@transform%
\pgftransforminvert%
\pgf@pos@transform{\pgf@xc}{\pgf@yc}%
\pgftransformreset%
\pgftransformrotate{-\tikz@lib@fit@rotate}%
\pgf@pos@transform{\pgf@xc}{\pgf@yc}%
\pgfsettransform\tikz@lib@fit@transform%
\pgf@pos@transform{\pgf@xc}{\pgf@yc}%
\global\pgf@x=\pgf@xc%
\global\pgf@y=\pgf@yc%
}%
\fi%
\ifdim\pgf@x<\pgf@xa%
\pgf@xa=\pgf@x%
\fi%
\ifdim\pgf@y<\pgf@ya%
\pgf@ya=\pgf@y%
\fi%
\ifdim\pgf@x>\pgf@xb%
\pgf@xb=\pgf@x%
\fi%
\ifdim\pgf@y>\pgf@yb%
\pgf@yb=\pgf@y%
\fi%
}%
\endinput