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); } 您也可以自己动手完成它