Schemat blokowy rozbieżne i zbieżne strzałki
Nov 24 2020
Pytanie: staram się podzielić strzałki na schemacie blokowym. Próbowałem spojrzeć na podobny kod, ale nie mogę go odtworzyć. Jak mogę uzyskać idealną wydajność?
Odpowiednie badania:
- Strzałki rozbieżne, tikz / pgf - schemat blokowy
- Regulacja odstępu w pionie i poziomie między węzłami na schemacie blokowym Tikz
- Zbieżne i rozbieżne węzły na schemacie blokowym
MWE:
\begin{document}
\begin{center}
% Define block styles
\tikzstyle{decision} = [diamond, draw, fill=blue!20,
text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt]
\tikzstyle{block} = [rectangle, draw, fill=blue!20,
text width=4.5cm, text badly centered, rounded corners, minimum height=4em, minimum width=5cm]
\tikzstyle{line} = [draw, -latex']
% \tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm, minimum height=2em]
\begin{tikzpicture}[node distance = 2.5cm, auto]
% Place nodes
\node [block, below of=dav] (install) {Install fan, heat sink, thermal dough and 4 jumpers on the board};
\node [block, below of=install] (voltage) {Complete Voltage Testing};
\node [block, below of=voltage] (recordvalue) {Record serial number Voltage Testing is a pass or fail to spreadsheet};
\node [block, below left of=recordvalue, node distance=6.5cm] (flashTX) {Flash as Tx};
\node [block, below right of=recordvalue, node distance=6.5cm] (flashRX) {Flash as Rx};
\node [block, below of=flashTX] (testflashTX) {Test Tx with \textit{Golden Rx}};
\node [block, below of=flashRX] (testflashRX) {Test Rx with \textit{Golden Tx}};
\node [decision, below of=recordvalue, node distance=10cm] (passfail) {Pass/Fail};
% Draw edges
\path [line] (dav) -- (install);
\path [line] (install) -- (voltage);
\path [line] (voltage) -- (recordvalue);
\path [line] (recordvalue) |- (flashTX);
\path [line] (recordvalue) |- (flashRX);
\path [line] (flashTX) -- (testflashTX);
\path [line] (flashRX) -- (testflashRX);
\end{document}
Prąd wyjściowy:

Idealne wyjście:

Odpowiedzi
1 Zarko Nov 24 2020 at 14:35
Edycja: w diagramie są dodawane nowe węzły, zgodnie z wymaganiami edytowanego pytania.
W MWE (minimalny przykład roboczy) poniżej w porównaniu z fragmentem kodu dokonane zmiany:
- węzły są zorganizowane w trzy łańcuchy (z wykorzystaniem biblioteki TikZ
chains
), gdzie służy do pozycjonowania węzłów używanapositioning
biblioteka i jej składnia (przez to odległości między węzłami są równe w określonych przeznode distance = <below> and <right>
) - węzły w łańcuchach są połączone strzałkami narysowanymi instrukcją
join
zdefiniowaną wchains
pakiecie - połączenia między węzłami są przerywane w czterech miejscach za pomocą kodu
suspend join
- połączenia między węzłami, które nie są uwzględniane w programie
join
, są rysowane oddzielnie
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
chains,
positioning,
shapes.geometric}
\begin{document}
\begin{tikzpicture}
\makeatletter
\tikzset{
node distance = 4mm and 2mm,
start chain = A going below,
arr/.style = {-Stealth},
base/.style = {draw, fill=blue!30, font=\small,
text width=42mm, minimum height=8mm,
align=center},
block/.style = {base, rounded corners},
decision/.style = {base, diamond, aspect=1.6,
text width=21mm, inner xsep=0pt},
suspend join/.code={\def\tikz@after@path{}}
}
\makeatother
% Place nodes
% main branch
\begin{scope}[nodes={block, on chain=A, join=by arr}]
\node {Get Dante AV board from batch}; % name: A-1
\node {Install fan, heat sink,
thermal dough and 4 jumpers on the board};
\node {Complete Voltage Testing};
\node {Record serial number Voltage Testing
is a pass or fail to spreadsheet}; % name: A-4
\end{scope}
\coordinate[below=of A-4] (aux1);
\begin{scope}[nodes={block, on chain=A, join=by arr}]
% first left branch
% here had to be discontinued "join" instruction from main branch
\node [suspend join, % name: A-5
below left=of aux1 -| A-4.west] {Flash as Tx};
\node {Test Tx with \textit{Golden Rx}};
% first right branch
% here had to be discontinued "join" instruction from main branch again
\node [suspend join, % name; A-7
below right=of aux1 -| A-4.east] {Flash as Rx};
\node {Test Rx with \textit{Golden Tx}};
\end{scope}
% decision
\coordinate[below=of A-6.south -| aux1] (aux2);
\node [decision, below=of aux2] (decision) {Pass/Fail};
% end branches
\begin{scope}[nodes={block, on chain=A, join=by arr}]
% left end branch
% here had to be discontinued "join" instruction from main branch again
\node [suspend join,
below=of decision -| A-6] {Flash P}; % name A-9
\node {Test T};
\node {Record};
% right end branch
% here had to be discontinued "join" instruction from left end branch
\node [suspend join,
below=of decision -| A-8] {Flash F}; % name A-12
\node {Test T};
\end{scope}
% Draw edges which are not considered in join
% left
\draw[arr] (A-4) -- (aux1) -| (A-5);
\draw[arr] (A-6) |- (aux2) -- (decision);
\draw[arr] (decision) -| (A-9) node[pos=0.25,above] {Pass};
% right
\draw[arr] (aux1) -| (A-7);
\draw (A-8) |- (aux2);
\draw[arr] (decision) -| (A-12) node[pos=0.25,above] {Fail};
\end{tikzpicture}
\end{document}
produkować:

Czy to jest to, czego szukasz?