[Bf-blender-cvs] [599209a11b3] refactor-mesh-selection-generic: Fix calc_edges selection
Hans Goudey
noreply at git.blender.org
Thu Sep 8 19:37:32 CEST 2022
Commit: 599209a11b3cd3794c410455c323b849c63e69a2
Author: Hans Goudey
Date: Thu Sep 8 12:37:25 2022 -0500
Branches: refactor-mesh-selection-generic
https://developer.blender.org/rB599209a11b3cd3794c410455c323b849c63e69a2
Fix calc_edges selection
===================================================================
M source/blender/blenkernel/intern/mesh_calc_edges.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/mesh_calc_edges.cc b/source/blender/blenkernel/intern/mesh_calc_edges.cc
index 6d76bea4502..06bfce65efc 100644
--- a/source/blender/blenkernel/intern/mesh_calc_edges.cc
+++ b/source/blender/blenkernel/intern/mesh_calc_edges.cc
@@ -120,10 +120,8 @@ static void add_polygon_edges_to_hash_maps(Mesh *mesh,
});
}
-static void serialize_and_initialize_deduplicated_edges(Mesh &mesh,
- MutableSpan<EdgeMap> edge_maps,
- MutableSpan<MEdge> new_edges,
- const bool select_new_edges)
+static void serialize_and_initialize_deduplicated_edges(MutableSpan<EdgeMap> edge_maps,
+ MutableSpan<MEdge> new_edges)
{
/* All edges are distributed in the hash tables now. They have to be serialized into a single
* array below. To be able to parallelize this, we have to compute edge index offsets for each
@@ -155,23 +153,6 @@ static void serialize_and_initialize_deduplicated_edges(Mesh &mesh,
new_edge_index++;
}
});
-
- if (select_new_edges) {
- SpanAttributeWriter<bool> selection_edge =
- mesh.attributes_for_write().lookup_or_add_for_write_span<bool>(".selection_edge",
- ATTR_DOMAIN_EDGE);
- threading::parallel_for_each(edge_maps, [&](EdgeMap &edge_map) {
- const int task_index = &edge_map - edge_maps.data();
- int new_edge_index = edge_index_offsets[task_index];
- for (EdgeMap::MutableItem item : edge_map.items()) {
- if (item.value.original_edge == nullptr) {
- selection_edge.span[new_edge_index] = true;
- }
- new_edge_index++;
- }
- });
- selection_edge.finish();
- }
}
static void update_edge_indices_in_poly_loops(Mesh *mesh,
@@ -255,8 +236,7 @@ void BKE_mesh_calc_edges(Mesh *mesh, bool keep_existing_edges, const bool select
/* Create new edges. */
MutableSpan<MEdge> new_edges{
static_cast<MEdge *>(MEM_calloc_arrayN(new_totedge, sizeof(MEdge), __func__)), new_totedge};
- calc_edges::serialize_and_initialize_deduplicated_edges(
- *mesh, edge_maps, new_edges, select_new_edges);
+ calc_edges::serialize_and_initialize_deduplicated_edges(edge_maps, new_edges);
calc_edges::update_edge_indices_in_poly_loops(mesh, edge_maps, parallel_mask);
/* Free old CustomData and assign new one. */
@@ -265,6 +245,24 @@ void BKE_mesh_calc_edges(Mesh *mesh, bool keep_existing_edges, const bool select
CustomData_add_layer(&mesh->edata, CD_MEDGE, CD_ASSIGN, new_edges.data(), new_totedge);
mesh->totedge = new_totedge;
+ if (select_new_edges) {
+ MutableAttributeAccessor attributes = mesh->attributes_for_write();
+ SpanAttributeWriter<bool> selection_edge = attributes.lookup_or_add_for_write_span<bool>(
+ ".selection_edge", ATTR_DOMAIN_EDGE);
+ if (selection_edge) {
+ int new_edge_index = 0;
+ for (const EdgeMap &edge_map : edge_maps) {
+ for (EdgeMap::Item item : edge_map.items()) {
+ if (item.value.original_edge == nullptr) {
+ selection_edge.span[new_edge_index] = true;
+ }
+ new_edge_index++;
+ }
+ }
+ selection_edge.finish();
+ }
+ }
+
/* Explicitly clear edge maps, because that way it can be parallelized. */
clear_hash_tables(edge_maps);
}
More information about the Bf-blender-cvs
mailing list