Parámetros comunes de las modalidades AUTOMATIC y BY_CLUSTER_IDS

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:
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 utilizados por el algoritmo Diseño
circular
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.