mod basics;
mod face3d;
mod payload;
pub use basics::*;
pub use face3d::*;
pub use payload::*;
use super::{EuclideanMeshType, MeshType, VertexBasics};
use crate::math::VectorIteratorExt;
pub trait Face: FaceBasics<Self::T> {
type T: MeshType<Face = Self>;
fn centroid<const D: usize>(
&self,
mesh: &<Self::T as MeshType>::Mesh,
) -> <Self::T as EuclideanMeshType<D>>::Vec
where
Self::T: EuclideanMeshType<D>,
{
self.vertices(mesh).map(|v| v.pos()).stable_mean()
}
fn triangle_touches_boundary(
&self,
mesh: &<Self::T as MeshType>::Mesh,
v0: <Self::T as MeshType>::V,
v1: <Self::T as MeshType>::V,
v2: <Self::T as MeshType>::V,
) -> Option<bool>;
}