diff options
author | Pablo Dobarro <pablodp606@gmail.com> | 2020-03-19 22:44:48 +0300 |
---|---|---|
committer | Pablo Dobarro <pablodp606@gmail.com> | 2020-03-26 17:44:50 +0300 |
commit | 83947ea2537086d0ebb233414447dea2a9d1404c (patch) | |
tree | f9efb0553017d61a5ad54fe894b705b071861f88 /source/blender/editors | |
parent | c286fa309ef3939b8e0cf93515c4b9245edcf681 (diff) |
Fix T74761: Reimplement vertex to face sets visibility sync
This fixes multiple issues:
- Adds tag to update shading when changing vertex visibiliyt. This makes the mesh visibility update when the operator ends.
- Sync vertex to face sets no longer requires the pmap, so it does not crash. (Maybe we can initialize the pmap on undo to avoid these problems in the future).
- Sync vertex to face sets now works in a coherent way with the rest of visibility operations. Hide Box and Hide mask now sync the visibility changes to the face sets, so the all the operations are now getting a correct visibility state.
Reviewed By: brecht
Maniphest Tasks: T74761
Differential Revision: https://developer.blender.org/D7187
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_hide.c | 3 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 19 |
2 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c index ce5a80585b0..69ca86efa9d 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.c +++ b/source/blender/editors/sculpt_paint/paint_hide.c @@ -403,6 +403,9 @@ static int hide_show_exec(bContext *C, wmOperator *op) BKE_mesh_flush_hidden_from_verts(me); } + SCULPT_visibility_sync_all_vertex_to_face_sets(ob->sculpt); + + DEG_id_tag_update(&ob->id, ID_RECALC_SHADING); ED_region_tag_redraw(region); return OPERATOR_FINISHED; diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 1777d63e330..c3ea3671195 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -435,8 +435,23 @@ static void sculpt_visibility_sync_vertex_to_face_sets(SculptSession *ss, int in void SCULPT_visibility_sync_all_vertex_to_face_sets(SculptSession *ss) { - for (int i = 0; i < ss->totvert; i++) { - sculpt_visibility_sync_vertex_to_face_sets(ss, i); + if (BKE_pbvh_type(ss->pbvh) == PBVH_FACES) { + for (int i = 0; i < ss->totpoly; i++) { + MPoly *poly = &ss->mpoly[i]; + bool poly_visible = true; + for (int l = 0; l < poly->totloop; l++) { + MLoop *loop = &ss->mloop[poly->loopstart + l]; + if (!SCULPT_vertex_visible_get(ss, (int)loop->v)) { + poly_visible = false; + } + } + if (poly_visible) { + ss->face_sets[i] = abs(ss->face_sets[i]); + } + else { + ss->face_sets[i] = -abs(ss->face_sets[i]); + } + } } } |