2017-10-18 7 views
0

J'essaye de remplir ma propre structure avec les données récupérées d'un CGAL :: Surface_mesh.CGAL: Récupère les données du maillage surfacique

Vous pouvez ajouter un visage à un maillage de surface par ..

CGAL::SM_Face_index face = SM_Surface_Mesh.add_face(SM_Vertex_Index, SM_Vertex_Index, SM_Vertex_Index); 

.. mais comment peut-on récupérer ce visage étant donné la SM_Face_Index? J'ai essayé de passer au crible la documentation mais en vain.

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? 
} 

Répondre

0

La structure de données Surface_mesh peut représenter plus que seulement des maillages triangulaires. Cela signifie que vous pourriez avoir plus de 3 sommets par visage. Une fois que vous obtenez un visage, vous pouvez naviguer sur ses bords et obtenir les sommets source et cible.

Par exemple, vous pouvez faire: 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); } Vous pouvez aussi le faire à la main: 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)