En algunos casos, es posible que tenga que utilizar una
secuencia de diseños en el mismo gráfico.
Por ejemplo:
- Supongamos que trabaja con gráficos desactualizados y necesita ampliar el gráfico. Si ejecuta un diseño en el gráfico ampliado, probablemente querrá identificar las partes que ya estaban dispuestas en el gráfico original. El diseño no debe cambiar mucho cuando se compara con el diseño del gráfico original.
- El primer diseño da como resultado un dibujo con pequeños defectos. Ha de corregir a mano estos defectos y ejecutar un segundo diseño para arreglar el dibujo. El segundo diseño probablemente apenas habrá cambiado las partes del gráfico que ya eran aceptables después de haber ejecutado el diseño por primera vez.
El Diseño jerárquico normalmente no funciona de forma
incremental. Ejecuta un diseño desde cero, mueve todos los nodos a
nuevas posiciones y redirecciona todos los enlaces. Las posiciones
anteriores de los nodos no influyen en el resultado del diseño. Por
lo tanto, incluso un pequeño cambio puede producir un gran efecto en
el diseño siguiente.
Sin embargo el Diseño jerárquico también admite
secuencias de diseño incremental que “no cambian mucho”. Puede
colocar los nodos más cerca de sus posiciones anteriores, de forma
que se pueda identificar con más facilidad las partes que ya
estaban dispuestas en el gráfico original. La modalidad incremental
tiene en cuenta las posiciones anteriores de los nodos. En esta
modalidad, el algoritmo conserva el orden relativo de los niveles y
los nodos dentro de los niveles en el diseño posterior. No
conserva las posiciones absolutas de los nodos, pero intenta detectar
la estructura del diseño anterior examinando las coordenadas de los
nodos. Por ejemplo, si dos nodos están en el mismo nivel, permanecen
en el mismo nivel después de ejecutar un diseño incremental. Si un
nodo está en un nivel más alto que otro nodo, se queda en el nivel
superior.
En la figura siguiente se ilustra la diferencia entre un
diseño incremental y uno no incremental.

Diseños incrementales y no incrementales
La modalidad incremental está inhabilitada de forma
predeterminada.
Para habilitar la modalidad incremental:
Utilice el método setIncrementalMode.
Por ejemplo:
layout.setIncrementalMode(true);
Fases de la modalidad incremental
El algoritmo de diseño analiza el dibujo en modalidad
incremental de la siguiente manera:
- En primer lugar, determina a partir de las coordenadas de los nodos qué nodos deben pertenecer al mismo nivel. Por ejemplo, si la dirección del flujo es hacia abajo, intenta detectar líneas horizontales de referencia en las posiciones verticales en que se colocan muchos nodos a lo largo de una línea. El desplazamiento vertical de nodos especificado permite detectar estas líneas ya que las líneas horizontales de referencia deben ser aproximadamente la distancia del desplazamiento vertical de nodos. Consulte la figura siguiente.
- A todos los nodos que tocan la misma línea de referencia se les asigna el mismo nivel.
- Determina el orden de los nodos dentro de cada nivel mediante el análisis de los puntos en que los nodos tocan la línea de referencia. Por ejemplo, si la dirección del flujo es hacia abajo, determina a partir de la coordenada x de los nodos cómo se ordenan dentro de los niveles.
- Si los enlaces largos abarcan varios niveles, el algoritmo puede conservar la forma de un enlace largo. Determina el punto en que un enlace cruza la línea de referencia del nivel. Crea un punto de inflexión para el enlace largo de dentro del nivel. Intenta conservar el orden de los puntos de inflexión en cada nivel. Por ejemplo, si en una dirección de flujo hacia abajo, un enlace largo rodea otro nodo por el lado derecho, el diseño incremental intenta encontrar una forma similar del enlace que rodea el nodo por el lado derecho. Consulte la figura siguiente.
- Por último, el diseño intenta calcular las posiciones absolutas de los nodos que respeten los niveles y el orden dentro de los niveles. Intenta equilibrar las posiciones de los nodos. No obstante, también intenta coloca cada nodo cerca de su posición anterior. Ambos criterios con frecuencia compiten entre sí, porque para obtener un equilibrio perfecto, a veces los nodos deben moverse lejos de su posición original. El Diseño jerárquico tiene un método heurístico parametrizado para satisfacer ambos criterios.
En la siguiente figura se muestra el resultado de las
fases de la modalidad incremental.

