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 :
- ibm_ilog.graphlayout.circular.CircularClusterNumber, qui utile des nombres entiers comme identificateurs de cluster.
- ibm_ilog.graphlayout.circular.CircularClusterName, qui utilise des noms de chaîne comme identificateurs de cluster.
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 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
.