use crate::{ coords::cms::CMS, data::Radar2d, errors::RenderError, widgets::predefined::color_mapper::BoundaryNorm, }; use chrono::{prelude::*, Duration}; use radarg_plugin_interface::*; use std::sync::Arc; use std::{rc::Rc, sync::Mutex}; use tracing::*; use super::{ element::Element, element_impl::GridElementImpl, predefined::GridFieldRenderer, Dispatcher, }; pub fn ck() { unsafe { debug_assert_eq!(gl::GetError(), gl::NO_ERROR); } } macro_rules! match_in_macro { ($block:ident,$dispatcher:ident,$cms:ident,$(($branch:path,$name:literal, $t:ty, $color:expr)),+) => { { let datetime = Utc.timestamp_opt($block.datetime, 0).unwrap(); match $block.data_type { $( $branch => { let element = Element::create_time_series(Arc::new(Box::new(GridElementImpl::new($color))), $dispatcher, $name.to_string(), $cms); Some(element) }, )+ _ => None } } }; } pub fn data_to_element( block: &Block, dispatcher: Rc, cms: CMS, ) -> Option { use crate::utils::*; use radarg_plugin_interface::PluginResultType; match block.shape { DataShape::Matrix => match_in_macro!( block, dispatcher, cms, ( PluginResultType::DBZ, "DBZ", Radar2d, create_dbz_boundarynorm() ), (PluginResultType::R,"R", Radar2d, create_dbz_boundarynorm()), (PluginResultType::V,"V", Radar2d, create_vel_boundarynorm()), ( PluginResultType::ZDR, "ZDR", Radar2d, create_zdr_boundarynorm() ), ( PluginResultType::PHIDP, "PHIDP", Radar2d, create_phidp_boundarynorm() ), ( PluginResultType::KDP, "KDP", Radar2d, create_kdp_boundarynorm() ), (PluginResultType::CC,"CC", Radar2d, create_cc_boundarynorm()), ( PluginResultType::HCA, "HCA", Radar2d, create_cpc_boundarynorm() ), ( PluginResultType::QPE, "QPE", Radar2d, create_vil_boundarynorm() ), ( PluginResultType::QPF, "QPF", Radar2d, create_vil_boundarynorm() ), ( PluginResultType::VIL, "VIL", Radar2d, create_vil_boundarynorm() ), ( PluginResultType::OHP, "OHP", Radar2d, create_vil_boundarynorm() ), ( PluginResultType::THP, "THP", Radar2d, create_vil_boundarynorm() ), (PluginResultType::ET,"ET", Radar2d, create_et_boundarynorm()), ( PluginResultType::EB, "EB", Radar2d, create_hgt_boundarynorm() ) ), _ => None, } }