Fases del diseño incremental
Parámetros para expertos de la modalidad incremental
Cada fase de la modalidad incremental se puede
parametrizar. Estos parámetros de diseño sólo son eficaces si se
habilita la modalidad incremental.
Minimizar las intersecciones de enlaces largos
El diseño incremental intenta conservar la forma de los
enlaces largos que cruzan varios niveles. Esto implica que las
intersecciones de enlaces entre enlaces largos no se resuelven. Si no
se desea tener intersecciones de enlaces largos, lo mejor será
redireccionar los enlaces largos desde cero. En la figura siguiente
se pueden ver cuatro árboles de jerarquía, con el diseño original en
la parte superior izquierda. En la parte inferior derecha se muestra
el resultado si se redireccionan los enlaces largos y en la parte
superior derecha se muestra el resultado si se conserva la forma de
los enlaces largos.

Reducción de intersecciones durante la ejecución de
diseños incrementales
Para redireccionar enlaces largos desde cero, debe
habilitar el mecanismo de reducción de intersecciones para enlaces
largos:
Utilice el método setLongLinkCrossingReductionDuringIncremental.
Por ejemplo:
layout.setLongLinkCrossingReductionDuringIncremental(true);
La reducción de intersecciones de enlaces largos
determina sólo la forma de los enlaces. No afecta al orden de los
demás nodos dentro de los niveles.
Minimizar todas las intersecciones de enlaces
Opcionalmente, puede aplicar una reducción de
intersecciones a todos los nodos de cada nivel. En este caso, el
diseño incremental determina a partir de las coordenadas de los nodos
qué nodos pertenecen al mismo nivel, pero puede reordenar todos los
nodos dentro de los niveles para evitar las intersecciones de
enlaces. En este caso, también reordena los enlaces largos. El
resultado se muestra en la parte inferior izquierda de la figura
anterior. Observe que el orden de los nodos “F”, “G” y “H” ha
cambiado para resolver las intersecciones de enlaces.
Para habilitar la reducción de intersecciones para todos
los nodos:
Utilice el método setCrossingReductionDuringIncremental:
layout.setCrossingReductionDuringIncremental(true);
Cómo establecer el posicionamiento de nivel absoluto
El diseño incremental intenta colocar los nodos en
posiciones absolutas que estén cerca de las posiciones anteriores.
Intenta evitar que los nodos se muevan una gran distancia, porque
aunque el orden relativo de los nodos dentro de los niveles no
cambie, las grandes distancias pueden confundir a los usuarios. Es
mucho más fácil conservar un mapa mental del diagrama si los nodos
permanecen cerca de la posición anterior.
En la figura siguiente se ilustra el cambio de posición
de los nodos teniendo en cuenta las posiciones anteriores y sin
tenerlas en cuenta. El diseño incremental del gráfico original (parte
superior izquierda) da como resultado el gráfico de la parte superior
derecha, que es más fácil de reconocer como el mismo gráfico que el
gráfico de la parte inferior.
La característica de posicionamiento de nivel absoluto
está habilitada de forma predeterminada, pero puede inhabilitarse.
Para inhabilitar la característica de posicionamiento de
nivel absoluto:
Utilice el método setIncrementalAbsoluteLevelPositioning.
Por ejemplo:
layout.setIncrementalAbsoluteLevelPositioning(false);
Con esta sentencia, el diseño no intenta colocar los
nodos cerca de las posiciones anteriores. Coloca los nodos de modo
que el diseño esté equilibrado. Sin embargo, para crear un equilibrio
perfecto, el diseño puede tener que mover algunos nodos a una
distancia tan grande que tal vez ya no reconozca el diagrama
(consulte la figura siguiente, abajo).

