blockworx/router/
turtle.rs1use 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}