我想在节点前绘制一条粗的半透明箭头路径,但似乎我被困在它们后面:
如何在节点前面绘制一条路径?
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes, shadows, positioning}
\begin{document}
\definecolor{vhighlight}{RGB}{85,170,0}
\definecolor{vhighlight2}{RGB}{240,255,224}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\begin{tikzpicture}[node distance=5mm,
blockcolors/.style={
% The rest
thick,draw=black,
top color=white,
bottom color=black!10,
font=\sffamily\small
},
block/.style={
% The shape:
rectangle, minimum size=6mm, minimum width=12mm, minimum height=10mm,
node distance=5mm,
blockcolors,
drop shadow
},
every label/.style={
font=\sffamily\scriptsize
},
every node/.style={
font=\sffamily\small
},
>=latex
]
\node (A) [block, label={below:block 1}] {A};
\node (B) [block, right=of A, label={below:block 2}] {B};
\node (C) [block, right=of B, label={below:block 3}] {C};
\node (D) [block, below=of C, label={below:block 4}] {D};
\node (E) [block, below=of B, label={below:block 5}] {E};
\node (F) [block, below=of A, label={below:block 6}] {F};
\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth]
(A.south) -- (A) -- (B) -- (C) -- (D) -- (E) -- (F) -- (F.north);
\end{tikzpicture}
\end{document}
答案1
您的代码是正确的,并且线段绘制在“主”层中,位于先前绘制的框的顶部。问题是每个线段的起点和终点都在它所连接的节点的边缘。
当你指定 时(A) -- (B)
,TikZ 会很智能,找到连接这些节点中心的线与每个节点边界的交点。然后它会绘制连接边界的线。
如果您为节点指定了特定的锚点,则此行为将被停用。因此,您可以指定(A.center)--(B.center)
一条线连接这些节点的中心,并因此出现在这些节点的“上方”。
就你的情况而言:
\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth]
(A.south) -- (A.center) -- (B.center) -- (C.center) --
(D.center) -- (E.center) -- (F.center) -- (F.north);
将产生:
顺便说一句,您不需要声明 pgflayers 来执行此操作。
您可以使用循环使其更紧凑:
\draw [->, line width=1.5mm, red, rounded corners=1mm, opacity=0.25, >=stealth]
(A.south) \foreach \n in {A,...,F} { -- (\n.center) } -- (F.north);
更新
可以修复箭头尖的问题,箭头的透明度允许“看透”最后一段。您必须在透明度组中绘制整个路径(包括箭头):
\begin{scope}[opacity=0.25, transparency group]
\draw [->, line width=1.5mm, red, rounded corners=1mm, >=stealth]
(A.south) \foreach \n in {A,...,F} { -- (\n.center) } -- (F.north);
\end{scope}
结果:
答案2
我认为使用chains
库来放置节点会很有趣。
虽然也可以使用这个库来连接链接节点,但在这种情况下,在链完成后连接它们更容易。
绘图使用默认分配给链接节点的名称。这些名称的形式为chain-n
其中chain
是链的名称(chain
默认情况下),n
是链上节点的编号(从 开始1
)。
图书馆scopes
允许我们说
{
}
代替
\begin{scope}
\end{scope}
这在链接节点时尤其有用,因为通常需要范围。在这种情况下,它对于 也很有用transparency group
。
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{shadows,chains,scopes}
\begin{document}
\begin{tikzpicture}
[
start chain=going right,
node distance=5mm,
every on chain/.style={
thick,
draw=black,
top color=white,
bottom color=black!10,
font=\sffamily\small,
minimum width=12mm,
minimum height=10mm,
drop shadow,
label={below:block \tikzchaincount},
},
post join/.style={
-stealth,
line width=1.5mm,
red,
rounded corners=1mm,
},
every label/.style={
font=\sffamily\scriptsize
},
]
\node [on chain] {A};
\node [on chain] {B};
\node [on chain] {C};
\node [on chain=going below] {D};
{[continue chain=going left]
\node [on chain] {E};
\node [on chain] {F};
}
{[transparency group, opacity=.25]
\draw [post join] (chain-1.south) |- (chain-3.center) |- (chain-6.center) -- (chain-6.north);
}
\end{tikzpicture}
\end{document}