Hylograph.Kernel.D3.Core
- Package
- purescript-hylograph-d3-kernel
- Repository
- afcondon/purescript-hylograph-d3-kernel
D3 Force Engine Core
This module provides D3-based force simulation functions. We use D3's force calculation algorithms but manage the simulation ourselves.
Key principle: Forces are just functions that mutate vx/vy on nodes. We control when they run and how alpha decays.
#ForceHandle Source
data ForceHandle#createManyBody Source
createManyBody :: ManyBodyConfig -> ForceHandleCreate a many-body (charge) force
#createCollide Source
createCollide :: CollideConfig -> ForceHandleCreate a collision force
#createLink Source
createLink :: LinkConfig -> ForceHandleCreate a link force
#createCenter Source
createCenter :: CenterConfig -> ForceHandleCreate a centering force
#createForceX Source
createForceX :: ForceXConfig -> ForceHandleCreate an X positioning force
#createForceY Source
createForceY :: ForceYConfig -> ForceHandleCreate a Y positioning force
#createRadial Source
createRadial :: RadialConfig -> ForceHandleCreate a radial force
#createManyBodyFiltered Source
createManyBodyFiltered :: forall node. ManyBodyFilteredConfig node -> ForceHandleCreate a many-body force that only applies to nodes matching a predicate
#createRadialFiltered Source
createRadialFiltered :: forall node. RadialFilteredConfig node -> ForceHandleCreate a radial force that only applies to nodes matching a predicate
#createCollideDynamic Source
createCollideDynamic :: forall node. CollideDynamicConfig node -> ForceHandleCreate a collision force with dynamic radius per-node
#createForceXDynamic Source
createForceXDynamic :: forall node. ForceXDynamicConfig node -> ForceHandleCreate an X positioning force with dynamic target per-node
#createForceYDynamic Source
createForceYDynamic :: forall node. ForceYDynamicConfig node -> ForceHandleCreate a Y positioning force with dynamic target per-node
#createLinkDynamic Source
createLinkDynamic :: forall link. LinkDynamicConfig link -> ForceHandleCreate a link force with dynamic strength per-link
#createForceXGrid Source
createForceXGrid :: Number -> ForceHandleCreate an X positioning force that reads node.gridX directly
#createForceYGrid Source
createForceYGrid :: Number -> ForceHandleCreate a Y positioning force that reads node.gridY directly
#createCollideGrid Source
createCollideGrid :: Number -> Number -> Int -> ForceHandleCreate a collision force that reads node.r directly
#initializeNodes Source
initializeNodes :: forall r. Array (Record r) -> Effect UnitInitialize nodes with indices and default velocities
#initializeForce Source
initializeForce :: forall r. ForceHandle -> Array (Record r) -> Effect ForceHandleInitialize a force with nodes
#initializeLinkForce Source
initializeLinkForce :: forall nodeRow linkRow. ForceHandle -> Array (Record nodeRow) -> Array (Record linkRow) -> Effect ForceHandleInitialize a link force with nodes and links
#applyForce Source
applyForce :: ForceHandle -> Number -> Effect UnitApply a single force
#applyForces Source
applyForces :: Array ForceHandle -> Number -> Effect UnitApply multiple forces in sequence
#AnimationHandle Source
type AnimationHandle = Effect Unit#startAnimation Source
startAnimation :: (Number -> Effect Boolean) -> Effect AnimationHandleStart an animation loop
#stopAnimation Source
stopAnimation :: AnimationHandle -> Effect UnitStop a running animation