diff options
Diffstat (limited to 'graphics/pgf/base/tex/generic/libraries/decorations/pgflibrarydecorations.pathreplacing.code.tex')
-rw-r--r-- | graphics/pgf/base/tex/generic/libraries/decorations/pgflibrarydecorations.pathreplacing.code.tex | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/graphics/pgf/base/tex/generic/libraries/decorations/pgflibrarydecorations.pathreplacing.code.tex b/graphics/pgf/base/tex/generic/libraries/decorations/pgflibrarydecorations.pathreplacing.code.tex new file mode 100644 index 0000000000..f028ec6c37 --- /dev/null +++ b/graphics/pgf/base/tex/generic/libraries/decorations/pgflibrarydecorations.pathreplacing.code.tex @@ -0,0 +1,240 @@ +% Copyright 2018 by Mark Wibrow and 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. + +\usepgfmodule{decorations}% + + +% +% Path replacing decorations +% +% These decorations change the path by replacing it by another path. +% For instance, a line in the path might be replaced by small +% ticks or unconnected curves or crosses. Applying a chopping +% decoration to a path means that the path can no longer be used for +% filling in the original manner. +% + + + +% +% +% Kind 1: Path chopping with open subpaths +% +% + + +% ticks decoration +% +% Parameters: \pgfdecorationsegmentlength, \pgfdecorationsegmentamplitude + +\pgfdeclaredecoration{ticks}{ticks} +{% + \state{ticks}[width=+\pgfdecorationsegmentlength] + { + \pgfpathmoveto{\pgfqpoint{0pt}{\pgfdecorationsegmentamplitude}} + \pgfpathlineto{\pgfqpoint{0pt}{-\pgfdecorationsegmentamplitude}} + }% + \state{final} + { + \pgfpathmoveto{\pgfqpoint{0pt}{\pgfdecorationsegmentamplitude}} + \pgfpathlineto{\pgfqpoint{0pt}{-\pgfdecorationsegmentamplitude}} + \pgfpathmoveto{\pgfpointdecoratedpathlast} + }% +}% + + + +% expanding waves decoration +% +% Parameters: \pgfdecorationsegmentangle, \pgfdecorationsegmentlength + +\pgfdeclaredecoration{expanding waves}{initial} +{% + \state{initial}[width=+\pgfdecorationsegmentlength,next state=wave] + {}% + + \state{wave}[switch if less than=+\pgfdecorationsegmentlength to last, + width=+\pgfdecorationsegmentlength] + { + \pgfpathmoveto{ + \pgfpointadd + {\pgfqpoint{-\pgfdecoratedcompleteddistance}{0pt}}% + {\pgfpointpolar{\pgfdecorationsegmentangle}{+\pgfdecoratedcompleteddistance}}}% + \pgfpatharc{\pgfdecorationsegmentangle}{-\pgfdecorationsegmentangle}{+\pgfdecoratedcompleteddistance}% + }% + \state{last}[width=+0pt,next state=final] + { + \pgfpathmoveto{ + \pgfpointadd + {\pgfqpoint{-\pgfdecoratedcompleteddistance}{0pt}}% + {\pgfpointpolar{\pgfdecorationsegmentangle}{+\pgfdecoratedcompleteddistance}}}% + \pgfpatharc{\pgfdecorationsegmentangle}{-\pgfdecorationsegmentangle}{+\pgfdecoratedcompleteddistance}% + }% + \state{final} + { + \pgfpathmoveto{\pgfpointdecoratedpathlast} + }% +}% + + + +% waves decoration + +\pgfdeclaredecoration{waves}{wave} +{% + \state{wave}[width=\pgfdecorationsegmentlength] + { + \pgftransformxshift{+\pgfdecorationsegmentlength} + \pgfpathmoveto{ + \pgfpointadd + {\pgfqpoint{-\pgfkeysvalueof{/pgf/decoration/start radius}}{0pt}}% + {\pgfpointpolar{\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}}}% + \pgfpatharc{\pgfdecorationsegmentangle}{-\pgfdecorationsegmentangle}{\pgfkeysvalueof{/pgf/decoration/start radius}}% + }% + \state{final} + { + \pgfpathmoveto{\pgfpointdecoratedpathlast} + }% +}% + + + +% border decoration +% +% Parameters: \pgfdecorationsegmentlength, \pgfdecorationsegmentamplitude, \pgfdecorationsegmentangle + +\pgfdeclaredecoration{border}{tick} +{% + \state{tick}[switch if less than=+\pgfdecorationsegmentlength to last, + width=+\pgfdecorationsegmentlength] + { + \pgfpathmoveto{\pgfpointorigin} + \pgfpathlineto{\pgfpointpolar{\pgfdecorationsegmentangle}{+\pgfdecorationsegmentamplitude}} + }% + \state{last}[width=+\pgfdecorationsegmentamplitude,next state=final] + { + \pgfpathmoveto{\pgfpointorigin} + \pgfpathlineto{\pgfpointpolar{\pgfdecorationsegmentangle}{+\pgfdecorationsegmentamplitude}} + }% + \state{final} + { + \pgfpathmoveto{\pgfpointdecoratedpathlast} + }% +}% + + + + + + +% brace decorations +% +% Parameters: \pgfdecorationsegmentamplitude + +\pgfdeclaredecoration{brace}{brace} +{% + \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final] + { + \pgf@yc=\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance + \ifdim2\pgfdecorationsegmentamplitude>\pgf@yc + \pgf@yc=0.5\pgf@yc + \else + \pgf@yc=\pgfdecorationsegmentamplitude + \fi + \pgf@xc=\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance + \advance\pgf@xc-\pgfdecoratedremainingdistance + \ifdim-2\pgfdecorationsegmentamplitude<\pgf@xc + \pgf@xc=-0.5\pgf@xc + \else + \pgf@xc=\pgfdecorationsegmentamplitude + \fi + \pgfpathmoveto{\pgfpointorigin} + \pgfpathcurveto + {\pgfqpoint{.15\pgf@yc}{.3\pgfdecorationsegmentamplitude}} + {\pgfqpoint{.5\pgf@yc}{.5\pgfdecorationsegmentamplitude}} + {\pgfqpoint{\pgf@yc}{.5\pgfdecorationsegmentamplitude}} + { + \pgftransformxshift{+\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance} + \pgfpathlineto{\pgfqpoint{-\pgf@yc}{.5\pgfdecorationsegmentamplitude}} + \pgfpathcurveto + {\pgfqpoint{-.5\pgf@yc}{.5\pgfdecorationsegmentamplitude}} + {\pgfqpoint{-.15\pgf@yc}{.7\pgfdecorationsegmentamplitude}} + {\pgfqpoint{0\pgf@yc}{1\pgfdecorationsegmentamplitude}} + \pgfpathcurveto + {\pgfqpoint{.15\pgf@xc}{.7\pgfdecorationsegmentamplitude}} + {\pgfqpoint{.5\pgf@xc}{.5\pgfdecorationsegmentamplitude}} + {\pgfqpoint{\pgf@xc}{.5\pgfdecorationsegmentamplitude}} + } + { + \pgftransformxshift{+\pgfdecoratedremainingdistance} + \pgfpathlineto{\pgfqpoint{-\pgf@xc}{.5\pgfdecorationsegmentamplitude}} + \pgfpathcurveto + {\pgfqpoint{-.5\pgf@xc}{.5\pgfdecorationsegmentamplitude}} + {\pgfqpoint{-.15\pgf@xc}{.3\pgfdecorationsegmentamplitude}} + {\pgfqpoint{0pt}{0pt}} + } + }% + \state{final} + {}% +}% + + + + +% show path construction decoration +% +\pgfdeclaredecoration{show path construction}{check for moveto}{% + \state{check for moveto}[width=0pt, next state=segment, + persistent precomputation={% + \begingroup% + \pgf@lib@decoraions@installinputsegmentpoints% + \ifx\pgfdecorationpreviousinputsegment\pgfdecorationinputsegmentmoveto% + \pgfdecoratedinputsegmentmovetocode% + \fi% + \endgroup% + }]{}% + \state{segment}[width=\pgfdecoratedinputsegmentremainingdistance, next state=check for moveto, + persistent precomputation={% + \begingroup% + \pgf@lib@decoraions@installinputsegmentpoints% + \csname pgfdecoratedinputsegment\pgfdecorationcurrentinputsegment code\endcsname% + \endgroup% + }]{}% + \state{final}{% + \egroup% + \begingroup% + \pgf@lib@decoraions@installinputsegmentpoints% + \csname pgfdecoratedinputsegment\pgfdecorationcurrentinputsegment code\endcsname% + \endgroup% + \bgroup% + }% +}% + +\pgfkeys{ + /pgf/decoration/.cd, + moveto code/.code=\def\pgfdecoratedinputsegmentmovetocode{#1}, + lineto code/.code=\def\pgfdecoratedinputsegmentlinetocode{#1}, + curveto code/.code=\def\pgfdecoratedinputsegmentcurvetocode{#1}, + closepath code/.code=\def\pgfdecoratedinputsegmentclosepathcode{#1} +}% + +\let\pgfdecoratedinputsegmentmovetocode\pgfutil@empty% +\let\pgfdecoratedinputsegmentlinetocode\pgfutil@empty% +\let\pgfdecoratedinputsegmentcurvetocode\pgfutil@empty% +\let\pgfdecoratedinputsegmentclosepathcode\pgfutil@empty% + +\def\pgf@lib@decoraions@installinputsegmentpoints{% + \let\pgfpointdecoratedinputsegmentfirst\pgf@decorate@inputsegment@first% + \let\pgfpointdecoratedinputsegmentlast\pgf@decorate@inputsegment@last% + \let\pgfpointdecoratedinputsegmentsupporta\pgf@decorate@inputsegment@supporta% + \let\pgfpointdecoratedinputsegmentsupportb\pgf@decorate@inputsegment@supportb% +}% + + +\endinput |