Dicas e Truques

Incluindo uma Raiz Invisível no Layout

Se o gráfico contiver várias árvores que estão desconectadas umas das outras, o layout irá posicioná-las individualmente umas próximas das outras. Cada componente conectado possui sua própria estrutura radial com camadas circulares. No entanto, às vezes é apropriado ajustar todos os componentes conectados em uma única estrutura de camada circular. Conceptually, it is done by adding an invisible root at the center and connecting all disconnected trees to this root. A Figura Layout de componentes conectados sem e com uma raiz invisível mostra o efeito do uso de uma raiz invisível. It works only if the generic mechanism to lay out connected components is disabled.
Para incluir uma raiz invisível no layout:
Chame os métodos:
treeLayout.setLayoutOfConnectedComponentsEnabled(false);
treeLayout.setInvisibleRootUsed(true);
Picture
of tree layouts illustrating the generic handling of disconnected
graphs in contrast to the handling that uses an invisible root
Layout de componentes conectados sem e com uma raiz invisível

Espaçamento Uniforme para o Primeiro Círculo

O modo radial foi projetado para otimizar o espaço de forma que o círculo tenha um raio pequeno e o espaço geral para o layout inteiro seja pequeno. To achieve this result, the layout algorithm can create larger gaps on the inner circles for better space usage of the outer circles. It can produce unevenly spaced circles, most notably for the first circle where all nodes have the same parent node.
Para evitar este efeito, é possível forçar os nós a serem espaçados uniformemente em todo o primeiro círculo. Depending on the structure of the graph, it can cause the overall layout to waste more space on the other circles but it can produce a more pleasing graph.
Para ativar o espaçamento uniforme:
treeLayout.setFirstCircleEvenlySpacing(true);
Picture
of tree layouts illustrating the first circle evenly spacing parameter
Primeiro círculo espaçado uniformemente e não uniformemente

Para Especialistas: Forçando Todos os Níveis para Alternativos

When the layout mode ALTERNATING_RADIAL is used, the layout checks whether the alternating node arrangement of a level saves space. Se não economizar espaço, o layout usará a organização radial normal. Portanto, para muitos gráficos esparsos, os modos radial e radial alternativo geram o mesmo resultado, porque a organização alternativa não economiza espaço para nenhum nível. É possível desativar a verificação de espaço, ou seja, executar uma organização alternativa para todos os níveis, mesmo que isto resulte em gasto de espaço.
Use o método setAllLevelsAlternating:
treeLayout.setAllLevelsAlternating(true);

Para Especialistas: Vários Círculos por Nível Alternativo

When the layout mode ALTERNATING_RADIAL is used, the layout places nodes of the same level alternately into two circles instead of one circle. É possível aumentar ainda mais o número de círculos.
treeLayout.setNumberOfAlternatingCircles(3);
Neste caso, são usados três círculos. Ou seja, se o sinalizador allLevelsAlternating for true, o layout posicionará cada nível de nós em três círculos alternativos. Se o sinalizador allLevelsAlternating for false, ele verificará se cada nível requer mais espaço para posicionar os nós em um círculo ou em três círculos. High values for the number of alternating circles must not be used, because they slow down the algorithm and can produce link crossings.
If you set the number of alternating circles to 0 and the allLevelsAlternating flag is false, then it has a special meaning. Neste caso, a heurística tentará calcular o melhor número de círculos por nível automaticamente. Por isso, cada nível pode ter um número diferente de círculos, dependendo do número de nós e dos relacionamentos de irmãos entre os nós.

Para Especialistas: Configurando um Ângulo-filho Máximo

If a node has many child nodes, they can extend over a major portion of the circle and, therefore, are placed nearly 360 degrees around the node. It can result in links overlapping some nodes. A deficiência pode ser corrigida aumentando o deslocamento entre nós-pais e filhos. However, it affects the layout globally, which means that nodes without the deficiency are also affected. Para evitar esse tipo de mudança global, é possível limitar o ângulo máximo entre os dois raios do pai, se ele não for a raiz, e seus dois nós-filhos externos. Esta ação aumenta o deslocamento entre nós-pais e filhos apenas onde necessário.
Na figura Ângulo-filho máximo, é possível ver no layout à esquerda que muitos dos links sobrepõem outros nós. No layout à direita, é possível ver como este problema foi resolvido, configurando um ângulo-filho máximo entre dois raios de um pai e os dois nós-filhos externos.
Picture
of tree layouts illustrating the maximum children angle parameter
Ângulo-filho máximo
Para configurar um ângulo em graus.
Use o método setMaxChildrenAngle:
treeLayout.setMaxChildrenAngle(100);
Recommended values are 30 -180. Configurar o valor como 0 significa que o valor é irrestrito. The calculation of the angle is not precise above 180 degrees or if the aspect ratio is not 1.0.