グラフ・レイアウト: API の使用

グラフに直接的に作用しないアプリケーションでは、 グラフ・レイアウト・インスタンスのアタッチまたはデタッチなどの操作は 明示的に実行されなければなりません。

基本クラス

ibm_ilog.graphlayout.GraphLayout クラス は、すべてのレイアウト・アルゴリズムの基本クラスです。このクラスは抽象クラスであり、直接使用することはできません。次のいずれかのサブクラスを使用する必要があります: ibm_ilog.graphlayout.hierarchical.HierarchicalLayoutibm_ilog.graphlayout.tree.TreeLayoutibm_ilog.graphlayout.forcedirected.ForceDirectedLayoutibm_ilog.graphlayout.shortlink.ShortLinkLayoutibm_ilog.graphlayout.longlink.LongLinkLayoutibm_ilog.graphlayout.random.RandomLayout, ibm_ilog.graphlayout.circular.CircularLayout, ibm_ilog.graphlayout.grid.GridLayout. 他のレイアウト・アルゴリズムを実装するユーザー独自のサブクラスを作成 することもできます。独自のタイプのレイアウトの定義を参照してください。
レイアウトを取得するために直接使用されるのは GraphLayout のサブクラス のみですが、それらのサブクラスが継承 (またはオーバーライド) するメソッドはこのクラスに含まれているため、 このクラスについての学習が必要です。ユーザー独自のサブクラスを作成するには、このクラスを理解しておく必要があります。

抽象クラス GraphLayout のサブクラスを表す UML クラス・ダイアグラム。
これらのクラスのうちのいくつかと各種レイアウト・レポートとの関係も
表しています。このクラス・ダイアグラムでは、通常の UML 規約を使用して
クラスおよび関係を表しています。ダイアグラムの左側には、グラフ・レイアウト・アルゴリズムを
実装するクラスが示されています。右側には
レイアウト・レポート・クラスがあります。
クラス GraphLayout とそのサブクラス、およびレイアウト・レポートとの 関係

基本クラスのサブクラスのインスタンス化

クラス ibm_ilog.graphlayout.GraphLayout は抽象クラスです。コンストラクターはありません。次の例のように、 サブクラスをインスタンス化できます。
var layout = new ibm_ilog.graphlayout.tree.TreeLayout();

グラフまたはダイアグラムへのレイアウトのアタッチまたはデタッチ

IBM® ILOG® Dojo Diagrammer では、 レイアウトを ibm_ilog.diagram.widget.Diagram ウィジェット・インスタンス または ibm_ilog.diagram.Graph インスタンスにアタッチする必要があります。
Diagram ウィジェットを 使用する場合、Diagram ウィジェットの nodeLayout 属性または linkLayout 属性を 使用して、レイアウトをアタッチします。以下の例は、 Diagram ウィジェットの HTML マークアップでこれを行う方法を示します。
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  nodeLayout="treeLayout"/>
メイン・グラフ・レイアウト・アルゴリズムを設定するのに nodeLayout 属性 が使用されています。このアルゴリズム で Diagram のノードおよびリンクが配置されるようになります。linkLayout 属性を 使用して 2 番目のレイアウトを設定することもできます。これは Diagram のリンクを経路指定するためにのみ使用されます。 以下に例を示します。
<div jsId="linkLayout" dojoType="ibm_ilog.graphlayout.shortlink.ShortLinkLayout"/>
<div id="diagram" dojoType="ibm_ilog.diagram.widget.Diagram" 
  linkLayout="linkLayout"/>
Diagram のノード・レイアウトまたはリンク・レイアウト を JavaScript で設定することもできます。
var diagram = dijit.byId("diagram");
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
diagram.attr("nodeLayout", treeLayout);
diagram.attr("linkLayout", linkLayout);
Graph オブジェクト を直接的に処理する (すなわち、Diagram ウィジェット を使用せず、GFX API を使用して直接処理する) 場合、Graph にレイアウトをアタッチするために setNodeLayout メソッドまたは setLinkLayout メソッド を使用する必要があります。
var graph = surface.createGraph();
var treeLayout = new ibm_ilog.graphlayout.tree.TreeLayout();
var linkLayout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout();
graph.setNodeLayout(treeLayout);
graph.setLinkLayout(linkLayout);

レイアウトの実行

レイアウト・アルゴリズムが Diagram インスタンスまたは Graph インスタンス にアタッチされた後、Diagram または GraphperformGraphLayout メソッドを使用 してレイアウトを開始します。
diagram.performGraphLayout();
または
graph.performGraphLayout();
次に、GraphLayout サブクラスの protected の抽象メソッド layout(boolean redraw) が 呼び出されます。これは、このメソッドを 実装するサブクラスに制御が渡されることを意味します。その実装が レイアウトを計算し、ノードを新しい位置に移動するか、またはリンクを形状変更 します。あるいは、ノードの移動とリンクの形状変更を両方とも行うこともあります。
グラフ・レイアウトの getLayoutReport メソッド は、レイアウト・アルゴリズムの動作に関する情報を含んでいる、ibm_ilog.graphlayout.GraphLayoutReport の (またはサブクラスの) インスタンスを 戻します。これによって、アルゴリズムが正常に 実行されたかどうか、または、特定の事前定義済みケースのいずれかが発生したかどうかを知ることが できます (レイアウト・レポートについて詳しくは、グラフ・レイアウト・レポートの使用を参照してください)。

詳細情報

以下のセクションに、クラス ibm_ilog.graphlayout.GraphLayout に 関する詳細情報があります。
ibm_ilog.graphlayout.GraphLayout および その他のグラフ・レイアウト・クラスについて詳しくは、IBM® ILOG® Dojo Diagrammer API リファレンス資料 を参照してください。