A l'attention des experts : autres fonctions d'agencement de liens

Utilisation d'un filtre de côtés de noeud

Certaines applications nécessitent que les liens ne soient pas connectés à des côtés spécifiques de certains noeuds. L'algorithme d'agencement de liens utilise un filtre de côtés de noeud pour vous permettre de limiter le côté de noeud auquel un lien peut se connecter.
Un filtre de côtés de noeud est n'importe quelle classe qui implémente l'interface ibm_ilog.graphlayout.INodeSideFilter. Cette interface définit la méthode suivante :
accept(graphModel, link, origin, node, side)
Cette méthode permet à l'entrée link de connecter son origin ou sa destination à l'entrée side de l'entrée node.
Supposons par exemple que l'application requiert que pour les noeuds de fin de type MyNode1, les liens puissent connecter leur origine uniquement aux côtés supérieur et inférieur.
Pour les noeuds de fin de type MyNode2, les liens peuvent connecter leur destination uniquement aux côtés gauche et droit. Vous pouvez obtenir ce résultat en utilisant le filtre de côtés de noeud suivant :
dojo.declare('MyFilter', ibm_ilog.graphlayout.INodeSideFilter,
{
  accept: function(graphModel, link, origin, node, side) {
    if (node instanceof MyNode1 && origin)
        return (side == ibm_ilog.graphlayout.Direction.TOP || side == ibm_ilog.graphlayout.Direction.BOTTOM);
    if (node instanceof MyNode2 && !origin)
        return (side == ibm_ilog.graphlayout.Direction.LEFT || side == ibm_ilog.graphlayout.Direction.RIGHT);
    return true;
  }
});
Exemple de définition de filtre de côtés de noeud (algorithme d'agencement de liens)
Pour définir ce filtre de côtés de noeud :
Utilisez la méthode nodeSideFilter :
layout.setNodeSideFilter(new MyFilter());
Pour supprimer le filtre de côtés de noeud :
layout.nodeSideFilter(null); 

Utilisation d'une interface de cadre de noeud

Certaines applications nécessitent que la zone effective d'un noeud ne corresponde pas exactement à son cadre de délimitation. Par exemple, si le noeud comporte une ombre, celle-ci est incluse dans le cadre de délimitation. L'ombre peut ne pas être considérée comme un obstacle pour les liens. Dans ce cas, le cadre de délimitation effectif d'un noeud est plus petit.
Exemple d'utilisation d'une interface de cadre de noeud (algorithme d'agencement de liens)
Vous pouvez modifier le cadre de délimitation effectif d'un noeud en définissant une classe qui implémente ibm_ilog.graphlayout.INodeBoxProvider.
Cette interface définit la méthode suivante :
getBox(graphModel, node)
Cette méthode vous permet d'obtenir le cadre de délimitation effectif. Par exemple, pour définir une interface de cadre de noeud qui renvoie un cadre de délimitation plus petit pour tous les noeuds de type MyNode, appelez :
dojo.declare('MyNodeBoxProvider', ibm_ilog.graphlayout.INodeBoxProvider,
 {
    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;
    }
});

Utilisation d'une interface link connection box

Par défaut, les points de connexion des liens sont répartis sur le bord du cadre de délimitation des noeuds. 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. C'est le cas, par exemple, lorsque les libellés sont affichés au-dessus ou au-dessous des noeuds.
Utilisation d'une interface link connection box pour modifier la position de 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 ibm_ilog.graphlayout.ILinkConnectionBoxProvider. Il s'agit d'une sous-interface de INodeBoxProvider ; voir Utilisation d'une interface de cadre de noeud. Elle définit une nouvelle fois la méthode :
getBox(graphModel, node)
Cette méthode vous permet de renvoyer le rectangle sur lequel les points de connexion des liens sont effectivement positionnés.
En outre, l'interface ibm_ilog.graphlayout.ILinkConnectionBoxProvider définit une seconde méthode :
getTangentialOffset(graphModel, node, nodeSide)
Cette méthode est utilisée uniquement dans un agencement avec liens courts. Pour plus de détails, voir Utilisation d'une interface de cadre de connexion de liens. Dans un agencement avec liens longs, implémentez la méthode en renvoyant la valeur 0.