Para Especialistas: Opções Especiais de Layout de Link Curto

As opções a seguir são apenas para ibm_ilog.graphlayout.shortlink.ShortLinkLayout.

Estilo de Self-link

Self-links são links cuja origem e destino são o mesmo nó. O Layout de Link Curto fornece duas formas opcionais para self-links.
Gráfico
mostra primeiro o estilo de self-link de duas curvaturas e, em seguida, o estilo de
self-link de três curvaturas
Opções de estilo de self-link
Exemplo de Configuração de Estilo dos self-links (algoritmo de Layout de Link)
Para configurar o estilo dos self-links:
Use o método setGlobalSelfLinkStyle:
layout.setGlobalSelfLinkStyle(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BEND_ORTHOGONAL_STYLE);
Os valores válidos para o estilo são:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.TWO_BENDS_ORTHOGONAL_STYLE
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.THREE_BENDS_ORTHOGONAL_STYLE

Número de Iterações de Otimização

The link shape optimization is stopped if the time exceeds the allowed time; see Tempo Permitido (LL)), or if the number of iterations exceeds the allowed number of iterations.
Exemplo de Especificação do Número de Iterações de Otimização (algoritmo de Layout de Link)
Para configurar o número permitido de iterações como 3:
layout.setAllowedNumberOfIterations(3);
Nota
You might want to disable the link shape optimization by setting the number of iterations to zero to increase the speed of the layout process.

Proporção de Margem de Pinos Espaçados Uniformemente

A proporção de margem permite customizar a forma que os pontos de conexão são calculados quando o estilo de conector (consulte Estilo de Conector) é EVENLY_SPACED_PINS, e quando o AUTOMATIC_STYLE posiciona os pontos de conexão usando o estilo EVENLY_SPACED_PINS. Esta opção não terá efeito se o estilo de conector FIXED_OFFSET_PINS for usado.
No estilo de conector de “pinos espaçados uniformemente”, os pontos de conexão dos links são espaçados uniformemente na borda do nó, preservando uma margem em cada extremidade da borda do nó. O tamanho desta margem é controlado pela proporção de margem e é calculado multiplicando o deslocamento entre os links pela proporção.
Exemplo de Especificação da Proporção de Margem (algoritmo de Layout de Link)
Para especificar esta opção:
layout.setEvenlySpacedPinsMarginRatio(1);
O valor de entrada deve ser um valor positivo ou zero. O valor padrão é 0.5. Proporção da Margem de Pinos Espaçados Uniformemente mostra exemplos de valores com seu significado.
Proporção da Margem de Pinos Espaçados Uniformemente
Valor de proporção
Significado
0
Sem margem.
0.5 (valor padrão)
A margem é igual à metade do deslocamento entre os links.
1
A margem é igual ao deslocamento entre os links.
2
A margem é igual ao dobro do deslocamento entre os links.

Nós de Sobreposição de Link Proibidos

Com esta opção, é possível solicitar o algoritmo de layout para evitar o redimensionamento estrito de links, de forma que eles sobreponham alguns nós. Se as sobreposições não forem proibidas, o algoritmo tentará evitar sobreposições de qualquer forma, mas criará sobreposições, por exemplo, para o link cruzar outros links.
Nota
A proibição de sobreposições pode reduzir a velocidade do layout e pode aumentar o número de curvaturas para os links que sobreporiam nós se as sobreposições não fossem estritamente proibidas.
Exemplo de Especificação de Nós de Sobreposição de Links Proibidos (algoritmo de Layout de Link)
Para especificar esta opção:
layout.setLinkOverlapNodesForbidden(true);
O valor padrão desta opção é false.
Quando as sobreposições são proibidas, o algoritmo de Layout de Link Curto usa o Layout de Link Longo como um algoritmo auxiliar para organizar apenas os links que, de outra maneira, sobreporiam os nós.
Exemplo de Especificação de Layout de Link Longo Quando as Sobreposições São Proibidas (algoritmo de Layout de Link)
Para recuperar a instância auxiliar do Layout de Link Longo:
Chame o seguinte método na instância ibm_ilog.graphlayout.shortlink.ShortLinkLayout:
var longLinkLayout = layout.getAuxiliaryLongLinkLayout();
Este método permite obter esta instância de layout auxiliar e customizar seus parâmetros, se necessário. You must not modify the origin and destination point mode, nor disable the preservation of fixed links.

