conspire 0.7.0

The Rust interface to conspire.
Documentation
use crate::{
    geometry::mesh::Mesh,
    math::{Scalar, Tensor},
};

impl<const D: usize> Mesh<D> {
    pub(crate) fn uniform_remesh(
        self,
        iterations: usize,
        length: Option<Scalar>,
    ) -> Result<Self, &'static str> {
        if iterations == 0 {
            Ok(self)
        } else if self.connectivities().len() != 1 {
            Err("Can only remesh lone blocks for now.")
        } else {
            let (connectivities, mut coordinates) = self.into();
            let mut connectivity = Vec::try_from(connectivities)?;
            let mut target = length;
            super::triangles::remesh(
                &mut connectivity,
                &mut coordinates,
                iterations,
                |_, coordinates, lengths| {
                    let target = *target.get_or_insert_with(|| {
                        lengths.values().sum::<Scalar>() / lengths.len() as Scalar
                    });
                    vec![target; coordinates.len()]
                },
            )?;
            Ok((vec![connectivity.into()], coordinates).into())
        }
    }
}