radar-g/src/pipeline/utils.rs
2024-03-07 18:08:16 +08:00

125 lines
3.5 KiB
Rust

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<Dispatcher>,
cms: CMS,
) -> Option<Element> {
use crate::utils::*;
use radarg_plugin_interface::PluginResultType;
match block.shape {
DataShape::Matrix => match_in_macro!(
block,
dispatcher,
cms,
(
PluginResultType::DBZ,
"DBZ",
Radar2d<i8>,
create_dbz_boundarynorm()
),
(PluginResultType::R,"R", Radar2d<i8>, create_dbz_boundarynorm()),
(PluginResultType::V,"V", Radar2d<f32>, create_vel_boundarynorm()),
(
PluginResultType::ZDR,
"ZDR",
Radar2d<f32>,
create_zdr_boundarynorm()
),
(
PluginResultType::PHIDP,
"PHIDP",
Radar2d<f32>,
create_phidp_boundarynorm()
),
(
PluginResultType::KDP,
"KDP",
Radar2d<f32>,
create_kdp_boundarynorm()
),
(PluginResultType::CC,"CC", Radar2d<f32>, create_cc_boundarynorm()),
(
PluginResultType::HCA,
"HCA",
Radar2d<i8>,
create_cpc_boundarynorm()
),
(
PluginResultType::QPE,
"QPE",
Radar2d<f32>,
create_vil_boundarynorm()
),
(
PluginResultType::QPF,
"QPF",
Radar2d<f32>,
create_vil_boundarynorm()
),
(
PluginResultType::VIL,
"VIL",
Radar2d<f32>,
create_vil_boundarynorm()
),
(
PluginResultType::OHP,
"OHP",
Radar2d<f32>,
create_vil_boundarynorm()
),
(
PluginResultType::THP,
"THP",
Radar2d<f32>,
create_vil_boundarynorm()
),
(PluginResultType::ET,"ET", Radar2d<f32>, create_et_boundarynorm()),
(
PluginResultType::EB,
"EB",
Radar2d<f32>,
create_hgt_boundarynorm()
)
),
_ => None,
}
}