A l'attention des experts : options spéciales d'agencement avec liens courts

Les options ci-après s'appliquent à ibm_ilog.graphlayout.shortlink.ShortLinkLayout uniquement.

Style d'autolien

Les autoliens sont des liens dont l'origine et la destination correspondent au même noeud. L'agencement avec liens courts fournit deux formes optionnelles pour les autoliens.
Graphe illustrant tout d'abord le style d'autolien avec deux courbes, puis le style d'autolien avec trois courbes
Options de style d'autolien
Exemple de définition du style des autoliens (algorithme d'agencement de liens)
Pour définir le style des autoliens :
Utilisez la méthode setGlobalSelfLinkStyle :
layout.setGlobalSelfLinkStyle(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BEND_ORTHOGONAL_STYLE);
Les valeurs valides pour le style sont les suivantes :
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BENDS_ORTHOGONAL_STYLE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.THREE_BENDS_ORTHOGONAL_STYLE

Nombre d'itérations d'optimisation

L'optimisation des formes de lien s'arrête si le temps imparti est dépassé (voir Temps imparti (LL)) ou si le nombre d'itérations est supérieur au nombre maximal autorisé.
Exemple de spécification du nombre d'itérations d'optimisation (algorithme d'agencement de liens)
Pour affecter la valeur 3 au nombre d'itérations autorisé :
Utilisez la méthode setAllowedNumberOfIterations :
layout.setAllowedNumberOfIterations(3);
Note
Vous pouvez être amené à désactiver l'optimisation des formes de lien en affectant la valeur 0 au nombre d'itérations afin d'augmenter la vitesse du processus d'agencement.

Rapport de marge des broches équidistantes

Le rapport de marge vous permet de personnaliser le calcul des points de connexion lorsque le style de connecteur (voir Style de connecteur) a pour valeur EVENLY_SPACED_PINS et lorsque le AUTOMATIC_STYLE positionne les points de connexion à l'aide du style EVENLY_SPACED_PINS. Cette option est sans effet si le style de connecteur FIXED_OFFSET_PINS est utilisé.
Dans le style de connecteur avec des “broches équidistantes”, les points de connexion des liens sont espacés de façon équidistante le long du bord du noeud, en préservant une marge à chaque extrémité du bord du noeud. La taille de cette marge est contrôlée par le rapport de marge et calculée en multipliant le décalage entre les liens par le rapport.
Exemple de spécification du rapport de marge (algorithme d'agencement de liens)
Pour spécifier cette option :
Utilisez la méthode setEvenlySpacedPinsMarginRatio :
layout.setEvenlySpacedPinsMarginRatio(1);
La valeur d'entrée doit être une valeur positive ou égale à zéro. La valeur par défaut est 0.5. Rapport de marge des broches équidistantes illustre des exemples de valeurs accompagnées de leur signification.
Rapport de marge des broches équidistantes
Valeur de rapport
Signification
0
Aucune marge.
0,5 (valeur par défaut)
La marge est égale à la moitié du décalage entre les liens.
1
La marge est égale au décalage entre les liens.
2
La marge est égale au double du décalage entre les liens.

Interdire les chevauchements de noeuds par les liens

Cette option vous permet d'indiquer que l'algorithme d'agencement doit rigoureusement éviter de remodeler les liens de sorte qu'ils chevauchent des noeuds. Si les chevauchements ne sont pas interdits, l'algorithme tente tout de même de les éviter. Il peut créer des chevauchements, par exemple, pour permettre à un lien de croiser d'autres liens.
Note
Le fait d'interdire les chevauchements peut avoir pour conséquence de ralentir l'agencement et d'augmenter le nombre de coudes pour les liens qui chevaucheraient des noeuds si les chevauchements n'étaient pas strictement interdits.
Exemple de spécification de l'option Interdire les chevauchements de noeuds par les liens (algorithme d'agencement de liens)
Pour spécifier cette option :
Utilisez la méthode setLinkOverlapNodesForbidden :
layout.setLinkOverlapNodesForbidden(true);
La valeur par défaut de cette option est false.
Lorsque les chevauchements sont interdits, l'algorithme d'agencement avec liens courts utilise l'agencement avec liens longs comme algorithme auxiliaire pour agencer uniquement les liens qui chevaucheraient des noeuds si les chevauchement n'étaient pas interdits.
Exemple de spécification de l'agencement avec liens longs lorsque les chevauchements sont interdits (algorithme d'agencement de liens)
Pour extraire une instance auxiliaire d'un agencement avec liens longs :
Appelez la méthode suivante sur l'instance ibm_ilog.graphlayout.shortlink.ShortLinkLayout :
var longLinkLayout = layout.getAuxiliaryLongLinkLayout();
Cette méthode vous permet d'extraire cette instance d'agencement auxiliaire et de personnaliser ses paramètres, le cas échéant. Vous ne devez pas modifier le mode de point d'origine et de destination ni désactiver la conservation des noeuds fixes.

Mode incrémentiel de remodelage de lien

En mode incrémentiel, il est possible de personnaliser les règles utilisées par l'agencement avec liens courts pour déterminer les liens qui, dans la mesure du possible, doivent conserver leur forme actuelle, telle qu'elle a été calculée par l'agencement précédent. Avec le mode incrémentiel de remodelage de lien, vous pouvez personnaliser ces règles séparément pour deux catégories de liens.
  • “Liens modifiés” : liens dont le “cadre de connexion de liens” est différent de celui utilisé lors de l'agencement précédent ou qui sont connectés à des noeuds dont le cadre de délimitation est différent de celui utilisé lors de l'agencement précédent.
  • “Liens non modifiés” : liens dont le “cadre de connexion de liens” est le même que celui utilisé lors de l'agencement précédent ou qui sont connectés à des noeuds dont le cadre de délimitation est le même que celui utilisé lors de l'agencement précédent.
Le mode peut être personnalisé pour l'une et/ou l'autre de ces catégories de liens.
Le mode incrémentiel de remodelage de lien est sans effet si le mode incrémentiel est désactivé.
L'algorithme d'agencement fournit deux modes incrémentiels de remodelage de lien. Vous pouvez définir le mode de manière globale, auquel cas, tous les liens ont le même mode, ou localement sur chaque lien, auquel cas, le tracé comporte différents modes.

Mode incrementiel de remodelage de lien global

Exemple de spécification de mode incrémentiel de remodelage de lien global (algorithme d'agencement de liens)
Pour spécifier le mode incrémentiel de remodelage de lien global :
layout.setGlobalIncrementalModifiedLinkReshapeMode(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE);
Les valeurs valides pour mode sont les suivantes :
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (valeur par défaut)
    L'agencement incrémentiel conserve le type de forme du lien. Cela signifie que le nombre de courbes et les côtés de noeud auxquels le lien est connecté sont conservés.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
    L'agencement incrémentiel conserve les côtés de noeud auxquels les liens sont connectés.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
    L'agencement incrémentiel conserve les points de connexion des liens.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE
    Les liens ne sont pas du tout remodelés au cours de l'agencement incrémentiel. Seuls les liens nouvellement ajoutés sont reroutés.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
    L'agencement incrémentiel peut remodeler librement les liens. Cela équivaut à un comportement non incrémentiel pour tous les liens; par conséquent, il est recommandé de désactiver le mode incrémentiel au lieu d'utiliser FREE_MODE comme mode incrémentiel de remodelage global.
    Les paramètres éventuellement spécifiés lors de la “définition des liens comme fixes” (voir Conserver les liens fixes (LL)) ou lors de la personnalisation du mode de point d'origine ou de destination (voir Mode de points finals (LL)) sont conservés.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE
    Chaque lien peut avoir un mode différent.

Mode incrementiel de remodelage de lien individuel

Tous les liens ont le même mode incrémentiel de remodelage de lien sauf si le mode incrémentiel de remodelage de lien global a pour valeur ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE.
Chaque lien peut avoir un mode individuel uniquement lorsque le mode global a pour valeur MIXED_MODE.
Exemple de spécification de mode incrémentiel de remodelage de lien individuel (algorithme d'agencement de liens)
Pour spécifier le mode d'un lien individuel :
Utilisez les méthodes suivantes sur l'instance ibm_ilog.graphlayout.shortlink.ShortLinkLayout :
layout.setIncrementalModifiedLinkReshapeMode(link, mode);  
layout.setIncrementalUnmodifiedLinkReshapeMode(link, mode);
var mode = layout.getIncrementalModifiedLinkReshapeMode(link);
var mode = layout.getIncrementalUnmodifiedLinkReshapeMode(link); 
Les valeurs valides pour mode sont les suivantes :
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (valeur par défaut)
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE

Même forme pour plusieurs liens

Vous pouvez forcer l'algorithme d'agencement à calculer la même forme pour tous les liens dont les noeuds d'origine et de destination sont communs. Les liens ont des formes parallèles.
Lorsque cette option est désactivée, l'agencement peut calculer des formes différentes pour des liens qui se connectent à la même paire de noeuds. En général, des formes différentes sont choisies afin d'éviter tout chevauchement.
Deux modes interconnectés illustrés avec l'option de forme identique désactivée, puis activée
Option Même forme pour plusieurs liens
Exemple de spécification de la même forme pour plusieurs liens (algorithme d'agencement de liens)
Pour activer la même forme pour plusieurs liens :
Utilisez la méthode suivante :
layout.setSameShapeForMultipleLinks(true);
La valeur par défaut est false.

Pénalité d'intersection de liens

Le calcul de la forme des liens est motivé par l'objectif de réduction d'une fonction de coût, qui est proportionnelle au nombre d'intersections lien-à-lien et lien-à-noeud. Par défaut, ces deux types d'intersection ont des poids égaux correspondant à 1. Vous pouvez augmenter le poids de ces intersections lien-à-noeud.
Exemple de spécification de pénalité d'intersection lien-à-noeud (algorithme d'agencement de liens)
Pour augmenter le poids des intersections lien-à-noeud :
Utilisez la méthode suivante :
layout.setLinkToNodeCrossingPenalty(5);
Ce paramètre augmente la possibilité d'obtenir un agencement sans aucune intersection lien-à-noeud (ou avec quelques intersections seulement), aux dépends de la possibilité d'obtenir un nombre d'intersections lien-à-lien plus élevé.
Vous pouvez également augmenter le poids des intersections lien-à-lien.
Exemple de spécification de pénalité d'intersection lien-à-lien (algorithme d'agencement de liens)
Pour augmenter le poids des intersections lien-à-lien, par exemple, avec une valeur égale à 3 :
Utilisez la méthode suivante :
layout.setLinkToLinkCrossingPenalty(3);
Ce paramètre augmente la possibilité d'obtenir un agencement sans aucune intersection lien-à-lien (ou avec quelques intersections seulement), aux dépends de la possibilité d'obtenir un nombre d'intersections lien-à-noeud plus élevé.

Distance non prise en compte

Si les noeuds d'origine et de destination sont trop proches, il se peut que l'espace pour router le lien directement entre les noeuds de fin ne soit pas suffisant. Par conséquent, si l'intervalle entre les noeuds de fin est inférieur à une distance de seuil, par défaut, l'agencement choisit des formes de lien qui ignorent l'intervalle entre des noeuds voisins. (Voir Noeuds de fin et distance non prise en compte.)
Deux noeuds interconnectés séparés par un intervalle supérieur à la distance non prise en compte, puis séparés par un intervalle inférieur à la distance non prise en compte
Noeuds de fin et distance non prise en compte
La distance non prise en compte correspond à la distance minimale entre les noeuds d'origine et de destination pour lesquels une forme de lien allant directement d'un noeud à un autre est autorisée. L'algorithme tente d'éviter les formes de lien qui connectent directement les côtés des noeuds de fin séparés par un intervalle inférieur à la valeur de la distance non prise en compte.
Exemple de spécification de la distance non prise en compte (algorithme d'agencement de liens)
Pour définir la distance non prise en compte :
Utilisez la méthode setBypassDistance.
layout.setBypassDistance(1);
La valeur par défaut est une valeur strictement négative. Si la distance non prise en compte est strictement négative, la valeur du paramètre de longueur minimale de segment final est utilisée comme distance non prise en compte. Voir Longueur minimale de segment final. Cela permet l'ajustement automatique de la distance non prise en compte en fonction de la valeur en cours du paramètre de longueur minimale de segment final. Ce comportement est approprié dans la plupart des cas. Vous pouvez spécifier une valeur non négative pour remplacer le comportement par défaut.

Utilisation d'une interface de cadre de connexion de liens

Par défaut, les points de connexion des liens sont répartis sur le bord du cadre de délimitation des noeuds, de façon symétrique par rapport au milieu de chaque côté. Il peut s'avérer nécessaire de positionner les points de connexion sur un rectangle plus petit ou plus grand que le cadre de délimitation, éventuellement de façon asymétrique. Cela peut être le cas, par exemple, lorsque des libellés sont affichés au-dessous ou au-dessus des noeuds.
Exemple d'utilisation d'une interface de cadre de connexion de liens pour modifier la position des points de connexion (algorithme d'agencement de liens)
Vous pouvez modifier la position des points de connexion des liens en indiquant une classe qui implémente l'interface ILinkConnectionBoxProvider.
Cette interface définit la méthode suivante :
getBox(graphModel, node)
Cette méthode vous permet d'obtenir le rectangle sur lequel les points de connexion des liens sont effectivement positionnés.
Une autre méthode définie dans l'interface autorise le décalage indirect des points de connexion, d'une façon différente pour chaque côté de chaque noeud :
getTangentialOffset(graphModel, node, nodeSide)
Par exemple, pour définir un fournisseur de cadre de connexion de liens qui renvoie un rectangle de connexion de liens plus petit que le cadre de délimitation pour tous les noeuds de type MyNode et qui décale les points de connexion des côtés gauche et droit de tous les noeuds, appelez :
dojo.declare('MyLinkConnectionBoxProvider', ibm_ilog.graphlayout.ILinkConnectionBoxProvider,
 {
    getBox: function(graphModel, node)
   {
        var rect:Rectangle = graphModel.getBounds(node);
        if (node is MyNode) {
            // for example, the size of the bounding box is reduced:
            rect.x += 4;
            rect.y += 4;
            rect.width -= 8;
            rect.height -= 8;
        }
        return rect;
    },

    getTangentialOffset: function(graphModel, node, side)
    {
        switch (side) {
             case ibm_ilog.graphlayout.Direction.LEFT:
             case ibm_ilog.graphlayout.Direction.RIGHT:
                 return -10; // shift up with 10 for both left and right side
             case ibm_ilog.graphlayout.Direction.TOP:
             case ibm_ilog.graphlayout.Direction.BOTTOM:
             default:
                 return 0; // no shift for top and bottom side
         }
    }
});

layout.setLinkConnectionBoxProvider(new MyLinkConnectionBoxProvider());
Options de style d'autolien illustre les effets de la personnalisation du cadre de connexion. Sur la gauche est illustrée l'utilisation des paramètres par défaut : les points de connexion sont répartis sur le cadre de délimitation du noeud (libellé inclus) et sont symétriques par rapport au milieu de chaque côté de noeud (libellé inclus). Sur la droite est illustré le résultat de la spécification d'une interface link connection box. Sur le côté inférieur des noeuds, les liens sont maintenant connectés au noeud (en passant par dessus le libellé), tandis que sur les côtés gauche et droit des noeuds, les points de connexion sont maintenant symétriques par rapport au milieu du noeud (hors libellé).
Graphe avec le cadre de connexion de liens par défaut, puis avec un cadre de connexion de liens personnalisé
Personnalisation du cadre de connexion de liens