Este apartado sólo es pertinente si la modalidad de
agrupación en clúster se establece en
ibm_ilog.graphlayout.circular.CircularLayout.AUTOMATIC
o
ibm_ilog.graphlayout.circular.CircularLayout.BY_CLUSTER_IDS
. Ambas modalidades funcionan de forma parecida. La principal diferencia
es que la modalidad de agrupación en clúster
AUTOMATIC
puede manejar
gráficos en que no se especifique ningún clúster o se especifiquen de
forma parcial, mientras que la modalidad
BY_CLUSTER_IDS
requiere que
todos los clústeres se especifiquen de forma completa y genera una
excepción si se ejecuta un diseño en un gráfico con una
especificación de clústeres incompleta. Miembros del clúster y orden de los nodos de un clúster (DCirc)
No es necesario especificar explícitamente los clústeres
en la modalidad de agrupación en clúster
BY_SUBGRAPHS
, puesto que los
subgráficos forman los clústeres. En modalidad de agrupación en clúster AUTOMATIC
, se pueden especificar clústeres opcionalmente.
En la modalidad BY_CLUSTER_IDS
, deben especificarse antes de ejecutar el diseño. Ejemplo de cómo especificar un clúster de nodos
(algoritmo DCirc)
Para especificar a qué clúster del gráfico pertenece
cada nodo:
Para especificar los miembros del clúster, utilice un
identificador de clúster; es decir, una instancia de una subclase de
la clase
ibm_ilog.graphlayout.circular.CircularClusterId
(que es abstracta). Se proporcionan dos subclases:
- ibm_ilog.graphlayout.circular.CircularClusterNumber, que utiliza números enteros como identificadores de clúster.
- ibm_ilog.graphlayout.circular.CircularClusterName, que utiliza nombres de cadena como identificadores de clúster.
Puede combinar estos dos tipos de identificadores como
cualquier otra subclase de
ibm_ilog.graphlayout.circular.CircularClusterId
.
Por ejemplo, puede escribir: // 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");
Seguidamente, si de
node1
a
node3
pertenecen al primer
clúster, puede escribir: layout.setClusterIdAndIndex(node1, clusterId1); layout.setClusterIdAndIndex(node2, clusterId1); layout.setClusterIdAndIndex(node3, clusterId1);
Supongamos que
layout
es una instancia de
ibm_ilog.graphlayout.circular.CircularLayout
.
Si desea que los nodos se dibujen en un orden concreto
(por ejemplo,
node1
->
node2
->
node3
), también debe
especificar un índice (un valor entero) para cada nodo: layout.setClusterId(node1, clusterId1, 0); layout.setClusterId(node2, clusterId1, 1); layout.setClusterId(node3, clusterId1, 2);
Dos métodos permiten especificar el clúster al que
pertenece un nodo:
layout.setClusterId(node, clusterId)
layout.addClusterId(node, clusterId)
Si llama al primer método, el nodo sólo pertenece al
clúster cuyo identificador es
clusterId
. El segundo método
permite especificar que un nodo pertenece a más de un clúster. Estos métodos tienen otra versión con un argumento
adicional, un valor entero que representa el índice:
layout.setClusterIdAndIndex(node, clusterId, index)
layout.addClusterIdAndIndex(node, clusterId, index)
Este valor se utiliza para ordenar los nodos del
clúster. Si especifica estos índices, el algoritmo ordena los nodos
en orden ascendente según los valores de índice.
Los valores del índice no pueden ser negativos. No tienen por qué ser continuos; sólo importa el orden
de los valores.
Para obtener el índice de un nodo especificado en un
clúster determinado, utilice el método:
var index = layout.getIndex(node, clusterId)
Si no se ha especificado ningún índice para el nodo, el
método devuelve el valor
ibm_ilog.graphlayout.circular.CircularLayout.NO_INDEX
.
Es un valor negativo. Para obtener una enumeración de los identificadores de
clúster de los clústeres a los que pertenece el nodo, utilice el
método:
var ids = layout.getNodeClusterIds(node1); while(ids.hasNext()){ var id = ids.next(); console.log("id = " + id); }
Los elementos de la enumeración son instancias de una
subclase de
ibm_ilog.graphlayout.circular.CircularClusterId
. Para obtener de forma eficiente el número de clústeres a
los que pertenece un nodo, utilice el método:
var count = layout.getClusterIdsCount(node)
Para eliminar un nodo del clúster con el identificador
especificado, utilice el método:
layout.removeClusterId(node, clusterId)
Para eliminar un nodo de todos los clústeres a los que
pertenece, utilice el método:
layout.removeAllClusterIds(node)
Clústeres raíz (DCirc)
El algoritmo dispone los clústeres de cada
connected component
del gráfico de clústeres en torno a un “clúster raíz”. De forma
predeterminada, el algoritmo puede elegir este clúster.
Opcionalmente, el usuario puede especificar uno o varios clústeres
raíz (uno para cada componente conectado).
Ejemplo de cómo especificar clústeres raíz (algoritmo
DCirc)
Para especificar uno o varios clústeres raíz (uno por
cada componente conectado):
Utilice los métodos:
layout.setRootClusterId(clusterId)
Para obtener una matriz que contiene los identificadores
de los clústeres que se han especificado como clústeres raíz, utilice
el método:
var clusterIds = layout.getRootClusterIds()
Este parámetro no surte efecto si la modalidad de
agrupación en clúster es
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
. Clústeres en estrella (DCirc)
Ejemplo de cómo especificar el centro de una estrella
(algoritmo DCirc)
Para especificar si un nodo es el centro de una
estrella:
Utilice el método:
layout.setStarCenter(node, true)
Para saber si un nodo es el centro de una estrella,
utilice el método:
var isCenter = layout.isStarCenter(node)
De forma predeterminada, un nodo no es el centro de una
estrella.
Este parámetro no surte efecto si la modalidad de
agrupación en clúster es
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
. Cómo obtener el contenido, la posición y el tamaño de los clústeres (DCirc)
A veces, puede que necesite conocer la posición y el
tamaño del círculo en que se dibujan los nodos de cada clúster. Este
puede ser el caso si desea realizar algunas operaciones de cambiar de
forma los enlaces. Para ello, puede obtener una matriz que contenga
todos los identificadores de clúster tras ejecutar el diseño. En la
modalidad de agrupación en clúster
AUTOMATIC
, la matriz puede
contener identificadores de clúster generados si no se ha
especificado ningún clúster. Ejemplo de obtención de una matriz que contiene todos
los identificadores de clúster (algoritmo DCirc)
Para obtener una matriz que contiene todos los
identificadores de clúster tras ejecutar el diseño:
Utilice el método:
var ids = layout.getClusterIds()
La matriz contiene instancias de una subclase de
ibm_ilog.graphlayout.circular.CircularClusterId
.
Examinando los elementos de este
Array
puede obtener la
información necesaria para cada clúster: var radius = layout.getClusterRadius(clusterIndex)
var center = layout.getClusterCenter(clusterIndex)
var nodes = layout.getClusterNodes(clusterIndex)
El método
getClusterNodes
devuelve los
nodos que conforman el clúster. El argumento
clusterIndex
representa la
posición del clúster en el
Array
devuelto por el método
getClusterIds()
. No utilice estos métodos si la modalidad de agrupación
en clúster es
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
. Parámetros dimensionales (DCirc)
En esta sección se muestran los parámetros dimensionales
utilizados en el algoritmo Diseño circular. Estos parámetros se
explican en los apartados siguientes.
La modalidad de agrupación en clúster
BY_CLUSTER_IDS
también
funciona con un desplazamiento de gráfico no conexo. Se explica en la
sección Manejo de gráficos no conexos. . 
Parámetros dimensionales del algoritmo Diseño circular
Desplazamiento (DCirc)
El algoritmo de diseño intenta conservar una distancia
mínima entre nodos (consulte la figura
Parámetros dimensionales del algoritmo Diseño circular ).
Ejemplo de cómo especificar el desplazamiento
(algoritmo DCirc)
Para especificar el desplazamiento:
Utilice el método:
layout.setOffset(20)
Desplazamiento de nivel (DCirc)
Si la modalidad de agrupación en clúster es
BY_SUBGRAPHS
, el parámetro
desplazamiento de nivel controla el desplazamiento mínimo entre los
nodos que pertenecen al mismo clúster. Si la modalidad de agrupación en clúster es
BY_CLUSTER_IDS
, se aplica el
siguiente caso. Como se explica en
El algoritmo DCirc,
se dibujan anillos y clústeres interconectados en círculos
concéntricos alrededor de un clúster raíz. El radio de cada círculo
concéntrico se calcula de modo que se evite el solapamiento de
clústeres. En algunos casos, es posible que desee aumentar este radio
para obtener un dibujo más comprensible de la red. Para cumplir este
objetivo, el radio se aumenta sistemáticamente con un valor de
“desplazamiento de nivel” (consulte la figura
Parámetros dimensionales del algoritmo Diseño circular ).
Ejemplo de cómo especificar el desplazamiento de nivel
(algoritmo DCirc)
Para especificar el desplazamiento de nivel:
Utilice el método:
layout.setLevelOffset(5)
El valor predeterminado es cero.
Este parámetro no surte efecto si la modalidad de
agrupación en clúster es
ibm_ilog.graphlayout.circular.CircularLayout.BY_SUBGRAPHS
.