use argmin::core::ArgminFloat;
use nalgebra::Const;
use crate::{
curve::NurbsCurve, misc::FloatingPoint, prelude::CurveIntersectionSolverOptions,
region::CompoundCurve,
};
use super::Contains;
impl<T: FloatingPoint + ArgminFloat> Contains<CompoundCurve<T, Const<3>>>
for NurbsCurve<T, Const<3>>
{
type Option = Option<CurveIntersectionSolverOptions<T>>;
fn contains(
&self,
other: &CompoundCurve<T, Const<3>>,
option: Self::Option,
) -> anyhow::Result<bool> {
anyhow::ensure!(self.is_closed(), "Curve must be closed");
let all = other
.spans()
.iter()
.map(|span| self.contains(span.curve(), option.clone()))
.collect::<anyhow::Result<Vec<_>>>()?;
Ok(all.iter().all(|it| *it))
}
}