diff options
author | Hans Goudey <h.goudey@me.com> | 2022-09-20 22:36:20 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-09-20 22:36:20 +0300 |
commit | 90999a06948a50ad49621baf2c5ed57dc695ead3 (patch) | |
tree | 1b04f7b5e375ff660c263fb42bd91b9f04e43197 /source/blender/nodes/geometry | |
parent | 01ed08690a3fea22c9574985b99b6e33e9d89c50 (diff) |
Fix T101208: Missing original index handling in extrude node
The extrude node must set the original indices for new faces to "None"
in edge mode as well. Same for new edges in vertex mode.
Diffstat (limited to 'source/blender/nodes/geometry')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc index c7f4b78946d..dc5b778b4bd 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc @@ -132,6 +132,9 @@ static CustomData &get_customdata(Mesh &mesh, const eAttrDomain domain) } } +/** + * \note The result may be an empty span. + */ static MutableSpan<int> get_orig_index_layer(Mesh &mesh, const eAttrDomain domain) { const bke::AttributeAccessor attributes = mesh.attributes(); @@ -296,6 +299,9 @@ static void extrude_mesh_vertices(Mesh &mesh, MutableSpan<int> vert_orig_indices = get_orig_index_layer(mesh, ATTR_DOMAIN_POINT); vert_orig_indices.slice(new_vert_range).fill(ORIGINDEX_NONE); + MutableSpan<int> new_edge_orig_indices = get_orig_index_layer(mesh, ATTR_DOMAIN_EDGE); + new_edge_orig_indices.slice(new_edge_range).fill(ORIGINDEX_NONE); + if (attribute_outputs.top_id) { save_selection_as_attribute( mesh, attribute_outputs.top_id.get(), ATTR_DOMAIN_POINT, new_vert_range); @@ -631,6 +637,9 @@ static void extrude_mesh_edges(Mesh &mesh, edge_orig_indices.slice(connect_edge_range).fill(ORIGINDEX_NONE); edge_orig_indices.slice(duplicate_edge_range).fill(ORIGINDEX_NONE); + MutableSpan<int> poly_orig_indices = get_orig_index_layer(mesh, ATTR_DOMAIN_FACE); + poly_orig_indices.slice(new_poly_range).fill(ORIGINDEX_NONE); + if (attribute_outputs.top_id) { save_selection_as_attribute( mesh, attribute_outputs.top_id.get(), ATTR_DOMAIN_EDGE, duplicate_edge_range); |