Tengo un cubo como se indica a continuación. Quiero agregar un atributo de texto para el cubo, de modo que el texto debajo del cubo gire junto con la figura.
Esta es mi definición del cubo.
\tikzset{
annotated cuboid/.pic={
\tikzset{%
every edge quotes/.append style={midway, auto},
/cuboid/.cd,
#1
}
\draw [\cubeline,every edge/.append style={pic actions,\cubeback, opacity=.5}, pic actions]
(0,0,0) coordinate (o-\cubelabel) -- ++(-\cubescale*\cubex,0,0) coordinate (a-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (b-\cubelabel) edge coordinate [pos=1] (g-\cubelabel) ++(0,0,-\cubescale*\cubez) -- ++(\cubescale*\cubex,0,0) coordinate (c-\cubelabel) -- cycle
(o-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (d-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (e-\cubelabel) edge (g-\cubelabel) -- (c-\cubelabel) -- cycle
(o-\cubelabel) -- (a-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (f-\cubelabel) edge (g-\cubelabel) -- (d-\cubelabel) -- cycle;
},
/cuboid/.search also={/tikz},
/cuboid/.cd,
width/.store in=\cubex,
height/.store in=\cubey,
depth/.store in=\cubez,
units/.store in=\cubeunits,
scale/.store in=\cubescale,
label/.store in=\cubelabel,
line/.store in=\cubeline,
backline/.store in=\cubeback,
width=10,
height=10,
depth=10,
units=cm,
scale=.1,
line=draw,
backline=densely dashed
}
Mi código completo (MWE):
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\usetikzlibrary{quotes,arrows.meta, decorations.pathreplacing}
\tikzset{
annotated cuboid/.pic={
\tikzset{%
every edge quotes/.append style={midway, auto},
/cuboid/.cd,
#1
}
\draw [\cubeline,every edge/.append style={pic actions, \cubeback, opacity=.5}, pic actions]
(0,0,0) coordinate (o-\cubelabel) -- ++(-\cubescale*\cubex,0,0) coordinate (a-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (b-\cubelabel) edge coordinate [pos=1] (g-\cubelabel) ++(0,0,-\cubescale*\cubez) -- ++(\cubescale*\cubex,0,0) coordinate (c-\cubelabel) -- cycle
(o-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (d-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (e-\cubelabel) edge (g-\cubelabel) -- (c-\cubelabel) -- cycle
(o-\cubelabel) -- (a-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (f-\cubelabel) edge (g-\cubelabel) -- (d-\cubelabel) -- cycle;
;
},
/cuboid/.search also={/tikz},
/cuboid/.cd,
width/.store in=\cubex,
height/.store in=\cubey,
depth/.store in=\cubez,
units/.store in=\cubeunits,
scale/.store in=\cubescale,
label/.store in=\cubelabel,
line/.store in=\cubeline,
backline/.store in=\cubeback,
width=10,
height=10,
depth=10,
units=cm,
scale=.1,
line=draw,
backline=densely dashed,
}
\newcommand{\cuboid}[2]{
\begin{tikzpicture}
\pic [#1] at (0,0) {annotated cuboid={#2}};
\end{tikzpicture}
}
\tikzstyle{cubecontainer}=[outer sep = 0pt, inner sep= 0pt]
\tikzstyle{connectarrow}=[-{Triangle[angle=60:0pt 2]}, line width= 10pt, shorten >=3mm,shorten <=3mm, draw=gray!60]
\begin{document}
\begin{tikzpicture}
\node[cubecontainer] (a) at (0,0) {\cuboid{fill=cyan!20, text=green!50!black, draw=black}{label=A, width=6, height=20, depth=15, units=mm}};
%\node[cubecontainer] (b) at (2,0) {\cuboid{fill=cyan!20, text=green!50!black, draw=black}{label=B, width=6, height=20, depth=15, units=mm}};
%\node[cubecontainer] (c) at (5,0) {\cuboid{fill=cyan!20, text=green!50!black, draw=black}{label=C, width=6, height=20, depth=15, units=mm}};
%%\node[draw,dotted,fit=(a) (b) (c)] {};
\end{tikzpicture}
\end{document}
Respuesta1
Si un nodo simple como este: \node [below of=a, node distance=1.4cm,rotate=45,xshift=-1cm] (critical) {20x30x20};
es demasiado costoso para usted, puede configurar la etiqueta dentro tikzset
del contenedor de cubos, para la rotación puede usar \rotatebox{45}{#1}
. #1
es la etiqueta, definida en el documento:
\tikzset{cubecontainer/.style={outer sep= 0pt, inner sep= 0pt,label={265:\rotatebox{45}{#1}}}
}%optional with red background ... [fill=red]265 ....
265
es el ángulo de posicionamiento, contado en sentido antihorario desde 0=este hasta 360=este. (Por un cuadrado: 0=este, 90=norte, 180=oeste, 270=sur,... )
... y usarlo para etiquetar el nodo con etiqueta = 20x20x30
( \node[cubecontainer=20x20x30]
):
\node[cubecontainer=20x20x30] (a) at (0,0) {\cuboid{fill=cyan!20, text=green!50!black, draw=black}{label=A, width=6, height=20, depth=15, units=mm}};
.
EDITAR: 2.Version of cubecontainer
- Cambie el tamaño de fuente con lo siguientecubecontainer/.style
\tikzset{cubecontainer/.style={outer sep= 0pt, inner sep= 0pt,label={265:\rotatebox{45}{\Huge #1}}} }
- Versión:
- Versión: tamaño de fuente (\Enorme)
(Comparación de la primera (izquierda) y la segunda versión (derecha))
MWE:
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\usetikzlibrary{quotes,arrows.meta, decorations.pathreplacing}
\tikzset{
annotated cuboid/.pic={
\tikzset{%
every edge quotes/.append style={midway, auto},
/cuboid/.cd,
#1
}
\draw [\cubeline,every edge/.append style={pic actions, \cubeback, opacity=.5}, pic actions]
(0,0,0) coordinate (o-\cubelabel) -- ++(-\cubescale*\cubex,0,0) coordinate (a-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (b-\cubelabel) edge coordinate [pos=1] (g-\cubelabel) ++(0,0,-\cubescale*\cubez) -- ++(\cubescale*\cubex,0,0) coordinate (c-\cubelabel) -- cycle
(o-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (d-\cubelabel) -- ++(0,-\cubescale*\cubey,0) coordinate (e-\cubelabel) edge (g-\cubelabel) -- (c-\cubelabel) -- cycle
(o-\cubelabel) -- (a-\cubelabel) -- ++(0,0,-\cubescale*\cubez) coordinate (f-\cubelabel) edge (g-\cubelabel) -- (d-\cubelabel) -- cycle;
;
},
/cuboid/.search also={/tikz},
/cuboid/.cd,
width/.store in=\cubex,
height/.store in=\cubey,
depth/.store in=\cubez,
units/.store in=\cubeunits,
scale/.store in=\cubescale,
label/.store in=\cubelabel,
line/.store in=\cubeline,
backline/.store in=\cubeback,
width=10,
height=10,
depth=10,
units=cm,
scale=.1,
line=draw,
backline=densely dashed,
}
\newcommand{\cuboid}[2]{
\begin{tikzpicture}
\pic [#1] at (0,0) {annotated cuboid={#2}};
\end{tikzpicture}
}
\tikzset{cubecontainer/.style={outer sep= 0pt, inner sep= 0pt,label={[fill=white]265:\rotatebox{45}{#1}}}
}
%\tikzset{cubecontainer/.style={outer sep= 0pt, inner sep= 0pt,label={265:\rotatebox{45}{\Huge #1}}} }
\tikzstyle{connectarrow}=[-{Triangle[angle=60:0pt 2]}, line width= 10pt, shorten >=3mm,shorten <=3mm, draw=gray!60]
\begin{document}
\begin{tikzpicture}
\node[cubecontainer=20x20x30] (a) at (0,0) {\cuboid{fill=cyan!20, text=green!50!black, draw=black}{label=A, width=6, height=20, depth=15, units=mm}};
%\node [below of=a, node distance=1.4cm,rotate=45,xshift=-1cm] (critical) {20x30x20};
\end{tikzpicture}
\end{document}