layout メソッドの実装

レイアウト・アルゴリズムの特性によって、 必要なステップが異なる場合や、それらのステップが不要な場合、あるいは、他のステップが 必要な場合があります。
レイアウト・アルゴリズムの特定の実装によっては、 基本グラフ・レイアウト・クラスの他のメソッドをオーバーライドする必要があります。 例えば、基本クラスの汎用パラメーターのうちの一部をサポートする サブクラスの場合、supports[ParameterName] メソッドを オーバーライドする必要があります (基本クラス・パラメーターおよびフィーチャーを参照してください)。
クラス ibm_ilog.graphlayout.GraphLayout について詳しくは、 クラス・ライブラリー資料を参照してください。
カスタム・レイアウト・アルゴリズムのサンプルで layout メソッドを 実装するには、以下のようにします。
  1. グラフ・モデルを取得します (レイアウト・インスタンスに対する getGraphModel())。
    var model = this.getGraphModel();
    
  2. スーパークラスからの performLayout メソッド が呼び出されたときに自動的に作成されるレイアウト・レポートの インスタンスを取得します (レイアウト・インスタンスに対する getLayoutReport())。 グラフ・レイアウト・レポートの使用を参照してください。
    var report = this.getLayoutReport();
    
  3. ノードが配置される領域を計算するためのレイアウト領域パラメーターを 取得します。
    var rect = this.getCalcLayoutRegion();
    
  4. ノードのベクトルを取得します (グラフ・レイアウト・モデル・インスタンスに対する nodes プロパティー)。
    var nds = model.getNodes();
    
  5. ユーザーから要求された場合 (レイアウト・インスタンスに対する isPreserveFixedNodes()) 固定 ノードをスキップして (レイアウト・インスタンスに対する isFixed(node))、 ノードをブラウズします。
                    var count = nds.length;
                    for (var i = 0; i < count; i++) {
                        var node = nds[i];
                        ...
                    }
    
    
    (固定ノードについて詳しくは、固定ノードの保持を参照してください)
  6. 各ノードを、レイアウト領域内の新しく計算された座標に 移動します。
    model.moveNode
    model.moveNode(node, x, y);
    
  7. 新しいノードが配置されたことをレイアウト・イベントのリスナー に通知します。これによって、 ユーザーは、例えば、レイアウト・イベント・リスナーがレイアウト・インスタンスに登録された場合に進捗バーを 実装することができます。(イベント・リスナーについて詳しくは、イベント・リスナーの使用を参照してください)
    レイアウト・インスタンスで、以下を呼び出します。
    this.callLayoutStepPerformedIfNeeded();
    
  8. 最後に、レイアウト・レポートにコードを設定します。
    report.code = ibm_ilog.graphlayout.GraphLayoutReport.LAYOUT_DONE;
    
ユーザー独自のレイアウト・アルゴリズム MyRandomLayout は、 いったん実装した後は Dojo JavaScript で直接使用できます。