WebAssembly binding of egraph.
npm install egraphegraph is a fast graph drawing library implemented in Rust and WebAssembly.
``shell-session`
$ npm install egraph
`javascript
import { Graph } from 'egraph'
import {
Simulation,
ManyBodyForce,
LinkForce,
CenterForce
} from 'egraph/layout/force-directed'
// creating a graph
const graph = new Graph()
// adding vertices
graph.addNode(0)
graph.addNode(1)
graph.addNode(2)
// adding edges
graph.addEdge(0, 1)
graph.addEdge(0, 2)
graph.addEdge(1, 2)
// creating forces
const manyBodyForce = new ManyBodyForce()
const linkForce = new LinkForce()
const centerForce = new CenterForce()
// creating simulation
const simulation = new Simulation()
simulation.add(manyBodyForce)
simulation.add(linkForce)
simulation.add(centerForce)
// position calculation
const layout = simulation.start(graph)
// printing result
for (const u of graph.nodes()) {
console.log(layout.nodes[u])
}
`
egraph-wasm is implemented using wasm-bindgen.
For more detailed usage, please read wasm-bindgen document.
`javascript
import React from 'react'
import { render } from 'react-dom'
import { Graph } from 'egraph'
import {
Simulation,
ManyBodyForce,
LinkForce,
CenterForce
} from 'egraph/layout/force-directed'
const graph = new Graph()
graph.addNode(0)
graph.addNode(1)
graph.addNode(2)
graph.addEdge(0, 1)
graph.addEdge(0, 2)
graph.addEdge(1, 2)
const manyBodyForce = new ManyBodyForce()
const linkForce = new LinkForce()
linkForce.distance = () => 200
const centerForce = new CenterForce()
const simulation = new Simulation()
simulation.add(manyBodyForce)
simulation.add(linkForce)
simulation.add(centerForce)
const layout = simulation.start(graph)
const width = 600
const height = 400
render(
$3
`javascript
import { Graph } from 'egraph'
import {
Simulation,
ManyBodyForce,
LinkForce,
CenterForce
} from 'egraph/layout/force-directed'
;(async () => {
const request = await fetch('miserables.json')
const data = await request.json() const { Graph } = mod
const graph = new Graph()
for (const node of data.nodes) {
graph.addNode(node.id, node)
}
for (const link of data.links) {
graph.addEdge(link.source, link.target, link)
}
for (const u of graph.nodes()) {
console.log(graph.node(u))
}
for (const [u, v] of graph.edges()) {
console.log(graph.edge(u, v))
}
})()
``MIT