Tengo esta red que funciona lo suficientemente bien: la posición del nodo se actualiza correctamente cuando cambian el ancho y la altura de la ventana.
Ahora estoy tratando de arreglarlo, me refiero a calcular n
ticks una vez y renderizar la red después de calcular n
ticks.
No me interesa visualizar estos pasos intermedios:
Quisiera solo esto:
En este momento la red se calcula con 300 ticks (el valor predeterminado), supongamos que solo quiero 100 ticks, sé que los nodos no estarán en la posición óptima pero no me importa, no quiero calcular más garrapatas ¿Cómo puedo hacer eso?
Intenté comentar el evento tick
y agregar .tick(100).stop()
pero la red ya no está centrada.
//.on("tick", simulationUpdate) .tick(100) .stop()
Creo que porque el objeto renderizado no se ha actualizado, pero ¿puedo hacerlo?
La documentación de D3 dice:
simulación.tick([iteraciones])
... Este método no envía eventos; los eventos solo son enviados por el temporizador interno cuando la simulación se inicia automáticamente al momento de la creación o llamando a simulation.restart. El número natural de tics cuando se inicia la simulación es ⌈log(alphaMin) / log(1 - alphaDecay)⌉; por defecto, esto es 300. ...
El efecto de una sola garrapata es muy pequeño; por lo que es posible que desee aumentar eso a alrededor de 1000
.
.tick(1000).stop()
No necesita escuchar el evento de tick
, pero debe forzar una marca y volver a renderizar cuando cambie el tamaño:
$: { simulation .force("center") .x(width / 2) .y(height / 2); simulation.tick(); simulationUpdate(); }