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

Method init_vertex_adjacencies

src/Connectivity/MeshConnectivity.cpp:113–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111}
112
113void MeshConnectivity::init_vertex_adjacencies(Mesh* mesh) {
114 if (vertex_adjacencies_computed()) return;
115
116 const size_t num_vertices = mesh->get_num_vertices();
117 const size_t num_faces = mesh->get_num_faces();
118 const size_t num_voxels = mesh->get_num_voxels();
119 const size_t vertex_per_face = mesh->get_vertex_per_face();
120 const size_t vertex_per_voxel = mesh->get_vertex_per_voxel();
121
122 std::vector<IndexSet> neighbor_vertices(num_vertices);
123 std::vector<IndexSet> neighbor_faces(num_vertices);
124 std::vector<IndexSet> neighbor_voxels(num_vertices);
125
126
127 if (vertex_per_face == 3) {
128 for (size_t i=0; i<num_faces; i++) {
129 VectorI face = mesh->get_face(i);
130 neighbor_vertices[face[0]].insert(face[1]);
131 neighbor_vertices[face[0]].insert(face[2]);
132 neighbor_vertices[face[1]].insert(face[0]);
133 neighbor_vertices[face[1]].insert(face[2]);
134 neighbor_vertices[face[2]].insert(face[0]);
135 neighbor_vertices[face[2]].insert(face[1]);
136
137 neighbor_faces[face[0]].insert(i);
138 neighbor_faces[face[1]].insert(i);
139 neighbor_faces[face[2]].insert(i);
140 }
141 } else if (vertex_per_face == 4) {
142 for (size_t i=0; i<num_faces; i++) {
143 VectorI face = mesh->get_face(i);
144 neighbor_vertices[face[0]].insert(face[1]);
145 neighbor_vertices[face[0]].insert(face[3]);
146 neighbor_vertices[face[1]].insert(face[0]);
147 neighbor_vertices[face[1]].insert(face[2]);
148 neighbor_vertices[face[2]].insert(face[1]);
149 neighbor_vertices[face[2]].insert(face[3]);
150 neighbor_vertices[face[3]].insert(face[0]);
151 neighbor_vertices[face[3]].insert(face[2]);
152
153 neighbor_faces[face[0]].insert(i);
154 neighbor_faces[face[1]].insert(i);
155 neighbor_faces[face[2]].insert(i);
156 neighbor_faces[face[3]].insert(i);
157 }
158 } else {
159 std::stringstream err_msg;
160 err_msg << "Unsupported face with " << vertex_per_face
161 << " vertices per face";
162 throw RuntimeError(err_msg.str());
163 }
164
165 if (vertex_per_voxel == 4) {
166 for (size_t i=0; i<num_voxels; i++) {
167 VectorI voxel = mesh->get_voxel(i);
168 neighbor_vertices[voxel[0]].insert(voxel[1]);
169 neighbor_vertices[voxel[0]].insert(voxel[2]);
170 neighbor_vertices[voxel[0]].insert(voxel[3]);

Callers 1

Calls 11

RuntimeErrorClass · 0.85
set_array_to_adj_listFunction · 0.85
get_faceMethod · 0.80
get_voxelMethod · 0.80
get_num_verticesMethod · 0.45
get_num_facesMethod · 0.45
get_num_voxelsMethod · 0.45
get_vertex_per_faceMethod · 0.45
get_vertex_per_voxelMethod · 0.45
insertMethod · 0.45
strMethod · 0.45

Tested by

no test coverage detected