Organigramme Flèches divergentes et convergentes

Nov 24 2020

Question: J'ai du mal à diviser les flèches dans l'organigramme. J'ai essayé de regarder un code similaire mais je n'arrive pas à le reproduire. Comment puis-je obtenir le résultat idéal?

Recherche pertinente:

  • Flèches divergentes, tikz / pgf - organigramme
  • Ajustement de l'espace vertical et horizontal entre les nœuds dans l'organigramme tikz
  • Nœuds convergents et divergents dans un organigramme

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}

Sortie courant:

Sortie idéale:

Réponses

1 Zarko Nov 24 2020 at 14:35

Modifier: dans le diagramme, de nouveaux nœuds sont ajoutés selon vos besoins dans la question modifiée.

Dans MWE (exemple de travail minimal) ci-dessous sont comparés à votre fragment de code fait les modifications:

  • les nœuds sont organisés en trois chaînes (en utilisant la bibliothèque TikZ chains) où est pour le positionnement des nœuds la positioningbibliothèque utilisée et sa syntaxe (par ce que les distances entre les nœuds sont égales en déterminées par node distance = <below> and <right>)
  • les nœuds dans les chaînes sont liés par des flèches dessinées par l'instruction joindéfinie dans le chainspackage
  • les connexions entre les nœuds sont interrompues à quatre endroits grâce à l'utilisation de code suspend join
  • les connexions entre les nœuds, qui ne sont pas prises en compte dans join, sont dessinées séparément
\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}

produire:

C'est ce que vous recherchez?