[Bf-blender-cvs] [0b50ea5] master: Fix redraw and undo issues with hidden parts in dyntopo after recent changes.
Antony Riakiotakis
noreply at git.blender.org
Fri Apr 11 14:06:41 CEST 2014
Commit: 0b50ea5a8802e2db48101f5e0e1b0465afb907a5
Author: Antony Riakiotakis
Date: Fri Apr 11 15:02:02 2014 +0300
https://developer.blender.org/rB0b50ea5a8802e2db48101f5e0e1b0465afb907a5
Fix redraw and undo issues with hidden parts in dyntopo after recent
changes.
===================================================================
M source/blender/blenkernel/intern/pbvh_bmesh.c
M source/blender/bmesh/intern/bmesh_log.c
===================================================================
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index 9547ac9..40605c5 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 d9bbb5c..7dac0d4 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));
}
}
More information about the Bf-blender-cvs
mailing list