From 4fbb9d78d05c747057de908c88aa4d42379fc24e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 16 Jan 2021 22:26:49 +0000 Subject: tikz-bbox (16jan21) git-svn-id: svn://tug.org/texlive/trunk@57444 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/tikz-bbox/pgflibrarybbox.code.tex | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/tikz-bbox/pgflibrarybbox.code.tex (limited to 'Master/texmf-dist/tex/latex/tikz-bbox') diff --git a/Master/texmf-dist/tex/latex/tikz-bbox/pgflibrarybbox.code.tex b/Master/texmf-dist/tex/latex/tikz-bbox/pgflibrarybbox.code.tex new file mode 100644 index 00000000000..a9e887f809e --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-bbox/pgflibrarybbox.code.tex @@ -0,0 +1,120 @@ +% Copyright 2021 by marmotghost +% v0.1 +% +% This file may be distributed and/or modified under the +% LaTeX project public license (LPPL), version 1.3c +% see +% https://www.latex-project.org/lppl/lppl-1-3c/ + + +\usepgflibrary{fpu} +\global\let\pgf@bbox@lt@curveto@normal\pgf@lt@curveto +\global\let\pgf@bbox@nlt@curveto@normal\pgf@nlt@curveto + +\pgfqkeys{/pgf}{bezier bounding box/.is if=pgf@bbox@switch@} + + +\def\pgf@bbox@switch@false{% + \let\pgf@lt@curveto \pgf@bbox@lt@curveto@normal + \let\pgf@nlt@curveto\pgf@bbox@nlt@curveto@normal +} + +\def\pgf@bbox@switch@true{% + \let\pgf@lt@curveto \pgf@bbox@curveto + \let\pgf@nlt@curveto\pgf@bbox@curveto +} +\def\pgf@bbox@curveto#1#2#3#4#5#6{% +\begingroup +\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}% + % extrema in x + % first discriminant d1, must be \ne 0 + \pgfmathsetmacro{\pgf@temp@a}{(\pgf@path@lastx)-(#5)-3*(#1)+3*(#3)}% + \pgfmathtruncatemacro{\pgf@temp@c}{(abs(\pgf@temp@a)>0.1?1:0)}% + \ifnum\pgf@temp@c=1\relax + % second discriminant d2, must be \ge 0 + \pgfmathsetmacro{\pgf@temp@b}{(\pgf@path@lastx)*(#5)-(#5)*(#1)+(#1)*(#1)-(\pgf@path@lastx)*(#3)-(#1)*(#3)+(#3)*(#3)}% + \pgfmathtruncatemacro{\pgf@temp@c}{sign(\pgf@temp@b)}% + \ifnum\pgf@temp@c<0 + \else + \pgfmathsetmacro{\pgf@temp@b}{sqrt(abs(\pgf@temp@b))}% + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((\pgf@path@lastx)-2*(#1)+(#3)-\pgf@temp@b)/\pgf@temp@a))}% + \pgfmathparse{(\pgf@path@lastx)*pow((1-\pgf@temp@c),3)+3*(#1)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#3)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#5)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgfutil@tempdimb}{\pgf@path@lasty}% + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((\pgf@path@lastx)-2*(#1)+(#3)+\pgf@temp@b)/\pgf@temp@a))}% + \pgfmathparse{(\pgf@path@lastx)*pow((1-\pgf@temp@c),3)+3*(#1)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#3)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#5)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgfutil@tempdimb}{\pgf@path@lasty}% + \fi + \else + % third discriminant d3, must be \ne 0 + \pgfmathsetmacro{\pgf@temp@b}{abs((#5)+(#1)-2*(#3))}% + \pgfmathtruncatemacro{\pgf@temp@c}{(abs(\pgf@temp@b)>0.1?1:0)}% + \ifnum\pgf@temp@c=1\relax + \pgfmathsetmacro{\pgf@temp@c}{((#5)+2*(#1)-3*(#3))/((#5)+(#1)-2*(#3))}% + \pgfmathparse{(\pgf@path@lastx)*pow((1-\pgf@temp@c),3)+3*(#1)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#3)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#5)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgfutil@tempdimb}{\pgf@path@lasty}% + \fi + \fi + % 0/0 + \pgfmathsetmacro{\pgf@temp@a}{(#5)+(#1)-2*(#3)}% + \pgfmathtruncatemacro{\pgf@temp@b}{(abs(\pgf@temp@a)>0.1?1:0)}% + \ifnum\pgf@temp@b=1\relax + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((#5)+2*(#1)-3*(#3))/(2*\pgf@temp@a)))}% + \else + \pgfmathsetmacro{\pgf@temp@c}{0.5}% + \fi + \pgfmathparse{(\pgf@path@lastx)*pow((1-\pgf@temp@c),3)+3*(#1)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#3)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#5)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgfutil@tempdimb}{\pgf@path@lasty}% +% +% y code + % first discriminant d1, must be \ne 0 + \pgfmathsetmacro{\pgf@temp@a}{(\pgf@path@lasty)-(#6)-3*(#2)+3*(#4)}% + \pgfmathtruncatemacro{\pgf@temp@c}{(abs(\pgf@temp@a)>0.1?1:0)}% + \ifnum\pgf@temp@c=1\relax + % second discriminant d2, must be \ge 0 + \pgfmathsetmacro{\pgf@temp@b}{(\pgf@path@lasty)*(#6)-(#6)*(#2)+(#2)*(#2)-(\pgf@path@lasty)*(#4)-(#2)*(#4)+(#4)*(#4)}% + \pgfmathtruncatemacro{\pgf@temp@c}{sign(\pgf@temp@b)}% + \ifnum\pgf@temp@c<0 + \else + \pgfmathsetmacro{\pgf@temp@b}{sqrt(abs(\pgf@temp@b))}% + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((\pgf@path@lasty)-2*(#2)+(#4)-\pgf@temp@b)/\pgf@temp@a))}% + \pgfmathparse{(\pgf@path@lasty)*pow((1-\pgf@temp@c),3)+3*(#2)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#4)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#6)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgf@path@lastx}{\pgfutil@tempdimb}% + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((\pgf@path@lasty)-2*(#2)+(#4)+\pgf@temp@b)/\pgf@temp@a))}% + \pgfmathparse{(\pgf@path@lasty)*pow((1-\pgf@temp@c),3)+3*(#2)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#4)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#6)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgf@path@lastx}{\pgfutil@tempdimb}% + \fi + \else + % third discriminant d3, must be \ne 0 + \pgfmathsetmacro{\pgf@temp@b}{abs((#6)+(#2)-2*(#4))}% + \pgfmathtruncatemacro{\pgf@temp@c}{(abs(\pgf@temp@b)>0.1?1:0)}% + \ifnum\pgf@temp@c=1\relax + \pgfmathsetmacro{\pgf@temp@c}{((#6)+2*(#2)-3*(#4))/((#6)+(#2)-2*(#4))}% + \pgfmathparse{(\pgf@path@lasty)*pow((1-\pgf@temp@c),3)+3*(#2)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#4)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#6)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgf@path@lastx}{\pgfutil@tempdimb}% + \fi + \fi + % 0/0 + \pgfmathsetmacro{\pgf@temp@a}{(#6)+(#2)-2*(#4)}% + \pgfmathtruncatemacro{\pgf@temp@b}{(abs(\pgf@temp@a)>0.1?1:0)}% + \ifnum\pgf@temp@b=1\relax + \pgfmathsetmacro{\pgf@temp@c}{max(0,min(1,((#6)+2*(#2)-3*(#4))/(2*\pgf@temp@a)))}% + \else + \pgfmathsetmacro{\pgf@temp@c}{0.5}% + \fi + \pgfmathparse{(\pgf@path@lasty)*pow((1-\pgf@temp@c),3)+3*(#2)*pow((1-\pgf@temp@c),2)*\pgf@temp@c+3*(#4)*(1-\pgf@temp@c)*\pgf@temp@c*\pgf@temp@c+(#6)*\pgf@temp@c*\pgf@temp@c*\pgf@temp@c}% + \pgfutil@tempdimb=\pgfmathresult pt\relax% + \pgf@protocolsizes{\pgf@path@lastx}{\pgfutil@tempdimb}% +% + \pgf@protocolsizes{\pgf@path@lastx}{\pgf@path@lasty}% + \pgf@protocolsizes{#5}{#6}% + \endgroup + \pgfsyssoftpath@curveto{\the#1}{\the#2}{\the#3}{\the#4}{\the#5}{\the#6}% +} +\endinput -- cgit v1.2.3