Fix T101027: Sculpt tools don't respect visibility after recent commit
Caused by b5f7af31d6
, which exposed the fact that the PBVH wasn't
retrieving the updated hide status attributes if they were allocated in
sculpt mode. Previously the attributes were always allocated when
entering sculpt mode.
This commit is contained in:
parent
b6ebd5591c
commit
8442b0ffc1
Notes:
blender-bot
2023-02-14 11:28:43 +01:00
Referenced by issue #101027, Regression: Sculpt: Many operations not respecting the visibility anymore (probably everything that uses `BKE_pbvh_vertex_iter_begin`)
|
@ -491,6 +491,12 @@ void BKE_pbvh_grids_update(PBVH *pbvh,
|
|||
void BKE_pbvh_subdiv_cgg_set(PBVH *pbvh, struct SubdivCCG *subdiv_ccg);
|
||||
void BKE_pbvh_face_sets_set(PBVH *pbvh, int *face_sets);
|
||||
|
||||
/**
|
||||
* If an operation causes the hide status stored in the mesh to change, this must be called
|
||||
* to update the references to those attributes, since they are only added when necessary.
|
||||
*/
|
||||
void BKE_pbvh_update_hide_attributes_from_mesh(PBVH *pbvh);
|
||||
|
||||
void BKE_pbvh_face_sets_color_set(PBVH *pbvh, int seed, int color_default);
|
||||
|
||||
void BKE_pbvh_respect_hide_set(PBVH *pbvh, bool respect_hide);
|
||||
|
|
|
@ -3247,6 +3247,14 @@ void BKE_pbvh_face_sets_set(PBVH *pbvh, int *face_sets)
|
|||
pbvh->face_sets = face_sets;
|
||||
}
|
||||
|
||||
void BKE_pbvh_update_hide_attributes_from_mesh(PBVH *pbvh)
|
||||
{
|
||||
if (pbvh->header.type == PBVH_FACES) {
|
||||
pbvh->hide_vert = CustomData_get_layer_named(&pbvh->mesh->vdata, CD_PROP_BOOL, ".hide_vert");
|
||||
pbvh->hide_poly = CustomData_get_layer_named(&pbvh->mesh->pdata, CD_PROP_BOOL, ".hide_poly");
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_pbvh_respect_hide_set(PBVH *pbvh, bool respect_hide)
|
||||
{
|
||||
pbvh->respect_hide = respect_hide;
|
||||
|
|
|
@ -383,6 +383,7 @@ static int hide_show_exec(bContext *C, wmOperator *op)
|
|||
* sculpt but it looks wrong when entering editmode otherwise). */
|
||||
if (pbvh_type == PBVH_FACES) {
|
||||
BKE_mesh_flush_hidden_from_verts(me);
|
||||
BKE_pbvh_update_hide_attributes_from_mesh(pbvh);
|
||||
}
|
||||
|
||||
SCULPT_visibility_sync_all_vertex_to_face_sets(ob->sculpt);
|
||||
|
|
|
@ -602,6 +602,7 @@ void SCULPT_visibility_sync_all_face_sets_to_verts(Object *ob)
|
|||
switch (BKE_pbvh_type(ss->pbvh)) {
|
||||
case PBVH_FACES: {
|
||||
BKE_sculpt_sync_face_sets_visibility_to_base_mesh(mesh);
|
||||
BKE_pbvh_update_hide_attributes_from_mesh(ss->pbvh);
|
||||
break;
|
||||
}
|
||||
case PBVH_GRIDS: {
|
||||
|
|
Loading…
Reference in New Issue