Restricciones de uno junto al otro (DJ)

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.
Cuatro
soluciones distintas para un conjunto de restricciones de uno junto
al otro
Esquema de soluciones para las restricciones de uno junto al otro