Paramètres communs pour les modes AUTOMATIC et BY_CLUSTER_IDS

Cette section s'applique uniquement si le mode de groupement est défini sur ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC ou ibm_ilog.graphlayout.circular.CircularLayout.BY_CLUSTER_IDS. Les deux modes fonctionnement de la même façon. La principale différence réside dans le fait que le mode de groupement AUTOMATIC peut gérer des graphes dans lesquels les clusters ne sont pas spécifiés ou ne le sont que partiellement, alors que le mode de groupement BY_CLUSTER_IDS nécessite une spécification complète de tous les clusters et génère une exception lors de l'exécution d'un agencement sur un graphe comportant une spécification de cluster incomplète.

Appartenance à un cluster et ordre des noeuds dans un cluster (CL)

L'indication explicite de clusters n'est pas nécessaire dans le mode de groupement BY_SUBGRAPHS, car les sous-graphes forment les clusters. En mode de groupement AUTOMATIC, vous pouvez spécifier des clusters en option. En mode BY_CLUSTER_IDS, ils doivent être spécifiés avant tout agencement.
Exemple d'indication d'un cluster de noeud (algorithme CL)
Pour indiquer à quel cluster appartient chaque noeud du graphe :
Pour indiquer l'appartenance au cluster, utilisez un identificateur de cluster, c'est-à-dire une instance d'une sous-classe de la classe ibm_ilog.graphlayout.circular.CircularClusterId (laquelle est abstraite). Deux sous-classes sont fournies :
Vous pouvez associer ces deux types d'identificateurs comme autre sous-classe de ibm_ilog.graphlayout.circular.CircularClusterId. Par exemple, vous pouvez écrire :
// 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");
Ensuite, si les noeuds node1 à node3 appartiennent au premier cluster, vous pouvez écrire :
layout.setClusterIdAndIndex(node1, clusterId1);
layout.setClusterIdAndIndex(node2, clusterId1);
layout.setClusterIdAndIndex(node3, clusterId1);
Supposons que layout soit une instance de ibm_ilog.graphlayout.circular.CircularLayout.
Si vous voulez que les noeuds soient représentés dans un ordre spécial (par exemple, node1 -> node2 -> node3), vous devez également spécifier un index (une valeur entière) pour chaque mode :
layout.setClusterId(node1, clusterId1, 0);
layout.setClusterId(node2, clusterId1, 1);
layout.setClusterId(node3, clusterId1, 2);
Deux méthodes vous permettent de spécifier le cluster auquel un noeud appartient :
layout.setClusterId(node, clusterId)    
layout.addClusterId(node, clusterId)    
Si vous appelez la première méthode, le noeud appartient uniquement aux cluster dont l'identificateur est clusterId. La seconde méthode vous permet d'indiquer qu'un noeud appartient à plusieurs clusters.
Ces méthodes existent dans une autre version avec un argument supplémentaire, une valeur entière représentant l'index :
layout.setClusterIdAndIndex(node, clusterId, index)   
layout.addClusterIdAndIndex(node, clusterId, index)   
Cette valeur est utilisée pour classer les noeuds dans le cluster. Si vous indiquez ces index, l'algorithme classe les noeuds dans un ordre croissant en fonction des valeurs d'index.
Les valeurs des index ne peuvent pas être négatives. Il n'est pas nécessaire qu'elles soient continues, seul l'ordre des valeurs est important.
Pour obtenir l'index spécifique d'un noeud dans un cluster donné, utilisez la méthode suivante :
var index = layout.getIndex(node, clusterId)  
Si aucun index n'est indiqué pour le noeud, la méthode renvoie la valeur ibm_ilog.graphlayout.circular.CircularLayout.NO_INDEX. Il s'agit d'une valeur négative.
Pour obtenir une énumération des identificateurs de cluster pour les clusters auquel appartient le noeud, utilisez la méthode suivante :
var ids = layout.getNodeClusterIds(node1);
while(ids.hasNext()){
 var id = ids.next();
 console.log("id = " + id);
}
Les éléments de l'énumération sont des instances d'une sous-classe de ibm_ilog.graphlayout.circular.CircularClusterId.
Pour obtenir de manière efficace le nombre de clusters auquel appartient un noeud, utilisez la méthode suivante :
var count = layout.getClusterIdsCount(node)  
Pour supprimer un noeud du cluster portant l'identificateur spécifié, utilisez la méthode suivante :
layout.removeClusterId(node, clusterId)  
Pour supprimer un noeud de tous les clusters auxquels il appartient, utilisez la méthode suivante :
layout.removeAllClusterIds(node)  

Clusters racine (CL)

