[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