Décalage entre branches
En mode d'agencement en ballon, il existe un espacement minimum uniquement entre les noeuds. Les décalages minimum entre noeuds frères, entre branches et entre le parent et ses enfants ne font l'objet d'aucune distinction. L'espacement minimum entre les noeuds est contrôlé par le décalage entre branches, comme en mode libre et en mode en niveaux. Le décalage entre noeuds frères et le décalage entre parent et enfants n'ont aucun effet en mode d'agencement en ballon.
Pour spécifier le décalage minimum entre les noeuds :
Utilisez la méthode setBranchOffset :
treeLayout.setBranchOffset(20);
Espacement angulaire
Les angles entre les secteurs d'un ballon et le rayon du ballon, ont plus d'effet sur l'espacement de l'agencement que le décalage minimum. Si les angles de secteur choisis sont inappropriés, des rayons plus grands sont nécessaires pour éviter des chevauchements, et par conséquent, une zone plus grande est requise pour l'agencement.
Par conséquent, l'agencement offre différents modes d'espacement angulaire.
Dans l'illustration ci-après, l'agencement représenté à gauche utilise un espacement angulaire régulier et l'agencement représenté à droite utilise un espacement angulaire proportionnel. Dans l'illustration de droite, l'angle de secteur de la sous-arborescence bleue est beaucoup plus grand que les angles de secteur de chacune des sous-arborescences vertes, puisque la sous-arborescence bleue est plus grande que les sous-arborescences vertes.

Espacement angulaire : gauche : régulier, droite : proportionnel (lent)
Pour spécifier l'espacement angulaire :
Utilisez la méthode setBalloonAngleSpacing :
treeLayout.setBalloonAngleSpacing(ibm_ilog.graphlayout.tree.TreeLayout.REGULAR);
Les valeurs valides pour le mode sont les suivantes :
- ibm_ilog.graphlayout.tree.TreeLayout.REGULAR
- La plage d'angles disponible au niveau d'un noeud est répartie de façon équidistante de sorte que chaque ballon de sous-arborescence sur le noeud puisse occuper le même angle. L'effet obtenu est uniforme mais cette répartition tend à entraîner un gaspillage de l'espace si les sous-arborescences ne sont pas de la même taille. Voir l'illustration de gauche dans la figure sur l'espacement angulaire.
- ibm_ilog.graphlayout.tree.TreeLayout.FAST_PROPORTIONAL
- La plage d'angles disponible au niveau d'un noeud est répartie de façon proportionnelle de sorte que des ballons de sous-arborescence plus grands sur le noeud puissent occuper des angles plus grands. Par conséquent, une sous-arborescence de plus grande taille nécessite un rayon plus petit ; ce mode utilise donc moins d'espace. L'algorithme utilise une méthode heuristique rapide pour calculer les espacements entre les angles. Cette méthode heuristique n'est pas précise et génère parfois des agencements asymétriques. La qualité du résultat dépend grandement du choix de l'angle de départ. La méthode heuristique s'exécute en temps linéaire.
- ibm_ilog.graphlayout.tree.TreeLayout.PROPORTIONAL
- Identique au mode proportionnel rapide : la plage d'angles disponible au niveau d'un noeud est répartie de façon proportionnelle de sorte que des ballons de sous-arborescence plus grands sur le noeud puissent occuper des angles plus grands. Toutefois, l'algorithme utilise une méthode heuristique lente qui est plus précise, optimise l'espacement et génère des agencements symétriques. La qualité du résultat ne dépend pas du choix de l'angle de départ. La méthode heuristique s'exécute en temps quadratique. Il s'agit du mode par défaut. Voir l'illustration de droite dans la figure sur l'espacement angulaire.
Mode de rayon
Lorsque les angles de secteur ont été choisis pour les ballons de sous-arborescence, le rayon (longueur du lien entre le parent et ses enfants) doit être calculé de sorte qu'il n'y ait aucun chevauchement de sous-arborescences. Le choix du rayon est un compromis entre symétrie et zone. Choisir un rayon uniforme pour tous les noeuds enfants du même parent nécessite souvent beaucoup d'espace.
Voir l'image en haut à gauche de l'illustration représentant des exemples d'agencements de rayon variables et uniformes. Si le rayon est variable, les symétries sont perdues.
Vous pouvez décider d'un compromis et choisir d'avoir un rayon variable uniquement pour les ballons de sous-arborescence de grande taille et de conserver un rayon uniforme pour toutes les feuilles d'un parent. Voir l'image en haut à droite de l'illustration représentant des exemples d'agencements de rayon uniformes et variables, dans laquelle le lien vers la sous-arborescence bleue est plus long que les liens vers les sous-arborescences vertes. Si les symétries n'ont aucune importance, vous pouvez sélectionner une autre phase d'optimisation au cours de laquelle les ballons sont décalés en vue d'être rapprochés. La phase d'optimisation peut s'appliquer aux sous-arborescences qui ne sont pas des feuilles. Voir l'image en bas à gauche de l'illustration représentant des exemples d'agencements de rayon variables et uniformes.
Cette phase peut également être utilisée pour décaler les feuilles ensemble. Voir l'image en bas à droite des illustrations représentant des exemples d'agencements de rayon variables et uniformes. Dans ce dernier cas, les feuilles sont le plus souvent éclatées et ne figurent plus sur un cercle.

