Para expertos: características adicionales de Diseño de enlaces

Utilización de un filtro de caras del nodo

Algunas aplicaciones requieren que los enlaces no estén conectados a caras concretas de nodos determinados. Con el algoritmo Diseño de enlaces, puede restringir la cara del nodo a la que puede conectarse un enlace utilizando un filtro de caras del nodo.
Un filtro de caras del nodo es una clase que implementa la interfaz de ibm_ilog.graphlayout.INodeSideFilter. Esta interfaz define el método siguiente:
accept(graphModel, link, origin, node, side)
Este método permite que el link de entrada conecte su origin o destino con la side de entrada del node de entrada.
Por ejemplo, suponga que la aplicación requiere que para los nodos finales de tipo MyNode1, los enlaces sólo pueden conectar su origen con la cara superior e inferior.
Para los nodos finales de tipo MyNode2, los enlaces sólo pueden conectar su destino con la cara izquierda y derecha. Puede obtener este resultado con el siguiente filtro de caras del nodo:
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;
  }
});
Ejemplo de cómo establecer un filtro de caras del nodo (algoritmo Diseño de enlaces)
Para establecer este filtro de caras del nodo:
Utilice el método nodeSideFilter:
layout.setNodeSideFilter(new MyFilter());
Para eliminar el filtro de caras del nodo:
layout.nodeSideFilter(null); 

Utilización de una interfaz de recuadro de nodo

Algunas aplicaciones requieren que el área útil de un nodo no sea exactamente su recuadro delimitador. Por ejemplo, si el nodo tiene una sombra, la sombra se incluye en el recuadro delimitador. La sombra no se puede considerar como un obstáculo para los enlaces. En este caso, el recuadro delimitador útil de un nodo es menor.
Ejemplo de cómo utilizar una interfaz de recuadro de nodo (algoritmo Diseño de enlaces)
Puede modificar el recuadro delimitador útil de un nodo implementando una clase que implemente la ibm_ilog.graphlayout.INodeBoxProvider.
Esta interfaz define el método siguiente:
getBox(graphModel, node)
Al utilizar este método, puede obtener el recuadro delimitador útil. Por ejemplo, para establecer una interfaz de recuadro de nodo que devuelva un recuadro delimitador más pequeño para todos los nodos de tipo MyNode, llame a:
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;
    }
});

Utilización de una interfaz de link connection box

De forma predeterminada, los puntos de conexión de los enlaces se distribuyen en el borde del recuadro delimitador de los nodos. A veces, puede ser necesario colocar los puntos de conexión en un rectángulo que es menor o mayor que el recuadro delimitador. Por ejemplo, cuando se muestran etiquetas debajo o encima de los nodos.
Utilización de una interfaz de link connection box para modificar la posición de puntos de conexión (algoritmo Diseño de enlaces)
Puede modificar la posición de los puntos de conexión de los enlaces implementando una clase que implemente la ibm_ilog.graphlayout.ILinkConnectionBoxProvider. Es una subinterfaz de INodeBoxProvider; consulte Utilización de una interfaz de recuadro de nodo . Vuelve a definir el método:
getBox(graphModel, node)
Este método permite devolver el rectángulo útil en que se colocan los puntos de conexión de los enlaces.
Además, la interfaz de ibm_ilog.graphlayout.ILinkConnectionBoxProvider define un segundo método:
getTangentialOffset(graphModel, node, nodeSide)
Este método se utiliza sólo en el diseño de enlaces cortos. Para obtener más información, consulte Utilización de una interfaz de recuadro de conexión de enlace. En el diseño de enlaces largos, implemente el método devolviendo el valor 0.