Les algorithmes d'agencement de liens sont implémentés par les classes suivantes :
- ibm_ilog.graphlayout.shortlink.ShortLinkLayout pour les liens courts
- ibm_ilog.graphlayout.longlink.LongLinkLayout pour les liens longs
Algorithme d'agencement avec liens courts
L'algorithme d'agencement avec liens courts repose sur une optimisation combinatoire qui choisit la forme "optimisée" des liens afin de réduire une fonction de coût. La fonction de coût est proportionnelle au nombre d'intersections lien-à-lien et lien-à-noeud.
Pour des raisons d'efficacité, la forme de base de chaque lien est choisie parmi un ensemble de formes prédéfinies. Ces formes sont différentes pour chaque option de style de lien. Pour le style de lien orthogonal, les liens sont remodelés en une ligne polygonale pouvant comporter jusqu'à cinq segments horizontaux et verticaux en alternance (voir Agencement avec liens courts pour des liens orthogonaux). Pour le style de lien direct, les liens sont remodelés en une ligne polygonale composés de trois segments : un segment straight-line qui débute et se termine par des petits segments horizontaux ou verticaux (voir Même graphe comportant des liens directs et agencé en mode avec liens courts).
La forme d'un lien varie également en fonction de la position relative des noeuds d'origine et de destination. Par exemple, lorsque deux noeuds sont très proches ou lorsqu'ils se chevauchent, la forme du lien est choisie de sorte que la visibilité du lien soit optimale.
La forme exacte d'un lien est calculée en tenant compte d'autres contraintes. L'algorithme d'agencement tente d'effectuer les actions suivantes :
- Réduire le nombre d'intersections entre les liens incident et un côté spécifique d'un noeud.
- Espacer les segments de fin des liens liés à un côté spécifique d'un noeud de façon égale sur le bord du noeud.
Algorithme d'agencement avec liens longs
L'algorithme d'agencement avec liens longs commence par traiter chaque lien individuellement. Pour chaque lien, il calcule d'abord les points de connexion sur les noeuds de fin qui figurent sur la grille et les classe en fonction d'une valeur de pénalité. Les points de connexion sur les points de grille utilisés ont une valeur de pénalité élevée ; par conséquent, il est peu probable qu'ils soient utilisés.
Pour les liens orthogonaux (voir Agencement avec liens longs pour des liens orthogonaux), l'algorithme d'agencement avec liens longs utilise ensuite une traversée de grille pour rechercher une route le long des points de grille inoccupés entre le point de connexion de départ et le point de connexion final. Par conséquent, contrairement au mode avec liens courts, les liens orthogonaux peuvent prendre n'importe quelle forme et comporter un nombre élevé de courbes si cela s'avère nécessaire pour contourner les noeuds qui constituent d'obstacles et éviter des chevauchements. Pour les liens directs ,voir Même graphe comportant des liens directs et agencé en mode avec liens courts, il raccourcit la recherche en utilisant un segment direct entre les points de connexion.
Une fois que tous les liens sont positionnés, une phase de réduction du nombre d'intersections examine les paires de liens et élimine les intersections de liens en échangeant des parties des routes entre les deux liens.
L'algorithme d'agencement avec liens longs repose sur le fait que les liens s'adaptent à l'espacement de grille et que les parties des routes entre différents liens sont échangeables. Par conséquent, l'algorithme d'agencement avec liens longs ne tient pas compte de la largeur de lien car il serait trop difficile de trouver les parties de deux liens pouvant être échangées. Il est recommandé de définir une valeur d'espacement de grille supérieure à la largeur de lien la plus élevée.
Exemple d'agencement de liens
L'exemple de code suivant montre comment utiliser la classe ibm_ilog.graphlayout.shortlink.ShortLinkLayout.
var layout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout(); graph.setLinkLayout(layout); graph.performGraphLayout();