Allgemeine Parameter für die Modi AUTOMATIC und BY_CLUSTER_IDS

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:
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.
Die vom Algorithmus für zirkuläres Layout
verwendeten dimensionalen Parameter
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.