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:
- ibm_ilog.graphlayout.circular.CircularClusterNumber, que usa números inteiros como identificadores de clusters.
- ibm_ilog.graphlayout.circular.CircularClusterName, que usa nomes de sequências como identificadores de clusters.
É 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. 
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
.