6.0.0-alpha.3 • Published 2 years ago

egraph v6.0.0-alpha.3

Weekly downloads
10
License
MIT
Repository
github
Last release
2 years ago

egraph

egraph is a fast graph drawing library implemented in Rust and WebAssembly.

Install

$ npm install egraph

Usage

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.

Examples

Drawing SVG with React.js

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(
  <div>
    <svg width={width} height={height}>
      <g transform={`translate(${width / 2},${height / 2})`}>
        <g>
          {Array.from(graph.edges()).map(([u, v]) => {
            const { x: x0, y: y0 } = positions[u]
            const { x: x1, y: y1 } = positions[v]
            return (
              <g key={e}>
                <path d={`M ${x0} ${y0} L ${x1} ${y1}`} stroke='#000' />
              </g>
            )
          })}
        </g>
        <g>
          {Array.from(graph.nodes()).map((u) => {
            const { x, y } = positions[u]
            return (
              <g key={i} transform={`translate(${x},${y})`}>
                <circle r='10' fill='#000' />
              </g>
            )
          })}
        </g>
      </g>
    </svg>
  </div>,
  document.querySelector('#display')
)

Loading JSON

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))
  }
})()

License

MIT

6.0.0-alpha.3

2 years ago

6.0.0-alpha.1

2 years ago

6.0.0-alpha.2

2 years ago

6.0.0-alpha.0

3 years ago

5.0.0

4 years ago

4.0.1-alpha.14

6 years ago

4.0.1-alpha.13

6 years ago

4.0.1-alpha.12

6 years ago

4.0.1-alpha.11

6 years ago

4.0.1-alpha.10

6 years ago

4.0.1-alpha.9

6 years ago

4.0.1-alpha.8

6 years ago

4.0.1-alpha.7

6 years ago

4.0.1-alpha.6

6 years ago

4.0.1-alpha.4

6 years ago

3.0.0

9 years ago

2.4.3

9 years ago

2.4.2

9 years ago

2.4.1

9 years ago

2.4.0

9 years ago

2.3.1

9 years ago

2.3.0

9 years ago

2.2.0

9 years ago

2.1.0

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.2.0

9 years ago

1.1.5

10 years ago

1.1.4

10 years ago

1.1.3

10 years ago

1.1.2

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago