use axiolid_core::{Point3, Scalar, Tolerance, Vec3};
pub trait SurfaceEvaluator<S>: core::fmt::Debug + Send + Sync {
type Error: std::error::Error + Send + Sync + 'static;
fn evaluate(
&self,
surface: &S,
u: Scalar,
v: Scalar,
tolerance: Tolerance,
) -> Result<Point3, Self::Error>;
fn normal(
&self,
surface: &S,
u: Scalar,
v: Scalar,
tolerance: Tolerance,
) -> Result<Vec3, Self::Error>;
}