graph_algo_ptas/data_structure/
dot_renderer.rs1use crate::data_structure::graph_dcel::GraphDCEL;
12use crate::data_structure::link_graph::{LinkDart, LinkGraph, LinkVertex};
13use dot::{Edges, GraphWalk, Id, Labeller, Nodes};
14
15impl<'a> GraphWalk<'a, LinkVertex, LinkDart> for LinkGraph {
16 fn nodes(&'a self) -> Nodes<'a, LinkVertex> {
17 self.get_vertexes().collect()
18 }
19
20 fn edges(&'a self) -> Edges<'a, LinkDart> {
21 self.get_darts().collect()
22 }
23
24 fn source(&'a self, edge: &LinkDart) -> LinkVertex {
25 self.dart_target(&self.twin(edge))
26 }
27
28 fn target(&'a self, edge: &LinkDart) -> LinkVertex {
29 self.dart_target(edge)
30 }
31}
32
33impl<'a> Labeller<'a, LinkVertex, LinkDart> for LinkGraph {
34 fn graph_id(&'a self) -> Id<'a> {
35 Id::new("Test").unwrap()
36 }
37
38 fn node_id(&'a self, vertex: &LinkVertex) -> Id<'a> {
39 let x = vertex.get_id() as u32;
40 let name = format!("N{}", x.clone());
41 let id = Id::new(name);
42 id.unwrap()
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use crate::data_structure::link_graph::LinkGraph;
49 use crate::utils::single_face::generate_single_face;
50 use std::borrow::Borrow;
51 use std::fs::File;
52
53 #[test]
54 fn test_two_vertices() {
55 let mut f = File::create("two_vertices.dot").unwrap();
56
57 let mut lg = LinkGraph::new();
58 lg.new_vertex();
59 lg.new_vertex();
60
61 dot::render(lg.borrow(), &mut f).unwrap()
62 }
63
64 #[test]
65 fn circle() {
66 let mut f = File::create("circle.dot").unwrap();
67
68 let cg = generate_single_face(3);
69
70 dot::render(cg.borrow(), &mut f).unwrap()
71 }
72}