diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2014-04-11 16:02:02 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2014-04-11 16:02:31 +0400 |
commit | 0b50ea5a8802e2db48101f5e0e1b0465afb907a5 (patch) | |
tree | be95f35381b3e4c93d4a0f5cd898dd206c89231e /source | |
parent | a3f5e6c76f08cfb60556c18e1605ed9b8cfa0d5d (diff) |
Fix redraw and undo issues with hidden parts in dyntopo after recent
changes.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/pbvh_bmesh.c | 11 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_log.c | 1 |
2 files changed, 9 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c index 9547ac9fc81..40605c598bd 100644 --- a/source/blender/blenkernel/intern/pbvh_bmesh.c +++ b/source/blender/blenkernel/intern/pbvh_bmesh.c @@ -312,6 +312,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *bvh, int node_index, BLI_assert(BM_face_exists(v_tri, 3, NULL) == false); f = BM_face_create(bvh->bm, v_tri, e_tri, 3, f_example, BM_CREATE_NOP); + f->head.hflag = f_example->head.hflag; BLI_assert(!BLI_ghash_haskey(bvh->bm_face_to_node, f)); @@ -321,6 +322,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *bvh, int node_index, /* mark node for update */ bvh->nodes[node_index].flag |= PBVH_UpdateDrawBuffers | PBVH_UpdateNormals | PBVH_UpdateBB; + bvh->nodes[node_index].flag &= ~PBVH_FullyHidden; /* Log the new face */ BM_log_face_added(bvh->bm_log, f); @@ -540,7 +542,8 @@ static void edge_queue_insert(EdgeQueueContext *eq_ctx, BMEdge *e, * should already make the brush move the vertices only 50%, which means * that topology updates will also happen less frequent, that should be * enough. */ - if (check_mask(eq_ctx, e->v1) || check_mask(eq_ctx, e->v2)) { + if ((check_mask(eq_ctx, e->v1) || check_mask(eq_ctx, e->v2)) && + !(BM_elem_flag_test_bool(e->v1, BM_ELEM_HIDDEN) || BM_elem_flag_test_bool(e->v2, BM_ELEM_HIDDEN))) { pair = BLI_mempool_alloc(eq_ctx->pool); pair[0] = e->v1; pair[1] = e->v2; @@ -619,7 +622,8 @@ static void long_edge_queue_create(EdgeQueueContext *eq_ctx, /* Check leaf nodes marked for topology update */ if ((node->flag & PBVH_Leaf) && - (node->flag & PBVH_UpdateTopology)) + (node->flag & PBVH_UpdateTopology) && + !(node->flag & PBVH_FullyHidden)) { GSetIterator gs_iter; @@ -658,7 +662,8 @@ static void short_edge_queue_create(EdgeQueueContext *eq_ctx, /* Check leaf nodes marked for topology update */ if ((node->flag & PBVH_Leaf) && - (node->flag & PBVH_UpdateTopology)) + (node->flag & PBVH_UpdateTopology) && + !(node->flag & PBVH_FullyHidden)) { GSetIterator gs_iter; diff --git a/source/blender/bmesh/intern/bmesh_log.c b/source/blender/bmesh/intern/bmesh_log.c index d9bbb5c421d..7dac0d45f69 100644 --- a/source/blender/bmesh/intern/bmesh_log.c +++ b/source/blender/bmesh/intern/bmesh_log.c @@ -316,6 +316,7 @@ static void bm_log_faces_restore(BMesh *bm, BMLog *log, GHash *faces) BMFace *f; f = BM_face_create_verts(bm, v, 3, NULL, BM_CREATE_NOP, true); + f->head.hflag = lf->hflag; bm_log_face_id_set(log, f, GET_UINT_FROM_POINTER(key)); } } |