2016-08-01 45 views
2

Ich habe vor kurzem mit dem Punkt zu erstellen Flow-und Callgraphen eines ziemlich komplexen Montageprogramm. Alles in allem funktioniert das ganz gut, mit nur ein bisschen hickup. Wenn Sie eine Linie von einem Knoten innerhalb eines Clusters zu einem anderen Knoten in einem anderen Cluster zeichnen, verdoppelt sich die Linie manchmal.Dot Tool verdoppelt Pfeile

Ich habe eine abgespeckte Version meines Problems als Code und ein Punkt-Ausgabebild hinzugefügt.

Dank

digraph G { 

    ratio=auto; node[fontsize=12]; label="boot"; newrank=true; 

    { 
    node[shape=plaintext]; 
    1->2[arrowsize=0.7,penwidth=0.1]; 
    } 

    Reset->uart_init[arrowsize=0.7, penwidth=0.1]; 

    { rank=same; "Reset"; "1"; } 
    { rank=same; "uart_init"; "2"; } 

    /* terminalhooks cluster */ 
    subgraph cluster42 { 
    fontsize=12; 
    label="terminalhooks.asm"; 
    labelloc=b; 
    type->emit[arrowsize=0.7,penwidth=0.1]; 
    emit[label=<emit<BR/><FONT POINT-SIZE="8">Terminal redirection hooks<BR/>für eventuelle Umleitungen</FONT>>]; 
    } 

    /* stm-terminal cluster */ 
    subgraph cluster43 { 
    fontsize=12; 
    label="stm-terminal.asm"; 
    labelloc=b; 
    emit->serial_emit->serial_qemit[arrowsize=0.7,penwidth=0.1]; 
    serial_emit[label=<serial_emit<BR/><FONT POINT-SIZE="8">Ausgabe Char via UART</FONT>>]; 
    serial_qemit[label=<serial_qemit<BR/><FONT POINT-SIZE="8">Prüft TXE (Transmit Buffer Empty)</FONT>>]; 
    } 
    { rank=same; "type"; "emit"; "serial_emit"; "serial_qemit"; } 
} 

dot graph

Antwort

1

Ich habe keine Ahnung, warum dies geschieht, aber tailport=e scheint Zugabe zu beheben:

emit->serial_emit->serial_qemit[tailport=e,arrowsize=0.7,penwidth=0.1]; 
#       -----^----- 

Edit:

Es scheint, die newrank atr verursacht das Problem.

digraph G { 
    newrank=true; 
    subgraph cluster42 { 
     0; 
     1; 
     0->1; 
    }  
    subgraph cluster43 { 
     2; 
     3; 
     1->2->3; 
    }  
    { rank=same; 0; 1; 2; 3; } 
} 

produzieren:

pic1

aber wenn Sie entfernen:

newrank=true; 

Sie folgendes Ergebnis:

pic2

Edit 2:

digraph G { 
    rankdir=LR; 
    subgraph cluster42 { 
     0; 
     1; 
     0->1; 
    }  
    subgraph cluster43 { 
     2; 
     3; 
     1->2->3; 
    } 
} 

pic3

vielleicht können Sie auch tun mit komplexen Graphen zu:

Für dieses Beispiel Sie rankdir=LR und entfernen Sie die rank=same verwenden können.

+0

Aus irgendeinem Grund funktioniert es mit meinem Beispiel, obwohl es die Pfeile ziemlich vermasselt. Aber mit ein paar anderen Graphen Hinzufügen von tailport = e fügt sogar eine andere Zeile ... – Vinci

+0

@Vinci Blick auf meine Bearbeitung. Ist der 'newrank' notwendig? –

+0

Sie haben Recht, newrank verursacht es. Die Sache ist, dass ich Ränge und Cluster verwende, um die Kapselung von Assembler-Dateien zu zeigen ... Ohne NewRank wird der Kasten um die Funktionen herum nicht angezeigt, was das Interpretieren des Graphen viel schwieriger macht. – Vinci