2017-07-28 7 views
1

Ich erstelle eine (GraphViz) "Punkt" -Datei für eine bestimmte Menge von Knoten und Kanten. Die Knoten sind in y-Dimension mit Rang = gleich, in x-Dimension innerhalb des Rangs angeordnet. Die Kanten werden in der Reihenfolge sortiert, in der sie gezeichnet werden sollen. Leider respektiert "Punkt" nicht die Reihenfolge in der x-Dimension. Wenn es so wäre, würde ich ein kreuzungsfreies Layout für Flugzeug-Digraphen erreichen. Egal ob sie zyklisch oder azyklisch sind.Graph-Rendering-Software, die die relative Reihenfolge von Knoten und Kanten berücksichtigt

Meine Fragen:

  1. Wie ich „Punkt“ sagen kann, die relative Reihenfolge von Knoten zu respektieren und Kanten
  2. Gibt es eine Alternative zu „Punkt“, der die relative Reihenfolge respektiert, dh nimmt die Layout und macht das physikalische Rendering.

Sample.dot

Sorry, war nicht in der Lage den Punkt Datei zu. Sample.dot file

Antwort

0

Vielen Dank. Ich dachte "Rang = gleich; 0; 8;" bedeutet implizit dasselbe wie "rank = gleich; 0-> 8 [style = invis];". Wie auch immer, meine Sorge war nicht die Überquerung. Dies scheint ein Fehler zu sein, da genug Platz (6) und (2) vorhanden ist, um eine Linie zu zeichnen. Man muss alles ein wenig nach rechts verschieben. Mein Algorithmus generiert eine Reihenfolge, in der jeder Baum (grüne) Kante nach unten/rechts, jede horizontale (orange) Kante nach unten/links und jede hintere (rote) Kante nach oben/links gezogen werden kann. Ohne Übergänge, wenn der Graph eben ist. Um dies zu erreichen, muss (8) rechts von (0) gezeichnet werden. Ich bin wirklich glücklich, denn genau das passiert, wenn ich deine Technik benutze.

digraph { 
    graph [charset=latin1, size ="19,46, 11,12"] 
    node [shape=box, fontname="Comic Sans MS", fontsize=8, height=0.2, width=0.2, ordering=out] 
{ rank=same; 0 -> 8 [style=invis]; } 
{ rank=same; 1; } 
{ rank=same; 2; } 
{ rank=same; 5 -> 9; [style=invis]; } 
{ rank=same; 6 -> 7 -> 10; [style=invis]; } 
{ rank=same;3; } 
{ rank=same;4; } 
0 -> 1 [color=green] 
1 -> 2 [color=green] 
8 -> 2 [color=orange] 
2 -> 5 [color=green] 
5 -> 6 [color=green] 
6 -> 2 [color=red, tailport=w, headport=w] 
5 -> 7 [color=green] 
7 -> 4 [color=green] 
2 -> 3 [color=green] 
2 -> 9 [color=green] 
9 -> 10 [color=green] 
10 -> 3 [color=orange] 
3 -> 4 [color=orange] 
} 

und das Layout es 1

Verwandte Themen