Modo de Redimensionamento de Link Incremental

In incremental mode, it is possible to customize the rules used by Short Link Layout to determine which links must keep their current shape as much as possible, as computed by the previous layout execution. Com o modo de redimensionamento de link incremental, é possível customizar estas regras separadamente para duas categorias de links.
  • Os “links modificados”: links que possuem uma “caixa de conexão de link” diferente ou estão conectados aos nós que possuem uma caixa delimitadora diferente durante a execução do layout anterior.
  • Os “links não modificados”: links que possuem a mesma “caixa de conexão de link” e estão conectados aos nós que possuem a mesma caixa delimitadora durante a execução do layout anterior.
O modo pode ser customizado para duas ou apenas para uma destas categorias de links.
O modo de redimensionamento de link incremental não terá efeito se o modo incremental estiver desativado.
O algoritmo de layout fornece dois modos de redimensionamento de link incremental. É possível configurar o modo globalmente, neste caso, todos os links têm o mesmo modo, ou localmente em cada link, neste caso, ocorrem modos diferentes no mesmo desenho.

Modo de Redimensionamento de Link Incremental Global

Example of specifying a global incremental link reshape mode (Link Layout algorithm)
Para especificar o modo de redimensionamento incremental global:
layout.setGlobalIncrementalModifiedLinkReshapeMode(ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE);
Os valores válidos para mode são:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (o padrão)
    O layout incremental preserva o tipo de forma do link. Isto significa que o número de curvaturas e os lados do nó aos quais o link está conectado são preservados.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_NODE_SIDES_MODE
    O layout incremental preserva os lados do nó aos quais os links estão conectados.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_CONNECTION_POINTS_MODE
    O layout incremental preserva os pontos de conexão dos links.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_MODE
    Os links não são redimensionados durante o layout incremental. Apenas os links recém-incluídos serão roteados novamente.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FREE_MODE
    O layout incremental pode redimensionar os links livremente. It is equivalent to non-incremental behavior for all the links; hence it is recommended to disable incremental mode instead of using FREE_MODE as global incremental reshape mode.
    As configurações que podem ter sido executadas “fixando” os links (consulte Preservar Links Fixos (LL)) ou customizando o modo de ponto de origem ou de destino (consulte Modo de Terminais (LL)) ainda são mantidas.
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE
    Cada link pode ter um modo diferente.

Modo de Redimensionamento de Link Incremental Individual

Todos os links possuem o mesmo modo de redimensionamento de link incremental, a menos que o modo de redimensionamento de link incremental global seja ibm_ilog.graphlayout.shortlink.ShortLinkLayout.MIXED_MODE.
Apenas quando o modo global estiver configurado como MIXED_MODE, cada link poderá ter um modo individual.
Example of specifying an individual incremental link reshape mode (Link Layout algorithm)
Para especificar o modo de um link individual:
Use os seguintes métodos na instância ibm_ilog.graphlayout.shortlink.ShortLinkLayout:
layout.setIncrementalModifiedLinkReshapeMode(link, mode);  
layout.setIncrementalUnmodifiedLinkReshapeMode(link, mode);
var mode = layout.getIncrementalModifiedLinkReshapeMode(link);
var mode = layout.getIncrementalUnmodifiedLinkReshapeMode(link); 
Os valores válidos para mode são:
  • ibm_ilog.graphlayout.shortlink.ShortLinkLayout.FIXED_SHAPE_TYPE_MODE (o padrão)
  • 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

Mesma Forma para Vários Links

É possível forçar o algoritmo de layout para calcular a mesma forma para todos os links que possuem nós de origem e de destino comuns. Os links possuem formas paralelas.
Quando esta opção for desativada, o layout ficará livre para calcular formas diferentes para links que se conectam ao mesmo par de nós. Geralmente, são escolhidas formas diferentes para evitar algumas sobreposições.
Dois nós interconectados
primeiro com a opção de mesma forma desativada e, em seguida, com a opção
de mesma forma ativada
Same shape for multiple links option
Exemplo de Especificação da Mesma Forma para Vários Links (algoritmo de Layout de Link)
Para ativar a mesma forma para vários links:
Use o método:
layout.setSameShapeForMultipleLinks(true);
O valor padrão é false.

Penalidade de Cruzamento de Links

