Pour les experts : index supplémentaires (HL)

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é).