MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / init_voxel_adjacencies

Method init_voxel_adjacencies

src/Connectivity/MeshConnectivity.cpp:326–393  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

324}
325
326void MeshConnectivity::init_voxel_adjacencies(Mesh* mesh) {
327 if (voxel_adjacencies_computed()) return;
328 if (!vertex_adjacencies_computed())
329 init_vertex_adjacencies(mesh);
330
331 const size_t num_voxels = mesh->get_num_voxels();
332 const size_t vertex_per_face = mesh->get_vertex_per_face();
333 const size_t vertex_per_voxel = mesh->get_vertex_per_voxel();
334
335 std::vector<IndexSet> neighbor_faces(num_voxels);
336 std::vector<IndexSet> neighbor_voxels(num_voxels);
337
338 for (size_t i=0; i<num_voxels; i++) {
339 const VectorI voxel = mesh->get_voxel(i);
340 IndexSet& voxel_neighbors = neighbor_faces[i];
341
342 assert(voxel.size() == vertex_per_voxel);
343 std::map<int, int> face_counter;
344 for (size_t j=0; j<vertex_per_voxel; j++) {
345 const VectorI neighbors = get_vertex_adjacent_faces(voxel[j]);
346 const size_t num_neighbors = neighbors.size();
347 for (size_t k=0; k<num_neighbors; k++) {
348 if (face_counter.find(neighbors[k]) == face_counter.end()) {
349 face_counter[neighbors[k]] = 1;
350 } else {
351 face_counter[neighbors[k]] += 1;
352 }
353 }
354 }
355 for (const auto& entry : face_counter) {
356 if (entry.second == vertex_per_face) {
357 voxel_neighbors.insert(entry.first);
358 }
359 }
360 }
361
362 for (size_t i=0; i<num_voxels; i++) {
363 VectorI voxel = mesh->get_voxel(i);
364 IndexSet& voxel_neighbors = neighbor_voxels[i];
365
366 std::map<int, int> voxel_counter;
367 for (size_t j=0; j<vertex_per_voxel; j++) {
368 VectorI neighbors = get_vertex_adjacent_voxels(voxel[j]);
369 size_t num_neighbors = neighbors.size();
370 for (size_t k=0; k<num_neighbors; k++) {
371 if (voxel_counter.find(neighbors[k]) == voxel_counter.end()) {
372 voxel_counter[neighbors[k]] = 1;
373 } else {
374 voxel_counter[neighbors[k]] += 1;
375 }
376 }
377 }
378 for (const auto& entry : voxel_counter) {
379 if (entry.second == vertex_per_face) {
380 voxel_neighbors.insert(entry.first);
381 }
382 }
383 }

Callers 1

Calls 9

set_array_to_adj_listFunction · 0.85
get_voxelMethod · 0.80
findMethod · 0.80
get_num_voxelsMethod · 0.45
get_vertex_per_faceMethod · 0.45
get_vertex_per_voxelMethod · 0.45
sizeMethod · 0.45
endMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected