radar-g/src/pipeline/element_impl.rs

60 lines
1.6 KiB
Rust

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<CMAP, T>
where
T: Num + NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64> + Send + Sync + Debug,
CMAP: ColorMapper<T>,
{
renderer: GridFieldRenderer<CMAP, T>,
}
impl<CMAP, T> GridElementImpl<CMAP, T>
where
T: Num + NumOps + PartialOrd + FromPrimitive + AsPrimitive<f64> + Send + Sync + Debug,
CMAP: ColorMapper<T>,
{
pub fn new(color: CMAP) -> Self {
Self {
renderer: GridFieldRenderer::new(color),
}
}
}
impl<CMAP, T> ElementImpl for GridElementImpl<CMAP, T>
where
T: Num
+ NumOps
+ PartialOrd
+ Copy
+ Clone
+ Debug
+ Send
+ Sync
+ FromPrimitive
+ AsPrimitive<f64>,
CMAP: ColorMapper<T> + 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
}
}