[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