Parâmetros Comuns para os Modos AUTOMATIC e BY_CLUSTER_IDS

Esta seção se aplicará apenas se o modo de armazenamento em cluster estiver configurado como ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC ou ibm_ilog.graphlayout.circular.CircularLayout.BY_CLUSTER_IDS. Ambos os nós funcionam de uma forma semelhante. A principal diferença é que o modo de armazenamento em cluster AUTOMATIC pode manipular gráficos nos quais os clusters não são ou são especificados apenas parcialmente, enquanto o modo de armazenamento em cluster BY_CLUSTER_IDS requer uma especificação completa de todos os clusters e lança uma exceção ao executar um layout em um gráfico com especificação de cluster incompleta.

Associação de cluster e ordem dos nós em um cluster (CL)

A especificação de clusters explicitamente não é necessária no modo de armazenamento em cluster BY_SUBGRAPHS, porque os subgráficos formam os clusters. No modo de armazenamento em cluster AUTOMATIC, os clusters podem ser especificados opcionalmente. No modo BY_CLUSTER_IDS, eles devem ser especificados antes de executar o layout.
Exemplo de Especificação de Cluster do Nó (algoritmo CL)
Para especificar a qual cluster cada nó do gráfico pertence:
Para especificar a associação de cluster, use o identificador de cluster; ou seja, uma instância de uma subclasse da classe ibm_ilog.graphlayout.circular.CircularClusterId (que é abstrata). São fornecidas duas subclasses:
É possível combinar estes dois tipos de identificadores como qualquer outra subclasse de ibm_ilog.graphlayout.circular.CircularClusterId. Por exemplo, é possível gravar:
// create identifier for first cluster (integer)
var clusterId1 = new ibm_ilog.graphlayout.circular.CircularClusterNumber(1);
// create identifier for second cluster (string)
var clusterId2 = new ibm_ilog.graphlayout.circular.CircularClusterName("R&D network");
Em seguida, se node1 em node3 pertencer ao primeiro cluster, será possível gravar:
layout.setClusterIdAndIndex(node1, clusterId1);
layout.setClusterIdAndIndex(node2, clusterId1);
layout.setClusterIdAndIndex(node3, clusterId1);
Suponha que layout seja uma instância de ibm_ilog.graphlayout.circular.CircularLayout.
Se desejar que os nós sejam desenhados em uma ordem especial (por exemplo, node1 -> node2 -> node3), você deve especificar também um índice (um valor de número inteiro) para cada nó:
layout.setClusterId(node1, clusterId1, 0);
layout.setClusterId(node2, clusterId1, 1);
layout.setClusterId(node3, clusterId1, 2);
Dois métodos permitem especificar o cluster ao qual um nó pertence:
layout.setClusterId(node, clusterId)    
layout.addClusterId(node, clusterId)    
Se você chamar o primeiro método, o nó pertencerá apenas ao cluster cujo identificador é clusterId. O segundo método permite especificar que um nó pertence a mais de um cluster.
Estes métodos possuem outra versão com um argumento adicional, um valor de número inteiro que representa o índice:
layout.setClusterIdAndIndex(node, clusterId, index)   
layout.addClusterIdAndIndex(node, clusterId, index)   
Este valor é usado para ordenar os nós no cluster. Se você especificar estes índices, o algoritmo classificará os nós em ordem crescente, de acordo com os valores de índice.
Os valores do índice não podem ser negativos. Eles não precisam ser contínuos; apenas a ordem dos valores é importante.
Para obter um índice especificado de um nó em um determinado cluster, use o método:
var index = layout.getIndex(node, clusterId)  
Se nenhum índice for especificado para o nó, o método retornará o valor ibm_ilog.graphlayout.circular.CircularLayout.NO_INDEX. É um valor negativo.
Para obter uma enumeração dos identificadores de clusters para os clusters aos quais o nó pertence, use o método:
var ids = layout.getNodeClusterIds(node1);
while(ids.hasNext()){
 var id = ids.next();
 console.log("id = " + id);
}
Os elementos da enumeração são instâncias de uma subclasse de ibm_ilog.graphlayout.circular.CircularClusterId.
Para obter de forma eficiente o número de clusters aos quais um nó pertence, use o método:
var count = layout.getClusterIdsCount(node)  
Para remover um nó do cluster com o identificador especificado, use o método:
layout.removeClusterId(node, clusterId)  
Para remover um nó de todos os clusters aos quais ele pertence, use o método:
layout.removeAllClusterIds(node)  

