Cómo añadir un nodo raíz invisible para el diseño
Si el gráfico contiene varios árboles que están
desconectados entre sí, el diseño los coloca individualmente uno
junto a otro. Cada componente conectado tiene su propia estructura
radial con capas circulares. Sin embargo, algunas veces es adecuado
acomodar todos los componentes conectados en una sola estructura
formando una capa circular. Conceptualmente, se hace añadiendo una
raíz invisible en el centro y conectando todos los árboles
desconectados con este nodo raíz. En la figura
Diseño de componentes conectados sin y con un nodo
raíz invisible
se muestra el efecto de utilizar un nodo raíz invisible. Sólo
funciona si el mecanismo genérico para diseñar componentes conectados
está inhabilitado.
Para añadir un nodo raíz invisible al diseño:
Llame a los métodos:
treeLayout.setLayoutOfConnectedComponentsEnabled(false); treeLayout.setInvisibleRootUsed(true);

Diseño de componentes conectados sin y con un nodo
raíz invisible
Espaciado uniforme del primer círculo
La modalidad radial está diseñada para optimizar el
espacio de modo que los círculos tengan un radio pequeño y el espacio
total que ocupe todo el diseño sea pequeño. Para lograr este
resultado, el algoritmo de diseño puede crear más espacios en los
círculos internos para mejorar el uso del espacio de los círculos
externos. Esto puede generar círculos espaciados de forma desigual,
especialmente para el primer círculo donde todos los nodos tienen el
mismo nodo padre.
Para evitar este efecto, puede obligar a los nodos a que
se coloquen espaciados de manera uniforme en el primer círculo.
Dependiendo de la estructura del gráfico, esto puede hacer que el
diseño general desperdicie más espacio en los otros círculos pero
puede generar un gráfico estéticamente más agradable.
Para habilitar el espaciado uniforme:
Utilice el método setFirstCircleEvenlySpacing:
treeLayout.setFirstCircleEvenlySpacing(true);

Primer círculo espaciado de manera uniforme y de
manera desigual
Para expertos: cómo obligar a todos los niveles a alternarse
Cuando se utiliza la modalidad de diseño
ALTERNATING_RADIAL
, el diseño
comprueba si la disposición alterna de los nodos de un nivel ahorra
espacio. Si no ahorra espacio, el diseño utiliza la disposición
radial normal. Por lo tanto, en muchos gráficos dispersos se obtiene
el mismo resultado con la modalidad radial y con la modalidad radial
alterna porque la disposición alterna no ahorra espacio para
cualquier nivel. Es posible inhabilitar la comprobación de espacio,
es decir, llevar a cabo una disposición alterna para todos los
niveles aunque esto lleve a desperdiciar espacio. Utilice el método setAllLevelsAlternating:
treeLayout.setAllLevelsAlternating(true);
Para expertos: varios círculos por nivel alterno
Cuando se utiliza la modalidad de diseño
ALTERNATING_RADIAL
, el diseño
coloca los nodos del mismo nivel de forma alterna en dos círculos en
vez de en uno. Es posible aumentar el número de círculos. Utilice el método setNumberOfAlternatingCircles:
treeLayout.setNumberOfAlternatingCircles(3);
En este caso, se utilizan tres círculos. Esto significa
que, si el distintivo
allLevelsAlternating es
true
, el diseño coloca cada
nivel de nodos en tres círculos alternos.
Si el distintivo
allLevelsAlternating es
false
, comprueba si cada nivel
requiere más espacio para colocar los nodos en un círculo o en tres
círculos. No deben utilizarse valores altos para el número de
círculos alternos, ya que ralentizan el algoritmo y pueden producir
intersecciones de enlaces. Establecer el número de círculos alternos en
0
y el distintivo
allLevelsAlternating en
false
tiene un significado
especial. En este caso, un método heurístico intenta calcular
automáticamente cuál es el mejor número de círculos por nivel. Como
consecuencia, cada nivel puede tener un número diferente de círculos,
dependiendo del número de nodos y de las relaciones de hermanos entre
los nodos. Para expertos: cómo establecer un ángulo máximo de hijos.
Si un nodo tiene muchos nodos hijo, pueden extenderse
por gran parte del círculo y, por lo tanto, se colocan ocupando
prácticamente los 360 grados del nodo. Esto puede provocar que los
enlaces se solapen con algunos nodos. El defecto
puede arreglarse aumentando el desplazamiento entre el nodo padre y
los nodos hijo. Sin embargo, afecta al diseño global, lo que
significa que los nodos sin el defecto también se ven afectados. Para
evitar un cambio global, puede limitar el ángulo máximo entre los dos
rayos que van del padre, si no es el nodo raíz, hasta sus dos nodos
hijo más externos. Esta acción aumenta el desplazamiento entre el
nodo padre y los nodos hijo sólo donde es necesario.
En la figura
Ángulo máximo de hijos. ,
puede ver en el diseño de la izquierda que muchos de los enlaces se
solapan con otros nodos. En el diseño de la derecha, puede verse cómo
se ha resuelto este problema estableciendo un ángulo máximo de hijos
entre dos rayos que parten de un nodo padre hasta los dos nodos hijo
más externos.

Ángulo máximo de hijos.
Para establecer el ángulo en grados.
Utilice el método setMaxChildrenAngle:
treeLayout.setMaxChildrenAngle(100);
Los valores recomendados están comprendidos entre
30
y
180
. Establecer el valor en
0
significa que el ángulo es
libre. El cálculo del ángulo no es preciso por encima de 180 grados o
si la proporción no es 1,0.