Tipps und Tricks

Hinzufügen eines unsichtbaren Stammknotens zum Layout

Wenn der Graph mehrere Baumstrukturen enthält, die voneinander getrennt sind, platziert das Layout sie einzeln nebeneinander. Jede verbundene Komponente hat eine eigene radiale Struktur mit kreisförmigen Ebenen. Manchmal ist es jedoch angemessen, alle verbundenen Komponenten in einer einzigen kreisförmigen Ebenenstruktur zu erfassen. Konzeptionell erfolgt dies durch das Hinzufügen eines unsichtbaren Stammknotens in der Mitte und das Verbinden aller nicht verbundener Baumstrukturen mit diesem Stammknoten. Abbildung Layout verbundener Komponenten ohne und mit unsichtbarem Stammknoten zeigt den Effekt der Verwendung eines unsichtbaren Stammknotens. Dies funktioniert nur, wenn der generische Mechanismus für das Layout verbundener Komponenten inaktiviert ist.
Gehen Sie zum Hinzufügen eines unsichtbaren Stammknotens zum Layout wie folgt vor:
Rufen Sie die folgenden Methoden auf:
treeLayout.setLayoutOfConnectedComponentsEnabled(false);
treeLayout.setInvisibleRootUsed(true);
Abbildung
von Baumstrukturlayouts, die die generische Verarbeitung nicht verbundener Graphen im Vergleich zur Verwendung
eines unsichtbaren Stammknotens zeigt
Layout verbundener Komponenten ohne und mit unsichtbarem Stammknoten

Gleichmäßiger Abstand für den ersten Kreis

Der Radialmodus ist so konzipiert, dass der Platz so optimiert wird, dass die Kreise einen kleinen Radius haben und der gesamte Platz für das vollständige Layout klein ist. Um dieses Ergebnis zu erzielen, kann der Layoutalgorithmus größere Lücken in den inneren Kreisen erstellen, um den Platz der äußeren Kreise besser nutzen zu können. Er kann Kreise mit ungleichmäßigem Abstand erstellen, insbesondere für den ersten Kreis, wenn alle Knoten denselben übergeordneten Knoten haben.
Um diesen Effekt zu vermeiden, können Sie erzwingen, dass die Knoten im ganzen ersten Kreis in gleichmäßigen Abständen verteilt werden. Je nach Struktur des Graphen kann dies dazu führen, dass das Gesamtlayout mehr Platz in den anderen Kreisen verbraucht, aber der Ergebnisgraph ist möglicherweise ansehnlicher.
Gehen Sie zum Aktivieren gleichmäßiger Abstände wie folgt vor:
Verwenden Sie die Methode setFirstCircleEvenlySpacing:
treeLayout.setFirstCircleEvenlySpacing(true);
Abbildung von
Baumstrukturlayouts, die den Parameter für einen gleichmäßigen Abstand des ersten Kreises veranschaulicht
Gleichmäßiger Abstand für den ersten Kreis

Für Experten: Alternierende Knotenanordnung für alle Ebenen erzwingen

Wenn der Layoutmodus ALTERNATING_RADIAL verwendet wird, prüft das Layout, ob durch eine alternierende Knotenanordnung in einer Ebene Platz eingespart werden kann. Wenn kein Platz eingespart werden kann, verwendet das Layout die normale radiale Anordnung. Deshalb liefern der Radialmodus und der alternierende Radialmodus für viele Graphen mit wenigen Knoten dasselbe Ergebnis, weil die alternierende Anordnung in keiner Ebene Platz einspart. Es ist möglich, die Platzprüfung zu inaktivieren, d. h., um eine alternierende Anordnung für alle Ebenen zu erzwingen, selbst wenn diese zu einer Verschwendung von Platz führt.
Verwenden Sie die Methode setAllLevelsAlternating:
treeLayout.setAllLevelsAlternating(true);

Für Experten: Mehrere Kreise pro alternierender Ebene

Wenn der Layoutmodus ALTERNATING_RADIAL verwendet wird, platziert das Layout die Knoten derselben Ebene abwechselnd in zwei Kreisen anstatt in einem einzigen Kreis. Es ist auch möglich, die Anzahl der Kreise zu erhöhen.
Verwenden Sie die Methode setNumberOfAlternatingCircles:
treeLayout.setNumberOfAlternatingCircles(3);
In diesem Fall werden drei Kreise verwendet. Das bedeutet, wenn das Flag allLevelsAlternating auf true gesetzt ist, platziert das Layout jede Ebene von Knoten auf drei alternierenden Kreisen. Wenn das Flag allLevelsAlternating auf false gesetzt ist, prüft das Layout, ob jede Ebene mehr Platz benötigt, um die Knoten auf einem Kreis oder auf drei Kreisen zu platzieren. Hohe Werte für die Anzahl alternierender Kreise dürfen nicht verwendet werden, weil sie den Algorithmus verlangsamen und Linkkreuzungen verursachen können.
Wenn Sie die Anzahl alternierender Kreise auf 0 setzen und das Flag allLevelsAlternating den Wert false hat, hat diese eine Sonderbedeutung. In diesem Fall versucht ein heuristisches Verfahren, die optimale Anzahl an Kreisen pro Ebene automatisch zu berechnen. Deshalb kann jede Ebene eine andere Anzahl an Kreisen haben, die von der Anzahl der Knoten und den gleichgeordneten Beziehungen zwischen den Knoten abhängig ist.

Für Experten: Maximalen Winkel für untergeordnete Knoten festlegen

Wenn ein Knoten viele untergeordnete Knoten hat, können diese über einen größeren Teil des Kreises verteilt und deshalb um nahezu 360 Grad um den Knoten herum platziert sein. Dies kann zu Überschneidungen von Links mit einigen Knoten führen. Diese Mangel kann behoben werden, indem das Offset zwischen übergeordnetem Knoten und untergeordneten Knoten erhöht wird. Dies wirkt sich jedoch global auf das Layout aus, d. h., das auch Knoten betroffen sind, die diesen Mangel nicht aufweisen. Um eine solche globale Änderung zu verhindern, können Sie den maximalen Winkel zwischen den beiden Strahlen vom übergeordneten Knoten (sofern dieser nicht der Stammknoten ist) zu seinen beiden äußeren untergeordneten Knoten beschränken. Diese Aktion erhöht das Offset zwischen übergeordnetem Knoten und untergeordneten Knoten nur, wenn es erforderlich ist.
In der Abbildung Maximaler Winkel für untergeordnete Knoten können Sie im Layout auf der linken Seite sehen, dass sich viele Links mit anderen Knoten überschneiden. Im Layout auf der rechten Seite können Sie sehen, wie dieses Problem durch Definition eines maximalen Winkel für untergeordnete Knoten zwischen den beiden Strahlen vom übergeordneten Knoten zu seinen beiden äußeren untergeordneten Knoten gelöst wurde.
Abbildung von Baumstrukturlayouts, die den Parameter für den maximalen Winkel für untergeordnete Knoten veranschaulicht
Maximaler Winkel für untergeordnete Knoten
Gehen Sie wie folgt vor, um einen Winkel in Grad zu definieren.
Verwenden Sie die Methode setMaxChildrenAngle:
treeLayout.setMaxChildrenAngle(100);
Empfohlene Werte sind 30 bis 180. Wenn Sie den Parameter auf den Wert 0 setzen, ist der Winkel nicht beschränkt. Die Berechnung des Winkels ist über 180 Grad und bei einem Seitenverhältnis ungleich 1,0 nicht präzise.