mod attachments;
mod backward;
mod bounds;
mod derive;
mod intersect;
mod layout;
mod routing;
pub use derive::geometry_to_grid_layout_with_routed;
#[cfg(test)]
pub(crate) use intersect::{NodeFace, classify_face, face_extent, face_fixed_coord};
#[cfg(test)]
pub(crate) use layout::SelfEdgeDrawData;
pub use layout::{GridLayout, GridPos, NodeBounds, SubgraphBounds};
#[cfg(test)]
pub(crate) use routing::route_edge;
pub use routing::{AttachDirection, Point, RoutedEdge, Segment, route_all_edges};
#[cfg(test)]
pub(crate) use routing::{TextPathFamily, route_edge_with_probe};
pub use crate::graph::projection::OverrideSubgraphProjection;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum GridRanker {
#[default]
NetworkSimplex,
LongestPath,
}
#[derive(Debug, Clone)]
pub struct GridLayoutConfig {
pub h_spacing: usize,
pub v_spacing: usize,
pub padding: usize,
pub left_label_margin: usize,
pub right_label_margin: usize,
pub ranker: Option<GridRanker>,
pub node_sep: f64,
pub edge_sep: f64,
pub rank_sep: f64,
pub margin: f64,
pub cluster_rank_sep: f64,
}
impl Default for GridLayoutConfig {
fn default() -> Self {
Self {
h_spacing: 4,
v_spacing: 3,
padding: 1,
left_label_margin: 0,
right_label_margin: 0,
ranker: None,
node_sep: 50.0,
edge_sep: 20.0,
rank_sep: 50.0,
margin: 8.0,
cluster_rank_sep: 25.0,
}
}
}