Die folgenden Optionen sind nur für das Layout mit langen Links gültig.
Weitere Hindernisse angeben
Der Algorithmus für das Layout mit langen Links betrachtet Knoten als Hindernisse, die
nicht gekreuzt werden dürfen, und Links als Hindernisse, die in einem Winkel von 90 Grad (ungefähre Angabe, wenn der direkte Linkstil verwendet wird) gekreuzt, aber nicht geschnitten werden dürfen.

Kreuzung und Überschneidung
Beispiel für die Festlegung weiterer Hindernisse (Link-Layout-Algorithmus)
Wenn eine Anwendung weitere Hindernisse erfordert, die weder Links noch Knoten sind, können diese wie folgt angegeben werden:
Rufen Sie Folgendes auf:
layout.addRectObstacle(rect);
layout.addLineRectObstacle(rect);
layout.addLineObstacle(p1, p2);
Rechteckige Hindernisse verhalten sich wie Knoten: Links dürfen die Rechtecke nicht schneiden.
Linienhindernisse verhalten sich wie Linksegmente:
Andere Links können die Liniensegmente kreuzen, aber nicht schneiden.
Diese Hinderniseinstellungen können wie folgt entfernt werden:
layout.removeAllLineObstacles();
layout.removeAllRectObstacles();
Strafen für variable Endpunkte
Wenn die Abschlusspunkte der Links nicht fest sind, verwendet der
Algorithmus ein heuristisches Verfahren zur Berechnung der Abschlusspunkte jedes Links.
Er untersucht alle freien Rasterpunkte, die nah am Rand des Anfangs- und des Endknotens liegen, und weist jedem Rasterpunkt eine
Gewichtung zu.
Wenn ein Filter für die Knotenseite installiert ist, richtet sich die Gewichtung danach, ob die Knotenseite
zulässig ist oder nicht.
Eine präzisiere Methode zur Beeinflussung der Auswahl von Abschlusspunkten
ist der Filter für Abschlusspunkte.
Er ermöglicht dem Benutzer, die Gewichtung für jeden Rasterpunkt festzulegen.
Beispiel für die Festlegung des Filters für Abschlusspunkte (Link-Layout-Algorithmus)
Ein Filter für Abschlusspunkte ist eine Klasse, die die Schnittstelle
ibm_ilog.graphlayout.longlink.LongLinkTerminationPointFilter implementiert, die die folgende Methode definiert:
getPenalty(graphModel, link, origin, node, point, side, proposedPenalty)
Zur Auswahl von
origin
- oder Zielpunkt des Eingabe-link
s
wird der Eingabepoint
(ein Rasterpunkt auf der
Eingabeside
des node
s) untersucht.
Die proposedPenalty
wird mithilfe des heuristischen Standardverfahrens
des Algorithmus berechnet.
Sie können eine geänderte Gewichtung oder
Number.MAX_VALUE
zurückgeben, um den Rasterpunkt abzulehnen.
Wenn der Rasterpunkt abgelehnt wird, wird er nicht als Abschlusspunkt für den Link ausgewählt.
Der Filter für Abschlusspunkte kann mit der Methode setTerminationPointFilter definiert werden.
layout.setTerminationPointFilter(new MyTerminationPointFilter());
Phasen für das Verlegen von Linkpfaden bearbeiten
Wie bereits in Algorithmus für Layout mit langen Links erwähnt, bearbeitet
der Algorithmus zuerst jeden Link einzeln und wendet dann eine Phase zur Reduktion von Kreuzungen
auf alle Links an.
Um einen Pfad für einen einzelnen Link zu ermitteln, prüft der Algorithmus zuerst,
ob ein Verlegen des Links (z. B. in Form einer geraden Linie oder einer Linie mit nur einer Kurve) möglich ist.
Wenn dieser Pfadtyp nicht möglich ist, verwendet der Algorithmus
einen ausgereiften, aber zeitaufwendigeren Rastersuchalgorithmus mit Rückverfolgung, um einen Pfad
mit vielen Kurven zu finden.
Beispiel für die Bearbeitung der Phasen für das Verlegen von Links (Link-Layout-Algorithmus)
Gehen Sie wie folgt vor, um die Phase zu inaktivieren, in der eine gerade Linie (siehe
straight-line) oder ein Pfad mit nur einer Kurve gesucht wird:
Verwenden Sie die Methode setStraightRouteEnabled:
layout.setStraightRouteEnabled(true);
Die Suche mit Rückverfolgung nach einem Pfad mit vielen Kurven kann
auf mehrere Arten durchgeführt werden.
Eine komfortable Methode ist die Angabe der maximal zulässigen Zeit für die Suche eines Pfads für jeden Link.
Beispiel für die Angabe der rückverfolgbaren Schritte (Link-Layout-Algorithmus)
Sie können die maximale Anzahl an rückverfolgbaren Schritten angeben.
Verwenden Sie die Methode setMaxBacktrack:
layout.setMaxBacktrack(25000);
Standardmäßig ist die maximale Anzahl rückverfolgbarer Schritte 30000.
Beispiel für die Angabe der maximal zulässigen Zeit für die Pfadsuche (Link-Layout-Algorithmus)
Gehen Sie wie folgt vor, um die maximal zulässige Zeit für die Suche eines Pfads für jeden Link festzulegen:
Verwenden Sie die Methode setAllowedTimePerLink.
layout.setAllowedTimePerLink(2500);
Standardmäßig ist die zulässige Zeit pro Link 2000 Millisekunden (2 Sekunden).
Abschließend können Sie festlegen, wie viele Schritte in der Phase zur Reduktion der Kreuzungen ausgeführt werden müssen.
Beispiel für die Festlegung der Anzahl der Schritte in der Phase zur Reduktion von Kreuzungen (Link-Layout-Algorithmus)
Gehen Sie wie folgt vor, um festzulegen, wie viele Schritte in der Phase zur Reduktion der Kreuzungen ausgeführt werden müssen:
Verwenden Sie die Methode setNumberCrossingReductionIterations.
layout.setNumberCrossingReductionIterations(3);
Beispiel für das Inaktivieren der Reduktion der Kreuzungen (Link-Layout-Algorithmus)
Sie können die Reduktion der Kreuzungen vollständig inaktivieren.
Verwenden Sie die Methode setCrossingReductionEnabled.
layout.setCrossingReductionEnabled(false);
Rückgriffsmechanismus
Wenn sich einer der Endknoten in einer Enklave befindet, ist der Algorithmus für das Layout mit langen Links
unter Umständen nicht in der Lage, einen Pfad für einen Link zu finden.
In Knoten in einer Enklave befindet sich der rosa Knoten
in einer Enklave.
In diesem Fall kann der Suchalgorithmus mit Rückverfolgung keinen Pfad ohne sich schneidende Knoten finden.
Der Suchalgorithmus mit Rückverfolgung kann auch scheitern, wenn die Situation so komplex ist, dass die Suche die
zulässige Zeit pro Link überschreitet.

