Crate fdg_sim

Source
Expand description

§fdg-sim

A force-directed graph simulation for Rust.

Visit the project page for more information.

screenshot

§Crates

NameVersionDocsLicenseDescription
fdg-simLatest versionDocumentationMITRuns the layout engine (simulation) and manages the position of nodes.
fdg-macroquadLatest versionDocumentationGPL-3.0A demo visualizer that lets you interact with the graph in real time. (View Online)
fdg-imgLatest versionDocumentationGPL-3.0A simple SVG renderer for your graphs.
fdg-wasmNPM PackageView ReadmeMITA 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.

Re-exports§

pub use glam;
pub use petgraph;

Modules§

dot
Exports graphs into the DOT language for use with visualizers like Graphviz.
force
Change forces that define how your graph behaves.
gmlgml
Import and export graphs with Graph Modelling Language (GML).
jsonjson
Import and export graphs with the jsongraph specification.

Structs§

Node
A node on a ForceGraph.
Simulation
A simulation for managing the main event loop and forces.
SimulationParameters
Parameters for the simulation.

Enums§

Dimensions
Number of dimensions to run the simulation in.

Traits§

ForceGraphHelper
Syntactic sugar to make adding Nodes to a ForceGraph easier.

Type Aliases§

ForceGraph
A helper type that creates a StableGraph with our custom Node as the weight.