use crate::mesh::{EdgeBasics, VertexBasics};
use super::MeshType;
pub trait FaceBasics<T: MeshType<Face = Self>>: std::fmt::Debug + Clone + Copy {
fn id(&self) -> T::F;
fn edge(&self, mesh: &T::Mesh) -> T::Edge;
fn set_edge(&mut self, edge: T::E);
fn edge_id(&self) -> T::E;
fn may_be_curved(&self) -> bool;
fn num_edges(&self, mesh: &T::Mesh) -> usize;
fn num_vertices(&self, mesh: &T::Mesh) -> usize;
fn num_triangles(&self, mesh: &T::Mesh) -> usize;
fn payload(&self) -> &T::FP;
fn payload_mut(&mut self) -> &mut T::FP;
fn vertices<'a>(
&'a self,
mesh: &'a T::Mesh,
) -> impl Iterator<Item = T::Vertex> + 'a + Clone + ExactSizeIterator;
fn vertex_ids<'a>(&'a self, mesh: &'a T::Mesh) -> impl Iterator<Item = T::V> + 'a
where
T: 'a,
{
self.vertices(mesh).map(|v| v.id())
}
fn has_holes(&self) -> bool {
return false;
}
fn edges<'a>(&'a self, mesh: &'a T::Mesh) -> impl Iterator<Item = T::Edge>;
fn edge_ids<'a>(&'a self, mesh: &'a T::Mesh) -> impl Iterator<Item = T::E> + 'a
where
T: 'a,
{
self.edges(mesh).map(|e| e.id())
}
}