use halfedge::validate::check_topology;
use halfedge::{build_icosphere, collapse_edge, flip_edge, split_edge, validate_mesh};
fn main() {
let mut mesh = build_icosphere(0);
println!(
"初始 icosphere(0):{} 顶点 / {} 面 / {} 半边",
mesh.vertex_count(),
mesh.face_count(),
mesh.halfedge_count()
);
let he = mesh
.halfedge_ids()
.find(|h| {
mesh.get_halfedge(*h)
.map(|h| h.face.is_some())
.unwrap_or(false)
})
.unwrap();
let v_count_before = mesh.vertex_count();
let f_count_before = mesh.face_count();
let new_v = split_edge(&mut mesh, he).expect("split 应成功");
println!("\n[split_edge] 在中点插入新顶点 {:?}", new_v);
println!(" 顶点 {} → {}", v_count_before, mesh.vertex_count());
println!(" 面 {} → {}", f_count_before, mesh.face_count());
println!(" validate_mesh: {:?}", validate_mesh(&mesh));
println!(
" check_topology: {}",
if check_topology(&mesh).is_ok() {
"OK"
} else {
"FAIL"
}
);
let mut mesh = build_icosphere(0);
let he = mesh
.halfedge_ids()
.find(|h| {
mesh.get_halfedge(*h)
.map(|h| h.face.is_some())
.unwrap_or(false)
})
.unwrap();
println!("\n[flip_edge] 翻转内部边 {:?}", he);
flip_edge(&mut mesh, he).expect("flip 应成功");
println!(
" 顶点 / 面 / 半边数不变:{} / {} / {}",
mesh.vertex_count(),
mesh.face_count(),
mesh.halfedge_count()
);
println!(" validate_mesh: {:?}", validate_mesh(&mesh));
println!(
" check_topology: {}",
if check_topology(&mesh).is_ok() {
"OK"
} else {
"FAIL"
}
);
let mut mesh = build_icosphere(0);
let he = mesh
.halfedge_ids()
.find(|h| {
mesh.get_halfedge(*h)
.map(|h| h.face.is_some())
.unwrap_or(false)
})
.unwrap();
let v_before = mesh.vertex_count();
let f_before = mesh.face_count();
let he_before = mesh.halfedge_count();
let new_v = collapse_edge(&mut mesh, he).expect("collapse 应成功");
println!("\n[collapse_edge] 折叠边,合并为新顶点 {:?}", new_v);
println!(" 顶点 {} → {}", v_before, mesh.vertex_count());
println!(" 面 {} → {}", f_before, mesh.face_count());
println!(" 半边 {} → {}", he_before, mesh.halfedge_count());
println!(" validate_mesh: {:?}", validate_mesh(&mesh));
println!(
" check_topology: {}",
if check_topology(&mesh).is_ok() {
"OK"
} else {
"FAIL"
}
);
let vertices = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]];
let faces = [[0, 1, 2]];
let mut mesh = halfedge::build_mesh_from_vertices_and_faces(&vertices, &faces).unwrap();
let boundary_he = mesh
.halfedge_ids()
.find(|h| {
mesh.get_halfedge(*h)
.map(|h| h.face.is_some())
.unwrap_or(false)
})
.unwrap();
let result = flip_edge(&mut mesh, boundary_he);
println!(
"\n错误处理:翻转边界边 → {:?}",
result.err().map(|e| e.to_string())
);
}