aboutsummaryrefslogtreecommitdiff
path: root/evc/src/bin/decode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'evc/src/bin/decode.rs')
-rw-r--r--evc/src/bin/decode.rs41
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
}
}