Mode de rayon : gauche : uniforme, droite : feuilles uniformes (les sous-arborescences plus grandes ont un rayon variable)

Mode de rayon : gauche : feuilles uniformes optimisées, droite : variable optimisée
Pour spécifier le mode de rayon :
Utilisez la méthode setBalloonRadiusMode :
treeLayout.setBalloonRadiusMode(ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_RADIUS);
Les valeurs valides pour
mode
sont les suivantes :- ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_RADIUS
- Les rayons de tous les ballons de sous-arborescence qui sont des noeuds enfants du même noeud sont uniformes. Ce mode nécessite la zone la plus grande mais fournit également le plus grand nombre de symétries dans l'agencement. Toutefois, si l'arborescence n'est pas très équilibrée, elle gaspille généralement beaucoup d'espace. Voir l'illustration en haut à gauche dans la figure sur le rayon variable.
- ibm_ilog.graphlayout.tree.TreeLayout.UNIFORM_LEAVES_RADIUS
- Les rayons de toutes les feuilles qui sont des noeuds enfants du même noeud sont uniformes. Toutefois, le rayon d'un ballon qui contient plus d'un noeud peut varier. Cette valeur convient mieux aux arborescences non équilibrées car elle permet une meilleure utilisation de l'espace. Utilisez cette valeur si les symétries ont de l'importance dans l'agencement. Voir l'illustration en haut à droite dans la figure sur le rayon variable.
- ibm_ilog.graphlayout.tree.TreeLayout.VARIABLE_RADIUS
- Le rayon des différents ballons enfants au niveau du même noeud parent peut varier. Il peut même varier pour les noeuds enfants du même noeud, si les tailles de noeud de ces noeuds enfants sont différentes.
- TreeLayout.OPTIMIZED_UNIFORM_LEAVES_RADIUS
- Le positionnement initial est effectué comme en mode de rayon de feuilles uniformes. En outre, une méthode heuristique d'optimisation décale les sous-arborescences ensemble afin de réduire les rayons. L'espace requis est plus petit, mais les symétries ne sont pas préservées dans le diagramme. Les feuilles qui ont le même noeud parent conserve le même rayon. Voir l'illustration en bas à gauche dans la figure sur le rayon variable.
- ibm_ilog.graphlayout.tree.TreeLayout.OPTIMIZED_VARIABLE_RADIUS
- Le positionnement initial est effectué comme en mode de rayon variable. En outre, une méthode heuristique d'optimisation décale les sous-arborescences ensemble afin de réduire les rayons. L'espace requis est plus petit, mais les symétries ne sont pas préservées dans le diagramme. Cela affecte également les feuilles du même parent, qui peuvent donc se retrouver éclatées autour du parent. Voir l'illustration en bas à droite dans la figure sur le rayon variable.