Clusters Raiz (CL)

The algorithm arranges the clusters of each connected component of the graph of clusters around a “root cluster”. Por padrão, o algoritmo pode escolher este cluster. Opcionalmente, é possível especificar um ou mais clusters raiz (um para cada componente conectado).
Exemplo de Especificação de Clusters Raiz (algoritmo CL)
Para especificar um ou mais clusters raiz (um para cada componente conectado):
Use os métodos:
layout.setRootClusterId(clusterId)  
Para obter uma matriz contendo os identificadores dos clusters que foram especificados como clusters raiz, use o método:
var clusterIds = layout.getRootClusterIds()  
Este parâmetro não terá efeito se o modo de armazenamento em cluster for ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Clusters Estrela (CL)

Exemplo de Especificação de Centro de Estrela (algoritmo CL)
Para especificar se um nó é o centro de uma estrela:
Use o método:
layout.setStarCenter(node, true)  
Para saber se um nó é o centro de uma estrela, use o método:
var isCenter = layout.isStarCenter(node)  
Por padrão, um nó não é o centro de uma estrela.
Este parâmetro não terá efeito se o modo de armazenamento em cluster for ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Obter o Conteúdo, a Posição e o Tamanho dos Clusters (CL)

Às vezes, pode ser necessário saber a posição e o tamanho do círculo no qual os nós para cada cluster são desenhados. Este pode ser o caso se você desejar executar algumas operações de redimensionamento nos links. Para fazer isso, você pode obter uma matriz contendo todos os identificadores de cluster após a execução do layout. No modo de armazenamento em cluster AUTOMATIC, a matriz poderá conter identificadores de cluster gerados se nenhum cluster tiver sido especificado.
Exemplo de Obtenção de uma Matriz que Contém Todos os Identificadores de Cluster (algoritmo CL)
Para obter uma matriz contendo todos os identificadores de cluster após a execução do layout:
Use o método:
var ids = layout.getClusterIds()  
A matriz contém instâncias de uma subclasse de ibm_ilog.graphlayout.circular.CircularClusterId. Navegando nos elementos deste Array, é possível obter as informações necessárias para cada cluster:
var radius = layout.getClusterRadius(clusterIndex)   
var center = layout.getClusterCenter(clusterIndex)   
var nodes = layout.getClusterNodes(clusterIndex)   
O método getClusterNodes retorna os nós que formam o cluster. O argumento clusterIndex representa a posição do cluster no Array retornado pelo método getClusterIds().
Não use estes métodos se o modo de armazenamento em cluster for ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.

Parâmetros Dimensionais (CL)

Esta seção ilustra os parâmetros dimensionais usados no algoritmo de Layout Circular. Estes parâmetros são explicados nas seções seguintes.
O modo de armazenamento em cluster BY_CLUSTER_IDS também funciona com um deslocamento de gráfico desconectado. Isso está explicado na seção Manipulação de Gráficos Desconectados.
Os
parâmetros dimensionais usados pelo algoritmo de Layout
Circular
Parâmetros dimensionais para o algoritmo de Layout Circular

Deslocamento (CL)

O algoritmo de layout tenta preservar uma distância mínima entre os nós (consulte a figura Parâmetros dimensionais para o algoritmo de Layout Circular).
Exemplo de Especificação do Deslocamento (algoritmo CL)
Para especificar o deslocamento:
Use o método:
layout.setOffset(20)  

Deslocamento de Nível (CL)

Se o modo de armazenamento em cluster for BY_SUBGRAPHS, o parâmetro de deslocamento de nível controlará o deslocamento mínimo entre os nós que pertencem ao mesmo cluster.
Se o modo de armazenamento em cluster for BY_CLUSTER_IDS, o seguinte cenário se aplica.
Como explicado em O Algoritmo CL, clusters e anéis interconectados são desenhados em círculos concêntricos ao redor de um cluster de raiz. O raio de cada círculo concêntrico é calculado para evitar clusters de sobreposição. Em alguns casos, é recomendável aumentar esse raio para obter um desenha mais claro da rede. Para atender a este propósito, o raio é aumentado sistematicamente com um valor de “deslocamento de nível” (consulte a figura Parâmetros dimensionais para o algoritmo de Layout Circular).
Exemplo de Especificação do Deslocamento de Nível (algoritmo CL)
Para especificar o deslocamento de nível:
Use o método:
layout.setLevelOffset(5)  
O valor padrão é zero.
Este parâmetro não terá efeito se o modo de armazenamento em cluster for ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS.