Contraintes côte à côte (HL)

Pour forcer les noeuds à être directement voisins, utilisez la contrainte côte à côte.
Vous pouvez créer une contrainte côte à côte sur un groupe de type NodeGroup (voir Groupes de noeuds) :
layout.addConstraint(
    new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(nodeGroup, priority));
Si le groupe de noeuds se compose de deux noeuds seulement, la contrainte force mes deux noeuds à se placer côte à côte. Toutefois, elle n'indique pas le noeud qui doit être à la position de noeud inférieure et celui qui doit être à la position de noeud supérieure. Si le groupe se compose de plus de deux noeuds, elle force les noeuds à se placer à des positions consécutives de sorte que tous les noeuds soient regroupés. Un noeud qui n'appartient pas au groupe ne peut pas être placé entre les noeuds de ce groupe.
Par exemple, si l'on prend le groupe qui contient les trois noeuds suivants : A, B, C. La contrainte est satisfaite si les index de position de A, B et C sont 3, 4, 5 ou 9, 7, 8. Toutefois, si le noeud D est placé entre A et B (disons que D a la position 4, A a la position 3 et C a la position 5), la contrainte n'est pas satisfaite car D n'appartient pas au même groupe.
La contrainte côte à côte n'a un effet que si les noeuds appartiennent effectivement au même niveau. Pour cela, vous pouvez par exemple utiliser également une contrainte de même niveau.
Les contraintes côte à côte ont des priorités qui décident comment résoudre les conflits de contraintes. Plus la priorité est élevée, plus la contrainte est susceptible d'être satisfaite.
Vous pouvez utiliser les contraintes côte à côte pour créer des clusters imbriqués. Par exemple :
var group1 = new ibm_ilog.graphlayout.hierarchical.HierarchicalNodeGroup();
group1.add(nodeA);
group1.add(nodeB);
group1.add(nodeC);
group1.add(nodeD);
layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(group1, 10));
var group2 = new ibm_ilog.graphlayout.hierarchical.HierarchicalNodeGroup();
group2.add(nodeB);
group2.add(nodeC);
layout.addConstraint(new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(group2, 10));
La première contrainte indique que nodeA, nodeB, nodeC et nodeD doivent être mis en clusters. La deuxième contrainte indique que nodeB et nodeC sont regroupés dans le cluster le plus important. Cela signifie qu'aucun autre noeud ne peut être placé entre les quatre noeuds et, de plus, ni nodeA ni nodeD ne peuvent être placés entre nodeB et nodeC. La figure ci-après présente quatre solutions qui permettent de satisfaire les deux contraintes.
Quatre
solutions différentes pour un ensemble de contraintes côte à côte
Schémas de solutions pour les contraintes côte à côte