[Bf-blender-cvs] [b1fd951c594] refactor-mesh-selection-generic: Merge branch 'master' into refactor-mesh-selection-generic

Hans Goudey noreply at git.blender.org
Sun Sep 11 00:02:13 CEST 2022


Commit: b1fd951c5943b5f72f8dc1ddb639f12d5ab99d87
Author: Hans Goudey
Date:   Sat Sep 10 16:48:49 2022 -0500
Branches: refactor-mesh-selection-generic
https://developer.blender.org/rBb1fd951c5943b5f72f8dc1ddb639f12d5ab99d87

Merge branch 'master' into refactor-mesh-selection-generic

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



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

diff --cc source/blender/blenkernel/intern/mball_tessellate.c
index e90a4910792,49963c333ec..48fadd2e9b8
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@@ -1447,7 -1447,7 +1447,6 @@@ Mesh *BKE_mball_polygonize(Depsgraph *d
    MVert *mvert = CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_CONSTRUCT, NULL, mesh->totvert);
    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 --cc source/blender/blenkernel/intern/mesh.cc
index 2cf01d38bb4,a0548b7efd4..f0268b60753
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -252,13 -251,9 +252,15 @@@ static void mesh_blend_write(BlendWrite
      if (!BLO_write_is_undo(writer)) {
        BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
        BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
+       BKE_mesh_legacy_bevel_weight_from_layers(mesh);
        /* When converting to the old mesh format, don't save redundant attributes. */
 -      names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly", "material_index"});
 +      names_to_skip.add_multiple_new({".hide_vert",
 +                                      ".hide_edge",
 +                                      ".hide_poly",
++                                      "material_index",
 +                                      ".selection_vert",
 +                                      ".selection_edge",
 +                                      ".selection_poly"});
  
        /* Set deprecated mesh data pointers for forward compatibility. */
        mesh->mvert = const_cast<MVert *>(mesh->verts().data());
@@@ -352,9 -347,9 +354,10 @@@ static void mesh_blend_read_data(BlendD
    }
  
    if (!BLO_read_data_is_undo(reader)) {
 +    BKE_mesh_legacy_convert_flags_to_selection_layers(mesh);
      BKE_mesh_legacy_convert_flags_to_hide_layers(mesh);
      BKE_mesh_legacy_convert_mpoly_to_material_indices(mesh);
+     BKE_mesh_legacy_bevel_weight_to_layers(mesh);
    }
  
    /* We don't expect to load normals from files, since they are derived data. */
diff --cc source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 53b4d40b7a9,7a04e45fe00..6a32159e691
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@@ -381,8 -381,8 +381,6 @@@ static void copy_vert_attributes(Mesh *
                                   int mv_index,
                                   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;
    const CustomData *source_cd = &orig_me->vdata;
diff --cc source/blender/blenkernel/intern/subdiv_mesh.cc
index 71d9364b58d,44bdd6e6d06..8ecf4eeb440
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@@ -1097,11 -1128,15 +1128,13 @@@ static void subdiv_mesh_vertex_of_loose
    }
    /* Interpolate coordinate. */
    MVert *subdiv_vertex = &ctx->subdiv_verts[subdiv_vertex_index];
-   BKE_subdiv_mesh_interpolate_position_on_edge(
-       coarse_mesh, coarse_edge, is_simple, u, subdiv_vertex->co);
-   /* TODO(sergey): This matches old behavior, but we can as well interpolate
-    * it. Maybe even using vertex varying attributes. */
-   subdiv_vertex->bweight = 0.0f;
+   BKE_subdiv_mesh_interpolate_position_on_edge(ctx->coarse_verts,
+                                                ctx->coarse_edges,
+                                                ctx->vert_to_edge_map,
+                                                coarse_edge_index,
+                                                is_simple,
+                                                u,
+                                                subdiv_vertex->co);
 -  /* Reset flags and such. */
 -  subdiv_vertex->flag = 0;
  }
  
  /** \} */
diff --cc source/blender/blenkernel/intern/subsurf_ccg.c
index a36d015d10e,0e5f9f30243..7d6d5bb2097
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@@ -879,7 -879,7 +879,6 @@@ static void ccgDM_getFinalVertNo(Derive
  BLI_INLINE void ccgDM_to_MVert(MVert *mv, const CCGKey *key, CCGElem *elem)
  {
    copy_v3_v3(mv->co, CCG_elem_co(key, elem));
-   mv->bweight = 0;
 -  mv->flag = 0;
  }
  
  static void ccgDM_copyFinalVertArray(DerivedMesh *dm, MVert *mvert)
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 71ea2a17abb,94440916603..d83223d65d9
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1350,13 -1262,8 +1300,11 @@@ void BM_mesh_bm_to_me_for_eval(BMesh *b
    MLoop *mloop = loops.data();
    unsigned int i, j;
  
-   const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT);
-   const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
    const int cd_edge_crease_offset = CustomData_get_offset(&bm->edata, CD_CREASE);
  
 +  bool need_selection_vert = false;
 +  bool need_selection_edge = false;
 +  bool need_selection_poly = false;
    bool need_hide_vert = false;
    bool need_hide_edge = false;
    bool need_hide_poly = false;
@@@ -1378,18 -1285,8 +1326,10 @@@
      if (BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
        need_hide_vert = true;
      }
 +    if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
 +      need_selection_vert = true;
 +    }
  
-     if (cd_vert_bweight_offset != -1) {
-       mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
-     }
- 
-     if (cd_vert_bweight_offset != -1) {
-       mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
-     }
- 
      CustomData_from_bmesh_block(&bm->vdata, &me->vdata, eve->head.data, i);
    }
    bm->elem_index_dirty &= ~BM_VERT;
