[Bf-blender-cvs] [83bc4f9c9e4] soc-2017-sculpting_improvements: Added Redo. Currently the whole mesh is stored. Partial copy todo.

Sebastian Witt noreply at git.blender.org
Fri Jul 21 16:25:28 CEST 2017


Commit: 83bc4f9c9e4f0d613546dc3bf55cac64a4388d38
Author: Sebastian Witt
Date:   Fri Jul 21 16:22:33 2017 +0200
Branches: soc-2017-sculpting_improvements
https://developer.blender.org/rB83bc4f9c9e4f0d613546dc3bf55cac64a4388d38

Added Redo. Currently the whole mesh is stored. Partial copy todo.

===================================================================

M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c

===================================================================

diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index b2c18217f35..14b82f7e616 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -6608,7 +6608,7 @@ static bool calc_stroke_normal_ori(SilhouetteStroke *stroke, float z_vec[3]) {
 }
 
 /* Generates a 3D shape from a stroke. */
-static void silhouette_create_shape_mesh(bContext *UNUSED(C), Mesh *me, SilhouetteData *sil, SilhouetteStroke *stroke)
+static void silhouette_create_shape_mesh(bContext *C, Mesh *me, SilhouetteData *sil, SilhouetteStroke *stroke)
 {
 	float z_vec[3] = {0.0f,0.0f,1.0f};
 	float depth = sil->depth;
@@ -6662,7 +6662,7 @@ static void silhouette_create_shape_mesh(bContext *UNUSED(C), Mesh *me, Silhouet
 
 	free_spine(spine);
 
-	/*ED_mesh_update(me, C, 1, 1);*/
+	ED_mesh_update(me, C, 1, 1);
 }
 
 /* Adds additional points to the stroke if start and end are far apart. */
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index 676bf790f86..9de5d410ad2 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -69,6 +69,7 @@
 #include "paint_intern.h"
 #include "sculpt_intern.h"
 #include "BKE_object.h"
+#include "ED_mesh.h"
 
 /************************** Undo *************************/
 
@@ -463,40 +464,55 @@ static void sculpt_undo_silhouette_restore(bContext *C, Object *ob, SculptUndoNo
 		CustomData_realloc(&me->ldata, me->totloop - unode->bm_enter_totloop);
 		CustomData_realloc(&me->pdata, me->totpoly - unode->bm_enter_totpoly);
 
-		BKE_mesh_update_customdata_pointers(me, true);
+		BKE_mesh_update_customdata_pointers(me, false);
 
 		me->totvert = me->totvert - unode->bm_enter_totvert;
 		me->totedge = me->totedge - unode->bm_enter_totedge;
 		me->totloop = me->totloop - unode->bm_enter_totloop;
 		me->totpoly = me->totpoly - unode->bm_enter_totpoly;
 
+		BKE_mesh_calc_edges(me, false, true);
+		BKE_mesh_tessface_clear(me);
+		BKE_mesh_calc_normals(me);
+		DAG_id_tag_update(&me->id, 0);
+		WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
+
 		BKE_object_free_derived_caches(ob);
 	} else {
 		unode->applied = true;
-		/* TODO: Add Redo
-		 printf("Redo it!\n");
-
-		CustomData_realloc(&me->vdata, me->totvert + unode->bm_enter_totvert);
-		CustomData_realloc(&me->edata, me->totedge + unode->bm_enter_totedge);
-		CustomData_realloc(&me->ldata, me->totloop + unode->bm_enter_totloop);
-		CustomData_realloc(&me->pdata, me->totpoly + unode->bm_enter_totpoly);
-
-		CustomData_copy_data(&unode->bm_enter_vdata, &me->vdata, 0,
-						me->totvert, unode->bm_enter_totvert);
-		CustomData_copy_data(&unode->bm_enter_edata, &me->edata, 0,
-							 me->totedge, unode->bm_enter_totedge);
-		CustomData_copy_data(&unode->bm_enter_ldata, &me->ldata, 0,
-							 me->totloop, unode->bm_enter_totloop);
-		CustomData_copy_data(&unode->bm_enter_pdata, &me->pdata, 0,
-							 me->totpoly, unode->bm_enter_totpoly);
-
-		me->totvert += unode->bm_enter_totvert;
-		me->totloop += unode->bm_enter_totloop;
-		me->totpoly += unode->bm_enter_totpoly;
-		me->totedge += unode->bm_enter_totedge;
+
+		int v_start_n, e_start_n, l_start_n, p_start_n;
+
+		v_start_n = me->totvert;
+		e_start_n = me->totedge;
+		l_start_n = me->totloop;
+		p_start_n = me->totpoly;
+
+		ED_mesh_vertices_add(me, NULL, unode->bm_enter_totvert);
+		ED_mesh_edges_add(me, NULL, unode->bm_enter_totedge);
+		ED_mesh_loops_add(me, NULL, unode->bm_enter_totloop);
+		ED_mesh_polys_add(me, NULL, unode->bm_enter_totpoly);
+
+		CustomData_copy_data(&unode->bm_enter_vdata, &me->vdata, v_start_n, v_start_n, unode->bm_enter_totvert);
+		CustomData_copy_data(&unode->bm_enter_edata, &me->edata, e_start_n, e_start_n, unode->bm_enter_totedge);
+		CustomData_copy_data(&unode->bm_enter_ldata, &me->ldata, l_start_n, l_start_n, unode->bm_enter_totloop);
+		CustomData_copy_data(&unode->bm_enter_pdata, &me->pdata, p_start_n, p_start_n, unode->bm_enter_totpoly);
+
+		/* TODO: Not a full copy:
+		CustomData_copy_data(&unode->bm_enter_vdata, &me->vdata, 0, v_start_n, unode->bm_enter_totvert);
+		CustomData_copy_data(&unode->bm_enter_edata, &me->edata, 0, e_start_n, unode->bm_enter_totedge);
+		CustomData_copy_data(&unode->bm_enter_ldata, &me->ldata, 0, l_start_n, unode->bm_enter_totloop);
+		CustomData_copy_data(&unode->bm_enter_pdata, &me->pdata, 0, p_start_n, unode->bm_enter_totpoly);*/
 
 		BKE_mesh_update_customdata_pointers(me, true);
-		BKE_object_free_derived_caches(ob);*/
+
+		BKE_mesh_calc_edges(me, false, true);
+		BKE_mesh_tessface_clear(me);
+		BKE_mesh_calc_normals(me);
+		DAG_id_tag_update(&me->id, 0);
+		WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
+
+		BKE_object_free_derived_caches(ob);
 	}
 }
 
