[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54451] trunk/blender/source/blender: fix for weight gradient crashing on redo (wasn' t possible to redo this initially).

Campbell Barton ideasman42 at gmail.com
Mon Feb 11 07:58:39 CET 2013


Revision: 54451
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54451
Author:   campbellbarton
Date:     2013-02-11 06:58:38 +0000 (Mon, 11 Feb 2013)
Log Message:
-----------
fix for weight gradient crashing on redo (wasn't possible to redo this initially).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2013-02-11 05:55:11 UTC (rev 54450)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2013-02-11 06:58:38 UTC (rev 54451)
@@ -3201,6 +3201,7 @@
 static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
 {
 	wmGesture *gesture = op->customdata;
+	DMGradient_vertStore *vert_cache;
 	struct ARegion *ar = CTX_wm_region(C);
 	Scene *scene = CTX_data_scene(C);
 	Object *ob = CTX_data_active_object(C);
@@ -3211,25 +3212,32 @@
 	int y_end = RNA_int_get(op->ptr, "yend");
 	float sco_start[2] = {x_start, y_start};
 	float sco_end[2] = {x_end, y_end};
-
+	const bool is_interactive = (gesture != NULL);
 	DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
 
 	DMGradient_userData data = {0};
 
-	if (gesture->userdata == NULL) {
-		VPaint *wp = scene->toolsettings->wpaint;
+	if (is_interactive) {
+		if (gesture->userdata == NULL) {
+			VPaint *wp = scene->toolsettings->wpaint;
 
-		gesture->userdata = MEM_mallocN(sizeof(DMGradient_vertStore) * me->totvert, __func__);
-		data.is_init = TRUE;
+			gesture->userdata = MEM_mallocN(sizeof(DMGradient_vertStore) * me->totvert, __func__);
+			data.is_init = true;
 
-		copy_wpaint_prev(wp, me->dvert, me->totvert);
+			copy_wpaint_prev(wp, me->dvert, me->totvert);
 
-		/* on init only, convert face -> vert sel  */
-		if (me->editflag & ME_EDIT_PAINT_FACE_SEL) {
-			BKE_mesh_flush_select_from_polys(me);
+			/* on init only, convert face -> vert sel  */
+			if (me->editflag & ME_EDIT_PAINT_FACE_SEL) {
+				BKE_mesh_flush_select_from_polys(me);
+			}
 		}
 
+		vert_cache = gesture->userdata;
 	}
+	else {
+		data.is_init = true;
+		vert_cache = MEM_mallocN(sizeof(DMGradient_vertStore) * me->totvert, __func__);
+	}
 
 	data.ar = ar;
 	data.scene = scene;
@@ -3239,7 +3247,7 @@
 	data.sco_line_div = 1.0f / len_v2v2(sco_start, sco_end);
 	data.def_nr = ob->actdef - 1;
 	data.use_select = (me->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL));
-	data.vert_cache = gesture->userdata;
+	data.vert_cache = vert_cache;
 	data.type = RNA_enum_get(op->ptr, "type");
 
 	{
@@ -3255,6 +3263,10 @@
 	DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
 
+	if (is_interactive == false) {
+		MEM_freeN(vert_cache);
+	}
+
 	return OPERATOR_FINISHED;
 }
 

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2013-02-11 05:55:11 UTC (rev 54450)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2013-02-11 06:58:38 UTC (rev 54451)
@@ -1204,8 +1204,13 @@
 	RNA_def_int(ot->srna, "ystart", 0, INT_MIN, INT_MAX, "Y Start", "", INT_MIN, INT_MAX);
 	RNA_def_int(ot->srna, "yend", 0, INT_MIN, INT_MAX, "Y End", "", INT_MIN, INT_MAX);
 	
-	if (cursor)
-		RNA_def_int(ot->srna, "cursor", cursor, 0, INT_MAX, "Cursor", "Mouse cursor style to use during the modal operator", 0, INT_MAX);
+	if (cursor) {
+		PropertyRNA *prop;
+
+		prop = RNA_def_int(ot->srna, "cursor", cursor, 0, INT_MAX,
+		                   "Cursor", "Mouse cursor style to use during the modal operator", 0, INT_MAX);
+		RNA_def_property_flag(prop, PROP_HIDDEN);
+	}
 }
 
 




More information about the Bf-blender-cvs mailing list