| 56 | } |
| 57 | |
| 58 | void extract_data(CarveMeshPtr mesh, MatrixFr& vertices, MatrixIr& faces) { |
| 59 | typedef CarveMesh::vertex_t CarveVertex; |
| 60 | const size_t num_vertices = mesh->vertex_storage.size(); |
| 61 | vertices.resize(num_vertices, 3); |
| 62 | for (size_t i=0; i<num_vertices; i++) { |
| 63 | const auto& v = mesh->vertex_storage[i]; |
| 64 | vertices(i,0) = v.v.x; |
| 65 | vertices(i,1) = v.v.y; |
| 66 | vertices(i,2) = v.v.z; |
| 67 | } |
| 68 | |
| 69 | const size_t num_faces = mesh->faceEnd() - mesh->faceBegin(); |
| 70 | faces.resize(num_faces, 3); |
| 71 | for (auto itr=mesh->faceBegin(); itr != mesh->faceEnd(); itr++) { |
| 72 | std::vector<CarveVertex* > vts; |
| 73 | (*itr)->getVertices(vts); |
| 74 | assert(vts.size() == 3); |
| 75 | |
| 76 | // WARNING: |
| 77 | // Here is my guess on how to extract vertex index. |
| 78 | // Carve's documentation is not clear on how to do this. |
| 79 | const size_t fid = itr - mesh->faceBegin(); |
| 80 | faces(fid, 0) = vts[0] - &mesh->vertex_storage[0]; |
| 81 | faces(fid, 1) = vts[1] - &mesh->vertex_storage[0]; |
| 82 | faces(fid, 2) = vts[2] - &mesh->vertex_storage[0]; |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | using namespace CarveEngineHelper; |
| 87 |
no test coverage detected