Para expertos: opciones especiales del diseño de enlaces cortos

Las opciones siguientes son sólo para ibm_ilog.graphlayout.shortlink.ShortLinkLayout.

Estilo de autoenlace

Los autoenlaces son enlaces cuyo origen y destino son el mismo nodo. El Diseño de enlaces cortos proporciona dos formas opcionales para los autoenlaces.
Gráfico
que muestra en primer el estilo de autoenlace de dos puntos de
inflexión y, a continuación, el estilo de autoenlace de tres puntos
de inflexión
Opciones del estilo de autoenlace
Ejemplo de cómo establecer el estilo de los autoenlaces (algoritmo Diseño de enlaces)
Para establecer el estilo de los autoenlaces:
Utilice el método setGlobalSelfLinkStyle:
layout.setGlobalSelfLinkStyle(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BEND_ORTHOGONAL_STYLE);
Los valores válidos para el estilo de enlace son:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BENDS_ORTHOGONAL_STYLE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.THREE_BENDS_ORTHOGONAL_STYLE

Número de iteraciones de optimización

La optimización de formas de enlaces se detiene si el tiempo supera el tiempo permitido (consulte Tiempo permitido (DE) ) o si el número de iteraciones supera el número permitido de iteraciones.
Ejemplo de cómo especificar el número de iteraciones de optimización (algoritmo Diseño de enlaces)
Para establecer el número permitido de iteraciones en 3:
Utilice el método setAllowedNumberOfIterations:
layout.setAllowedNumberOfIterations(3);
Nota
Puede que desee inhabilitar la optimización de formas de enlaces estableciendo el número de iteraciones en cero para aumentar la velocidad del proceso de diseño.

Coeficiente de margen de fijaciones espaciadas de manera uniforme

El coeficiente de margen permite personalizar la forma de calcular los puntos de conexión cuando el estilo de conector (consulte Estilo de conector ) es EVENLY_SPACED_PINS y cuando el AUTOMATIC_STYLE coloca los puntos de conexión utilizando el estilo EVENLY_SPACED_PINS. Esta opción no tiene ningún efecto si se utiliza el estilo de conector FIXED_OFFSET_PINS.
En el estilo de conector “fijaciones espaciadas de manera uniforme”, los puntos de conexión de los enlaces están uniformemente espaciados a lo largo del borde del nodo, conservando un margen en cada extremo del borde del nodo. El tamaño de este margen se controla mediante el coeficiente de margen y se calcula multiplicando el desplazamiento entre los enlaces por el coeficiente.
Ejemplo de cómo especificar el coeficiente de margen (algoritmo Diseño de enlaces)
Para especificar esta opción:
Utilice el método setEvenlySpacedPinsMarginRatio:
layout.setEvenlySpacedPinsMarginRatio(1);
El valor de entrada debe ser un valor positivo o cero. El valor predeterminado es 0.5. En Coeficiente de margen de fijaciones espaciadas de manera uniforme se muestran ejemplos de valores y su significado.
Coeficiente de margen de fijaciones espaciadas de manera uniforme
Valor del coeficiente
Significado
0
Sin márgenes.
0,5 (valor predeterminado)
El margen es igual a la mitad del desplazamiento entre los enlaces.
1
El margen es igual al desplazamiento entre los enlaces.
2
El margen es igual al doble del desplazamiento entre los enlaces.

Prohibido el solapamiento de enlaces con nodos

