TikZ - Accediendo al inicio de un camino

TikZ - Accediendo al inicio de un camino

Sé que puedo acceder al final de una ruta en TikZ nombrando la coordenada como con:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{svg.path}

\begin{document}

\begin{tikzpicture}
\draw [green] svg {M201.1,673.2c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
        c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
        c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2c13.3-24,22.4-56.5,38.6-85.9} coordinate (End);
\fill [red] (End) circle (4pt);
\end{tikzpicture}

\end{document}

¿Cómo puedo acceder al inicio del camino de la misma forma?

Respuesta1

¡Eso es complicado! La svgsintaxis ataja gran parte del mecanismo de construcción de rutas de TikZ, por lo que la solución obvia coordinate[pos=0] (Start)no parece funcionar.

Entonces, este método obtiene la ruta una vez que se ha construido y elimina la coordenada inicial. Luego crea una coordenada TikZ en ese punto.

\documentclass{standalone}

%\url{http://tex.stackexchange.com/q/364315/86}
\usepackage{tikz}
\usetikzlibrary{svg.path}

\makeatletter

\def\tikz@startcoord#1#2#3#4\pgf@stop#5{%
\begingroup
\pgftransformreset
  \pgftransformshift{\pgfpoint{#2}{#3}}%
  \pgfnode{coordinate}{center}{}{#5}{}%
  \endgroup
  }

\tikzset{
  coordinate at start/.code={
    \tikz@addmode{%
      \pgfsyssoftpath@getcurrentpath\@temp
      \expandafter\tikz@startcoord\@temp\pgf@stop{#1}
    }%
  }
}
\makeatother

\begin{document}

\begin{tikzpicture}
\begin{scope}[xshift=1cm]
\draw [coordinate at start=Start,green,yshift=2cm] svg {M201.1,673.2c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
        c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
        c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2c13.3-24,22.4-56.5,38.6-85.9} coordinate (End);
\end{scope}
\fill [red] (End) circle (4pt);
\fill [blue] (Start) circle (4pt);
\end{tikzpicture}

\end{document

}

Puede que haya una forma más sencilla de hacer esto...


Actualizado para ignorar la transformación de coordenadas actual (de lo contrario, se aplicarán dos veces).

Respuesta2

Probablemente un poco más crudo que los requisitos de OP, pero si dividir la ruta svg es tolerable, entonces poner una coordenada después del primer movimiento puede funcionar:

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{svg.path}
\begin{document}
\begin{tikzpicture}
\draw [green, xshift=25] 
  svg {M201.1,673.2} 
  coordinate (Start)
  svg {c1.4-39.8,2-52.2,18.2-70.8c11.7-13.5,18.3-24.3-7.7-49.4
       c-39.3-38-43.2-59.2,1-90.2c18.1-12.7,67.1-20.2,25.4-36.6
       c-18.2-7.2-23.5-9.7-26.9-39.2c-3-26.7-17.7-28.2-37.7-35
       c-20-6.9-87.7-28.8-50.2-78.2c23.5-31,58.6-73.9,83.1-118.2
       c13.3-24,22.4-56.5,38.6-85.9}
  coordinate (End);
\fill [blue] (Start) circle [radius=.1];
\fill [red] (End) circle [radius=.1];
\end{tikzpicture}
\end{document}

información relacionada