diff options
Diffstat (limited to 'evc/src/bin/decode.rs')
-rw-r--r-- | evc/src/bin/decode.rs | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/evc/src/bin/decode.rs b/evc/src/bin/decode.rs index 36b1f80..9be1a16 100644 --- a/evc/src/bin/decode.rs +++ b/evc/src/bin/decode.rs @@ -4,9 +4,12 @@ use clap::Parser; use evc::{ block::Block, codec::decode::decode_block, - format::{header::Header, ser::Source}, + format::{ + header::Header, + ser::{map_scalar8, Source}, + }, frame::Frame, - helpers::pixel::Pixel, + helpers::{matrix::Mat2, pixel::Pixel, vector::Vec2}, view::View, }; use log::info; @@ -64,14 +67,32 @@ fn draw_debug(block: &Block, mut target: View<&mut Frame>) { } Block::Reference { translation } => { target.draw_box(Pixel::BLUE); - target - .frame - .draw_line(target.center(), target.center() + *translation, Pixel::RED) + target.frame.draw_line( + target.center().into(), + (target.center() + *translation).into(), + Pixel::RED, + ) + } + Block::AdvancedReference(r) => { + let mat = Mat2 { + a: map_scalar8(r.transform.a), + b: map_scalar8(r.transform.b), + c: map_scalar8(r.transform.c), + d: map_scalar8(r.transform.d), + }; + let translation = Vec2 { + x: map_scalar8(r.translation.x), + y: map_scalar8(r.translation.y), + }; + let tl = mat.transform(target.offset.into()) + translation; + let tr = mat.transform((target.offset + target.size.x_only()).into()) + translation; + let bl = mat.transform((target.offset + target.size.y_only()).into()) + translation; + let br = mat.transform((target.offset + target.size).into()) + translation; + target.frame.draw_line(tl, tr, Pixel::MAGENTA); + target.frame.draw_line(tr, br, Pixel::MAGENTA); + target.frame.draw_line(br, bl, Pixel::MAGENTA); + target.frame.draw_line(bl, tl, Pixel::MAGENTA); + target.draw_box(Pixel::CYAN); } - Block::AdvancedReference { - translation: _, - transform: _, - value_scale: _, - } => (), // TODO } } |