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

Method extract_boundary

tools/MeshUtils/BoundaryEdges.cpp:45–78  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43}
44
45void BoundaryEdges::extract_boundary(const Mesh& mesh) {
46 typedef Duplet Edge;
47 typedef DupletMap<size_t> EdgeFaceMap;
48 EdgeFaceMap edge_face_map;
49
50 const size_t num_vertex_per_face = mesh.get_vertex_per_face();
51 const size_t num_faces = mesh.get_num_faces();
52
53 for (size_t i=0; i<num_faces; i++) {
54 const VectorI face = mesh.get_face(i);
55 for (size_t j=0; j<num_vertex_per_face; j++) {
56 auto v0 = face[j];
57 auto v1 = face[(j+1) % num_vertex_per_face];
58 edge_face_map.insert({v0, v1}, i);
59 }
60 }
61
62 std::vector<size_t> boundaries;
63 std::vector<size_t> boundary_faces;
64 for (EdgeFaceMap::const_iterator itr=edge_face_map.begin();
65 itr != edge_face_map.end(); itr++) {
66 if (itr->second.size() == 1) {
67 boundaries.push_back(itr->first.get_ori_data()[0]);
68 boundaries.push_back(itr->first.get_ori_data()[1]);
69 boundary_faces.push_back(itr->second[0]);
70 }
71 }
72
73 m_boundaries.resize(boundaries.size() / 2, 2);
74 std::copy(boundaries.begin(), boundaries.end(), m_boundaries.data());
75 m_boundary_faces.resize(boundary_faces.size());
76 std::copy(boundary_faces.begin(), boundary_faces.end(),
77 m_boundary_faces.data());
78}
79
80void BoundaryEdges::extract_boundary_nodes() {
81 size_t num_entries = m_boundaries.rows() * m_boundaries.cols();

Callers

nothing calls this directly

Calls 7

get_faceMethod · 0.80
get_vertex_per_faceMethod · 0.45
get_num_facesMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected