Las opciones siguientes sólo se aplican al Diseño de
enlaces largos.
Especificación de obstáculos adicionales
El algoritmo Diseño de enlaces largos considera los
nodos como obstáculos que no pueden solaparse y los enlaces como
obstáculos que pueden intersecarse en un ángulo de 90 grados
(aproximadamente, si es estilo del enlace es directo), pero que no
pueden solaparse.

Intersecciones y solapamientos
Ejemplo de cómo especificar obstáculos adicionales
(algoritmo Diseño de enlaces)
Si una aplicación requiere obstáculos adicionales que no
son enlaces ni nodos, se pueden especificar de la forma siguiente:
Llame a:
layout.addRectObstacle(rect);
layout.addLineRectObstacle(rect);
layout.addLineObstacle(p1, p2);
Los obstáculos rectangulares se comportan como nodos:
los enlaces no pueden solapar los rectángulos. Los obstáculos de
línea se comportan como segmentos de enlaces: otros enlaces pueden
intersecar los segmentos de línea, pero no pueden solapar los
segmentos. Esta configuración de los obstáculos se puede eliminar del
modo siguiente:
layout.removeAllLineObstacles();
layout.removeAllRectObstacles();
Penalizaciones para los puntos finales variables
Si los puntos de terminación de los enlaces no son
fijos, el algoritmo utiliza un método heurístico para calcular los
puntos de terminación de cada enlace. Examina todos los puntos libres
de la cuadrícula que están cerca del borde de los nodos iniciales y
finales y asigna una penalización a cada punto de la cuadrícula. Si
se instala un filtro de caras del nodo, la penalización depende de si
la cara del nodo está permitida o rechazada.
Una manera más precisa de influir en el modo de elegir
los puntos de terminación es el filtro de puntos de terminación.
Permite que el usuario especifique la penalización para cada punto de
la cuadrícula.
Ejemplo de cómo especificar el filtro de puntos de
terminación (algoritmo Diseño de enlaces)
Un filtro de punto de terminación es una clase que
implementa la interfaz
ibm_ilog.graphlayout.longlink.LongLinkTerminationPointFilter
que define el método siguiente:
getPenalty(graphModel, link, origin, node, point, side, proposedPenalty)
Para seleccionar el punto de
origin
o de destino del enlace
de link
, se examina el
point
de entrada (un punto de
la cuadrícula de la side
de
entrada del node
). La
proposedPenalty
se calcula
mediante el método heurístico predeterminado del algoritmo. Puede
devolver una penalización modificada o puede devolver
Number.MAX_VALUE
para rechazar el punto de la cuadrícula. Si el punto de la cuadrícula se rechaza, no
se elige como punto de terminación del enlace. El filtro de punto de terminación se puede establecer
con el método setTerminationPointFilter.
layout.setTerminationPointFilter(new MyTerminationPointFilter());
Manipulación de las fases de direccionamiento
Como se explica en
Algoritmo Diseño de enlaces largos,
el algoritmo primero trata cada enlace individualmente y, a
continuación, aplica una fase de reducción de intersecciones a todos
los enlaces. Para buscar una ruta para un enlace individual, el
algoritmo primero comprueba si es posible un direccionamiento (por
ejemplo, una línea recta o con una sola inflexión). Si este tipo de
direccionamiento no es posible, utiliza un sofisticado algoritmo de
búsqueda en la cuadrícula con marcha atrás para encontrar una ruta
con muchas curvas, aunque tarda más tiempo en ejecutarse.
Ejemplo de cómo manipular las fase de direccionamiento
(algoritmo Diseño de enlaces)
Para inhabilitar la fase que busca un direccionamiento
de
straight-line
o con una sola inflexión:
Utilice el método setStraightRouteEnabled:
layout.setStraightRouteEnabled(true);
La búsqueda hacia atrás de una ruta con muchas curvas se
puede hacer de varias maneras.
Es conveniente especificar el tiempo máximo disponible
para buscar la ruta para cada enlace.
Ejemplo de cómo especificar pasos hacia atrás
(algoritmo Diseño de enlaces)
Puede especificar el número máximo de pasos hacia atrás.
Utilice el método setMaxBacktrack:
layout.setMaxBacktrack(25000);
El número máximo predeterminado de pasos hacia atrás es
30000.
Ejemplo de cómo especificar el tiempo máximo de
búsqueda de la ruta (algoritmo Diseño de enlaces)
Para especificar el tiempo máximo disponible para buscar
la ruta para cada enlace.
Utilice el método setAllowedTimePerLink.
layout.setAllowedTimePerLink(2500);
El tiempo permitido predeterminado por enlace es de 2000
milisegundos (2 segundos).
Por último, puede especificar cuántos pasos deben
efectuarse durante la fase de reducción de intersecciones.
Ejemplo de cómo especificar el número de pasos de la
fase de reducción de intersecciones (algoritmo Diseño de enlaces)
Para especificar cuántos pasos deben efectuarse durante
la fase de reducción de intersecciones:
Utilice el método setNumberCrossingReductionIterations.
layout.setNumberCrossingReductionIterations(3);
Ejemplo de cómo inhabilitar la reducción de
intersecciones (algoritmo Diseño de enlaces)
Puede inhabilitar completamente la reducción de
intersecciones.
Utilice el método setCrossingReductionEnabled.
layout.setCrossingReductionEnabled(false);
Mecanismo de repliegue
Si uno de los nodos finales está dentro de un enclave,
el algoritmo Diseño de enlaces largos no podrá encontrar un
direccionamiento para un enlace. En
Un nodo dentro de un enclave ,
el nodo rosa está dentro de un enclave. En este caso, el algoritmo de
búsqueda hacia atrás no encuentra un direccionamiento sin nodos que
se solapen. El algoritmo de búsqueda hacia atrás también puede fallar
si la situación es tan compleja que la búsqueda supera el tiempo
permitido por enlace.

Un nodo dentro de un enclave
Cuando el algoritmo de búsqueda hacia atrás no encuentra
un direccionamiento, se aplica un mecanismo de repliegue simple que
crea un direccionamiento con un solapamiento con un nodo.
Ejemplo de cómo inhabilitar el mecanismo de repliegue
(algoritmo Diseño de enlaces)
Para inhabilitar el mecanismo de repliegue:
Utilice el método setFallbackRouteEnabled:
layout.setFallbackRouteEnabled(false);
Si el mecanismo de repliegue está inhabilitado, estos
enlaces no se direccionan y conservan la misma forma que antes de
ejecutar el diseño. En código Java, puede recuperar los enlaces que
no se pueden direccionar de la manera habitual sin el mecanismo de
repliegue.
Ejemplo de cómo recuperar enlaces sin el mecanismo de
repliegue (algoritmo Diseño de enlaces)
Para recuperar los enlaces que no se pueden direccionar
de la manera habitual sin el mecanismo de repliegue:
var links = layout.getCalcFallbackLinks(); while(links.hasNext()){ var link = links.next(); // ... }
Por ejemplo, puede iterar por estos enlaces y aplicar su
propios mecanismo de repliegue en lugar del mecanismo de repliegue
predeterminado del algoritmo Diseño de enlaces largos.