Para obligar a los nodos a ser vecinos directos, utilice
la restricción de unos junto a otros.
Puede crear una restricción de unos junto a otros en un
grupo de tipo NodeGroup
(consulte
Grupos de nodos ):
layout.addConstraint( new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(nodeGroup, priority));
Si el grupo de nodos se compone sólo de dos nodos,
obliga a colocar los dos nodos uno junto al otro. Sin embargo, no
especifica qué nodo está en la posición inferior y cuál en la
posición superior. Si el grupo consta de más de dos nodos, obliga a
colocar los nodos en posiciones consecutivas de forma que todos los
nodos se agrupen en un clúster. Un nodo que no pertenece al grupo no
puede colocarse entre los nodos del grupo.
Por ejemplo, supongamos que el grupo contiene los tres
nodos
A
,
B
y
C
. La restricción se satisface
si los índices de posición de
A
,
B
y
C
son 3, 4, 5 ó 9, 7, 8. Sin
embargo, si se coloca el nodo
D
entre
A
y
B
(digamos que
D
tiene la posición 4,
A
tiene la posición 3 y
C
tiene la posición 5), la
restricción no se satisface porque
D
no pertenece al mismo grupo. La restricción de uno junto al otro sólo surte efecto si
los nodos en realidad pertenecen al mismo nivel. Para ello puede
utilizar también, por ejemplo, una restricción de mismo nivel.
Las restricciones de uno junto al otro tienen
prioridades que deciden cómo resolver conflictos de restricciones.
Cuanto más alta es la prioridad, más probable es que se satisfaga la
restricción.
Puede utilizar restricciones de uno junto al otro para
crear clústeres anidados.
Por ejemplo:
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 primera restricción especifica que
nodeA
,
nodeB
,
nodeC
y
nodeD
deben agruparse en
clúster. La segunda restricción especifica que
nodeB
y
nodeC
están agrupadas en
clúster dentro del clúster mayor. Esto significa que ningún otro nodo
puede colocarse entre los cuatro nodos y, además, ni
nodeA
ni
nodeD
se pueden colocar entre
nodeB
y
nodeC
.
En la figura siguiente se muestran cuatro soluciones que satisfacen
ambas restricciones. 
Esquema de soluciones para las restricciones de uno
junto al otro