JavaScript is required

Use D3 layout

D3 Layout Integration - Use D3.js force simulation with relation-graph

D3.js Layout Integration

Functional Overview

This example demonstrates integration of D3.js force-directed layout algorithm with relation-graph. D3’s powerful physics simulation calculates node positions, which are then applied to relation-graph nodes for rendering and interaction.

Implementation of Key Features

D3 Simulation Setup

import { forceSimulation, forceLink, forceManyBody, forceCenter } from 'd3-force';

const initD3Simulation = (nodes: RGNode[], lines: RGLine[]) => {
    const simulation = forceSimulation(nodes as any)
        .force('link', forceLink(lines as any).id((d: any) => d.id).distance(100))
        .force('charge', forceManyBody().strength(-300))
        .force('center', forceCenter(canvasWidth / 2, canvasHeight / 2));

    simulation.on('tick', () => {
        nodes.forEach(node => {
            graphInstance.updateNode(node.id, {
                x: node.x,
                y: node.y
            });
        });
    });

    return simulation;
};

Applying D3 Positions

const applyD3Layout = () => {
    const nodes = graphInstance.getNodes();
    const lines = graphInstance.getLines();

    const simulation = initD3Simulation(nodes, lines);

    // Let simulation stabilize
    setTimeout(() => {
        simulation.stop();
    }, 3000);
};

Creative Use Cases

Complex Networks: D3’s advanced force algorithms handle complex topologies.

Physics-Based Layouts: Realistic physical simulations.

Custom Force Rules: Implement domain-specific layout rules.

Transitional Animations: Smooth layout transitions.

Hybrid Layouts: Combine D3 with relation-graph layouts.