As opções a seguir se aplicam apenas ao Layout de Link Longo.
Especificando Obstáculos Adicionais
O algoritmo de Layout de Link Longo considera nós como obstáculos
que não podem ser sobrepostos e links como obstáculos que podem ser
cruzados em um ângulo de 90 graus (aproximadamente, se o estilo de link
for direto), mas que não podem ser sobrepostos.

Cruzamento e sobreposição
Exemplo de Especificação de Obstáculos Adicionais (algoritmo de Layout
de Link)
If an application requires additional obstacles that
are not links or nodes, they can be specified as follows:
Chamada:
layout.addRectObstacle(rect);
layout.addLineRectObstacle(rect);
layout.addLineObstacle(p1, p2);
Os obstáculos retangulares se comportam como nós: os links não podem
sobrepor os retângulos. Os obstáculos de linhas se comportam como segmentos de links:
outros links podem cruzar os segmentos de linhas, mas não podem sobrepor os segmentos.
These obstacle settings can be removed as follows:
layout.removeAllLineObstacles();
layout.removeAllRectObstacles();
Penalidades para Terminais Variáveis
Se os pontos de terminação dos links não forem fixos,
o algoritmo usará uma heurística para calcular os pontos de terminação
de cada link. Ele examina todos os pontos da grade livres que estão próximos da borda
dos nós inicial e de extremidade e designa uma penalidade a cada ponto da grade. Se um filtro de lado do nó estiver instalado, a penalidade dependerá
de o lado do nó ser permitido ou rejeitado.
Uma maneira mais precisa para afetar como os pontos de terminação
são escolhidos é o filtro de ponto de terminação. It allows the user to
specify the penalty for each grid point.
Exemplo de Especificação do Filtro de Ponto de Terminação (algoritmo de
Layout de Link)
Um filtro de ponto de terminação é uma classe que implementa
a interface ibm_ilog.graphlayout.longlink.LongLinkTerminationPointFilter que define
o seguinte método:
getPenalty(graphModel, link, origin, node, point, side, proposedPenalty)
Para selecionar o ponto de
origin
ou de destino
do link
de entrada, o point
de entrada (um
ponto da grade no side
de entrada do node
)
é examinado. proposedPenalty
é calculado
pela heurística padrão do algoritmo. É possível retornar uma penalidade alterada
ou retornar Number.MAX_VALUE
para
rejeitar o ponto da grade. Se o ponto da grade for rejeitado, ele não será escolhido
como ponto de terminação do link. O filtro de ponto de terminação pode ser configurado com o método setTerminationPointFilter.
layout.setTerminationPointFilter(new MyTerminationPointFilter());
Manipulando as Fases de Roteamento
Conforme mencionado em Algoritmo de Layout de Link Longo, o algoritmo primeiro
trata cada link individualmente e, em seguida, aplica uma fase de redução de cruzamento
a todos os links. Para localizar uma rota para um link individual, o algoritmo primeiro
verifica se é possível um roteamento (como uma linha reta ou com apenas uma
curvatura). If this type of routing is not possible, it
uses a sophisticated, but more time consuming, grid search algorithm
with backtracking to find a route with many bends.
Exemplo de Manipulação das Fases de Roteamento (algoritmo de Layout
de Link)
To disable the phase that finds a straight-line or one-bend routing:
Use o método setStraightRouteEnabled:
layout.setStraightRouteEnabled(true);
A procura de retrocesso para uma rota com muitas curvaturas pode ser
feita de várias maneiras.
Uma maneira conveniente é especificar o tempo máximo disponível
para procurar a rota para cada link.
Exemplo de Especificação de Etapas de Retrocesso (algoritmo de Layout de Link)
É possível especificar o número máximo de etapas de retrocesso.
Use o método setMaxBacktrack:
layout.setMaxBacktrack(25000);
O número máximo padrão de retrocesso é 30000.
Exemplo de Especificação do Tempo Máximo para Procura de Rota
(algoritmo de Layout de Link)
Para especificar o tempo máximo disponível para procurar
a rota para cada link.
Use o método setAllowedTimePerLink.
layout.setAllowedTimePerLink(2500);
O tempo permitido padrão por link é de 2000 milissegundos
(2 segundos).
Finally, you can specify how many steps must be done
during the crossing reduction phase.
Exemplo de Especificação do Número de Etapas na Fase de
Redução de Cruzamentos (algoritmo de Layout de Link)
To specify how many steps must be done during the crossing
reduction phase:
Use o método setNumberCrossingReductionIterations.
layout.setNumberCrossingReductionIterations(3);
Exemplo de Desativação da Redução de Cruzamentos (algoritmo de Layout
de Link)
É possível desativar totalmente a redução de cruzamentos.
Use o método setCrossingReductionEnabled.
layout.setCrossingReductionEnabled(false);
Mecanismo de Fallback
Se um dos nós de extremidade estiver dentro de um enclave, o algoritmo de
Layout de Link Longo não poderá localizar um roteamento para um link.
Em Um nó dentro de um enclave, o nó rosa
está dentro de um enclave. Neste caso, o algoritmo de procura de retrocesso
falhará ao localizar um roteamento sem nós de sobreposição. The backtrack search
algorithm can also fail if the situation is so complex that the search
exceeds the allowed time per link.

Um nó dentro de um enclave
Quando o algoritmo de procura de retrocesso falhar ao localizar um roteamento,
será aplicado um mecanismo de fallback simples que cria um roteamento com uma sobreposição
de nó.
Exemplo de Desativação do Mecanismo de Fallback (algoritmo de Layout
de Link)
Para desativar o mecanismo de fallback:
Use o método setFallbackRouteEnabled:
layout.setFallbackRouteEnabled(false);
Se o mecanismo de fallback for desativado, estes links não
serão roteados e permanecerão na mesma forma que antes do layout.
No código Java, é possível recuperar os links que não puderam ser roteados
de maneira usual sem o mecanismo de fallback.
Exemplo de Recuperação de Links sem o Mecanismo de Fallback
(algoritmo de Layout de Link)
Para recuperar os links que não puderam ser roteados de maneira
usual sem o mecanismo de fallback:
var links = layout.getCalcFallbackLinks(); while(links.hasNext()){ var link = links.next(); // ... }
Por exemplo, é possível iterar sobre estes links e aplicar seu próprio
mecanismo de fallback específico em vez do mecanismo de fallback
padrão do algoritmo de Layout de Link Longo.