diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
commit | 873660d1a83ece926fe7206288dda9c36b349c1b (patch) | |
tree | a48f77125c309a355b5d0eb58d6b24446abe9d62 /Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex | |
parent | 2939242967231097459df0fc3150fabc2f639111 (diff) |
generic 1
git-svn-id: svn://tug.org/texlive/trunk@613 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex new file mode 100644 index 00000000000..3440477499e --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgf/libraries/pgflibrarysnakes.code.tex @@ -0,0 +1,369 @@ +\ProvidesPackageRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibrarysnakes.code.tex,v 1.9 2005/10/13 10:12:31 tantau Exp $ + +% Copyright 2005 by Till Tantau <tantau@cs.tu-berlin.de>. +% +% This program can be redistributed and/or modified under the terms +% of the GNU Public License, version 2. + + +\newdimen\pgfsnakesegmentamplitude +\newdimen\pgfsnakesegmentlength +\def\pgfsnakesegmentangle{45} +\def\pgfsnakesegmentobjectlength{\pgfsnakesegmentamplitude} +\def\pgfsnakesegmentaspect{0.5} + +\pgfsnakesegmentlength=10pt +\pgfsnakesegmentamplitude=2.5pt + + + +% snake snake +% +% This snake produces a hopefully optically pleasing squiggly snake. +% +% Parameters: \pgfsnakesegmentamplitude, \pgfsnakesegmentlength + +\pgfdeclaresnake{snake}{initial} +{ + \state{initial}[switch if less than=.625\pgfsnakesegmentlength to final, + width=.3125\pgfsnakesegmentlength, + next state=down] + { + \pgfpathcurveto + {\pgfpoint{.125\pgfsnakesegmentlength}{0pt}} + {\pgfpoint{.1875\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + {\pgfpoint{.3125\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + } + \state{down}[switch if less than=.8125\pgfsnakesegmentlength to end down, + width=.5\pgfsnakesegmentlength, + next state=up] + { + \pgfpathcosine{\pgfpoint{.25\pgfsnakesegmentlength}{-\pgfsnakesegmentamplitude}} + \pgfpathsine{\pgfpoint{.25\pgfsnakesegmentlength}{-\pgfsnakesegmentamplitude}} + } + \state{up}[switch if less than=.8125\pgfsnakesegmentlength to end up, + width=.5\pgfsnakesegmentlength, + next state=down] + { + \pgfpathcosine{\pgfpoint{.25\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + \pgfpathsine{\pgfpoint{.25\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + } + \state{end down}[width=.3125\pgfsnakesegmentlength, + next state=final] + { + \pgfpathcurveto + {\pgfpoint{.125\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + {\pgfpoint{.1875\pgfsnakesegmentlength}{0pt}} + {\pgfpoint{.3125\pgfsnakesegmentlength}{0pt}} + } + \state{end up}[width=.3125\pgfsnakesegmentlength, + next state=final] + { + \pgfpathcurveto + {\pgfpoint{.125\pgfsnakesegmentlength}{-\pgfsnakesegmentamplitude}} + {\pgfpoint{.1875\pgfsnakesegmentlength}{0pt}} + {\pgfpoint{.3125\pgfsnakesegmentlength}{0pt}} + } + \state{final} + { \pgfpathlineto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} } +} + + + + +% zigzag snake +% +% Parameters: \pgfsnakesegmentamplitude, \pgfsnakesegmentlength + +\pgfdeclaresnake{zigzag}{up} +{ + \state{up}[width=.5\pgfsnakesegmentlength,% + next state=down] + { + \pgfpathlineto{\pgfpoint{.25\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{.5\pgfsnakesegmentlength}{0pt}} + } + \state{down}[width=.5\pgfsnakesegmentlength,% + next state=up] + { + \pgfpathlineto{\pgfpoint{.25\pgfsnakesegmentlength}{-\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{.5\pgfsnakesegmentlength}{0pt}} + } + \state{final} + { \pgfpathlineto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} } +} + + + +% saw snake +% +% Parameters: \pgfsnakesegmentamplitude, \pgfsnakesegmentlength + +\pgfdeclaresnake{saw}{initial} +{ + \state{initial}[width=\pgfsnakesegmentlength] + { + \pgfpathlineto{\pgfpoint{\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{\pgfsnakesegmentlength}{0pt}} + } + \state{final} + { + \pgfpathlineto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + +% coil snake +% +% Parameters: \pgfsnakesegmentamplitude, \pgfsnakesegmentlength, + +\pgfdeclaresnake{coil}{coil} +{ + \state{coil}[switch if less than=% + 1.5\pgfsnakesegmentlength+% + \pgfsnakesegmentaspect\pgfsnakesegmentamplitude+% + \pgfsnakesegmentaspect\pgfsnakesegmentamplitude to last, + width=\pgfsnakesegmentlength] + { + \pgfpathcurveto + {\pgfpoint@oncoil{0 }{ 0.555}{1}} + {\pgfpoint@oncoil{0.445}{ 1 }{2}} + {\pgfpoint@oncoil{1 }{ 1 }{3}} + \pgfpathcurveto + {\pgfpoint@oncoil{1.555}{ 1 }{4}} + {\pgfpoint@oncoil{2 }{ 0.555}{5}} + {\pgfpoint@oncoil{2 }{ 0 }{6}} + \pgfpathcurveto + {\pgfpoint@oncoil{2 }{-0.555}{7}} + {\pgfpoint@oncoil{1.555}{-1 }{8}} + {\pgfpoint@oncoil{1 }{-1 }{9}} + \pgfpathcurveto + {\pgfpoint@oncoil{0.445}{-1 }{10}} + {\pgfpoint@oncoil{0 }{-0.555}{11}} + {\pgfpoint@oncoil{0 }{ 0 }{12}} + } + \state{last}[width=.5\pgfsnakesegmentlength+% + \pgfsnakesegmentaspect\pgfsnakesegmentamplitude+% + \pgfsnakesegmentaspect\pgfsnakesegmentamplitude,next state=final] + { + \pgfpathcurveto + {\pgfpoint@oncoil{0 }{ 0.555}{1}} + {\pgfpoint@oncoil{0.445}{ 1 }{2}} + {\pgfpoint@oncoil{1 }{ 1 }{3}} + \pgfpathcurveto + {\pgfpoint@oncoil{1.555}{ 1 }{4}} + {\pgfpoint@oncoil{2 }{ 0.555}{5}} + {\pgfpoint@oncoil{2 }{ 0 }{6}} + } + \state{final} + { + \pgfpathlineto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + +\def\pgfpoint@oncoil#1#2#3{% + \pgf@x=#1\pgfsnakesegmentamplitude% + \pgf@x=\pgfsnakesegmentaspect\pgf@x% + \pgf@y=#2\pgfsnakesegmentamplitude% + \pgf@xa=0.083333333333\pgfsnakesegmentlength% + \advance\pgf@x by#3\pgf@xa% +} + + +% bumps snake +% +% Parameters: \pgfsnakesegmentamplitude, \pgfsnakesegmentlength + +\pgfdeclaresnake{bumps}{initial} +{ + \state{initial}[width=.5\pgfsnakesegmentlength] + { + \pgfpathcurveto + {\pgfpoint{0pt}{.555\pgfsnakesegmentamplitude}} + {\pgfpoint{0.11125\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + {\pgfpoint{.25\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + \pgfpathcurveto + {\pgfpoint{.38875\pgfsnakesegmentlength}{\pgfsnakesegmentamplitude}} + {\pgfpoint{.5\pgfsnakesegmentlength}{.5\pgfsnakesegmentamplitude}} + {\pgfpoint{.5\pgfsnakesegmentlength}{0\pgfsnakesegmentamplitude}} + } + \state{final} + { + \pgfpathlineto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + + +% expanding waves snake +% +% Parameters: \pgfsnakesegmentangle, \pgfsnakesegmentlength + +\pgfdeclaresnake{expanding waves}{initial} +{ + \state{initial}[width=\pgfsnakesegmentlength,next state=wave] + {} + + \state{wave}[switch if less than=\pgfsnakesegmentlength to last, + width=\pgfsnakesegmentlength] + { + \pgfpathmoveto{ + \pgfpointadd + {\pgfpoint{-\pgfsnakecompleteddistance}{0pt}}% + {\pgfpointpolar{\pgfsnakesegmentangle}{\pgfsnakecompleteddistance}}}% + \pgfpatharc{\pgfsnakesegmentangle}{-\pgfsnakesegmentangle}{\pgfsnakecompleteddistance}% + } + \state{last}[width=0pt,next state=final] + { + \pgfpathmoveto{ + \pgfpointadd + {\pgfpoint{-\pgfsnakecompleteddistance}{0pt}}% + {\pgfpointpolar{\pgfsnakesegmentangle}{\pgfsnakecompleteddistance}}}% + \pgfpatharc{\pgfsnakesegmentangle}{-\pgfsnakesegmentangle}{\pgfsnakecompleteddistance}% + } + \state{final} + { + \pgfpathmoveto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + + +% waves snake +% +% Parameters: \pgfsnakesegmentangle, \pgfsnakesegmentlength + +\pgfdeclaresnake{waves}{wave} +{ + \state{wave}[width=\pgfsnakesegmentlength] + { + \pgftransformxshift{\pgfsnakesegmentlength} + \pgfpathmoveto{ + \pgfpointadd + {\pgfpoint{-\pgfsnakesegmentobjectlength}{0pt}}% + {\pgfpointpolar{\pgfsnakesegmentangle}{\pgfsnakesegmentobjectlength}}}% + \pgfpatharc{\pgfsnakesegmentangle}{-\pgfsnakesegmentangle}{\pgfsnakesegmentobjectlength}% + } + \state{final} + { + \pgfpathmoveto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + +% triangle snakes +% +% Parameters: \pgfsnakesegmentlength, \pgfsnakeobjectsize, \pgfsnakesegmentamplitude + +\pgfdeclaresnake{triangles}{triangle} +{ + \state{triangle}[switch if less than=\pgfsnakesegmentlength to last, + width=\pgfsnakesegmentlength] + { + \pgfpathmoveto{\pgfpoint{0pt}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{\pgfsnakesegmentobjectlength}{0pt}} + \pgfpathlineto{\pgfpoint{0pt}{-\pgfsnakesegmentamplitude}} + \pgfpathclose + } + \state{last}[width=\pgfsnakesegmentobjectlength,next state=final] + { + \pgfpathmoveto{\pgfpoint{0pt}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{\pgfsnakesegmentobjectlength}{0pt}} + \pgfpathlineto{\pgfpoint{0pt}{-\pgfsnakesegmentamplitude}} + \pgfpathclose + } + \state{final} + { + \pgfpathmoveto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + + +% ticks snakes +% +% Parameters: \pgfsnakesegmentlength, \pgfsnakesegmentamplitude + +\pgfdeclaresnake{ticks}{ticks} +{ + \state{ticks}[width=\pgfsnakesegmentlength] + { + \pgfpathmoveto{\pgfpoint{0pt}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{0pt}{-\pgfsnakesegmentamplitude}} + } + \state{final} + { + \pgfpathmoveto{\pgfpoint{0pt}{\pgfsnakesegmentamplitude}} + \pgfpathlineto{\pgfpoint{0pt}{-\pgfsnakesegmentamplitude}} + \pgfpathmoveto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + +% border snake +% +% Parameters: \pgfsnakesegmentlength, \pgfsnakesegmentamplitude, \pgfsnakesegmentangle + +\pgfdeclaresnake{border}{tick} +{ + \state{tick}[switch if less than=\pgfsnakesegmentlength to last, + width=\pgfsnakesegmentlength] + { + \pgfpathmoveto{\pgfpointorigin} + \pgfpathlineto{\pgfpointpolar{\pgfsnakesegmentangle}{\pgfsnakesegmentamplitude}} + } + \state{last}[width=\pgfsnakesegmentamplitude,next state=final] + { + \pgfpathmoveto{\pgfpointorigin} + \pgfpathlineto{\pgfpointpolar{\pgfsnakesegmentangle}{\pgfsnakesegmentamplitude}} + } + \state{final} + { + \pgfpathmoveto{\pgfpoint{\pgfsnakeremainingdistance}{0pt}} + } +} + + + + +% brace snakes +% +% Parameters: \pgfsnakesegmentamplitude + +\pgfdeclaresnake{brace}{brace} +{ + \state{brace}[width=\pgfsnakeremainingdistance,next state=final] + { + \pgfpathmoveto{\pgfpoint{0pt}{0pt}} + \pgfpathcurveto + {\pgfpoint{.15\pgfsnakesegmentamplitude}{.3\pgfsnakesegmentamplitude}} + {\pgfpoint{.5\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + {\pgfpoint{\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + { + \pgftransformxshift{\pgfsnakesegmentaspect\pgfsnakeremainingdistance} + \pgfpathlineto{\pgfpoint{-\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + \pgfpathcurveto + {\pgfpoint{-.5\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + {\pgfpoint{-.15\pgfsnakesegmentamplitude}{.7\pgfsnakesegmentamplitude}} + {\pgfpoint{0\pgfsnakesegmentamplitude}{1\pgfsnakesegmentamplitude}} + \pgfpathcurveto + {\pgfpoint{.15\pgfsnakesegmentamplitude}{.7\pgfsnakesegmentamplitude}} + {\pgfpoint{.5\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + {\pgfpoint{\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + } + { + \pgftransformxshift{\pgfsnakeremainingdistance} + \pgfpathlineto{\pgfpoint{-\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + \pgfpathcurveto + {\pgfpoint{-.5\pgfsnakesegmentamplitude}{.5\pgfsnakesegmentamplitude}} + {\pgfpoint{-.15\pgfsnakesegmentamplitude}{.3\pgfsnakesegmentamplitude}} + {\pgfpoint{0pt}{0pt}} + } + } + \state{final} + {} +} + + + +\endinput |