Posicionamiento absoluto durante la ejecución de
diseños incrementales
Cómo establecer el intervalo y tendencia de la posición de nivel absoluta
Si el posicionamiento de nivel absoluto está habilitado,
compite con los criterios estéticos para crear un diseño equilibrado.
Puesto que los nodos deben permanecer cerca de sus posiciones
anteriores, tras ejecutar el diseño incremental el diagrama puede
parecer desequilibrado y asimétrico. El algoritmo Diseño
jerárquico utiliza un mecanismo heurístico cuyo efecto puede
modificarse mediante dos parámetros, el intervalo y la tendencia de
la posición de nivel absoluta.
La característica de posicionamiento de nivel absoluto
está habilitada de forma predeterminada, pero puede inhabilitarse.
Para inhabilitar la característica de posicionamiento de
nivel absoluto:
Utilice el método setIncrementalAbsoluteLevelPositionRange.
Por ejemplo:
layout.setIncrementalAbsoluteLevelPositionRange(100);
Esta sentencia especifica que en el intervalo de 100
unidades de coordenadas a partir de la posición anterior del nodo, el
único criterio para colocar los nodos es el equilibrio. Esto
significa que un nodo cuya posición óptima sea menor que 100 unidades
de coordenadas más allá de su posición anterior se coloca exactamente
en su posición óptima. Los nodos cuya posición óptima esté más lejos
se colocan en una posición que es un compromiso entre la posición
anterior y la posición óptima. Consulte la figura siguiente, derecha.
Para establecer la tendencia de la posición de nivel
absoluta:
Utilice el método setIncrementalAbsoluteLevelPositionTendency.
Por ejemplo:
layout.setIncrementalAbsoluteLevelPositionTendency(70);
Esta sentencia especifica que cuando la posición óptima
de un nodo está lejos de su posición anterior, su posición se ve
afectada en un 70% por su posición anterior y en un 30% por su
posición óptima. Imagínese una goma elástica que intenta tirar de un
nodo hacia su posición anterior y otra goma elástica que intenta
tirar el mismo nodo hacia su posición óptimamente equilibrada. La
tendencia de la posición de nivel
70
significa que una goma
elástica tira con el 70% de la fuerza hacia la posición anterior y la
otra goma elástica tira con otro 30% hacia la posición óptima. Si se
aumenta la tendencia significa que el nodo permanece más cerca de su
antigua posición; si se disminuye significa que el nodo se acerca a
su posición óptima. Establecer la tendencia en 0% tiene el mismo
efecto que inhabilitar el posicionamiento de nivel absoluto
incremental (consulte la figura siguiente). 
Posicionamiento absoluto durante la ejecución de
diseños incrementales
Marcado de nodos para diseño incremental
El diseño incremental normalmente trata a todos los
nodos y enlaces del dibujo de la misma manera. Sin embargo, puede que
haya añadido al dibujo nodos y enlaces mediante programación, y que
los nodos y enlaces nuevos aún no tengan coordenadas significativas.
Puede que los haya colocado en el origen (0,0) o en coordenadas
aleatorias. En este caso, necesita un diseño incremental que tenga en
cuenta las coordenadas de todos los nodos diseñados anteriormente,
mientras ignora las coordenadas de los nodos nuevos.
La modalidad incremental del Diseño jerárquico permite
especificar los nodos que no se pueden diseñar de modo incremental
utilizando el método:
layout.markForIncremental(nodeOrLink);
Si llama a esta sentencia, el nodo o enlace se marca de
modo que se hace caso omiso de sus coordenadas durante la siguiente
ejecución del diseño incremental. Las posiciones de los nodos y
enlaces marcados se calcula desde cero. La marca sólo es válida hasta
el diseño siguiente y posteriormente se borra automáticamente.