use std::fmt::Debug;
use std::fmt::Display;
use std::ops::AddAssign;
use approx::AbsDiffEq;
use float_next_after::NextAfter;
use geo::line_string;
use geo::CoordFloat;
use geo::Geometry;
use geo::HasKernel;
use geo::MultiLineString;
use num_traits::AsPrimitive;
use num_traits::Bounded;
use num_traits::FloatConst;
use num_traits::FromPrimitive;
use num_traits::Signed;
use d3_geo_rs::clip::circle::ClipCircleC;
use d3_geo_rs::clip::circle::ClipCircleU;
use d3_geo_rs::projection::builder::template::NoPCNU;
use d3_geo_rs::projection::builder::template::ResampleNoPCNC;
use d3_geo_rs::projection::builder::template::ResampleNoPCNU;
use d3_geo_rs::projection::stereographic::Stereographic;
use d3_geo_rs::stream::Stream;
use super::Voronoi;
impl<'a, DRAIN, T>
Voronoi<
'a,
ClipCircleC<ResampleNoPCNC<DRAIN, Stereographic<DRAIN, T>, T>, T>,
ClipCircleU<ResampleNoPCNC<DRAIN, Stereographic<DRAIN, T>, T>, T>,
DRAIN,
NoPCNU,
Stereographic<DRAIN, T>,
ResampleNoPCNC<DRAIN, Stereographic<DRAIN, T>, T>,
ResampleNoPCNU<Stereographic<DRAIN, T>, T>,
T,
>
where
DRAIN: Clone + Debug + Stream<EP = DRAIN, T = T> + Default,
T: AbsDiffEq<Epsilon = T>
+ AddAssign
+ AsPrimitive<T>
+ Bounded
+ CoordFloat
+ Display
+ Default
+ FloatConst
+ FromPrimitive
+ HasKernel
+ Signed
+ NextAfter,
{
pub fn mesh(mut self, data: Option<Geometry<T>>) -> Option<MultiLineString<T>> {
if let Some(data) = data {
match Self::new(Some(data)) {
Ok(s) => self = s,
Err(_) => return None,
}
}
self.delaunay.as_ref().map(|delaunay_return| {
delaunay_return
.edges
.iter()
.map(|e| line_string![(self.points)[e[0]], (self.points)[e[1]]])
.collect()
})
}
}