Los algoritmos de diseño de enlaces se implementan
mediante las clases siguientes:
- ibm_ilog.graphlayout.shortlink.ShortLinkLayout para los enlaces cortos
- ibm_ilog.graphlayout.longlink.LongLinkLayout para los enlaces largos
Algoritmo Diseño de enlaces cortos
El algoritmo Diseño de enlaces cortos se basa en una
optimización combinatoria que elige la forma “óptima” de los enlaces
para minimizar una función de coste. Esta función de coste es
proporcional al número de intersecciones de enlace a enlace y de
enlace a nodo.
Por cuestiones de eficacia, la forma básica de cada
enlace se selecciona a partir de un conjunto de formas predefinidas.
Estas formas son diferentes para cada opción de estilo de enlace.
Para el estilo de enlace ortogonal, se cambia la forma de los enlaces
por una línea poligonal de hasta cinco segmentos horizontales y
verticales alternos (consulte
Diseño de enlaces cortos con enlaces ortogonales). Para el estilo de enlace directo, se cambia la forma de los enlaces
por una línea poligonal compuesta de tres segmentos: un segmento
straight-line
que empieza y termina con pequeños segmentos horizontales o
verticales (consulte
El mismo gráfico del diseño de enlaces cortos con
enlaces directos ).
La forma de un enlace también depende de la posición
relativa de los nodos de origen y destino. Por ejemplo, cuando dos
nodos están muy próximos o se solapan, la forma del enlace se elige
para proporcionar la mejor visibilidad del enlace.
La forma exacta de un enlace se calcula teniendo en
cuenta restricciones adicionales. El algoritmo de diseño intenta:
- Minimizar el número de intersecciones entre los enlaces incident en una cara concreta de un nodo.
- Espaciar los segmentos finales de los enlaces incidentes en una cara concreta de un nodo uniformemente en el borde del nodo.
Algoritmo Diseño de enlaces largos
El algoritmo Diseño de enlaces largos primero trata cada
enlace individualmente. Para cada enlace, primero calcula los puntos
de conexión en los nodos finales que se encuentran en la cuadrícula y
los ordena de acuerdo con un valor de penalización. Los puntos de
conexión en los puntos de la cuadrícula utilizada tienen una
penalización alta y, por lo tanto, es poco probable que se utilicen.
Para los enlaces ortogonales (consulte
Diseño de enlaces largos con enlaces ortogonales),
el algoritmo Diseño de enlaces largos a continuación recorre la
cuadrícula para buscar una ruta por los puntos de la cuadrícula
libres desde el punto de conexión inicial hasta el punto de conexión
final. Por consiguiente, a diferencia de la modalidad de enlaces
cortos, los enlaces ortogonales pueden tener cualquier forma con
muchas curvas si es necesario para eludir los nodos obstáculo con el
fin de evitar solapamientos. Para los enlaces directos (consulte
El mismo gráfico del diseño de enlaces cortos con
enlaces directos )
acorta la búsqueda utilizando un segmento directo entre los puntos de
conexión.
Después de colocar todos los enlaces, una fase de
reducción de intersecciones examina pares de enlaces y elimina
intersecciones de enlaces mediante el intercambio de partes de las
rutas entre ambos enlaces.
El algoritmo Diseño de enlaces largos se basa en el
hecho de que los enlaces de ajustan al espaciado de la cuadrícula y
que partes de las rutas entre enlaces diferentes se pueden
intercambiar. Por consiguiente, el algoritmo Diseño de enlaces largos
no tiene en cuenta el ancho del enlace porque sería demasiado difícil
encontrar las partes de dos enlaces que puedan intercambiarse. Se
recomienda establecer un valor para el espaciado de la cuadrícula
mayor que el mayor ancho de los enlaces.
Ejemplo de Diseño de enlaces
En el ejemplo de código siguiente se muestra el uso de
la clase ibm_ilog.graphlayout.shortlink.ShortLinkLayout.
var layout = new ibm_ilog.graphlayout.shortlink.ShortLinkLayout(); graph.setLinkLayout(layout); graph.performGraphLayout();