Knoten in einer Enklave
Wenn der Suchalgorithmus mit Rückverfolgung keinen Pfad findet,
wird ein einfacher Rückgriffsmechanismus angewendet, der einen Pfad mit einer Knotenüberschneidung
erstellt.
Beispiel für das Inaktivieren des Rückgriffsmechanismus (Link-Layout-Algorithmus)
Gehen Sie zum Inaktivieren des Rückgriffsmechanismus wie folgt vor:
Verwenden Sie die Methode setFallbackRouteEnabled:
layout.setFallbackRouteEnabled(false);
Wenn der Rückgriffsmechanismus inaktiviert ist, werden diese Links
gar nicht verlegt und behalten dieselbe Form wie vor dem Layout.
In Java-Code können Sie die Links, die nicht verlegt werden können,
auf die übliche Weise ohne den Rückgriffsmechanismus abrufen.
Beispiel für das Abrufen von Links ohne den Rückgriffsmechanismus (Link-Layout-Algorithmus)
Gehen Sie wie folgt vor, um Links, die nicht verlegt werden können,
auf die übliche Weise ohne den Rückgriffsmechanismus abzurufen:
var links = layout.getCalcFallbackLinks(); while(links.hasNext()){ var link = links.next(); // ... }
Sie können beispielsweise über diese Links iterieren und einen eigenen
Rückgriffsmechanismus anstelle des Standardrückgriffsmechanismus des
Algorithmus für Layout mit langen Links anwenden.