L'agencement hiérarchique vous permet d'indiquer l'index de niveau et l'index de position d'un noeud.
Vous indiquez l'index de niveau et l'index de position d'un noeud graphique
de la manière suivante :
layout.setSpecNodeLevelIndex(node, 5); layout.setSpecNodePositionIndex(node, 33);
Le mode d'utilisation de ces index dépend de la topologie du graphe et des
contraintes additionnelles. Par exemple, l'index de niveau spécifié peut être en conflit avec certaines contraintes ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalLevelRangeConstraint ou ibm_ilog.graphlayout.hierarchical.HierarchicalLayout.HierarchicalSameLevelConstraint. Dans ce cas, les priorités de contrainte déterminent
comment le conflit est résolu (voir Priorités des contraintes (HL)). Si le
mode incrémentiel est activé, l'index de niveau et l'index de position
spécifiés sont ignorés, car le mode incrémentiel essaie de conserver les anciennes positions de noeud. Il est également possible d'obtenir les index de noeuds qui ont été
calculés lors de l'agencement.
Index de niveau calculé
L'algorithme d'agencement vous permet d'accéder à l'index de niveau qui a été calculé pour un noeud par un agencement précédent. Utilisez la méthode :
var index = layout.getCalcNodeLevelIndex(node);
Si le noeud n'a jamais été agencé, cette méthode retourne
-1
. Sinon, elle retourne l'index de niveau précédent du noeud. Dans une application qui spécifie les paramètres d'agencement intégralement en
à l'aide d'un programme, cette méthode permet de spécifier l'index de niveau pour
l'agencement suivant de la manière suivante :
var index = layout.getCalcNodeLevelIndex(node); layout.setSpecNodeLevelIndex(node, index);
Cela garantit que le noeud est placé
au même niveau que dans l'agencement précédent.
Si le graphe est déconnecté de l'algorithme d'agencement, l'index
de niveau calculé d'un noeud est redéfini sur
-1
. Note
Vous devez être conscient de la différence entre les méthodes getCalcNodeLevelIndex et getSpecNodeLevelIndex. La première retourne l'index de niveau calculé par l'agencement précédent. La seconde retourne l'index de niveau spécifié, même s'il n'y avait pas d'agencement précédent.
Par exemple, si l'on prend deux noeuds A et B. Aucun index de niveau n'est indiqué pour le noeud A et le niveau d'index 5 est indiqué pour le noeud B.
Avant le premier agencement, la méthode
getCalcNodeLevelIndex
retourne -1 pour les deux noeuds car les niveaux n'ont pas encore été calculés. Toutefois, getSpecNodeLevelIndex
retourne
-1 pour A et 5 pour B. Après le premier agencement, le noeud A peut être placé au niveau
4. A présent, getCalcNodeLevelIndex
retourne
4 pour le noeud A et 5 pour le noeud B et getSpecNodeLevelIndex
et retourne
encore -1 pour A et 5 pour B. Index de position calculé
L'algorithme d'agencement vous permet d'accéder à l'index de position au sein d'un index qui a été calculé pour un noeud par un agencement précédent. Utilisez la méthode :
var index = layout.getCalcNodePositionIndex(node);
Si le noeud n'a jamais été agencé, ce méthode retourne -1.
Sinon, elle retourne l'index de position précédent du noeud au sein de ce niveau.
Pour vous assurer que le noeud soit placé au même niveau à la même
position relative que dans l'agencement précédent, utilisez le code suivant
dans une application qui indique les paramètres d'agencement entièrement à l'aide d'un programme.
layout.setSpecNodeLevelIndex(node, layout.getCalcNodeLevelIndex(node)); layout.setSpecNodePositionIndex(node, layout.getCalcNodePositionIndex(node));
Cet exemple de code fonctionne uniquement si l'agencement de composant connecté générique est désactivé et si les côtés de port
EAST
ou WEST
ne sont pas utilisés dans l'agencement. Si le graphe est déconnecté de l'algorithme d'agencement, l'index
de position calculé d'un noeud est redéfini sur -1.
Note
Vous devez être conscient de la différence entre les méthodes getCalcNodePositionIndex et setSpecNodePositionIndex. La première retourne l'index de
position calculé par l'agencement précédent et -1 s'il n'y avait pas d'agencement précédent. La seconde retourne l'index de position spécifié, même s'il n'y avait pas d'agencement précédent. Ce comportement est similaire au comportement
de l'index de niveau spécifié et calculé (voir Index de niveau calculé).