Con esta opción puede solicitar al algoritmo de diseño que evite siempre el cambio de forma de los enlaces en caso de que se solapen con algunos nodos. Si los solapamientos no están prohibidos, el algoritmo intenta evitarlos de todas formas, pero puede que se cree alguno, por ejemplo, porque el enlace se interseca con otros enlaces.
Nota
Prohibir los solapamientos puede ralentizar el diseño y puede aumentar el número de curvas para los enlaces que se solaparían con otros nodos si los solapamientos no estuvieran estrictamente prohibidos.
Ejemplo de cómo especificar el parámetro prohibido el solapamiento de enlaces con nodos (algoritmo Diseño de enlaces)
Para especificar esta opción:
Utilice el método setLinkOverlapNodesForbidden:
layout.setLinkOverlapNodesForbidden(true);
El valor predeterminado de esta opción es false.
Cuando los solapamientos están prohibidos, el algoritmo Diseño de enlaces cortos utiliza el Diseño de enlaces largos como algoritmo auxiliar para diseñar sólo los enlaces que, de lo contrario, se solaparían con otros nodos.
Ejemplo de cómo especificar el Diseño de enlaces largos cuando los solapamientos están prohibidos (algoritmo Diseño de enlaces)
Para recuperar la instancia auxiliar de Diseño de enlaces largos:
Llame al método siguiente en la instancia de ibm_ilog.graphlayout.shortlink.ShortLinkLayout:
var longLinkLayout = layout.getAuxiliaryLongLinkLayout();
Este método le permite obtener esta instancia de diseño auxiliar y personalizar sus parámetros si es necesario. No debe modificar la modalidad de punto de origen y de destino, ni inhabilitar la conservación de enlaces fijos.

Modalidad de cambio de forma de enlaces incremental

En la modalidad incremental es posible personalizar las reglas utilizadas por el Diseño de enlaces cortos para determinar qué enlaces deben conservar su forma actual en la medida de lo posible, tal y como se había calculado en la ejecución del diseño anterior. Con la modalidad de cambio de forma de enlaces incremental, estas reglas pueden personalizarse por separado para dos categorías de enlaces.
  • Los “enlaces modificados”: enlaces que tienen un “recuadro de conexión de enlace” diferente o están conectados a nodos que tienen un recuadro delimitador diferente que durante la ejecución del diseño anterior.
  • Los “enlaces sin modificar”: enlaces que tienen el mismo “recuadro de conexión de enlace” y están conectados a nodos que tienen el mismo recuadro delimitador que durante la ejecución del diseño anterior.
La modalidad se puede personalizar para una de estas categorías de enlaces o para ambas.
La modalidad de cambio de forma de enlaces incremental no tiene ningún efecto si la modalidad incremental está inhabilitada.
El algoritmo de diseño proporciona dos modalidades de cambio de forma de enlaces incremental. Se puede establecer la modalidad de forma global, en cuyo caso todos los enlaces tienen la misma modalidad, o de forma local en cada enlace, de modo que pueden encontrarse diferentes modalidades en el mismo dibujo.

Modalidad de cambio de forma de enlaces incremental global

Ejemplo de cómo especificar una modalidad de cambio de forma de enlaces incremental global (algoritmo Diseño de enlaces)
Para especificar la modalidad de cambio de forma de enlaces incremental global:
layout.setGlobalIncrementalModifiedLinkReshapeMode(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE);
Los valores válidos para mode son:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (valor predeterminado)
    El diseño incremental conserva el tipo de forma del enlace. Esto significa que se conserva tanto el número de curvas como las caras de los nodos a las que se conecta el enlace.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
    El diseño incremental conserva las caras de los nodos a las que se conectan los enlaces.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
    El diseño incremental conserva los puntos de conexión de los enlaces.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE
    No se cambia la forma de los enlaces durante la ejecución del diseño incremental. Sólo se redireccionan los enlaces que se acaban de añadir.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
    El diseño incremental puede cambiar la forma de los enlaces libremente. Es equivalente a un comportamiento no incremental de todos los enlaces; de ahí que lo recomendable sea inhabilitar la modalidad incremental en lugar de utilizar FREE_MODE como modalidad de cambio de forma de enlaces incremental global.
    Los valores que se hayan obtenido “fijando” enlaces (consulte Conservar enlaces fijos (DE) ) o personalizando la modalidad de punto de origen o de destino (consulte Modalidad de puntos finales (DE)) se siguen manteniendo.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE
    Cada enlace puede tener una modalidad diferente.

