conspire 0.7.7

The Rust interface to conspire.
Documentation
use crate::{
    geometry::mesh::{
        Mesh,
        differential::sizing::{Creases, Unresolved, sizing_field},
    },
    math::{Quantity, Scalar},
    units::Length,
};

impl Mesh<3> {
    pub(crate) fn adaptive_remesh(
        self,
        iterations: usize,
        tolerance: Quantity<Length>,
        minimum: Quantity<Length>,
        maximum: Quantity<Length>,
        gradation: 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)?;
            super::triangles::remesh(
                &mut connectivity,
                &mut coordinates,
                iterations,
                |connectivity, coordinates, _| {
                    sizing_field(
                        connectivity,
                        coordinates,
                        tolerance,
                        minimum,
                        maximum,
                        gradation,
                        Unresolved::Minimum,
                        Creases::Included,
                    )
                },
            )?;
            Ok((vec![connectivity.into()], coordinates).into())
        }
    }
}