pub mod curve_morph;
pub mod point_morph;
#[cfg(test)]
mod tests;
use nalgebra::{allocator::Allocator, DefaultAllocator, DimName, DimNameDiff, DimNameSub, U1};
use crate::{misc::FloatingPoint, surface::nurbs_surface::NurbsSurface};
pub trait Morph<T, D>
where
T: FloatingPoint,
D: DimName,
DefaultAllocator: Allocator<D>,
D: DimNameSub<U1>,
DefaultAllocator: Allocator<DimNameDiff<D, U1>>,
{
type Option;
type Output;
fn morph(
&self,
reference_surface: &NurbsSurface<T, D>,
target_surface: &NurbsSurface<T, D>,
option: Self::Option,
) -> anyhow::Result<Self::Output>;
}