% !TeX spellcheck = en_US
% !TeX root = tikz-ext-manual.tex
% Copyright 2022 by Qrrbrbirlbel
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%
\section{Shape: Circle Arrow}
\begin{pgflibrary}{ext.shapes.circlearrow}
 A circular shape named |circle arrow| that has an arc as its background path that can have an arrow tip.
 \inspiration{ShapeCircleArrow-Q}{ShapeCircleArrow-A}
\end{pgflibrary}
\begin{ext_shape}{circle arrow}
 This shape is an arrow whose path is an arc -- defined very similar to the |arc|%
 \indexPathOperationO{arc} path operation -- that can possibly be customized with
 arrow tips.

 \begin{key}{/\pgfext/circle arrow start angle=\meta{start angle} (initially \{\})}\keycompat{pgf}
 Sets the start angle.
 \end{key}
 \begin{key}{/\pgfext/circle arrow end angle=\meta{end angle} (initially \{\})}\keycompat{pgf}
 Sets the end angle.
 \end{key}
 \begin{key}{/\pgfext/circle arrow delta angle=\meta{delta angle} (initially \{\})}\keycompat{pgf}
 Sets the delta angle.
 \end{key}
 \begin{key}{/\pgfext/circle arrow arrows=%
   \meta{start arrow tip specification}-\meta{end arrow tip specification} (initially -)}\keycompat{pgf}
 The specification will be forwarded to |\pgfsetarrows|\indexCommandO{\pgfsetarrows}.
 \end{key}

 A few handful styles are pre-defined.
 \begin{key}{/\pgfext/circle arrow turn left north}\keycompat{pgf}
 Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340|
 and |circle arrow arrows = ->|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn left east}\keycompat{pgf}
 As above but |circle arrow start angle = 10|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn left west}\keycompat{pgf}
 As above but |circle arrow start angle = 280|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn left south}\keycompat{pgf}
 As above but |circle arrow start angle = 190|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn right north}\keycompat{pgf}
 Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340|
 and |circle arrow arrows = <-|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn right east}\keycompat{pgf}
 As above but |circle arrow start angle = 10|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn right west}\keycompat{pgf}
 As above but |circle arrow start angle = 280|.
 \end{key}
 \begin{key}{/\pgfext/circle arrow turn right south}\keycompat{pgf}
 As above but |circle arrow start angle = 190|.
 \end{key}

\begingroup
\catcode`\|=12
\catcode`\&=\active
\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow,matrix}]
\begin{tikzpicture}
\matrix[matrix of nodes, draw=none, row sep=1em, column sep=1em,
 every node/.style={draw=gray, shape=ext_circle arrow, ultra thick, inner sep=1em}
] (m) {
 |[ext/circle arrow turn left north]|  & |[ext/circle arrow turn left east]|   \\
 |[ext/circle arrow turn left west]|   & |[ext/circle arrow turn left south]|  \\
 |[ext/circle arrow turn right north]| & |[ext/circle arrow turn right east]|  \\
 |[ext/circle arrow turn right west]|  & |[ext/circle arrow turn right south]| \\
};
\end{tikzpicture}
\end{codeexample}
\endgroup
\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow},width=16cm]
\begin{tikzpicture}\Huge
\node[name=s, shape=ext_circle arrow,
 ext/circle arrow turn left west, shape example]
 {Circle Arrow\vrule width 1pt height 2cm};
\foreach \anchor/\placement in
 {north west/above left, north/above,
  north east/above right,
  west/left, center/above, east/right,
  mid west/right, mid/above, mid east/left,
  base west/left, base/below, base east/right,
  south west/below left, south/below,
  south east/below right,
  text/left, 10/right, 130/above}
  \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
    node[\placement] {\scriptsize\texttt{(s.\anchor)}};
\end{tikzpicture}
\end{codeexample}
\end{ext_shape}
\endinput