O cálculo da forma dos links é orientado pelo objetivo de minimizar uma função de custo, que é proporcional ao número de cruzamentos de link para link e de cruzamentos de link para nó. Por padrão, estes dois tipos de cruzamento possuem pesos iguais de 1. É possível aumentar o peso dos cruzamentos de link para nó.
Exemplo de Especificação de Penalidade de Cruzamento de Link para Nó (algoritmo de Layout de Link)
Para aumentar o peso dos cruzamentos de link para nó:
Use o método:
layout.setLinkToNodeCrossingPenalty(5);
This setting increases the possibility of obtaining a layout with no link-to-node crossings (or with only a few crossings), at the expense of the possibility that more link-to-link crossings could occur.
Como alternativa, é possível aumentar o peso dos cruzamentos de link para link.
Exemplo de Especificação de Penalidade de Cruzamento de Link para Link (algoritmo de Layout de Link)
Para aumentar o peso dos cruzamentos de link para link, por exemplo, para um valor de 3:
Use o método:
layout.setLinkToLinkCrossingPenalty(3);
This setting increases the possibility of obtaining a layout with no link-to-link crossings (or with only a few crossings), at the expense of the possibility of more link-to-node crossings.

Distância de Bypass

If the origin and destination nodes are too close, there might not be enough space for routing the link directly between the end nodes. Portanto, por padrão, se os nós de extremidade estiverem mais próximos do que uma distância de limite, o layout escolherá formas de links que ignoram o intervalo entre nós próximos. (Consulte Nós de extremidade e distância de bypass.)
Dois nós interconectados
primeiro mais distantes do que a distância de bypass e, em seguida, mais próximos
do que a distância de bypass
Nós de extremidade e distância de bypass
A distância de bypass é a distância mínima entre os nós de origem e de destino para os quais é permitida uma forma de link que vai diretamente de um nó para o outro. O algoritmo tenta evitar formas de links que conectam diretamente os lados dos nós de extremidade que estão mais próximos do que o valor de bypass.
Exemplo de Especificação da Distância de Bypass (algoritmo de Layout de Link)
Para configurar a distância de bypass:
Use o método setBypassDistance.
layout.setBypassDistance(1);
O valor padrão é um valor estritamente negativo. Se a distância de bypass for estritamente negativa, o valor do parâmetro de comprimento mínimo do segmento final será usado como a distância de bypass. Consulte o Comprimento Mínimo do Segmento Final. It allows the automatic adjustment of the bypass distance according to the current value of the minimum final segment length. Este comportamento é apropriado na maioria dos casos. É possível especificar um valor não negativo para substituir o comportamento padrão.

Usando uma Interface da Caixa de Conexão de Link

Por padrão, os pontos de conexão dos links são distribuídos na borda da caixa delimitadora dos nós, simetricamente em relação ao meio de cada lado. Sometimes, it might be necessary to place the connection points on a rectangle smaller or larger than the bounding box, possibly in an asymmetric way. For example, when labels are displayed below or above nodes.
Exemplo de Uso de uma Interface da Caixa de Conexão de Link para Modificar a Posição dos 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 a interface ILinkConnectionBoxProvider.
Esta interface define o seguinte método:
getBox(graphModel, node)
With this method, you can obtain the effective rectangle on which the connection points of the links are placed.
Um segundo método definido na interface permite que os pontos de conexão sejam deslocados tangencialmente, de uma maneira diferente para cada lado de cada nó:
getTangentialOffset(graphModel, node, nodeSide)
For example, to set a link connection box provider that returns a link connection rectangle that is smaller than the bounding box for all nodes of type MyNode and that shifts up the connection points on the left and right side of all the nodes, call:
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());
Opções de estilo de self-link mostra os efeitos da customização da caixa de conexão. À esquerda está o resultado usando as configurações padrão: os pontos de conexão são distribuídos na caixa delimitadora do nó (que inclui o rótulo) e são simétricos com o meio de cada lado do nó (incluindo o rótulo). On the right is the result after specifying a link connection box interface. On the lower side of the nodes, the links are now connected to the node (passing over the label), while on the left and right sides of the nodes, the connection points are now symmetric to the middle of the node (without the label).
Um gráfico
com a caixa de conexão de link padrão e, em seguida, uma caixa de conexão de link
customizada
Customização da caixa de conexão de link