Dieser Abschnitt gilt nur, wenn
ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC
oder ibm_ilog.graphlayout.circular.CircularLayout.BY_CLUSTER_IDS
als Clusteringmodus
eingestellt ist.
Beide Modi arbeiten ähnlich. Der Hauptunterschied ist der, dass der Clusteringmodus
AUTOMATIC
Graphen verarbeiten kann, in denen Cluster
gar nicht oder nur teilweise spezifiziert sind, wohingegen der Clusteringmodus
BY_CLUSTER_IDS
eine vollständige Spezifikation aller Cluster erfordert
und eine Ausnahme auslöst, wenn ein Layout für einen Graphen mit einer unvollständigen Clusterspezifikation ausgeführt wird. Clusterzugehörigkeit und Reihenfolge der Knoten in einem Cluster (CL)
Die explizite Spezifikation von Clustern ist im Clusteringmodus
BY_SUBGRAPHS
nicht erforderlich, weil
die Untergraphen die Cluster bilden.
Im Clusteringmodus AUTOMATIC
können Cluster optional angegeben werden.
Im Modus BY_CLUSTER_IDS
müssen die Cluster vor der Durchführung des Layouts
angegeben werden. Beispiel für die Spezifikation eines Knotenclusters (CL-Algorithmus)
Gehen Sie wie folgt vor, um anzugeben, zu welchem Cluster jeder Knoten des Graphen gehört:
Verwenden Sie zum Angeben der Clusterzugehörigkeit eine Cluster-ID, d. h. eine Instanz einer Unterklasse der Klasse
ibm_ilog.graphlayout.circular.CircularClusterId (die abstrakt ist).
Es werden zwei Unterklassen bereitgestellt:
- ibm_ilog.graphlayout.circular.CircularClusterNumber - verwendet ganzzahlige Werte als Cluster-IDs
- ibm_ilog.graphlayout.circular.CircularClusterName - verwendet Zeichenfolgenamen als Cluster-IDs
Sie können diese beiden Typen von IDs wie jede andere Unterklasse von
ibm_ilog.graphlayout.circular.CircularClusterId
kombinieren. Sie könnten beispielsweise Folgendes schreiben:
// create identifier for first cluster (integer) var clusterId1 = new ibm_ilog.graphlayout.circular.CircularClusterNumber(1); // create identifier for second cluster (string) var clusterId2 = new ibm_ilog.graphlayout.circular.CircularClusterName("R&D network");
Wenn
node1
bis node3
zum ersten Cluster gehören, könnten Sie anschließend Folgendes schreiben:
layout.setClusterIdAndIndex(node1, clusterId1); layout.setClusterIdAndIndex(node2, clusterId1); layout.setClusterIdAndIndex(node3, clusterId1);
Angenommen, dass
layout
eine Instanz von
ibm_ilog.graphlayout.circular.CircularLayout
ist. Wenn Sie möchten, dass die Knoten in einer bestimmten Reihenfolge gezeichnet werden (z. B.
node1
-> node2
-> node3
),
müssen Sie außerdem einen Index (einen ganzzahligen Wert) für jeden Knoten angeben:layout.setClusterId(node1, clusterId1, 0); layout.setClusterId(node2, clusterId1, 1); layout.setClusterId(node3, clusterId1, 2);
Beide Methoden ermöglichen Ihnen, den Cluster anzugeben, zu dem ein Knoten gehört:
layout.setClusterId(node, clusterId)
layout.addClusterId(node, clusterId)
Wenn Sie die erste Methode aufrufen, gehört der Knoten nur zu dem Cluster, dessen ID
clusterId
entspricht.
Mit der zweiten Methode können Sie angeben, dass ein Knoten zu mehreren Clustern gehört.
Diese Methoden haben eine andere Version mit einem zusätzlichen Argument, einem ganzzahligen Wert, der den Index darstellt:
layout.setClusterIdAndIndex(node, clusterId, index)
layout.addClusterIdAndIndex(node, clusterId, index)
Dieser Wert wird verwendet, um die Knoten im Cluster zu sortieren.
Wenn Sie diese Indizes angeben, sortiert der Algorithmus die Knoten in aufsteigender Reihenfolge ihrer Indexwerte.
Die Werte der Indizes dürfen nicht negativ sein. Sie müssen nicht fortlaufend sein. Es ist nur die Reihenfolge der Werte von Bedeutung.
Verwenden Sie die folgende Methode, um den angegebenen Index eines Knotens in einem bestimmten Cluster abzurufen:
var index = layout.getIndex(node, clusterId)
Wenn kein Index für den Knoten angegeben ist, gibt die Methode
den Wert
ibm_ilog.graphlayout.circular.CircularLayout.NO_INDEX
zurück. Dies ist ein negativer Wert.
Verwenden Sie die folgende Methode, um eine Auflistung der Cluster-IDs für die Cluster abzurufen, zu denen der Knoten gehört:
var ids = layout.getNodeClusterIds(node1); while(ids.hasNext()){ var id = ids.next(); console.log("id = " + id); }
Die Elemente der Auflistung sind Instanzen einer Unterklasse von
ibm_ilog.graphlayout.circular.CircularClusterId
. Verwenden Sie die folgende Methode, um die Anzahl der Cluster abzurufen, zu denen ein Knoten gehört:
var count = layout.getClusterIdsCount(node)
Verwenden Sie die folgende Methode, um einen Knoten aus dem Cluster mit der angegebenen ID zu entfernen:
layout.removeClusterId(node, clusterId)
Verwenden Sie die folgende Methode, um einen Knoten aus allen Clustern zu entfernen, zu denen er gehört:
layout.removeAllClusterIds(node)
Stammcluster (CL)
Der Algorithmus ordnet die Cluster jeder verbundenen Komponente (siehe
connected component) des Clustergraphen um einen so genannten "Stammcluster" herum an.
Standardmäßig kann der Algorithmus diesen Cluster auswählen.
Optional können Sie einen oder mehrere Stammcluster angeben (einen für jede verbundene Komponente).
Beispiel für die Angabe von Stammclustern (CL-Algorithmus)
Gehen Sie wie folgt vor, um einen oder mehrere Stammcluster (einen für jede verbundene Komponente) anzugeben:
Verwenden Sie die folgenden Methoden:
layout.setRootClusterId(clusterId)
Verwenden Sie die folgende Methode, um ein Array mit den IDs der Cluster abzurufen, die als Stammcluster definiert wurden:
var clusterIds = layout.getRootClusterIds()
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
verwendet wird. Sterncluster (CL)
Beispiel für die Angabe der Sternmitte (CL-Algorithmus)
Gehen Sie wie folgt vor, um anzugeben, ob ein Knoten die Mitte eines Sterns ist:
Verwenden Sie die folgende Methode:
layout.setStarCenter(node, true)
Verwenden Sie die folgende Methode, um festzustellen, ob ein Knoten die Mitte eines Sterns ist:
var isCenter = layout.isStarCenter(node)
Standardmäßig ist ein Knoten nicht die Mitte eines Sterns.
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
verwendet wird. Inhalt, Position und Größe der Cluster abrufen (CL)
Manchmal ist es erforderlich, die Position und die Größe des Kreises zu kennen, auf dem die Knoten für jeden Cluster
gezeichnet werden.
Dies kann beispielsweise der Fall sein, wenn Sie einige Links umformen möchten.
Dazu können Sie nach dem Layout ein Array abrufen, das alle Cluster-IDs enthält.
Im Clusteringmodus
AUTOMATIC
kann das Array generierte
Cluster-IDs enthalten, wenn keine Cluster angegeben wurden.
Beispiel für das Abrufen eines Arrays mit allen Cluster-IDs
(CL-Algorithmus)
Gehen Sie wie folgt vor, um nach dem Layout ein Array abrufen, das alle Cluster-IDs enthält:
Verwenden Sie die folgende Methode:
var ids = layout.getClusterIds()
Das Array enthält Instanzen einer Unterklasse von
ibm_ilog.graphlayout.circular.CircularClusterId
.
Durch Anzeigen der Elemente dieses Arrays erhalten Sie die erforderlichen Informationen für jeden Cluster:
var radius = layout.getClusterRadius(clusterIndex)
var center = layout.getClusterCenter(clusterIndex)
var nodes = layout.getClusterNodes(clusterIndex)
Die Methode
getClusterNodes
gibt die Knoten zurück, aus denen sich der Cluster zusammensetzt.
Das Argument clusterIndex
stellt die Position
des Clusters in dem Array dar, das von der Methode
getClusterIds()
zurückgegeben wird. Verwenden Sie diese Methoden nicht, wenn der Clusteringmodus
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
verwendet wird. Dimensionale Parameter (CL)
In diesem Abschnitt werden die dimensionalen Parameter veranschaulicht, die im Algorithmus für zirkuläres Layout verwendet werden.
Diese Parameter werden in den folgenden Abschnitten beschrieben.
Der Clusteringmodus
BY_CLUSTER_IDS
funktioniert auch mit einem Offset für nicht verbundene Graphen.
Dies wird im Abschnitt Verarbeitung nicht verbundener Graphen erläutert. 
Dimensionale Parameter für den Algorithmus für zirkuläres Layout
Offset (CL)
Der Layoutalgorithmus versucht, einen Mindestabstand zwischen Knoten einzuhalten
(siehe die Abbildung Dimensionale Parameter für den Algorithmus für zirkuläres Layout).
Beispiel für die Angabe des Offsets (CL-Algorithmus)
Gehen Sie zum Festlegen des Offsets wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setOffset(20)
Ebenenoffset (CL)
Wenn der Clusteringmodus
BY_SUBGRAPHS
verwendet wird,
steuert der Parameter für das Ebenenoffset (Abstand zwischen Ebenen)
den Mindestabstand zwischen Knoten, die zu demselben Cluster gehören.
Wenn der Clusteringmodus
BY_CLUSTER_IDS
verwendet wird, gilt das folgende
Szenario.
Wie in CL-Algorithmus erläutert, werden untereinander verbundene
Ringe und Cluster auf konzentrischen Kreisen um einen Stammcluster herum gezeichnet.
Der Radius jedes konzentrischen Kreises wird so berechnet, dass sich überschneidende Cluster vermieden werden.
In manchen Fällen möchten Sie diesen Radius möglicherweise erhöhen, um eine klarere Zeichnung des Netzes zu erhalten.
Zu diesem Zweck wird der Radius systematisch mit einem so genannten "Ebenenoffsetwert"
erhöht (siehe die Abbildung Dimensionale Parameter für den Algorithmus für zirkuläres Layout).
Beispiel für die Angabe des Ebenenoffsets (CL-Algorithmus)
Gehen Sie zum Festlegen des Ebenenoffsets wie folgt vor:
Verwenden Sie die folgende Methode:
layout.setLevelOffset(5)
Der Standardwert ist null.
Dieser Parameter hat keine Auswirkung, wenn der Clusteringmodus
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
verwendet wird.