Manchmal hat ein Graph mehrere Links zwischen demselben Knotenpaar.
Wenn diese Links gerade sind und denselben Verbindungspunkt an den Knoten verwenden, überschneiden sie sich und können nicht unterschieden werden.
Zur Vermeidung solcher Überschneidungen haben die angegebenen Layouts einen so genannten Multilinkmodus, der nur angewendet wird, wenn
STRAIGHT_LINE_STYLE als Linkstil definiert ist.
Dieser Modus hat keine Auswirkung, wenn NO_RESHAPE_STYLE als Linkstil definiert ist.
Beispiel für die Steuerung mehrerer Links
Verwenden Sie die folgende Methode, um den Multilinkmodus zu aktivieren:
layout.setMultiLinkMode(mode);
Die gültigen Werte für den Modus sind im Beispiel für das kräftegesteuerte Layout (Force-directed)
beschrieben:
- ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.NO_BUNDLE: Mehrere Links zwischen demselben Knotenpaar werden auf keine spezielle Weise behandelt. Sie werden nicht verteilt und können sich überschneiden.
- ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.STRAIGHT_LINE_BUNDLE: Mehrere Links zwischen demselben Knotenpaar werden als direkte Linien gezeichnet, aber relativ zueinander versetzt, um Überschneidungen zu vermeiden. Im Gegensatz zum Modus "narrow" (schmal) ist der Versatz nicht durch die Knotengröße beschränkt.
- ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.NARROW_STRAIGHT_LINE_BUNDLE: Gleicht dem Modus mit geraden Linien, aber der Versatz ist durch die Größe der beiden Endknoten des Linkpakets beschränkt und kann daher schmaler wirken. Wenn Sie zu viele Links zwischen demselben Knotenpaar haben, verhindert dieser Modus, dass die Links so weit auseinandergesetzt werden, dass sie nicht mehr mit den Knoten verbunden zu sein scheinen. Dies ist der Standardmodus.
- ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.CONNECTED_ONE_BEND_BUNDLE: Mehrere Links zwischen demselben Knotenpaar werden mit einer einzigen Kurve gesteuert, um Überschneidungen zu verhindern. Alle Links im Paket beginnen an demselben Verbindungspunkt und enden an demselben Verbindungspunkt.
- ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.FREE_ONE_BEND_BUNDLE: Mehrere Links zwischen demselben Knotenpaar werden mit einer einzigen Kurve gesteuert, um Überschneidungen zu verhindern. Im Gegensatz zum Paketmodus "verbunden" über eine einzige Kurve, wird der Linkverbindungspunkt nicht erzwungen, d. h., Knoten und Link können den Verbindungspunkt frei platzieren. Es ist nicht gewährleistet, dass alle Links des Pakets an demselben Punkt beginnen und enden.
Wenn der Multilinkmodus nicht auf NO_BUNDLE eingestellt ist,
kann das Offset (der Versatz) zwischen den versetzten Links bzw. zwischen Kurven der Links
angegeben werden:
Verwenden Sie die folgenden Methoden:
layout.setMultiLinkOffset(offset); layout.setMultiLinkMaxSpread(maxSpread);
Das Multilink-Offset ist das Offset zwischen zwei benachbarten Links
(oder deren Kurven). Der Wert von maxSpread beschränkt dieses Offset,
damit nicht viel Platz belegt wird, wenn sehr viele Mehrfachlinks vorhanden sind.
Wenn das Multilink-Offset 10 ist und maxSpread den Wert
60 hat, ist das effektive Offset 10, wenn Sie weniger als sechs Mehrfachlinks haben.
Wenn Sie mehrere Mehrfachlinks haben, verringert sich das effektive Offset. Wenn Sie beispielsweise
15 Mehrfachlinks haben, ist das effektive Offset 4 anstatt 10, um sicherzustellen, dass die Links um maximal
60 Einheiten voneinander versetzt werden.
Wenn der Multilinkmodus auf NARROW_STRAIGHT_LINE_BUNDLE eingestellt ist,
wird das effektive Offset noch weiter durch die Größe des Zeichenrahmens beider Endknoten eines Linkpakets
begrenzt.
Beispiele für die Verwendung von Modus und Offset | Grafisches Ergebnis |
---|---|
NO_BUNDLE | ![]() |
STRAIGHT_LINE_BUNDLE, wenn der Wert von maxSpread zu hoch gewählt ist. | ![]() |
NARROW_STRAIGHT_LINE_BUNDLE: Dasselbe Ergebnis kann mit STRAIGHT_LINE_BUNDLE erzielt werden, indem der Wert von maxSpread verringert wird. | ![]() |
CONNECTED_ONE_BEND_BUNDLE | ![]() |
FREE_ONE_BEND_BUNDLE, wenn die Links anfänglich mit der Knotenmitte
verbunden sind.
Dasselbe Ergebnis kann mit CONNECTED_ONE_BEND_BUNDLE in
Kombination mit Definition von connectLinksToNodeCenters und dem Wert "true" erzielt werden.
Sehen Sie sich beispielsweise die Beschreibung von ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout.setConnectLinksToNodeCenters an.
|
![]() |