summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-10-29 00:31:31 +0000
committerKarl Berry <karl@freefriends.org>2010-10-29 00:31:31 +0000
commit6bc1f5497cfb2f56d65c80a4c36ea3bad6dc046c (patch)
treef7751da75030fb1e06653eeb44e579fcee09c65f /Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
parented0c7c756e441b2d2ba3633da233fc24361ac0d3 (diff)
pgf 2.10 (28oct10)
git-svn-id: svn://tug.org/texlive/trunk@20236 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex156
1 files changed, 156 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex b/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
new file mode 100644
index 00000000000..dd842033fc8
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
@@ -0,0 +1,156 @@
+% Copyright 2008 by Mark Wibrow
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\usepgflibrary{intersections}
+
+\let\tikz@intersect@def=\def
+
+\pgfkeys{%
+ /tikz/name path global/.code={%
+ % it might have been more efficient to eliminate the storage macro
+ % \tikz@intersect@namedpaths. But I keep it maintain compatibility
+ % with mixed occurances of local/global names.
+ \let\tikz@intersect@def=\gdef
+ \pgfkeys{/tikz/name path={#1}}%
+ },
+ /tikz/name path local/.code={%
+ \let\tikz@intersect@def=\def
+ \pgfkeys{/tikz/name path={#1}}%
+ },
+ /tikz/name path/.code={%
+ \tikz@addmode{%
+ \pgfsyssoftpath@getcurrentpath\tikz@intersect@temppath%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \pgfutil@ifundefined{tikz@intersect@path@name@#1}{}%
+ {%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@@temppath%
+ \expandafter\expandafter\expandafter{\csname tikz@intersect@path@name@#1\endcsname}%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@temppath%
+ \expandafter\expandafter\expandafter{\expandafter\tikz@intersect@temppath\tikz@intersect@temppath}%
+ }%
+ \fi%
+ \tikz@intersect@addto@path@names{#1}%
+ }%
+ }
+}
+
+\def\tikz@intersect@addto@path@names#1{%
+ % FIXME : I have the impression that something is not correct
+ % here... the \tikz@intersect@def is not used correctly!
+ % if I am not mistaken, the \tikz@intersect@def will NOT be
+ % invoked until \tikz@intersect@namedpaths. CHECK IT
+ % It seems it works, but only partially.
+ \def\tikz@marshal{\expandafter\tikz@intersect@def\csname tikz@intersect@path@name@#1\endcsname}%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@marshal%
+ \expandafter\expandafter\expandafter{\expandafter\tikz@marshal\expandafter{\tikz@intersect@temppath}}%
+ \ifx\tikz@intersect@def\gdef
+ % This here is to *ensure* that the \gdef is invoked.
+ %
+ % I think this solves the problem.
+ %
+ % Please revise this routine such that it works better.
+ \tikz@marshal
+ \fi
+ \expandafter\pgfutil@g@addto@macro\expandafter\tikz@intersect@namedpaths\expandafter{\tikz@marshal}%
+}
+
+
+\let\tikz@finish@orig=\tikz@finish
+\def\tikz@finish{%
+ \tikz@finish@orig%
+ \tikz@intersect@finish%
+}
+
+\def\tikz@intersect@finish{%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \let\tikz@intersect@namedpaths=\pgfutil@empty%
+ \fi%
+}
+
+\let\tikz@intersect@namedpaths=\pgfutil@empty
+\let\tikz@intersect@path@a=\pgfutil@empty
+\let\tikz@intersect@path@b=\pgfutil@empty
+\let\tikz@intersect@name=\pgfutil@empty
+\let\tikz@intersect@total=\pgfutil@empty
+
+\tikzset{
+ name intersections/.code={%
+ \tikzset{/tikz/intersection/.cd,
+ by=,
+ #1}%
+ \pgfutil@ifundefined{tikz@intersect@path@name@\tikz@intersect@path@a}{%
+ \PackageError{tikz}{I do not know the path named `\tikz@intersect@path@a'. Perhaps you misspelt it}{}}%
+ {\pgfutil@ifundefined{tikz@intersect@path@name@\tikz@intersect@path@b}{%
+ \PackageError{tikz}{I do not know the path named `\tikz@intersect@path@b'. Perhaps you misspelt it}{}}%
+ {%
+ \pgfintersectionofpaths%
+ {%
+ \expandafter\pgfsetpath\csname tikz@intersect@path@name@\tikz@intersect@path@a\endcsname%
+ }%
+ {%
+ \expandafter\pgfsetpath\csname tikz@intersect@path@name@\tikz@intersect@path@b\endcsname%
+ }%
+ \ifx\tikz@intersect@total\pgfutil@empty%
+ \else%
+ \expandafter\let\tikz@intersect@total=\pgfintersectionsolutions%
+ \fi%
+ \ifx\tikz@intersect@name\pgfutil@empty%
+ \def\tikz@intersect@@name{intersection}%
+ \else%
+ \let\tikz@intersect@@name=\tikz@intersect@name%
+ \fi%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgfintersectionsolutions\relax%
+ \else%
+ \path[reset cm]\pgfextra{\pgftransformshift{\pgfpointintersectionsolution{\pgfmathcounter}}}%
+ coordinate (\tikz@intersect@@name-\pgfmathcounter);
+ \repeatpgfmathloop%
+ \ifx\tikz@intersect@by\pgfutil@empty%
+ \else%
+ \foreach\tikz@intersect@name[count=\tikz@intersection@count] in \tikz@intersect@by%
+ {\expandafter\tikz@intersect@name@parse\tikz@intersect@name\pgf@stop}%
+ \fi%
+ }%
+ }%
+ },%
+ intersection/.cd,
+ of/.code=\tikz@intersect@path@names@parse#1\tikz@stop,%
+ name/.store in=\tikz@intersect@name,
+ total/.store in=\tikz@intersect@total,
+ by/.store in=\tikz@intersect@by,
+ sort by/.code=\edef\tikz@intersect@sort@by{#1}\tikz@intersect@check@sort@by%
+}
+
+
+\def\tikz@intersect@check@sort@by{%
+ \ifx\tikz@intersect@sort@by\tikz@intersect@path@a%
+ \pgfintersectionsortbyfirstpath%
+ \else%
+ \ifx\tikz@intersect@sort@by\tikz@intersect@path@b%
+ \pgfintersectionsortbysecondpath%
+ \else%
+ \pgf@intersect@sortfalse%
+ \fi%
+ \fi%
+}
+\def\tikz@intersect@path@names@parse#1 and #2\tikz@stop{%
+ \def\tikz@intersect@path@a{#1}%
+ \def\tikz@intersect@path@b{#2}%
+}
+
+\def\tikz@intersect@name@parse{\pgfutil@ifnextchar[\tikz@intersect@name@parse@opt{\tikz@intersect@name@parse@opt[]}}%}
+\def\tikz@intersect@name@parse@opt[#1]#2\pgf@stop{%
+ \coordinate [#1] (#2) at (\tikz@intersect@@name-\tikz@intersection@count);
+}%
+
+\endinput