fdg-sim

Crates.iofdg-sim
lib.rsfdg-sim
version0.9.1
sourcesrc
created_at2022-05-04 19:12:52.652294
updated_at2022-12-17 03:28:46.698522
descriptionA flexible force-directed graph framework
homepage
repositoryhttps://github.com/grantshandy/fdg/tree/main/fdg-sim
max_upload_size
id580589
size60,650
Grant Handy (grantshandy)

documentation

https://docs.rs/fdg_sim/

README

fdg-sim

A force-directed graph simulation for Rust.

Visit the project page for more information.

screenshot

Crates

Name Version Docs License Description
fdg-sim Latest version Documentation MIT Runs the layout engine (simulation) and manages the position of nodes.
fdg-macroquad Latest version Documentation GPL-3.0 A demo visualizer that lets you interact with the graph in real time. (View Online)
fdg-img Latest version Documentation GPL-3.0 A simple SVG renderer for your graphs.
fdg-wasm NPM Package View Readme MIT A simple Webassembly wrapper of fdg-sim for use in Javascript.

Basic Example

use fdg_sim::{ForceGraph, ForceGraphHelper, Simulation, SimulationParameters};

fn main() {
    // initialize a graph
    let mut graph: ForceGraph<(), ()> = ForceGraph::default();

    // add nodes to it
    let one = graph.add_force_node("one", ());
    let two = graph.add_force_node("two", ());
    let _three = graph.add_force_node("three", ());
    graph.add_edge(one, two, ());

    // create a simulation from the graph
    let mut simulation = Simulation::from_graph(graph, SimulationParameters::default());

    // your event/render loop
    for frame in 0..50 {
        // update the nodes positions based on force algorithm
        simulation.update(0.035);

        // render (print) your nodes new locations.
        println!("---- frame {frame} ----");
        for node in simulation.get_graph().node_weights() {
            println!("\"{}\" - {:?}", node.name, node.location);
        }
        println!("-----------------------")
    }
}

What are N, E, and Ty?

You may notice that structs and types like Simulation, ForceGraph, and Force have generic type parameters <N, E, Ty>.

  • N: The node weight (data stored in the Node's data).
  • E: The edge weight (data stored directly in the graph's edges).
  • Ty: The edge type, Directed or Undirected (set by default).

These type names from the petgraph documentation here. Because Ty is set by default, you won't have to mess with it most of the time.

Commit count: 0

cargo fmt