From 9826fac208e5fe6f30e537ddf3f00c1346d695a5 Mon Sep 17 00:00:00 2001 From: Collide <44722470+TD-Sky@users.noreply.github.com> Date: Wed, 21 May 2025 15:39:00 +0800 Subject: [PATCH] impl Drawable for slice (#99) --- src/viz/annotator.rs | 5 ++++- src/viz/drawable/hbb.rs | 2 +- src/viz/drawable/keypoint.rs | 4 ++-- src/viz/drawable/mask.rs | 2 +- src/viz/drawable/mod.rs | 39 ++++++++++++++++++++++++++++++++++++ src/viz/drawable/obb.rs | 2 +- src/viz/drawable/polygon.rs | 2 +- src/viz/drawable/prob.rs | 2 +- 8 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/viz/annotator.rs b/src/viz/annotator.rs index 6b8b045..10e72e1 100644 --- a/src/viz/annotator.rs +++ b/src/viz/annotator.rs @@ -31,7 +31,10 @@ impl Default for Annotator { } impl Annotator { - pub fn annotate(&self, image: &Image, drawable: &T) -> Result { + pub fn annotate(&self, image: &Image, drawable: &T) -> Result + where + T: Drawable + ?Sized, + { let ctx = DrawContext { text_renderer: &self.text_renderer, prob_style: self.prob_style.as_ref(), diff --git a/src/viz/drawable/hbb.rs b/src/viz/drawable/hbb.rs index 6837e59..2a403c7 100644 --- a/src/viz/drawable/hbb.rs +++ b/src/viz/drawable/hbb.rs @@ -4,7 +4,7 @@ use image::{Rgba, RgbaImage}; use crate::{DrawContext, Hbb, Style, TextLoc}; -impl Drawable for Vec { +impl Drawable for [Hbb] { fn draw(&self, ctx: &DrawContext, canvas: &mut RgbaImage) -> Result<()> { self.iter().try_for_each(|x| x.draw(ctx, canvas)) } diff --git a/src/viz/drawable/keypoint.rs b/src/viz/drawable/keypoint.rs index fb63d4c..1f68511 100644 --- a/src/viz/drawable/keypoint.rs +++ b/src/viz/drawable/keypoint.rs @@ -91,7 +91,7 @@ impl Drawable for Keypoint { } } -impl Drawable for Vec { +impl Drawable for [Keypoint] { fn draw(&self, ctx: &DrawContext, canvas: &mut RgbaImage) -> Result<()> { let nk = self.len(); if nk > 0 { @@ -137,7 +137,7 @@ impl Drawable for Vec { } } -impl Drawable for Vec> { +impl Drawable for [Vec] { fn draw(&self, ctx: &DrawContext, canvas: &mut RgbaImage) -> Result<()> { self.iter().try_for_each(|x| x.draw(ctx, canvas)) } diff --git a/src/viz/drawable/mask.rs b/src/viz/drawable/mask.rs index 474c7c5..41b81d6 100644 --- a/src/viz/drawable/mask.rs +++ b/src/viz/drawable/mask.rs @@ -70,7 +70,7 @@ fn draw_masks( Ok(()) } -impl Drawable for Vec { +impl Drawable for [Mask] { fn get_global_style<'a>(&self, ctx: &'a DrawContext) -> Option<&'a Style> { ctx.mask_style } diff --git a/src/viz/drawable/mod.rs b/src/viz/drawable/mod.rs index d75c058..0ad1067 100644 --- a/src/viz/drawable/mod.rs +++ b/src/viz/drawable/mod.rs @@ -86,6 +86,45 @@ impl Drawable for Y { } } +impl Drawable for Vec +where + [T]: Drawable, +{ + fn get_local_style(&self) -> Option<&Style> { + self.as_slice().get_local_style() + } + + fn get_global_style<'a>(&self, ctx: &'a DrawContext) -> Option<&'a Style> { + self.as_slice().get_global_style(ctx) + } + + fn get_id(&self) -> Option { + self.as_slice().get_id() + } + + fn draw_shapes_with_style( + &self, + ctx: &DrawContext, + canvas: &mut image::RgbaImage, + style: &Style, + ) -> anyhow::Result<()> { + self.as_slice().draw_shapes_with_style(ctx, canvas, style) + } + + fn draw_texts_with_style( + &self, + ctx: &DrawContext, + canvas: &mut image::RgbaImage, + style: &Style, + ) -> anyhow::Result<()> { + self.as_slice().draw_texts_with_style(ctx, canvas, style) + } + + fn draw(&self, ctx: &DrawContext, canvas: &mut image::RgbaImage) -> anyhow::Result<()> { + self.as_slice().draw(ctx, canvas) + } +} + // impl Drawable for Vec { // fn draw_shapes(&self, ctx: &DrawContext, canvas: &mut image::RgbaImage) -> anyhow::Result<()> { // self.iter().try_for_each(|x| x.draw_shapes(ctx, canvas)) diff --git a/src/viz/drawable/obb.rs b/src/viz/drawable/obb.rs index ed3247a..9dc21f0 100644 --- a/src/viz/drawable/obb.rs +++ b/src/viz/drawable/obb.rs @@ -4,7 +4,7 @@ use image::{Rgba, RgbaImage}; use crate::{DrawContext, Obb, Style, TextLoc}; -impl Drawable for Vec { +impl Drawable for [Obb] { fn draw(&self, ctx: &DrawContext, canvas: &mut RgbaImage) -> Result<()> { self.iter().try_for_each(|x| x.draw(ctx, canvas)) } diff --git a/src/viz/drawable/polygon.rs b/src/viz/drawable/polygon.rs index 956c67d..f7773ad 100644 --- a/src/viz/drawable/polygon.rs +++ b/src/viz/drawable/polygon.rs @@ -4,7 +4,7 @@ use image::{Rgba, RgbaImage}; use crate::{DrawContext, Polygon, Style, TextLoc}; -impl Drawable for Vec { +impl Drawable for [Polygon] { fn draw(&self, ctx: &DrawContext, canvas: &mut RgbaImage) -> Result<()> { self.iter().try_for_each(|x| x.draw(ctx, canvas)) } diff --git a/src/viz/drawable/prob.rs b/src/viz/drawable/prob.rs index e7fc6bd..14bb759 100644 --- a/src/viz/drawable/prob.rs +++ b/src/viz/drawable/prob.rs @@ -4,7 +4,7 @@ use image::RgbaImage; use crate::{DrawContext, Prob, Style, TextLoc}; -impl Drawable for Vec { +impl Drawable for [Prob] { fn draw_texts_with_style( &self, ctx: &DrawContext,