use crate::line::BezierLineIter;
use geo_nd::Float;
pub struct BezierPointIter<F: Float, const D: usize> {
lines: BezierLineIter<F, D>,
last_point: Option<[F; D]>,
}
impl<F, const D: usize> BezierPointIter<F, D>
where
F: Float,
{
pub fn new(lines: BezierLineIter<F, D>) -> Self {
Self {
lines,
last_point: None,
}
}
}
impl<F, const D: usize> Iterator for BezierPointIter<F, D>
where
F: Float,
{
type Item = [F; D];
fn next(&mut self) -> Option<Self::Item> {
if let Some((p0, p1)) = self.lines.next() {
self.last_point = Some(p1);
Some(p0)
} else {
let p = self.last_point;
self.last_point = None;
p
}
}
}