use halfedge::{Face, HalfEdge, MeshStorage, Vertex};
fn main() {
let mut mesh = MeshStorage::new();
let v0 = mesh.add_vertex(Vertex::new([0.0, 0.0, 0.0]));
let v1 = mesh.add_vertex(Vertex::new([1.0, 0.0, 0.0]));
let v2 = mesh.add_vertex(Vertex::new([0.0, 1.0, 0.0]));
let h0 = mesh.add_halfedge(HalfEdge::new(v1)); let h1 = mesh.add_halfedge(HalfEdge::new(v2)); let h2 = mesh.add_halfedge(HalfEdge::new(v0)); let f = mesh.add_face(Face::new());
for (he, next, prev) in [(h0, h1, h2), (h1, h2, h0), (h2, h0, h1)] {
let h = mesh.get_halfedge_mut(he).unwrap();
h.next = Some(next);
h.prev = Some(prev);
h.face = Some(f);
}
mesh.get_face_mut(f).unwrap().halfedge = Some(h0);
mesh.get_vertex_mut(v0).unwrap().halfedge = Some(h0);
println!(
"网格统计:{} 顶点 / {} 半边 / {} 面",
mesh.vertex_count(),
mesh.halfedge_count(),
mesh.face_count()
);
println!("\n查询 v0:");
println!(" contains_vertex(v0) = {}", mesh.contains_vertex(v0));
println!(" position = {:?}", mesh.get_vertex(v0).unwrap().position);
println!(
" outgoing halfedge = {:?}",
mesh.get_vertex(v0).unwrap().halfedge
);
mesh.get_vertex_mut(v0).unwrap().position = [0.5, 0.5, 0.0];
println!(
"\n修改后 v0 position = {:?}",
mesh.get_vertex(v0).unwrap().position
);
let removed = mesh.remove_vertex(v2).unwrap();
println!("\n删除 v2:position = {:?}", removed.position);
println!(
" contains_vertex(v2) = {} (应为 false)",
mesh.contains_vertex(v2)
);
println!(" get_vertex(v2) = {:?} (应为 None)", mesh.get_vertex(v2));
println!(" vertex_count = {} (应为 2)", mesh.vertex_count());
let v3 = mesh.add_vertex(Vertex::new([2.0, 2.0, 2.0]));
println!(
"\n新插入 v3 = {:?}, v2 仍无效 = {}",
v3,
!mesh.contains_vertex(v2)
);
println!("\n所有顶点句柄:");
for (i, v) in mesh.vertex_ids().enumerate() {
let p = mesh.get_vertex(v).unwrap().position;
println!(" [{}] {:?} -> position = {:?}", i, v, p);
}
}