2017-10-18 11 views
0

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

답변

0

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); } 또한 손으로 작업을 수행 할 수 있습니다