Diagrama de flujo flechas divergentes y convergentes

Nov 24 2020

Pregunta: Estoy luchando por dividir las flechas en el diagrama de flujo. He intentado ver un código similar pero parece que no puedo reproducirlo. ¿Cómo puedo obtener el resultado ideal?

Investigación relevante:

  • Flechas divergentes, tikz / pgf - diagrama de flujo
  • Ajuste del espacio vertical y horizontal entre nodos en el diagrama de flujo tikz
  • Nodos convergentes y divergentes en un diagrama de flujo

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}

Salida de corriente:

Salida ideal:

Respuestas

1 Zarko Nov 24 2020 at 14:35

Editar: en el diagrama se agregan nuevos nodos según lo requiera en la pregunta editada.

En MWE (ejemplo de trabajo mínimo) a continuación, se comparan los cambios con el fragmento de código:

  • los nodos están organizados en tres cadenas (usando la biblioteca TikZ chains) donde es para el posicionamiento de los nodos usados positioningbiblioteca y su sintaxis (por esto, las distancias entre los nodos son iguales en determinadas por node distance = <below> and <right>)
  • los nodos en cadenas están vinculados por flechas dibujadas por instrucción joindefinida en el chainspaquete
  • las conexiones entre nodos se interrumpen en cuatro lugares mediante el uso de código suspend join
  • las conexiones entre nodos, que no se consideran en join, se dibujan por separado
\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}

Produce:

¿Es esto lo que buscas?