間隔パラメーター

ブランチ・オフセット

バルーン・レイアウト・モードは、ノード間のみの最小間隔を使用し、兄弟、ブランチ、および親子関係の最小オフセットを区別しません。 ノード間の最小間隔は、自由モードおよびレベル・モードと同様に、ブランチ・オフセットによって制御されます。 バルーン・レイアウト・モードでは、兄弟オフセットおよび親子オフセットの効果はありません。
ノード間の最小オフセットを指定するには、以下のようにします。
メソッド setBranchOffset を使用します。
treeLayout.setBranchOffset(20);

角度間隔

バルーンのセクター間の角度およびバルーンの半径は、最小オフセットより、レイアウトの間隔に影響します。 セクターの角度の選択が適切でないと、オーバーラップを回避するために必要な半径が大きくなるため、レイアウトの面積が大きくなります。 そのため、レイアウトでは、さまざまな角度間隔モードが用意されています。
以下の図で、左のレイアウトでは通常の角度間隔を使用しており、右のレイアウトではプロポーショナル角度間隔を使用しています。 右図で、青色のサブツリーのセクターの角度は、緑色の各サブツリーのセクターの角度よりかなり大きくなっています。 これは、青色のサブツリーは緑色のサブツリーより大きいからです。
バルーン・レイアウトの角度間隔 - 左: 通常、右: プロポーショナル (時間がかかる)
角度間隔 - 左: 通常、右: プロポーショナル (時間がかかる)
角度間隔を指定するには、以下のようにします。
メソッド setBalloonAngleSpacing を使用します。
treeLayout.setBalloonAngleSpacing(ibm_ilog.graphlayout.tree.TreeLayout.REGULAR);
モードの有効値は、以下のとおりです。
ibm_ilog.graphlayout.tree.TreeLayout.REGULAR
ノードで使用可能な角度範囲が、ノードの各サブツリー・バルーンの角度が同じになるように、均等に分割されます。 これは均一な外観になりますが、サブツリーのサイズが同じでない場合にはスペースが浪費される傾向があります。角度間隔図の左のイメージを参照してください。
ibm_ilog.graphlayout.tree.TreeLayout.FAST_PROPORTIONAL
ノードで使用可能な角度範囲が、ノードのサブツリー・バルーンが大きければ大きいほど角度が大きくなるように、比例的に分割されます。 結果として、サブツリーが大きければ大きいほど半径が小さくなるため、このモードではスペース使用量が低減します。 アルゴリズムは高速なヒューリスティックを使用して、角度範囲を計算します。 このヒューリスティックは正確ではなく、非対称なレイアウトを作成してしまうことがあります。結果の品質は、開始角度の選択に強く依存します。 ヒューリスティックは線形時間で実行されます。
ibm_ilog.graphlayout.tree.TreeLayout.PROPORTIONAL
高速プロポーショナル・モードと同じで、ノードで使用可能な角度範囲が、ノードのサブツリー・バルーンが大きければ大きいほど角度が大きくなるように、比例的に分割されます。 ただし、アルゴリズムは、時間のかかるより正確なヒューリスティックを使用し、スペースの使用効率を上げ、対称的なレイアウトを作成します。 結果の品質は、開始角度の選択に依存しません。 ヒューリスティックは 2 次時間で実行されます。これはデフォルト・モードです。角度間隔図の右のイメージを参照してください。

半径モード

サブツリー・バルーンでセクター角度が選択されると、どのサブツリーもオーバーラップしないように、半径 (親から子へのリンクの長さ) を計算する必要があります。 半径の選択は、対称性と面積の間のトレードオフ関係にあります。 同じ親のすべての子ノードで均一半径を選択すると、多くの場合、多くのスペースが必要になります。 均一半径のレイアウトと可変半径のレイアウトの例を示す図の左上のイメージを参照してください。 半径が可変の場合、対称性は失われます。 妥協として、大きなサブツリー・バルーンにのみ可変半径を使用して、親のすべてのリーフで均一な半径を保持することができます。均一半径のレイアウトと可変半径のレイアウトの例を示す図の右上のイメージを参照してください。 このイメージでは、青色のサブツリーに向かうリンクは、緑色のサブツリーに向かうリンクよりも長くなっています。対称性が重要でない場合は、バルーンが互いに近くなるようにシフトする追加の最適化フェーズを選択できます。 最適化フェーズは、リーフではないサブツリーに適用できます。 均一半径のレイアウトと可変半径のレイアウトの例を示す図の左下のイメージを参照してください。 このフェーズは、リーフを一緒にシフトするためにも使用できます。 均一半径のレイアウトと可変半径のレイアウトの例を示す図の右下のイメージを参照してください。 後者の場合、リーフは多くの場合散らばっており、円上にありません。
バルーン・レイアウト・モード、半径モード - 左: 均一、右: 均一リーフ (大きいサブツリーは可変半径)
半径モード - 左: 均一、右: 均一リーフ (大きいサブツリーは可変半径)
バルーン・レイアウト・モード、半径モード - 左: 最適化均一リーフ、右: 最適化可変。
半径モード - 左: 最適化均一リーフ、右: 最適化可変
半径モードを指定するには、以下のようにします。
メソッド setBalloonRadiusMode を使用します。
treeLayout.setBalloonRadiusMode(ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_RADIUS);
mode の有効な値は、次のとおりです。
ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_RADIUS
同じノードの子ノードであるすべてのサブツリー・バルーンの半径が均一になります。 このモードでは必要な面積が最大になりますが、レイアウト内の対称数も最大になります。 ただし、ツリーのバランスが取れていない場合は、多くのスペースが浪費されます。 可変半径図の左上のイメージを参照してください。
ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_LEAVES_RADIUS
同じノードの子ノードであるすべてのリーフの半径が均一になります。 ただし、複数のノードを含むバルーンの半径は異なる可能性があります。 使用可能なスペースをはるかに効率的に使用するため、この値はバランスが取れていないツリーの場合に、より優れています。 レイアウトの対称性が重要な場合は、この値を使用します。 可変半径図の右上のイメージを参照してください。
ibm_ilog.graphlayout.tree.TreeLayout.VARIABLE_RADIUS
同じ親ノードのすべての異なる子バルーンの半径が異なる可能性があります。 同じノードの子ノードでも、ノード・サイズが異なれば、半径が異なる可能性があります。
TreeLayout.OPTIMIZED_UNIFORM_LEAVES_RADIUS
均一リーフ半径モードと同様に、初期配置が実行されます。 さらに、半径を小さくするために、最適化の実践によってサブツリーが一緒にずらされます。これはスペース所要量が小さいという利点がありますが、ダイアグラムが対称でなくなります。 親ノードが同じリーフは、同じ半径のままです。 可変半径図の左下のイメージを参照してください。
ibm_ilog.graphlayout.tree.TreeLayout.OPTIMIZED_VARIABLE_RADIUS
可変半径モードと同様に、初期配置が実行されます。 さらに、半径を小さくするために、最適化の実践によってサブツリーが一緒にずらされます。これはスペース所要量が小さいという利点がありますが、ダイアグラムが対称でなくなります。 これは同じ親のリーフにも影響するため、それらは親のまわりに散らばってしまうことがあります。 可変半径図の右下のイメージを参照してください。