125 lines
3.5 KiB
Rust
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,
|
|
}
|
|
}
|