20

Consider this minimal example. How can I get the arrow to 'rotate' like everything else is rotating in the diagram? I have tried using transform shape but this does not apply to the arrows.

enter image description here enter image description here

\documentclass[tikz,margin=5pt]{standalone}
\usetikzlibrary{3d}

\begin{document}

\begin{tikzpicture}
\draw[left color=blue,right color=red] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
\node at (0.5,2) (Label) {Test}; 
\draw[->,line width=1mm] (Label) -- (0.5,1.1);
\end{tikzpicture}

\begin{tikzpicture}[y={(0.5cm,-0.5cm)},x={(0.5cm,1cm)}, z={(0cm,1cm)}]
\begin{scope}[canvas is yz plane at x=0,transform shape]
\draw[left color=blue,right color=red] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
\node at (0.5,2) (Label) {Test}; 
\draw[->,line width=1mm] (Label) -- (0.5,1.1);
\end{scope}
\end{tikzpicture}

\end{document}

Another example of the perspective of the arrow being 'off'.

\draw[->,line width=1mm] (1,1.5) -- (0,1.5);

enter image description here enter image description here

Milo
  • 9,440
  • Instead of [y={(0.5cm,-0.5cm)},x={(0.5cm,1cm)}, z={(0cm,1cm)}]. Use a canvas transform={cm=...}. – Symbol 1 May 18 '18 at 00:49
  • You can read off the transformation "matrix" by putting \pgfgettransform{\mytrafo} \typeout{\mytrafo} in your scope. @Symbol1 canvas transform or transform canvas? –  May 18 '18 at 01:01
  • @marmot You are right. Presumably transform canvas={yslant=1}. – Symbol 1 May 18 '18 at 01:02

1 Answers1

19

The pgfmanual is still full of surprises (at least for me ;-). Here is a solution that works for explicit coordinates but not for symbolic ones like (Label1). (Only @Symbol 1 may do the symbolic ones, I guess. ;-) The command I was looking for is \pgflowlevelsynccm.

\documentclass[tikz,margin=5pt]{standalone}
\usetikzlibrary{3d}
\begin{document}

\begin{tikzpicture}[y={(0.5cm,-0.5cm)},x={(0.5cm,1cm)}, z={(0cm,1cm)}]
\begin{scope}[canvas is yz plane at x=0,transform shape]
\draw[left color=blue,right color=red] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
\node at (0.5,2) (Label) {Test}; 
\pgflowlevelsynccm
\draw[->,line width=1mm] (0.5,1.8) -- (0.5,1.1);
\end{scope}
\begin{scope}[canvas is yz plane at x=2,transform shape]
\draw[left color=blue,right color=red] (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle;
\node at (0.5,2) (Label) {Test};
\pgflowlevelsynccm
\draw[->,line width=1mm] (1,1.5) -- (0,1.5);
\end{scope}
\end{tikzpicture}

\end{document}

enter image description here

  • 1
    The reason why it "does not work" for symbolic coordinates is that e.g. south in (node.south) changes its meaning under the coordinate transformations. –  May 18 '18 at 16:12