diff --git a/src/bin/render_lines_gui.rs b/src/bin/render_lines_gui.rs index cdd8a64..ab91ba7 100644 --- a/src/bin/render_lines_gui.rs +++ b/src/bin/render_lines_gui.rs @@ -4,7 +4,7 @@ use bevy::math::Mat3; use bevy_nannou::prelude::DARK_GRAY; -use nannou::lyon::geom::euclid::Transform2D; +// use nannou::lyon::geom::euclid::Transform2D; use nannou::{geom::Rect, math::map_range as nannou_map_range}; use nannou::prelude::*; use nannou_egui::{self, egui, Egui}; @@ -12,6 +12,7 @@ use nannou_laser::DacId; use nannou_laser::{self as laser, util::map_range}; use serde_json::Result; use serde::{Serialize,Deserialize}; +use trap_rust::trap::laser::TMP_DESK_CLUBMAX; use trap_rust::trap::tracks::CoordinateSpace; use trap_rust::trap::{laser::{apply_homography_matrix, python_cv_h_into_mat3, LaserModel, TMP_PYTHON_LASER_H, DacConfig}, tracks::{LaserPoints, RenderableLines}}; use zmq::Socket; @@ -44,6 +45,8 @@ struct Model { // dimming_factor: f32, lost_alpha: f32, connected: bool, + // canvas_transform: Translation2D, + // dragging: bool, } struct LaserSettings { @@ -63,12 +66,12 @@ impl Default for LaserSettings { use laser::stream; use laser::stream::frame::InterpolationConfig; LaserSettings { - point_hz: 8000, //stream::DEFAULT_POINT_HZ, + point_hz: 30000, //stream::DEFAULT_POINT_HZ, latency_points: stream::points_per_frame( stream::DEFAULT_POINT_HZ, stream::DEFAULT_FRAME_HZ, - ), - frame_hz: 55, //stream::DEFAULT_FRAME_HZ, + ) * 4, + frame_hz: 35, //stream::DEFAULT_FRAME_HZ, enable_optimisations: true, distance_per_point: InterpolationConfig::DEFAULT_DISTANCE_PER_POINT, blank_delay_points: InterpolationConfig::DEFAULT_BLANK_DELAY_POINTS, @@ -181,6 +184,22 @@ fn get_dac_configs() -> DacConfigMap{ homography: python_cv_h_into_mat3(TMP_PYTHON_LASER_H) } ); + dac_configs.insert( + DacId::EtherDream { + mac_address: [ + 122, + 39, + 223, + 73, + 5, + 227, + ], + }, + DacConfig{ + name: "ED - 192.168.8.101".into(), + homography: python_cv_h_into_mat3(TMP_DESK_CLUBMAX) + } + ); dac_configs } @@ -199,6 +218,7 @@ fn model(app: &App) -> Model { .new_window() .size(1024, 768) // .key_pressed(key_pressed) + // .mouse_wheel(canvas_zoom) .view(view_line_canvas) .build() .unwrap(); @@ -277,7 +297,8 @@ fn model(app: &App) -> Model { last_update: Instant::now(), lost_alpha: 1., connected: true, - per_laser_config: get_dac_configs() + per_laser_config: get_dac_configs(), + // canvas_transform: Transform2D // dimming_factor: 1., } } @@ -326,7 +347,7 @@ fn laser_frame_producer(model: &mut LaserModel, frame: &mut laser::Frame){ const LASER_MIN: f32 = -1.0; const LASER_MAX: f32 = 1.0; if position[0] < LASER_MIN || position[0] > LASER_MAX || position[1] < LASER_MIN || position[1] > LASER_MAX{ - // TODO apply previous point, as blanked (or formally, lerp to edge) + // TODO: apply previous point, as blanked (or formally, lerp to edge) continue; } @@ -345,6 +366,7 @@ fn laser_frame_producer(model: &mut LaserModel, frame: &mut laser::Frame){ new_points.push(new_point); } + // dbg!(&new_points); if new_points.len() < pointno { println!("Cropped Points {} (was: {})", new_points.len(), pointno); @@ -580,7 +602,7 @@ fn view_line_canvas(app: &App, model: &Model, frame: Frame) { let scale = 25.; let translate_x = -300.; - let translate_y = -100.; + let translate_y = 100.; @@ -685,3 +707,16 @@ fn style() -> egui::Style { style.visuals.widgets.noninteractive.fg_stroke.color = egui::Color32::WHITE; style } + +fn mouse_moved(_app: &App, _model: &mut Model, _pos: Point2) { +} + +fn mouse_pressed(_app: &App, _model: &mut Model, _button: MouseButton) { + // _model.dragging +} + +fn mouse_released(_app: &App, _model: &mut Model, _button: MouseButton) {} + +fn mouse_wheel(_app: &App, _model: &mut Model, _dt: MouseScrollDelta, _phase: TouchPhase) { + // canvas zoom +} diff --git a/src/trap/laser.rs b/src/trap/laser.rs index 97c6760..3926f12 100644 --- a/src/trap/laser.rs +++ b/src/trap/laser.rs @@ -4,6 +4,7 @@ use std::time::Instant; use serde::{Deserialize, Serialize}; use super::tracks::{LaserPoints, RenderableLines}; +// homography for laserworld in studio pub const TMP_PYTHON_LASER_H: [[f32;3];3] = [[ 2.47442963e+02, -7.01714050e+01, -9.71749119e+01], [ 1.02328119e+01, 1.47185254e+02, 1.96295638e+02], [-1.20921986e-03, -3.32735973e-02, 1.00000000e+00]]; @@ -12,6 +13,10 @@ pub const TMP_PYTHON_LASER_H_FOR_NANNOU: [[f32;3]; 3] = [[ 2.47442963e+02/0xFFF [ 1.02328119e+01, 1.47185254e+02/0xFFF as f32, 1.96295638e+02], [-1.20921986e-03, -3.32735973e-02, 1.00000000e+00]]; +// pub const TMP_DESK_CLUBMAX: [[f32; 3];3] = [[0.003018943396859696, -0.002188214018866917, 4.477472619274084], [0.0006859845340564413, -0.007161248327764752, 18.904283109325856], [2.691266191666664e-05, -0.0002590919318146652, 1.0]]; +pub const TMP_DESK_CLUBMAX: [[f32; 3];3] = [[112.4994944830643, -51.10450906207176, 462.38070124241983], [8.808883296848508, -144.0698004299043, 2684.09476106297], [-0.0007453502703082056, -0.035951964534732414, 1.0]]; + + pub const fn python_cv_h_into_mat3(m: [[f32;3]; 3]) -> Mat3{ Mat3::from_cols( Vec3::new(m[0][0], m[1][0], m[2][0]), @@ -77,11 +82,12 @@ pub struct DacConfig{ } const LASER_H: Mat3 = python_cv_h_into_mat3(TMP_PYTHON_LASER_H); +const LASER_H_CM: Mat3 = python_cv_h_into_mat3(TMP_DESK_CLUBMAX); impl Default for DacConfig{ fn default() -> DacConfig{ //DacConfig { name: "Unknown".into(), homography: Mat3::IDENTITY } - DacConfig { name: "Unknown".into(), homography: LASER_H } + DacConfig { name: "Unknown".into(), homography: LASER_H_CM } } }