Revision: 36471
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36471
Author:   campbellbarton
Date:     2011-05-04 03:34:55 +0000 (Wed, 04 May 2011)
Log Message:
-----------
fix for crash executing sculpt via python.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c    
2011-05-04 01:50:17 UTC (rev 36470)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c    
2011-05-04 03:34:55 UTC (rev 36471)
@@ -896,11 +896,20 @@
 {
        PaintStroke *stroke = op->customdata;
 
+       /* only when executed for the first time */
+       if(stroke->stroke_started == 0) {
+               /* XXX stroke->last_mouse_position is unset, this may cause 
problems */
+               stroke->test_start(C, op, NULL);
+               stroke->stroke_started= 1;
+       }
+
        RNA_BEGIN(op->ptr, itemptr, "stroke") {
                stroke->update_step(C, stroke, &itemptr);
        }
        RNA_END;
 
+       stroke->done(C, stroke);
+
        MEM_freeN(stroke);
        op->customdata = NULL;
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c  2011-05-04 
01:50:17 UTC (rev 36470)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c  2011-05-04 
03:34:55 UTC (rev 36471)
@@ -3462,8 +3462,9 @@
 static int sculpt_stroke_test_start(bContext *C, struct wmOperator *op,
                                        wmEvent *event)
 {
-       /* Don't start the stroke until mouse goes over the mesh */
-       if(over_mesh(C, op, event->x, event->y)) {
+       /* Don't start the stroke until mouse goes over the mesh.
+        * note: event will only be null when re-executing the saved stroke. */
+       if(event==NULL || over_mesh(C, op, event->x, event->y)) {
                Object *ob = CTX_data_active_object(C);
                SculptSession *ss = ob->sculpt;
                Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
@@ -3604,22 +3605,15 @@
 
 static int sculpt_brush_stroke_exec(bContext *C, wmOperator *op)
 {
-       Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
-       SculptSession *ss = CTX_data_active_object(C)->sculpt;
-
        if(!sculpt_brush_stroke_init(C, op->reports))
                return OPERATOR_CANCELLED;
 
        op->customdata = paint_stroke_new(C, sculpt_stroke_get_location, 
sculpt_stroke_test_start,
                                          sculpt_stroke_update_step, 
sculpt_stroke_done, 0);
 
-       sculpt_update_cache_invariants(C, sd, ss, op, NULL);
-
+       /* frees op->customdata */
        paint_stroke_exec(C, op);
 
-       sculpt_flush_update(C);
-       sculpt_cache_free(ss->cache);
-
        return OPERATOR_FINISHED;
 }
 

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to