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. 
Schémas de solutions pour les contraintes côte à côte