diff options
author | Karl Berry <karl@freefriends.org> | 2022-09-13 20:41:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-09-13 20:41:53 +0000 |
commit | a2d8f2e5e9527675202437dc3b8bf0de90a3524a (patch) | |
tree | 6dacb6d7be32800e12fff7a9ba9d0fbc9f3cd323 /Master/texmf-dist/tex | |
parent | 926a9f8c696e5129e8bc90b98b890595c36ffc54 (diff) |
wheelchart (13sep22)
git-svn-id: svn://tug.org/texlive/trunk@64373 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/wheelchart/wheelchart.sty | 443 |
1 files changed, 443 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/wheelchart/wheelchart.sty b/Master/texmf-dist/tex/latex/wheelchart/wheelchart.sty new file mode 100644 index 00000000000..c7f9fbc8bb0 --- /dev/null +++ b/Master/texmf-dist/tex/latex/wheelchart/wheelchart.sty @@ -0,0 +1,443 @@ +%% wheelchart.sty +%% Copyright 2022 Matthias Floré +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Matthias Floré. +% +% This work consists of the files wheelchart.pdf, wheelchart.sty, +% wheelchart.tex and README.md. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{wheelchart}[2022/09/11 v1.0 Draw wheelcharts with TikZ] +\RequirePackage{tikz} +\usetikzlibrary{calc} +\def\wheelchart@slicesstart{} +\def\wheelchart@slicesend{} +\newif\ifwheelchart@contour +\newif\ifwheelchart@counterclockwise +\newif\ifwheelchart@definnercontour +\newif\ifwheelchart@draw +\newif\ifwheelchart@linesextfixed +\newif\ifwheelchart@middlefill +\newif\ifwheelchart@pie +\newif\ifwheelchart@slicesarcadaptangle +\newif\ifwheelchart@wheellines +\newcommand{\wheelchart@slicesarcdefmacros}[2]{ +\pgfmathsetmacro{\wheelchart@slicesarcA}{#1} +\pgfmathsetmacro{\wheelchart@slicesarcB}{#2} +\pgfmathsetmacro{\wheelchart@slicesarcradius}{(1-(\wheelchart@slicesarcB))*\n1*abs((1/(\wheelchart@slicesarcA))+(\wheelchart@slicesarcA))/2} +\wheelchart@slicesarcadaptanglefalse +\ifdim \wheelchart@slicesarcA pt<\z@ +\pgfmathsetmacro{\wheelchart@slicesarccoord}{max(\wheelchart@slicesarcB,0)} +\wheelchart@slicesarcadaptangletrue +\ifdim \wheelchart@slicesarcB pt<\z@ +\else +\pgfmathsetmacro{\wheelchart@halflengthsliceinnerstartplussliceouterstart}{veclen(\x3/\pgf@xx,\y3/\pgf@yy)} +\pgfmathsetmacro{\wheelchart@slicesarcradiusbound}{sqrt((\wheelchart@halflengthsliceinnerstartplussliceouterstart^2-((\wheelchart@gap)^2)+((\wheelchart@gap-\wheelchart@slicesarcA*(1-(\wheelchart@slicesarcB))*\n1-\wheelchart@slicesarcradius)^2))} +\pgfmathsetmacro{\wheelchart@slicesarcradiusboundminusslicesarcradius}{\wheelchart@slicesarcradiusbound-\wheelchart@slicesarcradius} +\pgfmathsetmacro{\wheelchart@slicesarcradiusboundplusslicesarcradius}{\wheelchart@slicesarcradiusbound+\wheelchart@slicesarcradius} +\ifdim \wheelchart@slicesarcradiusboundminusslicesarcradius pt>\wheelchart@innerradius pt +\ifdim \wheelchart@slicesarcradiusboundplusslicesarcradius pt<\wheelchart@outerradius pt +\wheelchart@slicesarcadaptanglefalse +\fi +\fi +\fi +\else +\pgfmathsetmacro{\wheelchart@slicesarccoord}{\wheelchart@slicesarcB} +\fi +\pgfmathsetmacro{\wheelchart@slicesarccoordtimesnone}{\wheelchart@slicesarccoord*\n1} +\ifwheelchart@slicesarcadaptangle +\pgfmathsetmacro{\wheelchart@slicesarcangle}{-acos((2*(\wheelchart@slicesarccoord-1))/((1-(\wheelchart@slicesarcB))*((1/(\wheelchart@slicesarcA))+(\wheelchart@slicesarcA))))} +\else +\pgfmathsetmacro{\wheelchart@slicesarcangle}{atan(((1/(\wheelchart@slicesarcA))-(\wheelchart@slicesarcA))/2)} +\fi +} +\newcommand{\wheelchart@slicesarrowdefmacros}[2]{ +\pgfmathsetmacro{\wheelchart@slicesarrowA}{#1} +\pgfmathsetmacro{\wheelchart@slicesarrowB}{#2} +\pgfmathsetmacro{\wheelchart@slicesarrowlength}{\n1} +\ifdim \wheelchart@slicesarrowA pt<\z@ +\pgfmathsetmacro{\wheelchart@slicesarrowcoord}{max(\wheelchart@slicesarrowB,0)} +\else +\pgfmathsetmacro{\wheelchart@slicesarrowcoord}{\wheelchart@slicesarrowB} +\fi +\pgfmathsetmacro{\wheelchart@slicesarrowtip}{(1-\wheelchart@slicesarrowcoord)*\wheelchart@slicesarrowA} +} +\pgfkeys{ +/wheelchart/.is family, +/wheelchart, +anchor xsep/.initial=5, +anchor ysep/.initial=5, +at/.initial={(0,0)}, +caption/.store in=\wheelchart@caption, +caption style/.style={caption style@options/.style={#1}}, +caption style@options/.style={}, +caption left/.store in=\wheelchart@captionleft, +caption left style/.style={caption left style@options/.style={#1}}, +caption left style@options/.style={}, +contour@boolean/.is if=wheelchart@contour, +contour/.style={contour@boolean=true,contour@options/.style={#1}}, +contour@options/.style={}, +counterclockwise/.is if=wheelchart@counterclockwise, +data/.initial={\WCvarC}, +data angle shift/.initial=0, +data sep/.initial=0.2, +data style/.style={data style@options/.style={#1}}, +data style@options/.style={}, +expand list/.is choice, +expand list/false/.code={\def\wheelchart@expandlistvalue{false}\def\wheelchart@foreachdeflist##1{\def\wheelchart@foreachlist{##1}}}, +expand list/once/.code={\def\wheelchart@expandlistvalue{true}\def\wheelchart@foreachdeflist##1{\def\wheelchart@foreachlist{\unexpanded\expandafter{##1}}}}, +expand list/true/.code={\def\wheelchart@expandlistvalue{true}\def\wheelchart@foreachdeflist##1{\def\wheelchart@foreachlist{##1}}}, +expand list=once, +explode/.initial=0, +explode/.default=0.2, +gap/.initial=0, +gap/.default=0.05, +gap polar/.initial=0, +gap polar/.default=1, +inner data/.store in=\wheelchart@innerdata, +inner data sep/.initial=0.2, +inner data style/.style={inner data style@options/.style={#1}}, +inner data style@options/.style={}, +inner radius/.initial=2, +legend/.store in=\wheelchart@legend, +legend entry/.store in=\wheelchart@legendentry, +lines/.initial=0, +lines/.default=1, +lines ext/.initial=0, +lines ext/.default=0.5, +lines ext bottom dir/.is choice, +lines ext bottom dir/left/.code={\pgfmathsetmacro{\wheelchart@linesextbottomdir}{-1}}, +lines ext bottom dir/right/.code={\pgfmathsetmacro{\wheelchart@linesextbottomdir}{1}}, +lines ext bottom dir=right, +lines ext dirsep/.initial=0, +lines ext fixed/.is if=wheelchart@linesextfixed, +lines ext left anchor/.initial={mid east}, +lines ext right anchor/.initial={mid west}, +lines ext top dir/.is choice, +lines ext top dir/left/.code={\pgfmathsetmacro{\wheelchart@linesexttopdir}{-1}}, +lines ext top dir/right/.code={\pgfmathsetmacro{\wheelchart@linesexttopdir}{1}}, +lines ext top dir=right, +lines sep/.initial=0.2, +lines style/.style={lines style@options/.style={#1}}, +lines style@options/.style={}, +middle/.store in=\wheelchart@middle, +middle fill@boolean/.is if=wheelchart@middlefill, +middle fill/.style={middle fill@boolean=true,middle fill@options/.style={#1}}, +middle fill@options/.style={}, +middle style/.style={middle style@options/.style={#1}}, +middle style@options/.style={}, +name/.code={\xdef\wheelchart@name{#1}}, +name=wheelchart@name, +outer radius/.initial=3, +perc precision/.initial=0, +pie/.is if=wheelchart@pie, +radius/.code 2 args={\pgfkeys{/wheelchart,inner radius={#1},outer radius={#2}}}, +slices/.store in=\wheelchart@slices, +slices arc/.code 2 args={\pgfkeys{/wheelchart,slices start arc={-(#1)}{#2},slices end arc={#1}{#2}}}, +slices arrow/.code 2 args={\pgfkeys{/wheelchart,slices start arrow={-(#1)}{#2},slices end arrow={#1}{#2}}}, +slices end arc/.code 2 args={\def\wheelchart@slicesend{{[shift={(wheelchart@sliceouterend)},rotate={90-atan2(\p2)},/utils/exec={\wheelchart@slicesarcdefmacros{#1}{#2}}]--({-\wheelchart@slicesarccoordtimesnone},0) arc[start angle={\wheelchart@counterorclockwise*\wheelchart@slicesarcangle},end angle={\wheelchart@counterorclockwise*(sign(#1)*180-\wheelchart@slicesarcangle)},radius={\wheelchart@slicesarcradius}]}}}, +slices end arrow/.code 2 args={\def\wheelchart@slicesend{{[shift={(wheelchart@sliceouterend)},rotate={90-atan2(\p2)},/utils/exec={\wheelchart@slicesarrowdefmacros{#1}{#2}}]--({-\wheelchart@slicesarrowcoord*\wheelchart@slicesarrowlength},0)--({-\wheelchart@slicesarrowlength},{\wheelchart@counterorclockwise*\wheelchart@slicesarrowtip*\wheelchart@slicesarrowlength})--({(\wheelchart@slicesarrowcoord-2)*\wheelchart@slicesarrowlength},0)}}}, +slices start arc/.code 2 args={\def\wheelchart@slicesstart{{[shift={(wheelchart@sliceinnerstart)},rotate={90-atan2(\p1)},/utils/exec={\wheelchart@slicesarcdefmacros{#1}{#2}}]({\wheelchart@slicesarccoordtimesnone},0) arc[start angle={-\wheelchart@counterorclockwise*(sign(#1)*180-\wheelchart@slicesarcangle)},end angle={-\wheelchart@counterorclockwise*\wheelchart@slicesarcangle},radius={\wheelchart@slicesarcradius}]}--}}, +slices start arrow/.code 2 args={\def\wheelchart@slicesstart{{[shift={(wheelchart@sliceinnerstart)},rotate={90-atan2(\p1)},/utils/exec={\wheelchart@slicesarrowdefmacros{#1}{#2}}]({\wheelchart@slicesarrowcoord*\wheelchart@slicesarrowlength},0)--({\wheelchart@slicesarrowlength},{-\wheelchart@counterorclockwise*\wheelchart@slicesarrowtip*\wheelchart@slicesarrowlength})--({(2-\wheelchart@slicesarrowcoord)*\wheelchart@slicesarrowlength},0)}--}}, +slices style/.style={slices style@options/.style={#1}}, +slices style@options/.style={}, +slices style={\WCvarB}, +start angle/.initial=90, +start half/.store in=\wheelchart@starthalf, +start half/.default=90, +title/.store in=\wheelchart@title, +title style/.style={title style@options/.style={#1}}, +title style@options/.style={}, +title left/.store in=\wheelchart@titleleft, +title left style/.style={title left style@options/.style={#1}}, +title left style@options/.style={}, +total angle/.initial=360, +total count/.code={\pgfmathsetmacro{\wheelchart@totalcount}{int(#1)}}, +value/.initial={\WCvarA}, +wheel data/.store in=\wheelchart@wheeldata, +wheel data pos/.initial=0.66, +wheel data style/.style={wheel data style@options/.style={#1}}, +wheel data style@options/.style={}, +wheel lines@boolean/.is if=wheelchart@wheellines, +wheel lines/.style={wheel lines@boolean=true,wheel lines@options/.style={#1}}, +wheel lines@options/.style={}, +} +\newcommand{\wheelchart@foreachinitial}[2]{\ifcsname wheelchart@totalcount\endcsname\ifnum\wheelchart@totalcount>1\gdef\wheelchart@foreachlist{}\foreach\wheelchart@n in {2,...,\wheelchart@totalcount}{\xdef\wheelchart@foreachlist{\wheelchart@foreachlist,}}\else\ifnum\wheelchart@totalcount=1\gdef\wheelchart@foreachlist{{}}\else\gdef\wheelchart@foreachlist{}\fi\fi\else\wheelchart@foreachdeflist{#1}\fi\foreach\WCvarA/\WCvarB/\WCvarC/\WCvarD/\WCvarE/\WCvarF/\WCvarG/\WCvarH/\WCvarI/\WCvarJ/\WCvarK/\WCvarL/\WCvarM/\WCvarN/\WCvarO/\WCvarP/\WCvarQ/\WCvarR/\WCvarS/\WCvarT/\WCvarU/\WCvarV/\WCvarW/\WCvarX/\WCvarY/\WCvarZ [count=\WCcount,expand list=\wheelchart@expandlistvalue] in \wheelchart@foreachlist{#2}} +\newcommand{\wheelchart@foreach}[2]{\pgfmathsetmacro{\wheelchart@angle}{\wheelchart@startangle}\wheelchart@foreachinitial{#1}{\pgfmathsetmacro{\wheelchart@outerradius}{\pgfkeysvalueof{/wheelchart/outer radius}} +\ifwheelchart@pie +\pgfmathsetmacro{\wheelchart@innerradius}{0} +\else +\pgfmathsetmacro{\wheelchart@innerradius}{\pgfkeysvalueof{/wheelchart/inner radius}} +\fi +\pgfmathsetmacro{\wheelchart@gap}{\pgfkeysvalueof{/wheelchart/gap}} +\pgfmathsetmacro{\wheelchart@gappolar}{\pgfkeysvalueof{/wheelchart/gap polar}} +\pgfmathsetmacro{\wheelchart@value}{\pgfkeysvalueof{/wheelchart/value}} +\pgfmathsetmacro{\wheelchart@newangle}{\wheelchart@angle+(\wheelchart@counterorclockwise*\wheelchart@value*(\wheelchart@totalangle/\WCtotalnum))} +\pgfmathsetmacro{\wheelchart@abshalfangleminusnewangle}{abs((\wheelchart@angle-\wheelchart@newangle)/2)} +\wheelchart@drawfalse +\pgfmathsetmacro{\wheelchart@abshalfangleminusnewangleminusgappolar}{\wheelchart@abshalfangleminusnewangle-\wheelchart@gappolar} +\ifdim \wheelchart@abshalfangleminusnewangleminusgappolar pt=180 pt +\pgfmathsetmacro{\wheelchart@outergap}{asin(\wheelchart@gap/\wheelchart@outerradius)} +\ifdim \wheelchart@gap pt<\wheelchart@innerradius pt +\pgfmathsetmacro{\wheelchart@innergap}{asin(\wheelchart@gap/\wheelchart@innerradius)} +\else +\pgfmathsetmacro{\wheelchart@innergap}{90} +\pgfmathsetmacro{\wheelchart@innerradius}{\wheelchart@gap} +\fi +\ifdim \wheelchart@innerradius pt<\wheelchart@outerradius pt +\wheelchart@drawtrue +\fi +\else +\ifdim \wheelchart@abshalfangleminusnewangleminusgappolar pt>\z@ +\pgfmathsetmacro{\wheelchart@outerradiustimessinabshalfangleminusnewangleminusgappolar}{\wheelchart@outerradius*sin(\wheelchart@abshalfangleminusnewangleminusgappolar)} +\ifdim \wheelchart@outerradiustimessinabshalfangleminusnewangleminusgappolar pt<\wheelchart@gap pt +\else +\pgfmathsetmacro{\wheelchart@outergap}{asin(\wheelchart@gap/\wheelchart@outerradius)+\wheelchart@gappolar} +\pgfmathsetmacro{\wheelchart@innerradiustimessinabshalfangleminusnewangleminusgappolar}{\wheelchart@innerradius*sin(\wheelchart@abshalfangleminusnewangleminusgappolar)} +\ifdim \wheelchart@innerradiustimessinabshalfangleminusnewangleminusgappolar pt>\wheelchart@gap pt +\pgfmathsetmacro{\wheelchart@innergap}{asin(\wheelchart@gap/\wheelchart@innerradius)+\wheelchart@gappolar} +\else +\pgfmathsetmacro{\wheelchart@innergap}{\wheelchart@abshalfangleminusnewangle} +\ifdim \wheelchart@innerradiustimessinabshalfangleminusnewangleminusgappolar pt<\wheelchart@gap pt +\pgfmathsetmacro{\wheelchart@innerradius}{\wheelchart@gap/sin(\wheelchart@abshalfangleminusnewangleminusgappolar)} +\fi +\fi +\ifdim \wheelchart@innerradius pt<\wheelchart@outerradius pt +\wheelchart@drawtrue +\fi +\fi +\fi +\fi +\pgfmathsetmacro{\wheelchart@explode}{\pgfkeysvalueof{/wheelchart/explode}} +\pgfmathsetmacro{\WCmidangle}{Mod((\wheelchart@angle+\wheelchart@newangle)/2,360)} +\pgfmathsetmacro{\wheelchart@dataangleshift}{\pgfkeysvalueof{/wheelchart/data angle shift}} +\pgfmathsetmacro{\WCdataangle}{Mod(\wheelchart@counterorclockwise*\wheelchart@dataangleshift+\WCmidangle,360)} +\pgfmathsetmacro{\WCpercentage}{\wheelchart@value/(\WCtotalnum/100)} +\pgfmathprintnumberto[precision=\pgfkeysvalueof{/wheelchart/perc precision}]{\WCpercentage}{\WCpercentagerounded} +\begin{scope}[shift={(\WCmidangle:\wheelchart@explode)}] +#2 +\end{scope} +\global\let\wheelchart@angle=\wheelchart@newangle}} +\AtBeginDocument{\@ifpackageloaded{siunitx}{\newcommand{\WCperc}{\qty[round-mode=places,round-precision=\pgfkeysvalueof{/wheelchart/perc precision}]{\WCpercentage}{\percent}}}{\newcommand{\WCperc}{\WCpercentagerounded\,\%}}} +\newcommand{\wheelchart@ifnotext}[3]{%%https://tex.stackexchange.com/questions/42280/expand-away-empty-macros-within-ifthenelse%https://tex.stackexchange.com/questions/44919/proper-way-to-detect-empty-blank-text +\begingroup% +\begin{pgfinterruptpicture}%%https://tex.stackexchange.com/questions/459853/savebox-within-tikzpicture-results-in-an-empty-savebox +\sbox0{#1}% +\ifdim\wd0=\z@% +\gdef\wheelchart@node{0}% +\else% +\gdef\wheelchart@node{1}% +\fi% +\end{pgfinterruptpicture}% +\endgroup% +\ifnum\wheelchart@node=0% +{#2}%%if #1 is empty +\else% +{#3}%%if #1 is not empty +\fi% +} +\newcommand{\wheelchart}[2][]{{ +\pgfkeys{/wheelchart,#1} +\begin{scope}[shift/.expanded={\pgfkeysvalueof{/wheelchart/at}},local bounding box/.expanded=\wheelchart@name] +\ifwheelchart@counterclockwise +\pgfmathsetmacro{\wheelchart@counterorclockwise}{1} +\else +\pgfmathsetmacro{\wheelchart@counterorclockwise}{-1} +\fi +\pgfmathsetmacro{\wheelchart@totalangle}{\pgfkeysvalueof{/wheelchart/total angle}} +\pgfmathsetmacro{\WCtotalnum}{0} +\wheelchart@foreachinitial{#2}{ +\pgfmathsetmacro{\wheelchart@value}{\pgfkeysvalueof{/wheelchart/value}} +\pgfmathparse{\wheelchart@value+\WCtotalnum} +\global\let\WCtotalnum=\pgfmathresult +\ifnum\WCcount=1 +\xdef\wheelchart@firstvalue{\wheelchart@value} +\fi +\xdef\WCtotalcount{\WCcount} +} +\ifcsname wheelchart@starthalf\endcsname +\pgfmathsetmacro{\wheelchart@startangle}{Mod(\wheelchart@starthalf-(\wheelchart@counterorclockwise*\wheelchart@firstvalue*0.5*(\wheelchart@totalangle/\WCtotalnum)),360)} +\else +\pgfmathsetmacro{\wheelchart@startangle}{Mod(\pgfkeysvalueof{/wheelchart/start angle},360)} +\fi +\wheelchart@definnercontourfalse +\ifwheelchart@contour +\wheelchart@definnercontourtrue +\xdef\wheelchart@outercontour{} +\wheelchart@foreach{#2}{ +\xdef\wheelchart@outercontour{(\wheelchart@newangle:\wheelchart@outerradius) arc[start angle=\wheelchart@newangle,end angle=\wheelchart@angle,radius=\wheelchart@outerradius]--\wheelchart@outercontour} +} +\else +\ifwheelchart@middlefill +\wheelchart@definnercontourtrue +\fi +\fi +\ifwheelchart@definnercontour +\xdef\wheelchart@innercontour{} +\wheelchart@foreach{#2}{ +\xdef\wheelchart@innercontour{\wheelchart@innercontour(\wheelchart@angle:\wheelchart@innerradius) arc[start angle=\wheelchart@angle,end angle=\wheelchart@newangle,radius=\wheelchart@innerradius]--} +} +\fi +\ifwheelchart@middlefill +\fill[/wheelchart/middle fill@options] +\ifdim \wheelchart@totalangle pt=360 pt +\else +(0,0)-- +\fi +\wheelchart@innercontour cycle; +\fi +\wheelchart@foreach{#2}{ +\ifcsname wheelchart@slices\endcsname +\begin{scope}[shift={(\WCmidangle:{(\wheelchart@innerradius+\wheelchart@outerradius)/2})},rotate=\WCmidangle] +\fill[/wheelchart/slices style@options] \wheelchart@slices +\end{scope} +\else +\ifwheelchart@draw +\pgfmathsetmacro{\wheelchart@sliceinnerstartangle}{\wheelchart@angle+(\wheelchart@counterorclockwise*(\wheelchart@innergap))} +\pgfmathsetmacro{\wheelchart@sliceinnerendangle}{\wheelchart@newangle-(\wheelchart@counterorclockwise*(\wheelchart@innergap))} +\pgfmathsetmacro{\wheelchart@sliceouterstartangle}{\wheelchart@angle+(\wheelchart@counterorclockwise*(\wheelchart@outergap))} +\pgfmathsetmacro{\wheelchart@sliceouterendangle}{\wheelchart@newangle-(\wheelchart@counterorclockwise*(\wheelchart@outergap))} +\coordinate (wheelchart@sliceinnerstart) at (\wheelchart@sliceinnerstartangle:\wheelchart@innerradius); +\coordinate (wheelchart@sliceinnerend) at (\wheelchart@sliceinnerendangle:\wheelchart@innerradius); +\coordinate (wheelchart@sliceouterstart) at (\wheelchart@sliceouterstartangle:\wheelchart@outerradius); +\coordinate (wheelchart@sliceouterend) at (\wheelchart@sliceouterendangle:\wheelchart@outerradius); +\fill[/wheelchart/slices style@options] let \p1=($(wheelchart@sliceouterstart)-(wheelchart@sliceinnerstart)$),\p2=($(wheelchart@sliceouterend)-(wheelchart@sliceinnerend)$),\p3=($(wheelchart@sliceinnerstart)!0.5!(wheelchart@sliceouterstart)$),\n1={veclen(\x1/\pgf@xx,\y1/\pgf@yy)/2} in \wheelchart@slicesstart(wheelchart@sliceouterstart) arc[start angle=\wheelchart@sliceouterstartangle,end angle=\wheelchart@sliceouterendangle,radius=\wheelchart@outerradius]\wheelchart@slicesend--(wheelchart@sliceinnerend) arc[start angle=\wheelchart@sliceinnerendangle,end angle=\wheelchart@sliceinnerstartangle,radius=\wheelchart@innerradius]--cycle; +\fi +\fi +} +\ifwheelchart@wheellines +\ifdim \wheelchart@totalangle pt=360 pt +\def\wheelchart@start{1} +\else +\def\wheelchart@start{0} +\fi +\wheelchart@foreach{#2}{ +\foreach\wheelchart@n in {\wheelchart@start,...,\wheelchart@value}{ +\pgfmathsetmacro{\wheelchart@anglewheellines}{\wheelchart@angle+(\wheelchart@counterorclockwise*\wheelchart@n*(\wheelchart@totalangle/\WCtotalnum))} +\draw[/wheelchart/wheel lines@options] (\wheelchart@anglewheellines:\wheelchart@innerradius)--(\wheelchart@anglewheellines:\wheelchart@outerradius); +} +\gdef\wheelchart@start{1} +} +\fi +\ifwheelchart@contour +\ifdim \wheelchart@totalangle pt=360 pt +\draw[/wheelchart/contour@options] \wheelchart@innercontour cycle; +\draw[/wheelchart/contour@options] \wheelchart@outercontour cycle; +\else +\draw[/wheelchart/contour@options] \wheelchart@innercontour\wheelchart@outercontour cycle; +\fi +\fi +\wheelchart@foreach{#2}{ +\pgfmathsetmacro{\wheelchart@datasep}{\pgfkeysvalueof{/wheelchart/data sep}} +\pgfmathsetmacro{\wheelchart@lines}{\pgfkeysvalueof{/wheelchart/lines}} +\pgfmathsetmacro{\wheelchart@linesext}{\pgfkeysvalueof{/wheelchart/lines ext}} +\pgfmathsetmacro{\wheelchart@linessep}{\pgfkeysvalueof{/wheelchart/lines sep}} +\ifdim \wheelchart@linesext pt>\z@ +\pgfmathsetmacro{\wheelchart@linesextdirsep}{\pgfkeysvalueof{/wheelchart/lines ext dirsep}} +\pgfmathparse{ +(\WCdataangle<90-\wheelchart@linesextdirsep?"1": +(\WCdataangle<=90+\wheelchart@linesextdirsep?"\wheelchart@linesexttopdir": +(\WCdataangle<270-\wheelchart@linesextdirsep?"-1": +(\WCdataangle<=270+\wheelchart@linesextdirsep?"\wheelchart@linesextbottomdir": +"1" +)))) +} +\edef\wheelchart@linesextdir{\pgfmathresult} +\draw[/wheelchart/lines style@options] let \p1=(\WCdataangle:{\wheelchart@outerradius+\wheelchart@linessep+\wheelchart@lines}) in (\WCdataangle:{\wheelchart@outerradius+\wheelchart@linessep})--(\p1) +\ifwheelchart@linesextfixed +--({\wheelchart@linesextdir*(\wheelchart@outerradius+\wheelchart@linessep+\wheelchart@lines+\wheelchart@linesext)},\y1) +\else +--++({\wheelchart@linesextdir*\wheelchart@linesext},0) +\fi +coordinate (wheelchart@datacoord); +\pgfmathparse{ +(\wheelchart@linesextdir==1?"\pgfkeysvalueof{/wheelchart/lines ext right anchor}": +(\wheelchart@linesextdir==-1?"\pgfkeysvalueof{/wheelchart/lines ext left anchor}": +)) +} +\edef\wheelchart@dataanchor{\pgfmathresult} +\else +\pgfmathsetmacro{\wheelchart@anchorxsep}{\pgfkeysvalueof{/wheelchart/anchor xsep}} +\pgfmathsetmacro{\wheelchart@anchorysep}{\pgfkeysvalueof{/wheelchart/anchor ysep}} +\pgfmathparse{ +(\WCdataangle==0?"west": +(\WCdataangle==90?"south": +(\WCdataangle==180?"east": +(\WCdataangle==270?"north": +(\WCdataangle<=\wheelchart@anchorysep?"west": +(\WCdataangle<90-\wheelchart@anchorxsep?"south west": +(\WCdataangle<=90+\wheelchart@anchorxsep?"south": +(\WCdataangle<180-\wheelchart@anchorysep?"south east": +(\WCdataangle<=180+\wheelchart@anchorysep?"east": +(\WCdataangle<270-\wheelchart@anchorxsep?"north east": +(\WCdataangle<=270+\wheelchart@anchorxsep?"north": +(\WCdataangle<360-\wheelchart@anchorysep?"north west": +"west" +)))))))))))) +} +\edef\wheelchart@dataanchor{\pgfmathresult} +\ifdim \wheelchart@lines pt>\z@ +\draw[/wheelchart/lines style@options] (\WCdataangle:{\wheelchart@outerradius+\wheelchart@linessep})--++(\WCdataangle:\wheelchart@lines) coordinate[shift={(\WCdataangle:\wheelchart@datasep)}] (wheelchart@datacoord); +\else +\coordinate (wheelchart@datacoord) at (\WCdataangle:{\wheelchart@outerradius+\wheelchart@datasep}); +\fi +\fi +\wheelchart@ifnotext{\pgfkeysvalueof{/wheelchart/data}}{}{\node[anchor=\wheelchart@dataanchor,align=left,/wheelchart/data style@options] at (wheelchart@datacoord) {\pgfkeysvalueof{/wheelchart/data}};} +\ifcsname wheelchart@innerdata\endcsname +\wheelchart@ifnotext{\wheelchart@innerdata}{}{% +\pgfmathsetmacro{\wheelchart@innerdatasep}{\pgfkeysvalueof{/wheelchart/inner data sep}}% +\node[align=left,/wheelchart/inner data style@options] at (\WCdataangle:{\wheelchart@innerradius-(\wheelchart@innerdatasep)}) {\wheelchart@innerdata};% +} +\fi +\ifcsname wheelchart@wheeldata\endcsname +\wheelchart@ifnotext{\wheelchart@wheeldata}{}{% +\pgfmathsetmacro{\wheelchart@wheeldatapos}{\pgfkeysvalueof{/wheelchart/wheel data pos}}% +\node[align=left,/wheelchart/wheel data style@options] at (\WCdataangle:{\wheelchart@wheeldatapos*\wheelchart@outerradius+(1-\wheelchart@wheeldatapos)*\wheelchart@innerradius}) {\wheelchart@wheeldata};% +} +\fi +\ifcsname wheelchart@legendentry\endcsname +\wheelchart@legendentry +\fi +} +\ifcsname wheelchart@middle\endcsname +\wheelchart@ifnotext{\wheelchart@middle}{}{% +\node[align=center,/wheelchart/middle style@options] at (0,0) {\wheelchart@middle};% +} +\fi +\ifcsname wheelchart@legend\endcsname +\wheelchart@legend +\fi +\end{scope} +\ifcsname wheelchart@captionleft\endcsname +\wheelchart@ifnotext{\wheelchart@captionleft}{}{% +\node[anchor=north west,align=left,/wheelchart/caption left style@options] at ($(\wheelchart@name.south west)-(0,0.5)$) {\wheelchart@captionleft};% +} +\fi +\ifcsname wheelchart@caption\endcsname +\wheelchart@ifnotext{\wheelchart@caption}{}{% +\coordinate[shift/.expanded={\pgfkeysvalueof{/wheelchart/at}}] (wheelchart@center) at (0,0);% +\node[anchor=north,align=center,/wheelchart/caption style@options] at ($(\wheelchart@name.south-|wheelchart@center)-(0,0.5)$) {\wheelchart@caption};% +} +\fi +\ifcsname wheelchart@titleleft\endcsname +\wheelchart@ifnotext{\wheelchart@titleleft}{}{% +\node[anchor=south west,align=left,/wheelchart/title left style@options] at ($(\wheelchart@name.north west)+(0,0.5)$) {\wheelchart@titleleft};% +} +\fi +\ifcsname wheelchart@title\endcsname +\wheelchart@ifnotext{\wheelchart@title}{}{% +\coordinate[shift/.expanded={\pgfkeysvalueof{/wheelchart/at}}] (wheelchart@center) at (0,0);% +\node[anchor=south,align=center,/wheelchart/title style@options] at ($(\wheelchart@name.north-|wheelchart@center)+(0,0.5)$) {\wheelchart@title};% +} +\fi +}} +\endinput
\ No newline at end of file |