Para forçar nós a serem vizinhos diretos, use a restrição lado a lado.
É possível criar uma restrição lado a lado em um grupo
de tipo NodeGroup (consulte Grupos de Nós):
layout.addConstraint( new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(nodeGroup, priority));
Se o grupo de nós consistir apenas em dois nós, ele forçará
os dois nós a serem posicionados lado a lado. No entanto, ele não especifica
qual nó estará na posição de nó inferior e qual nó estará na posição
de nó superior. Se o grupo consistir em mais de dois nós,
ele forçará os nós a serem colocados em posições consecutivas de forma que
todos os nós sejam armazenados em cluster juntos. Um nó que não pertence ao grupo
não pode ser posicionado entre os nós do grupo.
Por exemplo, suponha que o grupo contenha os três
nós
A
, B
, C
. A restrição será atendida se os índices de posição de A
, B
e C
forem 3, 4, 5 ou 9, 7, 8. No entanto,
se o nó D
for posicionado entre A
e B
(ou seja, D
tem
a posição 4, A
tem a posição 3 e C
tem
a posição 5), a restrição não será atendida porque D
não pertence
ao mesmo grupo. A restrição lado a lado terá efeito apenas se os nós
realmente pertencerem ao mesmo nível. To achieve it, you can, for
instance, use a same level constraint in addition.
As restrições lado a lado têm prioridades que decidem
como resolver conflitos de restrições. Quando mais alta a prioridade, maior a probabilidade
de a restrição ser atendida.
É possível usar restrições lado a lado para criar
clusters aninhados. Por exemplo:
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));
A primeira restrição especifica que
nodeA
, nodeB
, nodeC
e nodeD
devem ser armazenados em cluster. A segunda restrição
especifica que nodeB
e nodeC
são armazenados em cluster dentro do cluster maior. This
means that no other node can be placed between the four nodes and,
furthermore, nodeA
or nodeD
cannot be placed between nodeB
and nodeC
. A figura a seguir mostra quatro soluções que atendem às duas restrições. 
Esboço de soluções para restrições lado a lado