use super::predefined::GridFieldRenderer; use super::renders::DataRenderer; use crate::data::Radar2d; use crate::pipeline::element::{ElementImpl, Target}; use crate::pipeline::offscreen_renderer::CanvasWrapper; use crate::widgets::predefined::color_mapper::ColorMapper; use crate::widgets::{LayerImpl}; use num_traits::{AsPrimitive, FromPrimitive, Num, NumOps}; use std::any::Any; use std::fmt::Debug; use radarg_plugin_interface::PluginResult; #[derive(Debug)] pub struct GridElementImpl where T: Num + NumOps + PartialOrd + FromPrimitive + AsPrimitive + Send + Sync + Debug, CMAP: ColorMapper, { renderer: GridFieldRenderer, } impl GridElementImpl where T: Num + NumOps + PartialOrd + FromPrimitive + AsPrimitive + Send + Sync + Debug, CMAP: ColorMapper, { pub fn new(color: CMAP) -> Self { Self { renderer: GridFieldRenderer::new(color), } } } impl ElementImpl for GridElementImpl where T: Num + NumOps + PartialOrd + Copy + Clone + Debug + Send + Sync + FromPrimitive + AsPrimitive, CMAP: ColorMapper + Debug + 'static, { fn render( &self, data: &PluginResult, canvas: &mut CanvasWrapper, cms: &mut crate::coords::cms::CMS, ) -> crate::pipeline::element::Target { let first_block = data.blocks.first().unwrap(); let data = first_block.clone().into(); let result = self.renderer.render(canvas, cms, &data, (3000.0, 3000.0)); result } }