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

Method init_face_adjacencies

src/Connectivity/MeshConnectivity.cpp:256–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

254}
255
256void MeshConnectivity::init_face_adjacencies(Mesh* mesh) {
257 if (face_adjacencies_computed()) return;
258 if (!vertex_adjacencies_computed())
259 init_vertex_adjacencies(mesh);
260
261 const size_t num_faces = mesh->get_num_faces();
262 const size_t vertex_per_face = mesh->get_vertex_per_face();
263
264 std::vector<IndexSet> neighbor_faces(num_faces);
265 std::vector<IndexSet> neighbor_voxels(num_faces);
266
267 for (size_t i=0; i<num_faces; i++) {
268 VectorI face = mesh->get_face(i);
269 IndexSet& face_neighbors = neighbor_faces[i];
270
271 assert(face.size() == vertex_per_face);
272 std::map<int, int> face_counter;
273 for (size_t j=0; j<vertex_per_face; j++) {
274 VectorI neighbors = get_vertex_adjacent_faces(face[j]);
275 size_t num_neighbors = neighbors.size();
276 for (size_t k=0; k<num_neighbors; k++) {
277 if (face_counter.find(neighbors[k]) == face_counter.end()) {
278 face_counter[neighbors[k]] = 1;
279 } else {
280 face_counter[neighbors[k]] += 1;
281 }
282 }
283 }
284 for (std::map<int, int>::const_iterator itr = face_counter.begin();
285 itr != face_counter.end(); itr++) {
286 if (itr->second == 2) {
287 face_neighbors.insert(itr->first);
288 }
289 }
290 }
291
292 for (size_t i=0; i<num_faces; i++) {
293 VectorI face = mesh->get_face(i);
294 IndexSet& face_neighbors = neighbor_voxels[i];
295
296 std::map<int, int> voxel_counter;
297 for (size_t j=0; j<vertex_per_face; j++) {
298 VectorI neighbors = get_vertex_adjacent_voxels(face[j]);
299 size_t num_neighbors = neighbors.size();
300 for (size_t k=0; k<num_neighbors; k++) {
301 if (voxel_counter.find(neighbors[k]) == voxel_counter.end()) {
302 voxel_counter[neighbors[k]] = 1;
303 } else {
304 voxel_counter[neighbors[k]] += 1;
305 }
306 }
307 }
308 for (std::map<int, int>::const_iterator itr = voxel_counter.begin();
309 itr != voxel_counter.end(); itr++) {
310 if (itr->second == 3) {
311 face_neighbors.insert(itr->first);
312 }
313 }

Callers 1

Calls 9

set_array_to_adj_listFunction · 0.85
get_faceMethod · 0.80
findMethod · 0.80
get_num_facesMethod · 0.45
get_vertex_per_faceMethod · 0.45
sizeMethod · 0.45
endMethod · 0.45
beginMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected