[Bf-blender-cvs] [304864219c9] refactor-mesh-selection-generic: Progress

Hans Goudey noreply at git.blender.org
Fri Aug 26 04:35:03 CEST 2022


Commit: 304864219c9dac6243983ac57643f360b8daa55b
Author: Hans Goudey
Date:   Thu Aug 25 17:21:08 2022 -0400
Branches: refactor-mesh-selection-generic
https://developer.blender.org/rB304864219c9dac6243983ac57643f360b8daa55b

Progress

===================================================================

M	source/blender/blenkernel/intern/mball_tessellate.c
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_boolean_convert.cc
M	source/blender/blenkernel/intern/object_deform.c
M	source/blender/blenkernel/intern/subdiv_mesh.cc
M	source/blender/bmesh/intern/bmesh_construct.c
M	source/blender/editors/armature/armature_skinning.c
M	source/blender/editors/armature/meshlaplacian.c
M	source/blender/editors/mesh/mesh_data.cc
M	source/blender/editors/object/object_modifier.cc
M	source/blender/editors/object/object_vgroup.cc
M	source/blender/editors/sculpt_paint/paint_vertex.cc
M	source/blender/editors/space_view3d/view3d_select.cc
M	source/blender/geometry/intern/mesh_merge_by_distance.cc
M	source/blender/makesdna/DNA_meshdata_types.h
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_explode.c
M	source/blender/modifiers/intern/MOD_solidify_nonmanifold.c

===================================================================

diff --git a/source/blender/blenkernel/intern/mball_tessellate.c b/source/blender/blenkernel/intern/mball_tessellate.c
index 61f5a5f315f..33c3e9f20df 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@ -1448,7 +1448,6 @@ Mesh *BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob)
   for (int i = 0; i < mesh->totvert; i++) {
     copy_v3_v3(mvert[i].co, process.co[i]);
     mvert->bweight = 0;
-    mvert->flag = 0;
   }
   MEM_freeN(process.co);
 
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 7ff00fe700f..8496f37736b 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -250,8 +250,13 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
     if (!BLO_write_is_undo(writer)) {
       BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
       BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
-      /* When converting to the old mesh format, don't save redunant attributes. */
-      names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"});
+      /* When converting to the old mesh format, don't save redundant attributes. */
+      names_to_skip.add_multiple_new({".hide_vert",
+                                      ".hide_edge",
+                                      ".hide_poly",
+                                      ".selection_vert",
+                                      ".selection_edge",
+                                      ".selection_poly"});
     }
 
     CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip);
diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
index a1ef2d2e6b5..480a935cb14 100644
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@ -375,7 +375,6 @@ static void copy_vert_attributes(Mesh *dest_mesh,
                                  int index_in_orig_me)
 {
   mv->bweight = orig_mv->bweight;
-  mv->flag = orig_mv->flag;
 
   /* For all layers in the orig mesh, copy the layer information. */
   CustomData *target_cd = &dest_mesh->vdata;
diff --git a/source/blender/blenkernel/intern/object_deform.c b/source/blender/blenkernel/intern/object_deform.c
index 310ec7678bd..d7509ae99b3 100644
--- a/source/blender/blenkernel/intern/object_deform.c
+++ b/source/blender/blenkernel/intern/object_deform.c
@@ -165,14 +165,14 @@ bool BKE_object_defgroup_clear(Object *ob, bDeformGroup *dg, const bool use_sele
     }
     else {
       if (me->dvert) {
-        MVert *mv;
+        const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+            &me->vdata, CD_PROP_BOOL, ".selection_vert");
         int i;
 
-        mv = me->mvert;
         dv = me->dvert;
 
-        for (i = 0; i < me->totvert; i++, mv++, dv++) {
-          if (dv->dw && (!use_selection || (mv->flag & SELECT))) {
+        for (i = 0; i < me->totvert; i++, dv++) {
+          if (dv->dw && (!use_selection || (selection_vert && selection_vert[i]))) {
             MDeformWeight *dw = BKE_defvert_find_index(dv, def_nr);
             BKE_defvert_remove_group(dv, dw); /* dw can be NULL */
             changed = true;
diff --git a/source/blender/blenkernel/intern/subdiv_mesh.cc b/source/blender/blenkernel/intern/subdiv_mesh.cc
index e026a013498..b5937709a7e 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@ -1116,8 +1116,6 @@ static void subdiv_mesh_vertex_of_loose_edge(const SubdivForeachContext *foreach
   MVert *subdiv_vertex = &subdiv_mvert[subdiv_vertex_index];
   BKE_subdiv_mesh_interpolate_position_on_edge(
       coarse_mesh, coarse_edge, is_simple, u, subdiv_vertex->co);
-  /* Reset flags and such. */
-  subdiv_vertex->flag = 0;
   /* TODO(sergey): This matches old behavior, but we can as well interpolate
    * it. Maybe even using vertex varying attributes. */
   subdiv_vertex->bweight = 0.0f;
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c
index 0e043475817..f9f7c07a3da 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -720,8 +720,7 @@ BMesh *BM_mesh_copy(BMesh *bm_old)
 
 char BM_edge_flag_from_mflag(const short mflag)
 {
-  return ((((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) |
-          ((mflag & ME_EDGEDRAW) ? BM_ELEM_DRAW : 0) |
+  return (((mflag & ME_SEAM) ? BM_ELEM_SEAM : 0) | ((mflag & ME_EDGEDRAW) ? BM_ELEM_DRAW : 0) |
           ((mflag & ME_SHARP) == 0 ? BM_ELEM_SMOOTH : 0));
 }
 char BM_face_flag_from_mflag(const char mflag)
diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c
index 3a1e7419d3c..fa7d1a5b22b 100644
--- a/source/blender/editors/armature/armature_skinning.c
+++ b/source/blender/editors/armature/armature_skinning.c
@@ -202,10 +202,13 @@ static void envelope_bone_weighting(Object *ob,
     use_mask = true;
   }
 
+  const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+      &mesh->vdata, CD_PROP_BOOL, ".selection_vert");
+
   /* for each vertex in the mesh */
   for (int i = 0; i < mesh->totvert; i++) {
 
-    if (use_mask && !(mesh->mvert[i].flag & SELECT)) {
+    if (use_mask && !(selection_vert && selection_vert[i])) {
       continue;
     }
 
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 3391bfb8975..2681707ff4f 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -652,7 +652,6 @@ void heat_bone_weighting(Object *ob,
   int a, tris_num, j, bbone, firstsegment, lastsegment;
   bool use_topology = (me->editflag & ME_EDIT_MIRROR_TOPO) != 0;
 
-  MVert *mvert = me->mvert;
   bool use_vert_sel = (me->editflag & ME_EDIT_PAINT_VERT_SEL) != 0;
   bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
 
diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc
index d6c18bafa4f..9de77216655 100644
--- a/source/blender/editors/mesh/mesh_data.cc
+++ b/source/blender/editors/mesh/mesh_data.cc
@@ -891,9 +891,9 @@ static void mesh_add_verts(Mesh *mesh, int len)
 
   mesh->totvert = totvert;
 
-  const bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
-  const bke::SpanAttributeWriter<bool> selection_vert =
-      attributes.lookup_or_add_for_write_span<bool>(".selection_vert", ATTR_DOMAIN_POINT);
+  bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
+  bke::SpanAttributeWriter<bool> selection_vert = attributes.lookup_or_add_for_write_span<bool>(
+      ".selection_vert", ATTR_DOMAIN_POINT);
   selection_vert.span.take_back(len).fill(true);
   selection_vert.finish();
 }
@@ -933,9 +933,9 @@ static void mesh_add_edges(Mesh *mesh, int len)
 
   mesh->totedge = totedge;
 
-  const bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
-  const bke::SpanAttributeWriter<bool> selection_edge =
-      attributes.lookup_or_add_for_write_span<bool>(".selection_edge", ATTR_DOMAIN_EDGE);
+  bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
+  bke::SpanAttributeWriter<bool> selection_edge = attributes.lookup_or_add_for_write_span<bool>(
+      ".selection_edge", ATTR_DOMAIN_EDGE);
   selection_edge.span.take_back(len).fill(true);
   selection_edge.finish();
 }
@@ -972,8 +972,7 @@ static void mesh_add_polys(Mesh *mesh, int len)
 {
   using namespace blender;
   CustomData pdata;
-  MPoly *mpoly;
-  int i, totpoly;
+  int totpoly;
 
   if (len == 0) {
     return;
@@ -997,9 +996,9 @@ static void mesh_add_polys(Mesh *mesh, int len)
 
   mesh->totpoly = totpoly;
 
-  const bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
-  const bke::SpanAttributeWriter<bool> selection_poly =
-      attributes.lookup_or_add_for_write_span<bool>(".selection_poly", ATTR_DOMAIN_FACE);
+  bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*mesh);
+  bke::SpanAttributeWriter<bool> selection_poly = attributes.lookup_or_add_for_write_span<bool>(
+      ".selection_poly", ATTR_DOMAIN_FACE);
   selection_poly.span.take_back(len).fill(true);
   selection_poly.finish();
 }
diff --git a/source/blender/editors/object/object_modifier.cc b/source/blender/editors/object/object_modifier.cc
index 75f9fdd485e..455fdc6f19a 100644
--- a/source/blender/editors/object/object_modifier.cc
+++ b/source/blender/editors/object/object_modifier.cc
@@ -526,6 +526,7 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList *UNUSED(reports),
                                              Object *ob,
                                              ModifierData *md)
 {
+  using namespace blender;
   int cvert = 0;
 
   if (md->type != eModifierType_ParticleSystem) {
@@ -590,16 +591,22 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList *UNUSED(reports),
   me->medge = (MEdge *)CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, nullptr, edges_num);
   me->mface = (MFace *)CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, nullptr, 0);
 
+  int vert_index = 0;
+
   MVert *mvert = me->mvert;
   MEdge *medge = me->medge;
 
+  bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*me);
+  bke::SpanAttributeWriter<bool> selection_vert = attributes.lookup_or_add_for_write_span<bool>(
+      ".selection_vert", ATTR_DOMAIN_POINT);
+
   /* copy coordinates */
   cache = psys_eval->pathcache;
   for (int a = 0; a < part_num; a++) {
     ParticleCacheKey *key = cache[a];
     int kmax = key->segments;
-    for (int k = 0; k <= kmax; k++, key++, cvert++, mvert++) {
-      copy_v3_v3(mvert->co, key->co);
+    for (int k = 0; k <= kmax; k++, key++, cvert++, vert_index++) {
+      copy_v3_v3(mvert[vert_index].co, key->co);
       if (k) {
         medge->v1 = cvert - 1;
         medge->v2 = cvert;
@@ -608,7 +615,7 @@ bool ED_object_modifier_convert_p

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list