このセクションは、クラスター・モードが
ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC
または ibm_ilog.graphlayout.circular.CircularLayout.BY_CLUSTER_IDS
に設定されている場合にのみ適用されます。
両モードの動作はよく似ています。主な差異は、クラスター・モード AUTOMATIC
では、クラスターが指定されていないかまたは部分的に指定されているグラフを処理できるのに対し、
クラスター・モード BY_CLUSTER_IDS
では、すべてのクラスターを完全に指定する必要があり、
クラスターの指定が不完全なグラフでレイアウトを実行すると例外がスローされる点にあります。クラスター・メンバーシップおよびクラスター (CL) 内のノードの順序
サブグラフはクラスターを形成するため、クラスター・モード
BY_SUBGRAPHS
ではクラスターを明示的に指定する必要はありません。
クラスター・モード AUTOMATIC
では、
クラスターをオプションとして指定できます。BY_CLUSTER_IDS
モードでは、レイアウトを実行する前にクラスターを指定する必要があります。
ノード・クラスターの指定例 (CL アルゴリズム)
グラフの各ノードが属するクラスターを指定するには、以下のようにします。
クラスター・メンバーシップを指定するには、クラスター ID (クラス ibm_graphlayout.circular.CircularClusterId (抽象) のサブクラスのインスタンス) を使用します。
以下の 2 つのサブクラスが用意されています。
- ibm_ilog.graphlayout.circular.CircularClusterNumber (整数をクラスター ID として使用)。
- ibm_ilog.graphlayout.circular.CircularClusterName (ストリング名をクラスター ID として使用)。
これらの 2 つのタイプの ID を
ibm_ilog.graphlayout.circular.CircularClusterId
の任意の他のサブクラスとして組み合わせることができます。
例えば、以下のように記述できます。// create identifier for first cluster (integer) var clusterId1 = new ibm_ilog.graphlayout.circular.CircularClusterNumber(1); // create identifier for second cluster (string) var clusterId2 = new ibm_ilog.graphlayout.circular.CircularClusterName("R&D network");
次に、
node1
から node3
が最初のクラスターに属する場合は、以下のように記述できます。layout.setClusterIdAndIndex(node1, clusterId1); layout.setClusterIdAndIndex(node2, clusterId1); layout.setClusterIdAndIndex(node3, clusterId1);
layout
が ibm_ilog.graphlayout.circular.CircularLayout
のインスタンスであるとします。ノードを特殊な順序 (例えば、
node1
-> node2
-> node3
) で描画する場合は、以下のように、各ノードにインデックス (整数値) を指定する必要もあります。layout.setClusterId(node1, clusterId1, 0); layout.setClusterId(node2, clusterId1, 1); layout.setClusterId(node3, clusterId1, 2);
以下の 2 つのメソッドを使用して、ノードが属するクラスターを指定できます。
layout.setClusterId(node, clusterId)
layout.addClusterId(node, clusterId)
最初のメソッドを呼び出すと、ノードは、ID が
clusterId
のクラスターにのみ属します。
2 番目のメソッドにより、ノードが複数のクラスターに属することを指定できます。これらのメソッドには、追加引数 (インデックスを表す整数値) を指定した別バージョンもあります。
layout.setClusterIdAndIndex(node, clusterId, index)
layout.addClusterIdAndIndex(node, clusterId, index)
この値は、クラスター上のノードを順序付けるために使用されます。
このようなインデックスを指定した場合、アルゴリズムは、インデックス値に従って昇順でノードをソートします。
インデックスの値は負にすることはできません。数値が連続している必要はなく、値の順序のみが重要です。
特定のクラスター内のノードの指定インデックスを取得するには、以下のメソッドを使用します。
var index = layout.getIndex(node, clusterId)
ノードのインデックスが指定されなかった場合、メソッドは値
ibm_ilog.graphlayout.circular.CircularLayout.NO_INDEX
を返します。
これは、負の値です。ノードが属するクラスターのクラスター ID の列挙を取得するには、以下のメソッドを使用します。
var ids = layout.getNodeClusterIds(node1); while(ids.hasNext()){ var id = ids.next(); console.log("id = " + id); }
列挙の要素は、
ibm_ilog.graphlayout.circular.CircularClusterId
のサブクラスのインスタンスです。ノードが属するクラスターの数を効率的に取得するには、以下のメソッドを使用します。
var count = layout.getClusterIdsCount(node)
指定した ID のクラスターからノードを削除するには、以下のメソッドを使用します。
layout.removeClusterId(node, clusterId)
ノードを、属するすべてのクラスターから削除するには、以下のメソッドを使用します。
layout.removeAllClusterIds(node)
ルート・クラスター (CL)
アルゴリズムは、クラスターのグラフの各 接続コンポーネント のクラスターを「ルート・クラスター」のまわりに配置します。
デフォルトでは、アルゴリズムはこのクラスターを選択できます。
オプションとして、ユーザーは 1 つ以上のルート・クラスター (接続コンポーネントごとに 1 つ) を指定できます。
ルート・クラスターの指定例 (CL アルゴリズム)
1 つ以上のルート・クラスター (接続コンポーネントごとに 1 つ) を指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setRootClusterId(clusterId)
ルート・クラスターとして指定されたクラスターの ID が入った配列を取得するには、以下のメソッドを使用します。
var clusterIds = layout.getRootClusterIds()
このパラメーターは、クラスター・モードが
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
の場合には無効です。スター型クラスター (CL)
スター型中心の指定例 (CL アルゴリズム)
ノードがスター型の中心かどうかを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setStarCenter(node, true)
ノードがスター型の中心かどうかを判別するには、以下のメソッドを使用します。
var isCenter = layout.isStarCenter(node)
デフォルトでは、ノードはスター型の中心ではありません。
このパラメーターは、クラスター・モードが
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
の場合には無効です。クラスターのコンテンツ、位置、およびサイズの取得 (CL)
各クラスターのノードが描画される円の位置およびサイズを知る必要が生じることもあるでしょう。
リンクに対して形状変更を実行する場合などです。
これを行うために、レイアウトの実行後にすべてのクラスター ID が入った配列を取得できます。クラスター・モード
AUTOMATIC
では、クラスターが指定されなかった場合でも、配列には、生成されたクラスター ID が入っている場合があります。すべてのクラスター ID が入った配列の取得例 (CL アルゴリズム)
レイアウト実行後にすべてのクラスター ID が入った配列を取得するには、以下のようにします。
以下のメソッドを使用します。
var ids = layout.getClusterIds()
配列には、
ibm_ilog.graphlayout.circular.CircularClusterId
のサブクラスのインスタンスが入っています。
この Array
の要素を参照することで、各クラスターの必要情報を取得できます。var radius = layout.getClusterRadius(clusterIndex)
var center = layout.getClusterCenter(clusterIndex)
var nodes = layout.getClusterNodes(clusterIndex)
getClusterNodes
メソッドは、クラスターを構成するノードを返します。
引数 clusterIndex
は、メソッド getClusterIds()
によって返される、
Array
内のクラスターの位置を表します。クラスター・モードが
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
の場合は、これらのメソッドを使用しないでください。ディメンション・パラメーター (CL)
このセクションでは、環状レイアウト・アルゴリズムで使用されるディメンション・パラメーターを示します。
このタイプのパラメーターについては、後続の各セクションで説明します。
クラスター・モード
BY_CLUSTER_IDS
は、非接続グラフ・オフセットでも機能します。
これは、セクション 非接続グラフの処理 で説明します。
環状レイアウト・アルゴリズムのディメンション・パラメーター
オフセット (CL)
レイアウト・アルゴリズムは、ノード間の最小距離を保持しようとします (図 環状レイアウト・アルゴリズムのディメンション・パラメーター を参照)。
オフセットの指定例 (CL アルゴリズム)
このオフセットを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setOffset(20)
レベル・オフセット (CL)
クラスター・モードが
BY_SUBGRAPHS
の場合、
レベル・オフセット・パラメーターは、同じクラスターに属するノード間の最小オフセットを制御します。クラスター・モードが
BY_CLUSTER_IDS
の場合、
以下のシナリオが適用されます。CL アルゴリズム での説明のとおり、
相互接続されたリングおよびクラスターは、ルート・クラスターのまわりの同心円上に描画されます。
各同心円の半径は、クラスターのオーバーラップが回避されるように計算されます。
ネットワークの描画がよりクリアになるように、この半径を大きくしたい場合もあるでしょう。
この目的を満たすために、「レベル・オフセット」の値を使用して半径をシステマティックに大きくすることができます (図 環状レイアウト・アルゴリズムのディメンション・パラメーター を参照)。
レベル・オフセットの指定例 (CL アルゴリズム)
レベル・オフセットを指定するには、以下のようにします。
以下のメソッドを使用します。
layout.setLevelOffset(5)
デフォルト値はゼロです。
このパラメーターは、クラスター・モードが
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
の場合には無効です。