L'algorithme dispose les clusters de chaque connected component du graphe de clusters autour d'un “cluster racine”. Par défaut, l'algorithme peut choisir ce cluster. Vous pouvez, de manière facultative, spécifier un ou plusieurs clusters racine (un pour chaque composant connecté).
Exemple d'indication de clusters racine (algorithme CL)
Pour spécifier un ou plusieurs clusters racine (un pour chaque composant connecté) :
Utilisez les méthodes :
layout.setRootClusterId(clusterId)  
Pour obtenir un tableau contenant les identificateurs des clusters qui sont indiqués en tant que clusters racine, utilisez la méthode suivante :
var clusterIds = layout.getRootClusterIds()  
Ce paramètre n'a aucun effet si le mode de groupement est ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Clusters en étoile (CL)

Exemple d'indication d'un centre en étoile (algorithme CL)
Pour indiquer si un noeud est le centre d'une étoile :
Utilisez la méthode suivante :
layout.setStarCenter(node, true)  
Pour savoir si un noeud est le centre d'une étoile, utilisez la méthode suivante :
var isCenter = layout.isStarCenter(node)  
Par défaut, un noeud est le centre d'une étoile.
Ce paramètre n'a aucun effet si le mode de groupement est ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Obtention du contenu, de la position et de la taille des clusters (CL)

Il peut arriver que vous ayez besoin de connaître la position et la taille du cercle sur lequel sont tracés les noeuds de chaque cluster. Ce peut être le cas si vous voulez effectuer des opérations de remodelage de liens. Pour ce faire, vous pouvez obtenir un tableau contenant tous les identificateurs de cluster, une fois l'agencement effectué. Dans le mode de groupement AUTOMATIC, le tableau peut contenir les identificateurs de cluster générés si aucun cluster n'a été indiqué.
Exemple d'obtention d'un tableau contenant tous les identificateurs de cluster (algorithme CL)
Pour obtenir un tableau contenant tous les identificateurs de cluster une fois l'agencement effectué :
Utilisez la méthode suivante :
var ids = layout.getClusterIds()  
Le tableau contient les instances d'une sous-classe de ibm_ilog.graphlayout.circular.CircularClusterId. En parcourant les éléments de ceArray, vous pouvez obtenir les informations nécessaires pour chaque cluster :
var radius = layout.getClusterRadius(clusterIndex)   
var center = layout.getClusterCenter(clusterIndex)   
var nodes = layout.getClusterNodes(clusterIndex)   
La méthode getClusterNodes renvoie les noeuds qui composent le cluster. L'argument clusterIndex représente la position du cluster dans le Array renvoyé par la méthode getClusterIds().
N'utilisez pas ces méthodes si le mode de groupement est ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Paramètres dimensionnels (CL)

Cette section présente les paramètres dimensionnels utilisés dans l'algorithme d'agencement circulaire (CL). Ces paramètres sont décrits dans les sections qui suivent.
Le mode de groupement BY_CLUSTER_IDS fonctionne également avec le décalage de graphe déconnecté. Cela est expliqué dans la section Traitement des graphes déconnectés.
Paramètres dimensionnels
utilisés par l'algorithme d'agencement circulaire
Paramètres dimensionnels pour l'algorithme d'agencement circulaire

Décalage (CL)

L'algorithme d'agencement essaie de préserver une distance minimum entre les noeuds (voir la figure Paramètres dimensionnels pour l'algorithme d'agencement circulaire).
Exemple d'indication du décalage (algorithme d'agencement circulaire)
Pour indiquer le décalage :
Utilisez la méthode suivante :
layout.setOffset(20)  

Décalage de niveau (CL)

Si le mode de groupement est BY_SUBGRAPHS, le paramètre de décalage de niveau contrôle le décalage minimal entre les noeuds qui appartiennent au même cluster.
Si le mode de groupement est BY_CLUSTER_IDS, le scénario suivant s'applique.
Comme indiqué dans Algorithme d'agencement circulaire (CL), les anneaux et les clusters interconnectés sont tracés dans des cercles concentriques autour d'un cluster racine. Le rayon de chaque cercle concentrique est calculé pour éviter les chevauchements de clusters. Dans certains cas, vous pouvez augmenter ce rayon afin d'obtenir un tracé plus clair du réseau. Pour cela, le rayon est systématiquement augmenté à l'aide d'une valeur de “décalage de niveau” (voir la figure Paramètres dimensionnels pour l'algorithme d'agencement circulaire).
Exemple d'indication du décalage de niveau (algorithme d'agencement circulaire)
Pour indiquer le décalage de niveau :
Utilisez la méthode suivante :
layout.setLevelOffset(5)  
La valeur par défaut est zéro.
Ce paramètre n'a aucun effet si le mode de groupement est ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.