Skip to main content

blockworx_router/
turtle.rs

1use blockworx_geom::Pos2;
2use blockworx_geom::WorldPx;
3
4#[derive(Debug, Clone, Default)]
5struct DrawState {
6    pos: Pos2,
7}
8
9#[derive(Debug, Clone, Copy)]
10pub enum Mark {
11    Line { from: Pos2, to: Pos2 },
12    Circle { center: Pos2, radius: WorldPx },
13    Label { value: f32, pos: Pos2 },
14}
15
16#[derive(Debug, Clone, Default)]
17pub struct Turtle {
18    marks: Vec<Mark>,
19    state: DrawState,
20}
21
22impl Turtle {
23    pub fn line_to(&mut self, pos: Pos2) {
24        self.marks.push(Mark::Line {
25            from: self.state.pos,
26            to: pos,
27        });
28        self.state.pos = pos;
29    }
30    pub fn move_to(&mut self, pos: Pos2) {
31        self.state.pos = pos;
32    }
33    pub fn label(&mut self, pos: Pos2, value: f32) {
34        self.marks.push(Mark::Label { pos, value });
35    }
36    pub fn circle(&mut self, radius: WorldPx) {
37        self.marks.push(Mark::Circle {
38            center: self.state.pos,
39            radius,
40        });
41    }
42    pub fn compile(self) -> Vec<Mark> {
43        self.marks
44    }
45}