1const TENSION: (f32, f32, f32) = (212., 0., 0.);
5
6const COMPRESSION: (f32, f32, f32) = (24., 106., 237.);
8
9const ZEROLOAD: (f32, f32, f32) = (194., 194., 194.);
11
12#[derive(Clone, Copy, Debug)]
13pub struct PlottableElement {
15 pub x1: f32,
16 pub y1: f32,
17 pub x2: f32,
18 pub y2: f32,
19 pub stress: f32,
20 pub thickness: f32,
21}
22
23impl PlottableElement {
24 pub fn zero() -> Self {
26 Self {
27 x1: 0.0,
28 y1: 0.0,
29 x2: 0.0,
30 y2: 0.0,
31 stress: 0.0,
32 thickness: 0.0,
33 }
34 }
35
36 pub fn rgba(&self) -> (u8, u8, u8, u8) {
38 let s = self.stress.abs();
39 if self.stress >= 0.0 {
40 let r = (TENSION.0 - ZEROLOAD.0) * s + ZEROLOAD.0;
42 let g = (TENSION.1 - ZEROLOAD.1) * s + ZEROLOAD.1;
43 let b = (TENSION.2 - ZEROLOAD.2) * s + ZEROLOAD.2;
44 let a = 255.0 - 255.0 * (-100.0 * s).exp();
45
46 (r as u8, g as u8, b as u8, a as u8)
47 } else {
48 let r = (COMPRESSION.0 - ZEROLOAD.0) * s + ZEROLOAD.0;
50 let g = (COMPRESSION.1 - ZEROLOAD.1) * s + ZEROLOAD.1;
51 let b = (COMPRESSION.2 - ZEROLOAD.2) * s + ZEROLOAD.2;
52 let a = 255.0 - 255.0 * (-100.0 * s).exp();
53
54 (r as u8, g as u8, b as u8, a as u8)
55 }
56 }
57}