同じレイアウトを適用できるのは、次の両方の条件が満たされている場合です。
- 最上位グラフとすべてのサブグラフに同じレイアウト・アルゴリズムが適用される必要がある。
- レイアウト・アルゴリズムの設定 (すなわち、レイアウト・パラメーター) が、最上位グラフとすべてのサブグラフ で同じである必要がある。
以下の図は、最上位グラフとそのすべてのサブグラフにツリー・レイアウトが
適用されている例です。さらに、
ツリー・レイアウト・アルゴリズムの設定はすべてのグラフで同じです。
アプリケーションは、例えば、最上位グラフとサブグラフとでフローの向きを
違うものにする必要はありません。

入れ子グラフの再帰レイアウトの例
このような再帰レイアウトを得るのは簡単です。最上位
の Diagram または Graph インスタンスに対してグラフ・レイアウトを指定し、performGraphLayout メソッドを呼び出す必要があります。このメソッド
の recursive 引数はデフォルトで
true
なので、レイアウトは再帰的に実行されます。内部メカニズム
内部メカニズムは、1 つのレイアウト・インスタンスは 1 つのグラフにのみ使用され、
そのグラフのサブグラフには再使用されないという原則に基づいて
います。したがって、
ibm_ilog.graphlayout.GraphLayout.copy() メソッドを使用して、ツリー・レイアウト・インスタンスの「クローン」が自動的に作成されます。
グラフ・レイアウトはグラフ・モデルに適用され、同じ
原則がグラフ・モデルについても保持されます。
すなわち、1 つのグラフ・モデル・インスタンスは 1 つのグラフのみに使用され、サブグラフに再使用されることはありません。
サブグラフ用のグラフ・モデルは、
ibm_ilog.graphlayout.GraphLayout.copy() メソッドの呼び出しによって作成されます。このメソッドが、メソッド ibm_ilog.graphlayout.GraphLayout.getGraphModel() を使用して、グラフ・モデルを作成します。
これらの操作は、透過的な方法ですべて自動的に実行され
ます。ユーザーは、
recursive
引数を true
に設定するか省略して、メソッド performGraphLayout
を呼び出すだけですみます。Dojo コード例
以下のコード例は、単一のレイアウト・アルゴリズムを入れ子グラフに
適用する方法を示しています。
var diagram = dijit.byId("diagram"); var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout(); diagram.attr("nodeLayout", treeLayout); diagram.performGraphLayout(true);