Modalidad de cambio de forma de enlaces incremental individual

Todos los enlaces tienen la misma modalidad de cambio de forma de enlaces incremental a menos que la modalidad de cambio de forma de enlaces incremental global sea ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE.
Sólo si la modalidad global se establece en MIXED_MODE cada enlace tiene una modalidad individual.
Ejemplo de cómo especificar una modalidad de cambio de forma de enlaces incremental individual (algoritmo Diseño de enlaces)
Para especificar la modalidad de un enlace individual:
Utilice los métodos siguientes en la instancia de ibm_ilog.graphlayout.shortlink.ShortLinkLayout:
layout.setIncrementalModifiedLinkReshapeMode(link, mode);  
layout.setIncrementalUnmodifiedLinkReshapeMode(link, mode);
var mode = layout.getIncrementalModifiedLinkReshapeMode(link);
var mode = layout.getIncrementalUnmodifiedLinkReshapeMode(link); 
Los valores válidos para mode son:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (valor predeterminado)
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE

La misma forma para varios enlaces

Puede obligar al algoritmo de diseño a calcular la misma forma para todos los enlaces que tienen nodos de origen y de destino comunes. Los enlaces tienen formas paralelas.
Cuando esta opción está inhabilitada, el diseño puede calcular libremente formas diferentes para los enlaces que se conectan al mismo par de nodos. Por lo general, se eligen formas distintas para evitar algunos solapamientos.
Dos
nodos interconectados, primero con la opción "misma forma"
inhabilitada y, a continuación, con la opción "misma forma"
habilitada
Opción la misma forma para varios enlaces
Ejemplo de cómo especificar la misma forma para varios enlaces (algoritmo Diseño de enlaces)
Para habilitar la misma forma para varios enlaces:
Utilice el método:
layout.setSameShapeForMultipleLinks(true);
El valor predeterminado es false.

Penalización de las intersecciones de enlaces

El cálculo de la forma de los enlaces tiene el objetivo de minimizar una función de coste, que es proporcional al número de intersecciones de enlace a enlace y de enlace a nodo. De forma predeterminada, estos dos tipos de intersecciones tienen el mismo peso, 1. Puede aumentar el peso de las intersecciones de enlace a nodo.
Ejemplo de cómo especificar la penalización de las intersecciones de enlace a nodo (algoritmo Diseño de enlaces)
Para aumentar el peso de las intersecciones de enlace a nodo:
Utilice el método:
layout.setLinkToNodeCrossingPenalty(5);
Este valor aumenta la posibilidad de obtener un diseño sin intersecciones de enlace a nodo (o sólo con unas pocas intersecciones) en detrimento de la posibilidad de que se puedan producir más intersecciones de enlace a enlace.
Opcionalmente, puede aumentar el peso de las intersecciones de enlace a enlace.
Ejemplo de cómo especificar la penalización de las intersecciones de enlace a enlace (algoritmo Diseño de enlaces)
Para aumentar el peso de las intersecciones de enlace a enlace, por ejemplo, en un valor de 3:
Utilice el método:
layout.setLinkToLinkCrossingPenalty(3);
Este valor aumenta la posibilidad de obtener un diseño sin intersecciones de enlace a enlace (o sólo con unas pocas intersecciones) en detrimento de la posibilidad de que haya más intersecciones de enlace a nodo.

Distancia de bypass

