Restrições Lado a Lado (HL)

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.
Quatro
soluções diferentes para um conjunto de restrições lado a lado
Esboço de soluções para restrições lado a lado