% Copyright 2018 by 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.

\ProvidesFileRCS{tikzlibrarydatavisualization.polar.code.tex}

\usetikzlibrary{datavisualization}%
\usepgflibrary{datavisualization.polar}%


\tikzdatavisualizationset{%
  new polar axes/.style 2 args={
    new axis base=#1,
    #1={attribute=angle},
    new axis base=#2,
    #2={attribute=radius},
    #2/scaling/default=0 at 0 and 1 at 1cm,
    new object={
      store=/tikz/data visualization/#1/polar transformer,
      class=polar transformer,
      arg1/.expanded=\pgfkeysvalueof{/tikz/data visualization/angle axis/attribute}/scaled,
      arg2/.expanded=\pgfkeysvalueof{/tikz/data visualization/radius axis/attribute}/scaled,
      arg3 from key=/tikz/data visualization/#1/unit vector 0 degrees,
      arg4 from key=/tikz/data visualization/#1/unit vector 90 degrees
    },
    /tikz/data visualization/#1/unit vector 0 degrees/.initial=\pgfqpoint{1pt}{0pt},
    /tikz/data visualization/#1/unit vector 90 degrees/.initial=\pgfqpoint{0pt}{1pt},
  },
  new polar axes/.default={angle axis}{radius axis}
}%
\def\tikz@lib@dv@polar@a#1{
  \pgfkeyssetvalue{\tikz@dv@axis/unit vector 0 degrees}{#1}
}%
\def\tikz@lib@dv@polar@b#1{
  \pgfkeyssetvalue{\tikz@dv@axis/unit vector 90 degrees}{#1}
}%



%
% Scientific polar axes
%

\tikzset{
  /tikz/data visualization/axis options/.cd,
  unit vectors/.code 2 args={
    \tikz@scan@one@point\tikz@lib@dv@polar@a#1
    \tikz@scan@one@point\tikz@lib@dv@polar@b#2
  },
  degrees/.style={\tikz@dv@axis/scaling=0 at 0 and 1 at 1},
  radians/.style={\tikz@dv@axis/scaling=0 at 0 and 0.03141592653589793 at 1.8},
}%



