#[derive(Debug, Clone, thiserror::Error)]
pub enum RemeshError {
#[error(
"foldover detected at face {face}: normal rotation {angle_rad:.4} rad exceeds threshold {threshold:.4} rad"
)]
Foldover {
face: usize,
angle_rad: f64,
threshold: f64,
},
#[error("edge {edge} is a boundary edge (only one adjacent face)")]
BoundaryEdge { edge: usize },
#[error(
"edge {edge} already satisfies Delaunay criterion (opposite angle sum = {angle_sum:.4} rad)"
)]
AlreadyDelaunay { edge: usize, angle_sum: f64 },
#[error("index out of bounds: {index} >= {len}")]
IndexOutOfBounds { index: usize, len: usize },
#[error("edge {edge} has {count} adjacent faces, need exactly 2")]
NotInteriorEdge { edge: usize, count: usize },
#[error("geodesic computation failed: {reason}")]
GeodesicFailed { reason: String },
#[error("invalid input: {0}")]
InvalidInput(String),
}