|
|
@ -82,12 +82,12 @@ void compute_patches(const stl_vector_mp<stl_vector_mp<edge_key_t>>& edges_of |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void compute_chains(const flat_hash_map_mp<edge_key_t, edge_header_t>& patch_edges, |
|
|
void compute_chains(const flat_hash_map_mp<edge_key_t, edge_header_t>& patch_edges, |
|
|
const flat_hash_set_mp<edge_key_t>& patch_boundary_edges, |
|
|
const flat_hash_set_mp<edge_key_t>& patch_boundary_edges, |
|
|
const stl_vector_mp<polygon_face_t>& iso_faces, |
|
|
const stl_vector_mp<polygon_face_t>& iso_faces, |
|
|
stl_vector_mp<stl_vector_mp<uint32_t>>& chain_vertices, |
|
|
stl_vector_mp<stl_vector_mp<uint32_t>>& chain_vertices, |
|
|
stl_vector_mp<boundary_edge_header_t>& chain_edge_headers, |
|
|
stl_vector_mp<boundary_edge_header_t>& chain_edge_headers, |
|
|
stl_vector_mp<chain_header_t>& chain_headers) |
|
|
stl_vector_mp<chain_header_t>& chain_headers) |
|
|
{ |
|
|
{ |
|
|
flat_hash_map_mp<uint32_t, stl_vector_mp<uint32_t>> non_manifold_edges_of_vert{}; |
|
|
flat_hash_map_mp<uint32_t, stl_vector_mp<uint32_t>> non_manifold_edges_of_vert{}; |
|
|
non_manifold_edges_of_vert.reserve(patch_boundary_edges.size() / 2); |
|
|
non_manifold_edges_of_vert.reserve(patch_boundary_edges.size() / 2); |
|
|
@ -117,10 +117,7 @@ void compute_chains(const flat_hash_map_mp<edge_key_t, edge_header_t>& patch_e |
|
|
flat_hash_set_mp<uint32_t> unique_volume_indices{}; |
|
|
flat_hash_set_mp<uint32_t> unique_volume_indices{}; |
|
|
new_chain_edge_headers.subface_indices.reserve(new_chain_headers.face_indices.size()); |
|
|
new_chain_edge_headers.subface_indices.reserve(new_chain_headers.face_indices.size()); |
|
|
for (const auto& face_index : new_chain_headers.face_indices) { |
|
|
for (const auto& face_index : new_chain_headers.face_indices) { |
|
|
std::transform(iso_faces[face_index].headers.begin(), |
|
|
for (const auto& [volume_index, _] : iso_faces[face_index].headers) unique_volume_indices.emplace(volume_index); |
|
|
iso_faces[face_index].headers.end(), |
|
|
|
|
|
std::back_inserter(unique_volume_indices), |
|
|
|
|
|
[](const face_header_t& header) { return header.volume_index; }); |
|
|
|
|
|
new_chain_edge_headers.subface_indices.emplace_back(iso_faces[face_index].subface_index); |
|
|
new_chain_edge_headers.subface_indices.emplace_back(iso_faces[face_index].subface_index); |
|
|
} |
|
|
} |
|
|
std::move(unique_volume_indices.begin(), |
|
|
std::move(unique_volume_indices.begin(), |
|
|
|