From 2deba209121a43972e4d07401c944ce9ddc98590 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 14 Oct 2025 23:12:33 +0200 Subject: [PATCH] Fix: Mesh boolean redundant transfer of edge attributes In 157e7e0351262671260b7 edge calculation was updated to propagate attributes, but the manifold boolean propagates edge attributes itself. It seems this causes some issues where boolean attributes get invalid values, which I discovered while developing #148063. I didn't investigate too deeply because I'm going to have to restructure this code for #122398 anyway. Pull Request: https://projects.blender.org/blender/blender/pulls/148096 --- source/blender/geometry/intern/mesh_boolean.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/blender/geometry/intern/mesh_boolean.cc b/source/blender/geometry/intern/mesh_boolean.cc index 88b83123511..b59cad0a2b7 100644 --- a/source/blender/geometry/intern/mesh_boolean.cc +++ b/source/blender/geometry/intern/mesh_boolean.cc @@ -799,6 +799,19 @@ static Mesh *imesh_to_mesh(meshintersect::IMesh *im, MeshesToIMeshInfo &mim) } dst_material_indices.finish(); + /* Remove edge attributes so they're not processed by #mesh_calc_edges. They are propagated + * separately afterwards, and yet they exist because #BKE_mesh_new_nomain_from_template created + * them. */ + Set edge_attributes; + result->attributes().foreach_attribute([&](const bke::AttributeIter &iter) { + if (iter.domain == bke::AttrDomain::Edge) { + edge_attributes.add(iter.name); + } + }); + for (const StringRef attribute : edge_attributes) { + result->attributes_for_write().remove(attribute); + } + bke::mesh_calc_edges(*result, false, false); merge_edge_customdata_layers(result, mim);