\tikzdatavisualizationset{
  new axis system={scientific polar axes}{%
    new polar axes,
    angle axis={attribute=angle},
    radius axis={attribute=radius},
    every axis/.append style={style={draw=black!50}},
    every ticks/.append style={style={draw=black!50}},
  }{%
    0 to 360,%
    outer ticks,
  }{%
    @make axes,
    scientific polar axes/@setup axes,
    /utils/exec={
      \edef\pgf@marshal{\noexpand\tikzdatavisualizationset{\pgfkeysvalueof{/tikz/data visualization/@which visualize radius axis}/.list={\pgfkeysvalueof{/tikz/data visualization/\pgfkeysvalueof{/tikz/data visualization/@which radius axes at}}}}}
      \pgf@marshal
    },
    @make labels
  },
  @which radius axes at/.initial=@inner radius axes at,
  @which visualize radius axis/.initial=@visualize radius axis,
  @inner radius axes at/.initial=,
  @clean radius axes at/.initial=,
  @visualize radius axis/.style 2 args={
    radius axis={
      visualize axis={angle axis={goto=#1},high=padded max,low=0},
      visualize ticks={
        common={angle axis={goto=#1}, direction axis=angle axis},
        major={tick text at #2,
          options at=0 as [{style={draw=none},no tick text}]
        }
      }
    }
  },
  @visualize clean radius axis/.style n args={5}{
    radius axis={
      visualize axis={angle
        axis={goto=#1},high=max,low=0,style={black!25,line cap=rect}},
      visualize axis={angle
        axis={goto=#1},high=max,low=0,style={line cap=rect,#4}},
      visualize ticks={
        style={#4},
        common={angle axis={goto=#1}, direction axis=angle axis, #3=0},
        major={tick text at #2,#5}
      }
    }
  },
  @visualize zero/.style={@inner visualize zero={#1}},
  @clean visualize zero/.style={},
  @inner visualize zero/.style={
    radius axis={
      visualize ticks={
        common={angle axis={goto=0}, direction axis=angle axis},
        major={tick text at low,low=0,high=0,at=0 as
          [{style={draw=none},node style={anchor=#1}}]
        }
      }
    }
  },
  @degrees/.style={
    angle axis={degrees, ticks={step=15, tick suffix=$^\circ$, major={
          options at=360 as [{style={draw=none},no tick text}],
          options at=-180 as [{style={draw=none},no tick text}]}}}
  },
  @rad/.style={
    angle axis={radians, ticks={
        step=(pi/12),
        node style={
          /pgf/number format/frac,
          /pgf/number format/frac shift={1}
        },
        tick typesetter/.code={%
          \pgfmathsetmacro{\tikz@lib@dv@pol}{round(####1*3.819718634205488)/12}%
          \pgfmathapproxequalto{\tikz@lib@dv@pol}{0}%
          \ifdim\pgfmathresult pt=1.0pt%
            $0$%
          \else%
            \pgfmathapproxequalto{\tikz@lib@dv@pol}{1}%
            \ifdim\pgfmathresult pt=1.0pt%
              $\pi$%
            \else
              \pgfmathapproxequalto{\tikz@lib@dv@pol}{-1}%
              \ifdim\pgfmathresult pt=1.0pt%
                $-\pi$%
              \else%
                \pgfmathprintnumber{\tikz@lib@dv@pol}$\pi$%
              \fi%
            \fi%
          \fi%
        },
        major={
          options at=6.2831985e0 as [{style={draw=none},no tick text}],
          options at=6.2831192e0 as [{style={draw=none},no tick text}],
          options at=6.2830794e0 as [{style={draw=none},no tick text}],
          options at=6.2828787e0 as [{style={draw=none},no tick text}],
          options at=6.2831598e0 as [{style={draw=none},no tick text}],
          options at=-3.1415991e0 as [{style={draw=none},no tick text}],
          options at=-3.1415802e0 as [{style={draw=none},no tick text}],
          options at=-3.1415602e0 as [{style={draw=none},no tick text}],
          options at=-3.14153961e0 as [{style={draw=none},no tick text}],
          options at=-3.1414406e0 as [{style={draw=none},no tick text}],
        }
      }
    }
  },
  @make labels/.style={},
}%

\tikzdatavisualizationset{
  scientific polar axes/.cd,
  %
  %
  %
  outer ticks/.style={
    /tikz/data visualization/@make axes/.style={
      radius axis={
        min value=0,
        length=\pgfkeysvalueof{/tikz/data visualization/scientific polar axes/radius},
        padding=0em,
        ticks={few},
        visualize grid={common={direction axis=angle axis,low=min,high=max}},
      },
      angle axis={
        visualize axis={radius axis={goto=padded max},low=min,high=max},
        visualize ticks={common={radius axis={goto=padded max},direction
            axis=radius axis},common={low=0},major={tick text at high}},
        visualize grid={common={direction axis=radius axis},low=0,high=padded max},
      }
    },
    /tikz/data visualization/@which radius axes at=@inner radius axes at,
    /tikz/data visualization/@which visualize radius axis=@visualize radius axis,
    /tikz/data visualization/@visualize zero/.style={@inner visualize zero={##1}},
  },
  inner ticks/.style={
    /tikz/data visualization/@make axes/.style={
      radius axis={
        min value=0,
        length=\pgfkeysvalueof{/tikz/data visualization/scientific polar axes/radius},
        padding=0em,
        ticks={few},
        visualize grid={common={direction axis=angle axis,low=min,high=max}},
      },
      angle axis={
        visualize axis={radius axis={goto=padded max},low=min,high=max},
        visualize ticks={common={radius axis={goto=padded max},direction
            axis=radius axis},common={high=0},major={tick text at high}},
        visualize grid={common={direction axis=radius axis},low=0,high=padded max},
      }
    },
    /tikz/data visualization/@which radius axes at=@inner radius axes at,
    /tikz/data visualization/@which visualize radius axis=@visualize radius axis,
    /tikz/data visualization/@visualize zero/.style={@inner visualize zero={##1}},
  },
  clean/.style={
    /tikz/data visualization/@make axes/.style={
      radius axis={
        min value=0,
        length=\pgfkeysvalueof{/tikz/data visualization/scientific polar axes/radius},
        padding=.5em,
        ticks={few},
        visualize grid={common={direction axis=angle axis,low=min,high=max}},
      },
      angle axis={
        padding=.5em,
        visualize axis={radius axis={goto=max}, style={black!25, line cap=rect},low=min,high=max},
        visualize axis={radius axis={goto=padded max}, style={line cap=rect}, low=min,high=max},
        visualize ticks={common={radius axis={goto=padded max}, direction axis=radius axis},common={low=0},major={tick text at high}},
        visualize grid={common={direction axis=radius axis},low=0,high=max},
      }
    },
    /tikz/data visualization/@which radius axes at=@clean radius axes at,
    /tikz/data visualization/@which visualize radius axis=@visualize clean radius axis,
    /tikz/data visualization/@visualize zero/.style={@clean visualize zero={##1}},
  },
  radius/.initial=3.25cm,
  %
  % First quadrant
  %
  0 to pi half/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=1.570796326794897},
      @rad,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{1.570796326794897}{high}},
      @clean radius axes at={%
        {0}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {1.570796326794897}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  0 to 90/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=90},
      @degrees,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{90}{high}},
      @clean radius axes at={%
        {0}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {90}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  quadrant/.style={
    @setup axes/.style={
      angle axis={scaling=min at 0 and max at 90, ticks},
      @visualize zero=north east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  quadrant clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 90 and max at 0, ticks},
      @visualize zero=north east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {max}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {min}{low}{high}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  %
  % Fourth quadrant
  %
  -pi half to 0/.style={
    @setup axes/.style={
      angle axis={min value=-1.570796326794897, max value=0},
      @rad,
      @visualize zero=south east,
      @inner radius axes at={{-1.570796326794897}{low},{0}{high}},
      @clean radius axes at={%
        {-1.570796326794897}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {0}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  -90 to 0/.style={
    @setup axes/.style={
      angle axis={min value=-90, max value=0},
      @degrees,
      @visualize zero=south east,
      @inner radius axes at={{-90}{low},{0}{high}},
      @clean radius axes at={%
        {-90}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {0}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  fourth quadrant/.style={
    @setup axes/.style={
      angle axis={scaling=min at -90 and max at 0, ticks},
      @visualize zero=south east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  fourth quadrant clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 0 and max at -90, ticks},
      @visualize zero=south east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {max}{high}{low}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {min}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding max}}{}
      }
    }
  },
  %
  % Upper half
  %
  0 to pi/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=3.141592653589793},
      @rad,
      @visualize zero=north,
      @inner radius axes at={{0}{low},{1.570796326794897}{high},{3.141592653589793}{high}},
      @clean radius axes at={%
        {0}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {3.141592653589793}{high}{low}{yshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  0 to 180/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=180},
      @degrees,
      @visualize zero=north,
      @inner radius axes at={{0}{low},{90}{high},{180}{high}},
      @clean radius axes at={%
        {0}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {180}{high}{low}{yshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  upper half/.style={
    @setup axes/.style={
      angle axis={scaling=min at 0 and max at 180, ticks},
      @visualize zero=north,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{yshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  upper half clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 180 and max at 0, ticks},
      @visualize zero=north,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{yshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{yshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  %
  % Lower half
  %
  lower half/.style={
    @setup axes/.style={
      angle axis={scaling=min at -180 and max at 0, ticks},
      @visualize zero=south,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{yshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  lower half clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 0 and max at -180, ticks},
      @visualize zero=south,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{yshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{yshift=\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  %
  % Right half
  %
  -pi half to pi half/.style={
    @setup axes/.style={
      @rad,
      angle axis={min value=-1.570796326794897, max value=1.570796326794897},
      @visualize zero=east,
      @inner radius axes at={{0}{low},{1.570796326794897}{low},{-1.570796326794897}{high}},
      @clean radius axes at={%
        {-1.570796326794897}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {1.570796326794897}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  -90 to 90/.style={
    @setup axes/.style={
      angle axis={min value=-90, max value=90},
      @degrees,
      @visualize zero=east,
      @inner radius axes at={{-90}{low},{0}{low},{90}{high}},
      @clean radius axes at={%
        {-90}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {90}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  right half/.style={
    @setup axes/.style={
      angle axis={scaling=min at -90 and max at 90, ticks},
      @visualize zero=east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  right half clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 90 and max at -90, ticks},
      @visualize zero=east,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{xshift=\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{xshift=-\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  %
  % Left half
  %
  left half/.style={
    @setup axes/.style={
      angle axis={scaling=min at 90 and max at 270, ticks},
      @visualize zero=west,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{xshift=\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  left half clockwise/.style={
    @setup axes/.style={
      angle axis={scaling=min at 270 and max at 90, ticks},
      @visualize zero=west,
      @inner radius axes at={{min}{low},{max}{high}},
      @clean radius axes at={%
        {min}{low}{high}{xshift=-\pgfkeysvalueof{/tikz/data visualization/angle axis/padding min}}{},%
        {max}{high}{low}{xshift=\pgfkeysvalueof{/tikz/data
            visualization/angle axis/padding max}}{options at=0 as
          [{style={draw=none}, no tick text}]}
      }
    }
  },
  %
  % Full circle
  %
  0 to 2pi/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=6.283185307179586},
      @rad,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{1.570796326794897}{high},{3.141592653589793}{high},{4.71238898038469}{low}},
      @clean radius axes at={{0}{low}{high}{}{}}
    }
  },
  -pi to pi/.style={
    @setup axes/.style={
      angle axis={min value=-3.141592653589793, max value=3.141592653589793},
      @rad,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{1.570796326794897}{high},{3.141592653589793}{high},{-1.57079632679489}{low}},
      @clean radius axes at={{0}{low}{high}{}{}}
    }
  },
  0 to 360/.style={
    @setup axes/.style={
      angle axis={min value=0, max value=360},
      @degrees,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{90}{high},{180}{high},{270}{low}},
      @clean radius axes at={{0}{low}{high}{}{}}
    }
  },
  -180 to 180/.style={
    @setup axes/.style={
      angle axis={min value=-180, max value=180},
      @degrees,
      @visualize zero=north east,
      @inner radius axes at={{0}{low},{90}{high},{180}{high},{-90}{low}},
      @clean radius axes at={{0}{low}{high}{}{}}
    }
  },
}%




%
% Pie-charts -- still under construction...
%

\tikzset{
  /tikz/data visualization/axis options/.cd,
  percent/.style={\tikz@dv@axis/scaling=0 at 0 and 1 at 3.6},
  full circle/.style={\tikz@dv@axis/scaling=min at 0 and max at 360},
  half circle/.style={\tikz@dv@axis/scaling=min at 0 and max at 180},
  quarter circle/.style={\tikz@dv@axis/scaling=min at 0 and max at 90}
}%




\endinput
