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.