use super::path::*;
use super::super::super::geo::*;
use itertools::*;
pub fn points_are_clockwise<Point: Coordinate+Coordinate2D, PointIter: Iterator<Item=Point>>(mut points: PointIter) -> bool {
let mut total = 0.0;
let first_point = points.next();
if let Some(first_point) = first_point {
let points = vec![first_point].into_iter().chain(points).chain(vec![first_point].into_iter());
for (start, end) in points.tuple_windows() {
total += (end.x()-start.x()) * (end.y()+start.y());
}
}
total >= 0.0
}
pub trait PathWithIsClockwise {
fn is_clockwise(&self) -> bool;
}
impl<P: BezierPath> PathWithIsClockwise for P where P::Point: Coordinate+Coordinate2D {
#[inline]
fn is_clockwise(&self) -> bool {
points_are_clockwise(self.points().map(|(_cp1, _cp2, p)| p))
}
}