@@ -957,11 +973,21 @@ SculptUndoNode *sculpt_undo_silhouette_push(Object *ob, int v_start, int e_start
 
 		/* Store a copy of the silhouettes current vertices, loops, and
 		 * polys. TODO: Add bridge edges and deleted existing geometry later */
-		/*TODO: Not a full copy is possible*/
-		CustomData_copy_data(&me->vdata, &unode->bm_enter_vdata, v_start, 0, me->totvert - v_start);
-		CustomData_copy_data(&me->edata, &unode->bm_enter_edata, e_start, 0, me->totedge - e_start);
-		CustomData_copy_data(&me->ldata, &unode->bm_enter_ldata, l_start, 0, me->totloop - l_start);
-		CustomData_copy_data(&me->pdata, &unode->bm_enter_pdata, p_start, 0, me->totpoly - p_start);
+		CustomData_copy(&me->vdata, &unode->bm_enter_vdata, CD_MASK_MESH,
+						CD_DUPLICATE, me->totvert);
+		CustomData_copy(&me->edata, &unode->bm_enter_edata, CD_MASK_MESH,
+						CD_DUPLICATE, me->totedge);
+		CustomData_copy(&me->ldata, &unode->bm_enter_ldata, CD_MASK_MESH,
+						CD_DUPLICATE, me->totloop);
+		CustomData_copy(&me->pdata, &unode->bm_enter_pdata, CD_MASK_MESH,
+						CD_DUPLICATE, me->totpoly);
+
+		/*TODO: Not a full copy:
+		CustomData_copy_data(&me->vdata, &unode->bm_enter_vdata, me->totvert - unode->bm_enter_totvert, 0, unode->bm_enter_totvert);
+		CustomData_copy_data(&me->edata, &unode->bm_enter_edata, me->totedge - unode->bm_enter_totedge, 0, unode->bm_enter_totedge);
+		CustomData_copy_data(&me->ldata, &unode->bm_enter_ldata, me->totloop - unode->bm_enter_totloop, 0, unode->bm_enter_totloop);
+		CustomData_copy_data(&me->pdata, &unode->bm_enter_pdata, me->totpoly - unode->bm_enter_totpoly, 0, unode->bm_enter_totpoly);*/
+
 		unode->bm_enter_totvert = me->totvert - v_start;
 		unode->bm_enter_totedge = me->totedge - e_start;
 		unode->bm_enter_totloop = me->totloop - l_start;




More information about the Bf-blender-cvs mailing list