Skip to main content

layout_drl

Function layout_drl 

Source
pub fn layout_drl(
    graph: &Graph,
    seed: Option<&[[f64; 2]]>,
    options: &DrlOptions,
    weights: Option<&[f64]>,
) -> IgraphResult<Vec<[f64; 2]>>
Expand description

Compute the DrL layout.

A multi-phase simulated annealing force-directed layout with density-grid repulsion. Designed for large graphs.

§Arguments

  • graph — input graph (treated as undirected).
  • seed — optional initial positions. If None, random positions are generated.
  • options — algorithm parameters (use DrlOptions::default() or DrlOptions::from_template(...) for presets).
  • weights — optional edge weights (must be positive).

Returns [x, y] positions for each vertex.

§Errors

Returns InvalidArgument if weights contain non-positive values, or if seed length doesn’t match vertex count.

§Examples

use rust_igraph::{Graph, layout_drl, DrlOptions, DrlTemplate};

let mut g = Graph::with_vertices(6);
g.add_edge(0, 1).unwrap();
g.add_edge(1, 2).unwrap();
g.add_edge(2, 3).unwrap();
g.add_edge(3, 4).unwrap();
g.add_edge(4, 5).unwrap();

let options = DrlOptions::from_template(DrlTemplate::Default);
let pos = layout_drl(&g, None, &options, None).unwrap();
assert_eq!(pos.len(), 6);
assert!(pos.iter().all(|p| p[0].is_finite() && p[1].is_finite()));