lj_rust/src/point.rs

70 lines
1.4 KiB
Rust
Raw Normal View History

2023-07-16 18:28:06 +00:00
use ether_dream::protocol::DacPoint;
2023-07-24 15:35:39 +00:00
2023-07-09 20:16:01 +00:00
#[derive(Debug, Clone, Copy, Default, PartialEq)]
2023-06-04 19:31:32 +00:00
pub struct Point {
2023-07-09 20:16:01 +00:00
pub x: f32,
pub y: f32,
pub color: Color,
2023-06-04 19:31:32 +00:00
}
2023-07-09 20:16:01 +00:00
#[derive(Debug, Clone, Copy, Default, PartialEq)]
2023-06-04 19:31:32 +00:00
pub struct Color {
2023-07-09 20:16:01 +00:00
pub r: u8,
pub g: u8,
pub b: u8,
2023-06-04 19:31:32 +00:00
}
2023-07-09 20:16:01 +00:00
impl From<Color> for u32 {
fn from(value: Color) -> Self {
let r = value.r as u32;
let g = value.g as u32;
let b = (value.b) as u32;
(r << 16) + (g << 8) + b
}
}
impl From<(f32, f32, u32)> for Point {
fn from((x, y, color): (f32, f32, u32)) -> Point {
let r = (color >> 16) as u8;
let g = ((color >> 8) & 255) as u8;
let b = (color & 255) as u8;
Point { x, y, color: Color { r, g, b } }
}
2023-06-04 19:31:32 +00:00
}
impl From<Point> for helios_dac::Point {
2023-07-09 20:16:01 +00:00
fn from(pt: Point) -> helios_dac::Point {
let x = pt.x.clamp(0.0, 4095.0) as u16;
let y = pt.y.clamp(0.0, 4095.0) as u16;
helios_dac::Point {
coordinate: (x, y).into(),
color: helios_dac::Color::new(pt.color.r, pt.color.g, pt.color.b),
intensity: 0xFF,
}
2023-06-04 19:31:32 +00:00
}
}
2023-07-16 18:28:06 +00:00
impl From<Point> for DacPoint {
fn from(pt: Point) -> DacPoint {
let control = 0;
let (u1, u2) = (0, 0);
2023-07-24 15:35:39 +00:00
let i = 0;
2023-07-20 19:34:23 +00:00
let x = pt.x.clamp(-32000.0, 32000.0);
let y = pt.y.clamp(-32000.0, 32000.0);
2023-07-24 15:35:39 +00:00
let pt = DacPoint {
2023-07-16 18:28:06 +00:00
control,
x: x as i16,
y: y as i16,
2023-07-16 18:28:06 +00:00
i,
2023-07-20 19:12:34 +00:00
r: (pt.color.r as u16) * 255,
g: (pt.color.g as u16) * 255,
b: (pt.color.b as u16) * 255,
2023-07-16 18:28:06 +00:00
u1,
u2,
2023-07-24 15:35:39 +00:00
};
// debug!("point {:?}", pt);
pt
2023-07-16 18:28:06 +00:00
}
}