CGAL:从表面网格获取面部数据
问题描述:
我想用自CGAL :: Surface_mesh检索的数据填充自己的结构。CGAL:从表面网格获取面部数据
您可以通过脸部添加到表面网格..
CGAL::SM_Face_index face = SM_Surface_Mesh.add_face(SM_Vertex_Index, SM_Vertex_Index, SM_Vertex_Index);
..但一个人如何检索给出的SM_Face_Index那张脸?我试过筛选文档,但无济于事。
InteropMesh * outputMesh = new InteropMesh();
uint32_t num = mesh1.number_of_vertices();
outputMesh->vertexCount = num;
outputMesh->vertices = new InteropVector3[num];
for (Mesh::Vertex_index vd : mesh1.vertices())
{
uint32_t index = vd; //via size_t
Point data = mesh1.point(vd);
outputMesh->vertices[index].x = (float)data.x();
outputMesh->vertices[index].y = (float)data.y();
outputMesh->vertices[index].z = (float)data.z();
}
outputMesh->indices = new uint32_t[mesh1.number_of_faces() * 3];
for (CGAL::SM_Face_index fd : mesh1.faces())
{
//? How do I get the three vertex indices?
}
答
Surface_mesh
数据结构可以表示不止三角形网格。这意味着你可能每面有3个以上的顶点。 一旦你得到一张脸,你可以浏览其边界边缘,并获得源和目标顶点。
例如,你可以这样做: Surface_mesh::Halfedge_index hstart = sm.halfedge(fi), hi=hstart; do{ Surface_mesh::Vertex_index vi = target(hi, sm); hi=sm.next(hi); } while(hi!=hstart)
Surface_mesh::Halfedge_index hf = sm.halfedge(fi); for(Surface_mesh::Halfedge_index hi : halfedges_around_face(hf, sm)) { Surface_mesh::Vertex_index vi = target(hi, sm); }
您也可以自己动手完成它