#[derive(Debug, Clone, Default)]
pub struct RemeshLog {
pub splits: Vec<EdgeSplit>,
pub collapses: Vec<EdgeCollapse>,
pub flips: Vec<EdgeFlip>,
pub shifts: Vec<VertexShift>,
}
impl RemeshLog {
pub fn new() -> Self {
Self::default()
}
pub fn total_mutations(&self) -> usize {
self.splits.len() + self.collapses.len() + self.flips.len() + self.shifts.len()
}
pub fn topology_changed(&self) -> bool {
!self.splits.is_empty() || !self.collapses.is_empty() || !self.flips.is_empty()
}
pub fn merge(&mut self, other: RemeshLog) {
self.splits.extend(other.splits);
self.collapses.extend(other.collapses);
self.flips.extend(other.flips);
self.shifts.extend(other.shifts);
}
}
#[derive(Debug, Clone)]
pub struct EdgeSplit {
pub old_edge: usize,
pub v_a: usize,
pub v_b: usize,
pub new_vertex: usize,
pub new_edges: Vec<usize>,
}
#[derive(Debug, Clone)]
pub struct EdgeCollapse {
pub old_edge: usize,
pub surviving_vertex: usize,
pub removed_vertex: usize,
pub removed_faces: Vec<usize>,
}
#[derive(Debug, Clone)]
pub struct EdgeFlip {
pub old_edge: usize,
pub new_edge: [usize; 2],
pub affected_faces: [usize; 2],
}
#[derive(Debug, Clone)]
pub struct VertexShift {
pub vertex: usize,
pub old_pos_tangent: Vec<f64>,
}