use clipper2c_sys::{clipper_delete_paths64, clipper_paths64_simplify, clipper_paths64_size};
use crate::{malloc, Paths, PointScaler};
pub fn simplify<P: PointScaler>(
paths: impl Into<Paths<P>>,
epsilon: f64,
is_open: bool,
) -> Paths<P> {
let epsilon = P::scale(epsilon);
unsafe {
let mem = malloc(clipper_paths64_size());
let paths_ptr = paths.into().to_clipperpaths64();
let result_ptr = clipper_paths64_simplify(mem, paths_ptr, epsilon, is_open.into());
clipper_delete_paths64(paths_ptr);
let result = Paths::from_clipperpaths64(result_ptr);
clipper_delete_paths64(result_ptr);
result
}
}
#[cfg(test)]
mod test {
use crate::Centi;
use super::*;
#[test]
fn test_simplify() {
let path = vec![(0.0, 1.0), (0.1, 0.3), (1.0, 0.0), (1.3, 0.0), (2.0, 0.0)];
let expected_output = vec![vec![(0.0, 1.0), (0.1, 0.3), (2.0, 0.0)]];
let output: Vec<Vec<(f64, f64)>> = simplify::<Centi>(path, 0.2, true).into();
assert_eq!(output, expected_output);
}
}