summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/venndiagram
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-03-17 21:34:36 +0000
committerKarl Berry <karl@freefriends.org>2016-03-17 21:34:36 +0000
commitc3e45a18cd1d6e3912efb68c36588ff0c86ce75f (patch)
tree597c5217c463082d37015ab7aae1db6aa96e8b65 /Master/texmf-dist/tex/latex/venndiagram
parent8f657991c60e3567495c2403a20d67d9f2d0224a (diff)
venndiagram (17mar16)
git-svn-id: svn://tug.org/texlive/trunk@40058 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/venndiagram')
-rw-r--r--Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty889
1 files changed, 670 insertions, 219 deletions
diff --git a/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty b/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty
index d761b27e09d..9e4b39a460b 100644
--- a/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty
+++ b/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty
@@ -7,7 +7,7 @@
%% venndiagram.dtx (with options: `venndiagram.sty,package')
%%
%% venndiagram.dtx
-%% Copyright 2012 Nicola Talbot
+%% Copyright 2016 Nicola Talbot
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -39,11 +39,20 @@
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{venndiagram}[2012/10/24 v1.0 (NLCT) Venn diagrams]
+\ProvidesPackage{venndiagram}[2016/03/16 v1.1 (NLCT) Venn diagrams]
\RequirePackage{xkeyval}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
-\usetikzlibrary{intersections}
+\newif\ifvennoldpgf
+\ifdef\pgfversion
+{
+ \def\@venn@checkversion#1.#2\@venn@end@checkversion{%
+ \ifnum#1<3 \vennoldpgftrue \else \vennoldpgffalse\fi}
+ \expandafter\@venn@checkversion\pgfversion.0\@venn@end@checkversion
+}
+{
+ \vennoldpgftrue
+}
\newcommand*{\@venn@label@A}{$A$}
\newcommand*{\@venn@label@B}{$B$}
\newcommand*{\@venn@label@C}{$C$}
@@ -90,7 +99,106 @@
\define@key{venn}{vgap}{\def\@venn@vgap{#1}}
\define@key{venn}{overlap}{\def\@venn@overlap{#1}}
\define@key{venn}{tikzoptions}{\def\@venn@tikzoptions{#1}}
-
+\newcommand*{\@venn@computecircleintersects}[4]{%
+ \ifdim#1=#3\relax
+ \pgfmathsetlength{\@venn@intersect@i@y}{0.5*(#4+#2)}%
+ \setlength{\@venn@intersect@ii@y}{\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@i}{#4-#2}%
+ \pgfmathsetlength{\dimen@}{\@venn@radius*\@venn@radius-0.25*\dimen@i*\dimen@i}%
+ \setlength{\@venn@intersect@i@x}{#1}%
+ \setlength{\@venn@intersect@ii@x}{#1}%
+ \ifdim\dimen@=0pt\relax
+ \def\@venn@intersect@n{1}%
+ \else
+ \ifdim\dimen@>0pt\relax
+ \def\@venn@intersect@n{2}%
+ \pgfmathsetlength{\dimen@i}{sqrt(\dimen@)}%
+ \addtolength{\@venn@intersect@i@x}{\dimen@i}%
+ \addtolength{\@venn@intersect@ii@x}{-\dimen@i}%
+ \else
+ \def\@venn@intersect@n{0}%
+ \fi
+ \fi
+ \else
+ \ifdim#2=#4\relax
+ \pgfmathsetlength{\@venn@intersect@i@x}{0.5*(#3+#1)}%
+ \setlength{\@venn@intersect@ii@x}{\@venn@intersect@i@x}%
+ \setlength{\dimen@i}{#3}%
+ \addtolength{\dimen@i}{-#1}%
+ \pgfmathsetlength{\dimen@}{\@venn@radius*\@venn@radius
+ -0.25*\dimen@i*\dimen@i}%
+ \setlength{\@venn@intersect@i@y}{#2}%
+ \setlength{\@venn@intersect@ii@y}{#2}%
+ \ifdim\dimen@=0pt\relax
+ \def\@venn@intersect@n{1}%
+ \else
+ \ifdim\dimen@>0pt\relax
+ \def\@venn@intersect@n{2}%
+ \pgfmathsetlength{\dimen@i}{sqrt(\dimen@)}%
+ \addtolength{\@venn@intersect@i@y}{\dimen@i}%
+ \addtolength{\@venn@intersect@ii@y}{-\dimen@i}%
+ \else
+ \def\@venn@intersect@n{0}%
+ \fi
+ \fi
+ \else
+ \pgfmathparse{#1/72.27}\let\@vnn@ax\pgfmathresult
+ \pgfmathparse{#2/72.27}\let\@vnn@ay\pgfmathresult
+ \pgfmathparse{#3/72.27}\let\@vnn@bx\pgfmathresult
+ \pgfmathparse{#4/72.27}\let\@vnn@by\pgfmathresult
+ \pgfmathparse{\@venn@radius/72.27}\let\@vnn@r\pgfmathresult
+ \pgfmathparse{\@vnn@ax*\@vnn@ax}\let\@vnn@ax@sq\pgfmathresult
+ \pgfmathparse{\@vnn@ay*\@vnn@ay}\let\@vnn@ay@sq\pgfmathresult
+ \pgfmathparse{\@vnn@bx*\@vnn@bx}\let\@vnn@bx@sq\pgfmathresult
+ \pgfmathparse{\@vnn@by*\@vnn@by}\let\@vnn@by@sq\pgfmathresult
+ \pgfmathparse{\@vnn@r*\@vnn@r}\let\@vnn@r@sq\pgfmathresult
+ \pgfmathparse{0.5*(\@vnn@bx@sq-\@vnn@ax@sq+\@vnn@by@sq-\@vnn@ay@sq)
+ /(\@vnn@by-\@vnn@ay)}%
+ \let\@vnn@c\pgfmathresult
+ \pgfmathparse{(\@vnn@ax-\@vnn@bx)/(\@vnn@by-\@vnn@ay)}%
+ \let\@vnn@m\pgfmathresult
+ \pgfmathparse{1+\@vnn@m*\@vnn@m}%
+ \let\@vnn@one@plus@m@sq\pgfmathresult
+ \pgfmathparse{\@vnn@m*(\@vnn@c-\@vnn@ay)-\@vnn@ax}%
+ \let\@vnn@b\pgfmathresult
+ \pgfmathparse{\@vnn@b*\@vnn@b
+ - \@vnn@one@plus@m@sq
+ *(\@vnn@ax@sq+\@vnn@ay@sq+\@vnn@c*\@vnn@c
+ -2*\@vnn@ay*\@vnn@c-\@vnn@r@sq)}%
+ \let\@vnn@root\pgfmathresult
+ \setlength\dimen@{\pgfmathresult in}%
+ \ifdim\dimen@=0pt\relax
+ \def\@venn@intersect@n{1}%
+ \pgfmathparse{-\@vnn@b/\@vnn@one@plus@m@sq}%
+ \setlength{\@venn@intersect@i@x}{\pgfmathresult in}%
+ \setlength{\@venn@intersect@ii@x}{\@venn@intersect@i@x}%
+ \pgfmathparse{\pgfmathresult*\@vnn@m+c}%
+ \setlength{\@venn@intersect@i@y}{\pgfmathresult in}%
+ \setlength{\@venn@intersect@ii@y}{\@venn@intesect@i@y}%
+ \else
+ \ifdim\dimen@>0pt\relax
+ \def\@venn@intersect@n{2}%
+ \pgfmathsqrt{\@vnn@root}%
+ \let\@vnn@root\pgfmathresult
+ \pgfmathparse{(-\@vnn@b+\@vnn@root)/\@vnn@one@plus@m@sq}%
+ \setlength{\@venn@intersect@i@x}{\pgfmathresult in}%
+ \pgfmathparse{\pgfmathresult*\@vnn@m+\@vnn@c}%
+ \setlength{\@venn@intersect@i@y}{\pgfmathresult in}%
+ \pgfmathparse{(-\@vnn@b-\@vnn@root)/\@vnn@one@plus@m@sq}%
+ \setlength{\@venn@intersect@ii@x}{\pgfmathresult in}%
+ \pgfmathparse{\pgfmathresult*\@vnn@m+\@vnn@c}%
+ \setlength{\@venn@intersect@ii@y}{\pgfmathresult in}%
+ \else
+ \def\@venn@intersect@n{0}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newlength\@venn@intersect@i@x
+\newlength\@venn@intersect@i@y
+\newlength\@venn@intersect@ii@x
+\newlength\@venn@intersect@ii@y
\newenvironment{venndiagram3sets}[1][]%
{%
\disable@keys{venn}{labelAB,labelNotAB}%
@@ -125,155 +233,10 @@
\def\fillNotC{\path[fill=\@venn@shade,even odd rule]
(0,0) rectangle (\@venn@w,\@venn@h)
(\@venn@Cx,\@venn@Cy) circle (\@venn@radius);}%
- \def\fillOnlyA{%
- \begin{scope}
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name path=BC] (\@venn@Bx,\@venn@By) circle (\@venn@radius)
- (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name intersections={of=A and BC,name=ABintersect}]
- (ABintersect-1) ;
- \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi}
- \path (ABintersect-2);
- \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii}
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax,\@venn@AB@yi-\@venn@Ay)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{360+atan2(\@venn@AB@xii-\@venn@Ax,\@venn@AB@yii-\@venn@Ay)}
- \let\@venn@end@i=\pgfmathresult
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name intersections={of=B and C,name=BCintersect}]
- (BCintersect-1);
- \pgfgetlastxy{\@venn@BC@x}{\@venn@BC@y}
- \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Cx, \@venn@AB@yii-\@venn@Cy)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BC@x-\@venn@Cx, \@venn@BC@y-\@venn@Cy)}
- \let\@venn@end@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BC@x-\@venn@Bx, \@venn@BC@y-\@venn@By)}
- \let\@venn@start@iii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx, \@venn@AB@yi-\@venn@By)-360}
- \let\@venn@end@iii=\pgfmathresult
- \path[fill=\@venn@shade] (ABintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@iii,end angle=\@venn@end@iii]
- -- cycle;
- \end{scope}
- }%
- \def\fillOnlyB{%
- \begin{scope}
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name path=AC] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius)
- (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name intersections={of=B and AC,name=BAintersect,sort by=B}]
- (BAintersect-1);
- \pgfgetlastxy{\@venn@BA@xi}{\@venn@BA@yi}
- \path (BAintersect-4);
- \pgfgetlastxy{\@venn@BA@xii}{\@venn@BA@yii}
- \pgfmathparse{atan2(\@venn@BA@xi-\@venn@Bx,\@venn@BA@yi-\@venn@By)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BA@xii-\@venn@Bx,\@venn@BA@yii-\@venn@By)}
- \let\@venn@end@i=\pgfmathresult
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name intersections={of=A and C,name=ACintersect}]
- (ACintersect-2);
- \pgfgetlastxy{\@venn@AC@x}{\@venn@AC@y}
- \pgfmathparse{atan2(\@venn@BA@xii-\@venn@Cx, \@venn@BA@yii-\@venn@Cy)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AC@x-\@venn@Cx, \@venn@AC@y-\@venn@Cy)}
- \let\@venn@end@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AC@x-\@venn@Ax, \@venn@AC@y-\@venn@Ay)}
- \let\@venn@start@iii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BA@xi-\@venn@Ax, \@venn@BA@yi-\@venn@Ay)}
- \let\@venn@end@iii=\pgfmathresult
- \path[fill=\@venn@shade] (BAintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@iii,end angle=\@venn@end@iii]
- -- cycle ;
- \end{scope}
- }%
- \def\fillOnlyC{%
- \begin{scope}
- \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name path=BA] (\@venn@Bx,\@venn@By) circle (\@venn@radius)
- (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name intersections={of=C and BA,name=CBintersect,sort by=C}]
- (CBintersect-1);
- \pgfgetlastxy{\@venn@CB@xi}{\@venn@CB@yi}
- \path (CBintersect-4);
- \pgfgetlastxy{\@venn@CB@xii}{\@venn@CB@yii}
- \pgfmathparse{atan2(\@venn@CB@xi-\@venn@Cx,\@venn@CB@yi-\@venn@Cy)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@CB@xii-\@venn@Cx,\@venn@CB@yii-\@venn@Cy)-360}
- \let\@venn@end@i=\pgfmathresult
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name intersections={of=B and A,name=BAintersect}]
- (BAintersect-2);
- \pgfgetlastxy{\@venn@BA@x}{\@venn@BA@y}
- \pgfmathparse{atan2(\@venn@CB@xii-\@venn@Ax, \@venn@CB@yii-\@venn@Ay)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BA@x-\@venn@Ax, \@venn@BA@y-\@venn@Ay)}
- \let\@venn@end@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@BA@x-\@venn@Bx, \@venn@BA@y-\@venn@By)}
- \let\@venn@start@iii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@CB@xi-\@venn@Bx, \@venn@CB@yi-\@venn@By)}
- \let\@venn@end@iii=\pgfmathresult
- \path[fill=\@venn@shade] (CBintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@iii,end angle=\@venn@end@iii]
- -- cycle;
- \end{scope}
- }%
- \def\fillNotABC{%
- \begin{scope}
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);
- \path[name intersections={of=A and B,name=ABintersect}]
- (ABintersect-1);
- \pgfgetlastxy{\@venn@AB@x}{\@venn@AB@y}
- \path[name intersections={of=A and C,name=ACintersect}]
- (ACintersect-1);
- \pgfgetlastxy{\@venn@AC@x}{\@venn@AC@y}
- \path[name intersections={of=C and B,name=CBintersect}]
- (CBintersect-1);
- \pgfgetlastxy{\@venn@CB@x}{\@venn@CB@y}
- \pgfmathparse{atan2(\@venn@AB@x-\@venn@Ax, \@venn@AB@y-\@venn@Ay)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AC@x-\@venn@Ax, \@venn@AC@y-\@venn@Ay)+360}
- \let\@venn@end@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AC@x-\@venn@Cx,\@venn@AC@y-\@venn@Cy)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@CB@x-\@venn@Cx,\@venn@CB@y-\@venn@Cy)+360}
- \let\@venn@end@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@CB@x-\@venn@Bx,\@venn@CB@y-\@venn@By)}
- \let\@venn@start@iii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@x-\@venn@Bx,\@venn@AB@y-\@venn@By)}
- \let\@venn@end@iii=\pgfmathresult
- \path[fill=\@venn@shade]
- (0,0) rectangle (\@venn@w,\@venn@h)
- (ABintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@iii,end angle=\@venn@end@iii]
- -- cycle;
- \end{scope}
- }%
+ \let\fillOnlyA\@venn@fillOnlyA@threesets
+ \let\fillOnlyB\@venn@fillOnlyB@threesets
+ \let\fillOnlyC\@venn@fillOnlyC@threesets
+ \let\fillNotABC\@venn@fillNotABC@threesets
\def\fillANotB{%
\begin{scope}
\clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
@@ -428,6 +391,460 @@
}
\newcommand*{\@postvennhook}{}
\newcommand*{\setpostvennhook}[1]{\def\@postvennhook{#1}}
+\newcommand*\@venn@fillOnlyA@threesets{%
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathadd{\@venn@end@i@angle}{360}%
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Cx}{\@venn@Cy}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@<\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@iii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@iii@angle\pgfmathresult
+ \pgfmathsubtract{\@venn@end@iii@angle}{360}%
+ \let\@venn@end@iii@angle\pgfmathresult
+ \path[fill=\@venn@shade] (\@venn@start@pt@x,\@venn@start@pt@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle,
+ end angle=\@venn@end@iii@angle] -- cycle;
+ \else
+ \fillOnlyA
+ \fi
+}%
+\newcommand*\@venn@fillOnlyB@threesets{%
+ \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Ax}{\@venn@Ay}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Cx}{\@venn@Cy}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@<\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@iii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@iii@angle\pgfmathresult
+ \path[fill=\@venn@shade]
+ (\@venn@start@pt@x,\@venn@start@pt@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle,
+ end angle=\@venn@end@iii@angle] -- cycle;
+ \else
+ \fillOnlyB
+ \fi
+}%
+\newcommand*\@venn@fillOnlyC@threesets{%
+ \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Bx}{\@venn@By}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Ax}{\@venn@Ay}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsubtract{\@venn@end@i@angle}{360}%
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Ax}{\@venn@Ay}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@<\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@iii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@iii@angle\pgfmathresult
+ \path[fill=\@venn@shade] (\@venn@start@pt@x,\@venn@start@pt@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle,
+ end angle=\@venn@end@iii@angle] -- cycle;
+ \else
+ \fillOnlyC
+ \fi
+}%
+\newcommand*\@venn@fillNotABC@threesets{%
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathadd{\@venn@end@i@angle}{360}%
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Bx}{\@venn@By}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}%
+ \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}%
+ \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}%
+ \ifdim\dimen@>\dimen@i
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}%
+ \else
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}%
+ \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}%
+ \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}%
+ \fi
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathadd{\@venn@end@ii@angle}{360}%
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@iii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@iii@angle\pgfmathresult
+ \path[fill=\@venn@shade,even odd rule]
+ (0,0) rectangle (\@venn@w,\@venn@h)
+ (\@venn@start@pt@x,\@venn@start@pt@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle,
+ end angle=\@venn@end@iii@angle]
+ -- cycle;
+ \else
+ \path[fill=\@venn@shade,even odd rule]
+ (0,0) rectangle (\@venn@w,\@venn@h)
+ (\@venn@Ax,\@venn@Ay) circle (\@venn@radius)
+ (\@venn@Bx,\@venn@By) circle (\@venn@radius)
+ (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);%
+ \fi
+}%
\newenvironment{venndiagram2sets}[1][]%
{%
\disable@keys{venn}{labelABC,labelOnlyC,labelOnlyAC,labelOnlyBC,%
@@ -448,56 +865,8 @@
circle (\@venn@radius);}%
\def\fillAll{\path[fill=\@venn@shade] (0,0)
rectangle (\@venn@w,\@venn@h);}%
- \def\fillOnlyA{%
- \begin{scope}
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name intersections={of=A and B,name=ABintersect}]
- (ABintersect-1) ;
- \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi}
- \path (ABintersect-2);
- \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii}
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax,\@venn@AB@yi-\@venn@Ay)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{360+atan2(\@venn@AB@xii-\@venn@Ax,\@venn@AB@yii-\@venn@Ay)}
- \let\@venn@end@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Bx, \@venn@AB@yii-\@venn@By)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx, \@venn@AB@yi-\@venn@By)-360}
- \let\@venn@end@ii=\pgfmathresult
- \path[fill=\@venn@shade] (ABintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- -- cycle;
- \end{scope}
- }%
- \def\fillOnlyB{%
- \begin{scope}
- \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[name intersections={of=A and B,name=ABintersect}]
- (ABintersect-1) ;
- \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi}
- \path (ABintersect-2);
- \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii}
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx,\@venn@AB@yi-\@venn@By)}
- \let\@venn@start@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Bx,\@venn@AB@yii-\@venn@By)}
- \let\@venn@end@i=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Ax, \@venn@AB@yii-\@venn@Ay)}
- \let\@venn@start@ii=\pgfmathresult
- \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax, \@venn@AB@yi-\@venn@Ay)}
- \let\@venn@end@ii=\pgfmathresult
- \path[fill=\@venn@shade] (ABintersect-1)
- arc[radius=\@venn@radius,
- start angle=\@venn@start@i,end angle=\@venn@end@i]
- arc[radius=\@venn@radius,
- start angle=\@venn@start@ii,end angle=\@venn@end@ii]
- -- cycle;
- \end{scope}
- }%
+ \let\fillOnlyA\@venn@fillOnlyA@twosets
+ \let\fillOnlyB\@venn@fillOnlyB@twosets
\def\fillNotA{\path[fill=\@venn@shade,even odd rule]
(0,0) rectangle (\@venn@w,\@venn@h)
(\@venn@Ax,\@venn@Ay) circle (\@venn@radius);}%
@@ -524,22 +893,8 @@
(\@venn@Bx,\@venn@By) circle (\@venn@radius)
;
}%
- \def\fillANotB{%
- \begin{scope}
- \clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \path[fill=\@venn@shade,even odd rule]
- (\@venn@Ax,\@venn@Ay) circle (\@venn@radius)
- (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \end{scope}
- }%
- \def\fillBNotA{%
- \begin{scope}
- \clip (\@venn@Bx,\@venn@By) circle (\@venn@radius);
- \path[fill=\@venn@shade,even odd rule]
- (\@venn@Bx,\@venn@By) circle (\@venn@radius)
- (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
- \end{scope}
- }%
+ \let\fillANotB\fillOnlyA
+ \let\fillBNotA\fillOnlyB
\def\fillACapB{%
\begin{scope}
\clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);
@@ -579,6 +934,102 @@
\@postvennhook
\end{tikzpicture}
}
+\newcommand*\@venn@fillOnlyA@twosets{%
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathadd{\@venn@end@i@angle}{360}%
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \pgfmathadd{\@venn@start@ii@angle}{360}%
+ \let\@venn@start@ii@angle\pgfmathresult
+ \path[fill=\@venn@shade]
+ (\@venn@intersect@i@x,\@venn@intersect@i@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ -- cycle;
+ \else
+ \fillOnlyA
+ \fi
+}%
+\newcommand*\@venn@fillOnlyB@twosets{%
+ \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}%
+ \ifnum\@venn@intersect@n=2\relax
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@i@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@start@ii@angle\pgfmathresult
+ \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}%
+ \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}%
+ \ifvennoldpgf
+ \pgfmathatantwo{\dimen@i}{\dimen@ii}%
+ \else
+ \pgfmathatantwo{\dimen@ii}{\dimen@i}%
+ \fi
+ \let\@venn@end@ii@angle\pgfmathresult
+ \path[fill=\@venn@shade]
+ (\@venn@intersect@i@x,\@venn@intersect@i@y)
+ arc[radius=\@venn@radius,start angle=\@venn@start@i@angle,
+ end angle=\@venn@end@i@angle]
+ arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle,
+ end angle=\@venn@end@ii@angle]
+ -- cycle;
+ \else
+ \fillOnlyB
+ \fi
+}%
\endinput
%%
%% End of file `venndiagram.sty'.