Para Especialistas: Recursos Adicionais do Layout de Link

Usando um Filtro do Lado do Nó

Alguns aplicativos requerem que os links não estejam conectados a lados específicos de alguns nós. Com o algoritmo de Layout de Link, é possível restringir a qual lado do nó um link pode conectar-se, usando um filtro do lado do nó.
Um filtro do lado do nó é qualquer classe que implementa a interface ibm_ilog.graphlayout.INodeSideFilter. Esta interface define o seguinte método:
accept(graphModel, link, origin, node, side)
Este método permite que o link de entrada conecte sua origin ou destino ao side de entrada do node de entrada.
Como um exemplo, suponha que o aplicativo exija que para nós de extremidade de tipo MyNode1, os links possam conectar sua origem apenas nas partes superior e inferior.
Para nós de extremidade de tipo MyNode2, os links podem conectar seu destino apenas nos lados esquerdo e direito. É possível obter este resultado com o seguinte filtro do lado do nó:
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;
  }
});
Exemplo de Configuração de Filtro do Lado do Nó (algoritmo de Layout de Link)
Para configurar este filtro do lado do nó:
Use o método nodeSideFilter:
layout.setNodeSideFilter(new MyFilter());
Para remover o filtro do lado do nó:
layout.nodeSideFilter(null); 

Usando uma Interface da Caixa do Nó

Alguns aplicativos requerem que a área efetiva de um nó não seja exatamente sua caixa delimitadora. Por exemplo, se o nó tiver uma sombra, a sombra será incluída na caixa delimitadora. A sombra não pode ser considerada como um obstáculo para os links. Neste caso, a caixa delimitadora efetiva de um nó é menor.
Exemplo de Uso de uma Interface da Caixa do Nó (algoritmo de Layout de Link)
É possível modificar a caixa delimitadora efetiva de um nó, implementando uma classe que implementa o ibm_ilog.graphlayout.INodeBoxProvider.
Esta interface define o seguinte método:
getBox(graphModel, node)
Usando este método, é possível obter a caixa delimitadora efetiva. Por exemplo, para configurar uma interface da caixa do nó que retorna uma caixa delimitadora menor para todos os nós de tipo MyNode, chame:
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;
    }
});

Usando uma Interface link connection box

Por padrão, os pontos de conexão dos links são distribuídos na borda da caixa delimitadora dos nós. Sometimes, it can be necessary to place the connection points on a rectangle that is smaller or larger than the bounding box. For instance, it can happen when labels are displayed below or above nodes.
Usando uma interface link connection box para modificar a posição de pontos de conexão (algoritmo de Layout de Link)
É possível modificar a posição dos pontos de conexão dos links implementando uma classe que implementa o ibm_ilog.graphlayout.ILinkConnectionBoxProvider. It is a subinterface of INodeBoxProvider; see Usando uma Interface da Caixa do Nó. Ela define novamente o método:
getBox(graphModel, node)
Este método permite retornar o retângulo efetivo no qual os pontos de conexão dos links são posicionados.
Além disso, a interface ibm_ilog.graphlayout.ILinkConnectionBoxProvider define um segundo método:
getTangentialOffset(graphModel, node, nodeSide)
Este método é usado apenas em layout de link curto. Para obter detalhes, consulte Usando uma Interface da Caixa de Conexão de Link. Em layout de link longo, implemente o método retornando o valor 0.