グラフに直接的に作用しないアプリケーションでは、
グラフ・レイアウト・インスタンスのアタッチまたはデタッチなどの操作は
明示的に実行されなければなりません。
基本クラス
ibm_ilog.graphlayout.GraphLayout クラス
は、すべてのレイアウト・アルゴリズムの基本クラスです。このクラスは抽象クラスであり、直接使用することはできません。次のいずれかのサブクラスを使用する必要があります: ibm_ilog.graphlayout.hierarchical.HierarchicalLayout、ibm_ilog.graphlayout.tree.TreeLayout、ibm_ilog.graphlayout.forcedirected.ForceDirectedLayout、ibm_ilog.graphlayout.shortlink.ShortLinkLayout、ibm_ilog.graphlayout.longlink.LongLinkLayout、ibm_ilog.graphlayout.random.RandomLayout, ibm_ilog.graphlayout.circular.CircularLayout, ibm_ilog.graphlayout.grid.GridLayout. 他のレイアウト・アルゴリズムを実装するユーザー独自のサブクラスを作成
することもできます。独自のタイプのレイアウトの定義を参照してください。
レイアウトを取得するために直接使用されるのは
GraphLayout
のサブクラス
のみですが、それらのサブクラスが継承 (またはオーバーライド) するメソッドはこのクラスに含まれているため、
このクラスについての学習が必要です。ユーザー独自のサブクラスを作成するには、このクラスを理解しておく必要があります。
クラス 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 または Graph の performGraphLayout メソッドを使用
してレイアウトを開始します。
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 リファレンス資料 を参照してください。