1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use litequad::color::{Color, BLUE, GREEN, RED, YELLOW};
#[derive(PartialEq, Clone, Copy)]
pub enum Marker {
Circle(f32),
None,
}
#[derive(Clone, Copy)]
pub enum LineType {
Solid,
None,
}
#[derive(Clone, Copy)]
pub struct LineDesc {
pub color: Color,
pub marker: Marker,
pub line_type: LineType,
}
impl Default for LineDesc {
fn default() -> Self {
LineDesc {
color: GREEN,
marker: Marker::None,
line_type: LineType::Solid,
}
}
}
impl From<&str> for LineDesc {
fn from(desc: &str) -> LineDesc {
let mut color = GREEN;
let mut line_type = LineType::None;
let mut marker = Marker::None;
let mut radius = 5.;
for char in desc.chars() {
match char {
'r' => color = RED,
'g' => color = GREEN,
'b' => color = BLUE,
'y' => color = YELLOW,
'c' => color = Color::new(0., 1., 1., 1.),
'o' => marker = Marker::Circle(radius),
'-' => line_type = LineType::Solid,
'1'..='9' => radius = char.to_digit(10).unwrap() as f32,
_ => {}
}
}
if marker == Marker::None {
line_type = LineType::Solid
}
LineDesc {
color,
marker,
line_type,
}
}
}