Si los nodos de origen y de destino están demasiado cerca, puede que no haya suficiente espacio para direccionar el enlace directamente entre los nodos finales. Por lo tanto, de forma predeterminada, si los nodos finales están más cerca que una distancia umbral, el diseño elige formas de enlace que omiten el intervalo entre los nodos cercanos. (Consulte Nodos finales y distancia de bypass. ).
Dos
nodos interconectados, primero más lejano que la distancia de bypass
y, a continuación, más cercanos que la distancia de
bypass
Nodos finales y distancia de bypass.
La distancia de bypass es la distancia mínima entre los nodos de origen y de destino permitida para una forma de enlace que va directamente de un nodo a otro. El algoritmo intenta evitar las formas de enlace que se conectan directamente a las caras de los nodos finales que están más cerca que el valor de bypass.
Ejemplo de cómo especificar la distancia de bypass (algoritmo Diseño de enlaces)
Para establecer la distancia de bypass:
Utilice el método setBypassDistance.
layout.setBypassDistance(1);
El valor predeterminado es un valor estrictamente negativo. Si la distancia de bypass es estrictamente negativa, se utiliza el valor del parámetro longitud mínima del segmento final como distancia de bypass. Consulte Longitud mínima del segmento final . Permite el ajuste automático de la distancia de bypass según el valor actual de la longitud mínima del segmento final. Este comportamiento es adecuado en la mayoría de los casos. Puede especificar un valor no negativo para alterar temporalmente el comportamiento predeterminado.

Utilización de una interfaz de recuadro de conexión de enlace

De forma predeterminada, los puntos de conexión de los enlaces se distribuyen en el borde del recuadro delimitador de los nodos simétricamente respecto al centro de cada cara. A veces, puede ser necesario colocar los puntos de conexión en un rectángulo menor o mayor que el recuadro delimitador, posiblemente de forma asimétrica. Por ejemplo, cuando se muestran etiquetas debajo o encima de los nodos.
Ejemplo de cómo utilizar una interfaz de recuadro de conexión de enlace para modificar la posición de los puntos de conexión (algoritmo Diseño de enlaces)
Puede modificar la posición de los puntos de conexión de los enlaces implementando una clase que implemente la interfaz de ILinkConnectionBoxProvider.
Esta interfaz define el método siguiente:
getBox(graphModel, node)
Con este método puede obtener el rectángulo útil en que se colocan los puntos de conexión de los enlaces.
Un segundo método definido en la interfaz permite desplazar tangencialmente los puntos de conexión de un modo distinto para cada cara de cada nodo:
getTangentialOffset(graphModel, node, nodeSide)
Por ejemplo, para establecer un proveedor de recuadro de conexión de enlace que devuelva un rectángulo de conexión de enlace que es menor que el recuadro delimitador para todos los nodos de tipo MyNode y que desplace hacia arriba los puntos de conexión de las caras derecha e izquierda de todos los nodos, llame a:
dojo.declare('MyLinkConnectionBoxProvider', ibm_ilog.graphlayout.ILinkConnectionBoxProvider,
 {
    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;
    },

    getTangentialOffset: function(graphModel, node, side)
    {
        switch (side) {
             case ibm_ilog.graphlayout.Direction.LEFT:
             case ibm_ilog.graphlayout.Direction.RIGHT:
                 return -10; // shift up with 10 for both left and right side
             case ibm_ilog.graphlayout.Direction.TOP:
             case ibm_ilog.graphlayout.Direction.BOTTOM:
             default:
                 return 0; // no shift for top and bottom side
         }
    }
});

layout.setLinkConnectionBoxProvider(new MyLinkConnectionBoxProvider());
Opciones del estilo de autoenlace muestra el efecto de personalizar el recuadro de conexión. A la izquierda se puede ver el resultado utilizando los valores predeterminados: los puntos de conexión están distribuidos en el recuadro delimitador del nodo (que incluye la etiqueta) y son simétricos respecto al centro de cada cara del nodo (incluida la etiqueta). A la derecha se puede ver el resultado después de especificar una interfaz de link connection box. En la cara inferior de los nodos, ahora los enlaces están conectados al nodo (pasando sobre la etiqueta), mientras que en las caras derecha e izquierda de los nodos, los puntos de conexión ahora son simétricos respecto al centro del nodo (sin la etiqueta).
Gráfico
con el recuadro de conexión de enlace predeterminado y, a
continuación, un recuadro de conexión de enlace
personalizado
Personalización del recuadro de conexión de enlace