横並び制約 (HL)

ノードを直接隣接して配置するように強制するには、横並び制約を使用します。
タイプ NodeGroup (ノード・グループ を参照) のグループに対して、以下のように横並び制約を作成できます。
layout.addConstraint(
    new ibm_ilog.graphlayout.hierarchical.HierarchicalSideBySideConstraint(nodeGroup, priority));
ノード・グループを構成するノードが 2 つだけの場合は、その 2 つのノードを横並びに配置するように強制します。 ただし、低いノード位置および高いノード位置に配置するノードは指定しません。 グループを構成するノードが 2 つ以上の場合は、すべてのノードが一個所にクラスター化されるように、ノードを連続位置に配置することを強制します。 グループに属していないノードは、グループに属するノードの間に配置できません。
例えば、グループに 3 つのノード ABC が含まれているものとします。 AB、 および C の位置インデックスがそれぞれ 3、4、5 または 9、7、8 の場合は、制約は満たされます。 ただし、ノード DAB の間に配置された場合は (例えば、 D は位置 4、A は位置 3、C は位置 5)、 D が同じグループに属していないため、制約は満たされません。
横並び制約は、ノードが実際に同じレベルに属している場合にのみ効果を持ちます。 これを実現するため、例えば、さらに同一レベル制約を使用することもできます。
横並び制約は、制約の競合を解決する方法を決定する優先度を持ちます。 優先度が高ければ高いほど、その制約が満たされる可能性が高くなります。
横並び制約を使用して、入れ子クラスターを作成できます。 次に例を示します。
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));
最初の制約は、nodeAnodeBnodeC、 および nodeD をクラスター化する必要があることを指定します。 2 番目の制約は、nodeB および nodeC がより大きなクラスターの内部でクラスター化されることを指定します。 これは、4 つのノードの間にその他のノードを配置することができないこと、 さらには nodeAnodeDnodeBnodeC の間に配置できないことを意味します。 以下の図に、両方の制約を満たす 4 つの解を示します。
一組の横並び制約を満たす
4 つの解
横並び制約を満たす解のスケッチ