diff --cc source/blender/geometry/intern/mesh_merge_by_distance.cc
index 04956b0acb9,17318c277aa..1c79f33ed12
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@@ -1267,7 -1266,7 +1266,6 @@@ static void customdata_weld
            no[1] += mv_src_no[1];
            no[2] += mv_src_no[2];
  #endif
-           bweight += mv_src->bweight;
 -          flag |= mv_src->flag;
          }
        }
        else if (type == CD_MEDGE) {
@@@ -1322,8 -1318,8 +1317,6 @@@
        mv_no[1] = (short)no[1];
        mv_no[2] = (short)no[2];
  #endif
--
-       mv->bweight = (char)bweight;
 -      mv->flag = (char)flag;
      }
      else if (type == CD_MEDGE) {
        MEdge *me = &((MEdge *)layer_dst->data)[dest_index];
diff --cc source/blender/makesdna/DNA_meshdata_types.h
index d4eb4bbe4f4,e621343b818..f3212106999
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@@ -25,8 -25,11 +25,15 @@@ extern "C" 
   */
  typedef struct MVert {
    float co[3];
 -  char flag;
++  /**
++   * Deprecated flag for storing hide status and selection, which are now stored in separate
++   * generic attributes. Kept for file read and write.
++   */
 +  char flag DNA_DEPRECATED;
-   char bweight;
+   /**
+    * Deprecated bevel weight storage, now located in #CD_BWEIGHT, except for file read and write.
+    */
+   char bweight DNA_DEPRECATED;
    char _pad[2];
  } MVert;
  
diff --cc source/blender/makesrna/intern/rna_mesh.c
index e32d238136c,28ceb0d1d9d..292ec4731a9
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@@ -428,36 -436,12 +436,38 @@@ static void rna_MeshVertex_hide_set(Poi
    hide_vert[index] = value;
  }
  
 +static bool rna_MeshVertex_select_get(PointerRNA *ptr)
 +{
 +  const Mesh *mesh = rna_mesh(ptr);
 +  const bool *selection_vert = (const bool *)CustomData_get_layer_named(
 +      &mesh->vdata, CD_PROP_BOOL, ".selection_vert");
 +  const int index = rna_MeshVertex_index_get(ptr);
 +  return selection_vert == NULL ? false : selection_vert[index];
 +}
 +
 +static void rna_MeshVertex_select_set(PointerRNA *ptr, bool value)
 +{
 +  Mesh *mesh = rna_mesh(ptr);
 +  bool *selection_vert = (bool *)CustomData_duplicate_referenced_layer_named(
 +      &mesh->vdata, CD_PROP_BOOL, ".selection_vert", mesh->totvert);
 +  if (!selection_vert) {
 +    if (!value) {
 +      /* Skip adding layer if it doesn't exist already anyway and we're not hiding an element. */
 +      return;
 +    }
 +    selection_vert = (bool *)CustomData_add_layer_named(
 +        &mesh->vdata, CD_PROP_BOOL, CD_SET_DEFAULT, NULL, mesh->totvert, ".selection_vert");
 +  }
 +  const int index = rna_MeshVertex_index_get(ptr);
 +  selection_vert[index] = value;
 +}
 +
  static float rna_MeshVertex_bevel_weight_get(PointerRNA *ptr)
  {
-   MVert *mvert = (MVert *)ptr->data;
-   return mvert->bweight / 255.0f;
+   const Mesh *mesh = rna_mesh(ptr);
+   const int index = rna_MeshVertex_index_get(ptr);
+   const float *values = (const float *)CustomData_get_layer(&mesh->vdata, CD_BWEIGHT);
+   return values == NULL ? 0.0f : values[index];
  }
  
  static void rna_MeshVertex_bevel_weight_set(PointerRNA *ptr, float value)
diff --cc source/blender/modifiers/intern/MOD_array.c
index f7c5e31c2c0,7feff30968f..bf534b0d586
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@@ -293,7 -293,8 +293,6 @@@ static void mesh_merge_transform(Mesh *
  
    for (i = 0; i < cap_nverts; i++, mv++) {
      mul_m4_v3(cap_offset, mv->co);
-     mv->bweight = 0;
 -    /* Reset MVert flags for caps */
 -    mv->flag = 0;
    }
  
    /* We have to correct normals too, if we do not tag them as dirty later! */



More information about the Bf-blender-cvs mailing list