[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