use super::BooleanClippingProcessor;
use crate::{ClippingProcessor, Mesh};
impl BooleanClippingProcessor {
pub(super) fn build_cutter_union(&self, clipper: &ClippingProcessor, prisms: &[Mesh]) -> Option<Mesh> {
if prisms.is_empty() {
return None;
}
if prisms.len() == 1 {
return Some(prisms[0].clone());
}
{
let refs: Vec<&Mesh> = prisms.iter().collect();
let u = ClippingProcessor::consolidate_coplanar(
crate::kernel::mesh_bridge::union_many_preserving_coordinates(&refs),
);
if !u.is_empty() {
return Some(u);
}
}
match clipper.union_meshes(prisms) {
Ok(m) if !m.is_empty() => Some(m),
_ => None,
}
}
}