[Bf-blender-cvs] [c2ec9481464] refactor-mesh-selection-generic: Merge branch 'master' into refactor-mesh-selection-generic
Hans Goudey
noreply at git.blender.org
Mon Sep 5 22:09:41 CEST 2022
Commit: c2ec9481464f0e3130a2c8a60ef0882f0852f34f
Author: Hans Goudey
Date: Mon Sep 5 13:46:57 2022 -0500
Branches: refactor-mesh-selection-generic
https://developer.blender.org/rBc2ec9481464f0e3130a2c8a60ef0882f0852f34f
Merge branch 'master' into refactor-mesh-selection-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh.cc
index caeb1da57d9,c0379c50de4..348bf210706
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -253,16 -248,17 +248,22 @@@ static void mesh_blend_write(BlendWrite
else {
Set<std::string> names_to_skip;
if (!BLO_write_is_undo(writer)) {
-
BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
+ BKE_mesh_legacy_convert_selection_layers_to_flags(mesh);
BKE_mesh_legacy_convert_material_indices_to_mpoly(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"});
+ names_to_skip.add_multiple_new({".hide_vert",
+ ".hide_edge",
+ ".hide_poly",
+ ".selection_vert",
+ ".selection_edge",
+ ".selection_poly"});
+
+ /* Set deprecated mesh data pointers for forward compatibility. */
+ mesh->mvert = const_cast<MVert *>(mesh->vertices().data());
+ mesh->medge = const_cast<MEdge *>(mesh->edges().data());
+ mesh->mpoly = const_cast<MPoly *>(mesh->polygons().data());
+ mesh->mloop = const_cast<MLoop *>(mesh->loops().data());
}
CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip);
diff --cc source/blender/blenkernel/intern/mesh_evaluate.cc
index 2294cb1c4af,7e52b96cc92..cbef8e1cd64
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@@ -878,30 -907,14 +876,30 @@@ static void mesh_flush_select_from_vert
void BKE_mesh_flush_select_from_verts(Mesh *me)
{
- const blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*me);
+ using namespace blender::bke;
+ MutableAttributeAccessor attributes = mesh_attributes_for_write(*me);
+ const VArray<bool> selection_vert = attributes.lookup_or_default<bool>(
+ ".selection_vert", ATTR_DOMAIN_POINT, false);
+ if (selection_vert.is_single() && !selection_vert.get_internal_single()) {
+ attributes.remove(".selection_edge");
+ attributes.remove(".selection_poly");
+ return;
+ }
+ SpanAttributeWriter<bool> selection_edge = attributes.lookup_or_add_for_write_only_span<bool>(
+ ".selection_edge", ATTR_DOMAIN_EDGE);
+ SpanAttributeWriter<bool> selection_poly = attributes.lookup_or_add_for_write_only_span<bool>(
+ ".selection_poly", ATTR_DOMAIN_FACE);
mesh_flush_select_from_verts(
- {me->medge, me->totedge},
- {me->mpoly, me->totpoly},
- {me->mloop, me->totloop},
- me->vertices(),
++ me->edges(),
++ me->polygons(),
+ me->loops(),
attributes.lookup_or_default<bool>(".hide_edge", ATTR_DOMAIN_EDGE, false),
attributes.lookup_or_default<bool>(".hide_poly", ATTR_DOMAIN_FACE, false),
- me->edges_for_write(),
- me->polygons_for_write());
+ selection_vert,
+ selection_edge.span,
+ selection_poly.span);
+ selection_edge.finish();
+ selection_poly.finish();
}
/** \} */
diff --cc source/blender/blenkernel/intern/object_deform.c
index cf93c7b72fd,4c59b4a5210..99bc1fec5bd
--- a/source/blender/blenkernel/intern/object_deform.c
+++ b/source/blender/blenkernel/intern/object_deform.c
@@@ -165,15 -162,15 +162,15 @@@ bool BKE_object_defgroup_clear(Object *
}
}
else {
- if (me->dvert) {
- const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+ if (BKE_mesh_deform_verts(me)) {
- const MVert *mv;
++ const const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+ &me->vdata, CD_PROP_BOOL, ".selection_vert");
int i;
- dv = me->dvert;
- mv = BKE_mesh_vertices(me);
+ dv = BKE_mesh_deform_verts_for_write(me);
- 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 --cc source/blender/blenkernel/intern/subdiv_converter_mesh.c
index c8693123363,f908e1af4ac..aa4bfbe1517
--- a/source/blender/blenkernel/intern/subdiv_converter_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_converter_mesh.c
@@@ -205,10 -209,9 +209,10 @@@ static void precalc_uv_layer(const Open
mesh->totloop, sizeof(int), "loop uv vertex index");
}
UvVertMap *uv_vert_map = BKE_mesh_uv_vert_map_create(
- mpoly,
+ storage->polys,
(const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".hide_poly"),
+ (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".selection_poly"),
- mloop,
+ storage->loops,
mloopuv,
num_poly,
num_vert,
diff --cc source/blender/blenkernel/intern/subdiv_mesh.cc
index 1ed01a91588,c222fc46800..400c020fb7d
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@@ -1113,9 -1096,11 +1096,9 @@@ static void subdiv_mesh_vertex_of_loose
subdiv_mesh_vertex_of_loose_edge_interpolate(ctx, coarse_edge, u, subdiv_vertex_index);
}
/* Interpolate coordinate. */
- MVert *subdiv_vertex = &subdiv_mvert[subdiv_vertex_index];
+ 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);
- /* 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 --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index 884fbc189ac,0190f91250b..555c60f710d
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1266,11 -1222,7 +1263,9 @@@ void BM_mesh_bm_to_me(Main *bmain, BMes
convert_bmesh_hide_flags_to_mesh_attributes(
*bm, need_hide_vert, need_hide_edge, need_hide_poly, *me);
+ convert_bmesh_selection_flags_to_mesh_attributes(
+ *bm, need_selection_vert, need_selection_edge, need_selection_poly, *me);
- BKE_mesh_update_customdata_pointers(me, false);
-
{
me->totselect = BLI_listbase_count(&(bm->selected));
diff --cc source/blender/draw/intern/draw_cache_impl_subdivision.cc
index 01522929cc7,9882ebf66f0..57879c90083
--- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc
+++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
@@@ -673,12 -675,13 +675,13 @@@ static void draw_subdiv_cache_extra_coa
Mesh *mesh,
uint32_t *flags_data)
{
- for (int i = 0; i < mesh->totpoly; i++) {
+ const Span<MPoly> polys = mesh->polygons();
+ for (const int i : polys.index_range()) {
uint32_t flag = 0;
- if ((mesh->mpoly[i].flag & ME_SMOOTH) != 0) {
+ if ((polys[i].flag & ME_SMOOTH) != 0) {
flag |= SUBDIV_COARSE_FACE_FLAG_SMOOTH;
}
- if ((polys[i].flag & ME_FACE_SEL) != 0) {
+ if (mr->selection_poly && mr->selection_poly[i]) {
flag |= SUBDIV_COARSE_FACE_FLAG_SELECT;
}
if (mr->hide_poly && mr->hide_poly[i]) {
diff --cc source/blender/editors/armature/meshlaplacian.c
index 2681707ff4f,2b3f8f4c853..1952e2ca3d4
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@@ -666,25 -669,17 +669,25 @@@ void heat_bone_weighting(Object *ob
/* (added selectedVerts content for vertex mask, they used to just equal 1) */
if (use_vert_sel) {
- for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
- for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
- mask[ml->v] = (mesh_verts[ml->v].flag & SELECT) != 0;
+ const bool *selection_vert = (const bool *)CustomData_get_layer_named(
+ &me->vdata, CD_PROP_BOOL, ".selection_vert");
+ if (selection_vert) {
- for (a = 0, mp = me->mpoly; a < me->totpoly; mp++, a++) {
- for (j = 0, ml = me->mloop + mp->loopstart; j < mp->totloop; j++, ml++) {
++ for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
++ for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
+ mask[ml->v] = selection_vert[ml->v];
+ }
}
}
}
else if (use_face_sel) {
- for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
- if (mp->flag & ME_FACE_SEL) {
- for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
- mask[ml->v] = 1;
+ const bool *selection_poly = (const bool *)CustomData_get_layer_named(
+ &me->pdata, CD_PROP_BOOL, ".selection_poly");
+ if (selection_poly) {
- for (a = 0, mp = me->mpoly; a < me->totpoly; mp++, a++) {
++ for (a = 0, mp = polys; a < me->totpoly; mp++, a++) {
+ if (selection_poly[a]) {
- for (j = 0, ml = me->mloop + mp->loopstart; j < mp->totloop; j++, ml++) {
++ for (j = 0, ml = loops + mp->loopstart; j < mp->totloop; j++, ml++) {
+ mask[ml->v] = 1;
+ }
}
}
}
diff --cc source/blender/editors/mesh/editface.cc
index 52ff74dddcc,6313c01011e..683dd217b03
--- a/source/blender/editors/mesh/editface.cc
+++ b/source/blender/editors/mesh/editface.cc
@@@ -221,27 -206,28 +224,30 @@@ static void select_linked_tfaces_with_s
BLI_bitmap *edge_tag = BLI_BITMAP_NEW(me->totedge, __func__);
BLI_bitmap *poly_tag = BLI_BITMAP_NEW(me->totpoly, __func__);
+ const Span<MEdge> edges = me->edges();
- MutableSpan<MPoly
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list