use crate::{Clipper, ClipperError, FillRule, Paths, PointScaler};
pub fn xor<P: PointScaler>(
subject: impl Into<Paths<P>>,
clip: impl Into<Paths<P>>,
fill_rule: FillRule,
) -> Result<Paths<P>, ClipperError> {
Clipper::new()
.add_subject(subject)
.add_clip(clip)
.xor(fill_rule)
}
#[cfg(test)]
mod test {
use crate::Centi;
use super::*;
#[test]
fn test_xor() {
let path1 = vec![(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)];
let path2 = vec![(0.5, 0.5), (1.5, 0.5), (1.5, 1.5), (0.5, 1.5)];
let expected_output = vec![
vec![
(1.5, 1.5),
(0.5, 1.5),
(0.5, 1.0),
(1.0, 1.0),
(1.0, 0.5),
(1.5, 0.5),
],
vec![
(1.0, 0.5),
(0.5, 0.5),
(0.5, 1.0),
(0.0, 1.0),
(0.0, 0.0),
(1.0, 0.0),
],
];
let output: Vec<Vec<(f64, f64)>> = xor::<Centi>(path1, path2, FillRule::default())
.unwrap()
.into();
assert_eq!(output, expected_output);
}
}