[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