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