Fix T52195: Sculpt from Python fails
authorCampbell Barton <ideasman42@gmail.com>
Fri, 28 Jul 2017 19:59:17 +0000 (05:59 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 28 Jul 2017 20:05:43 +0000 (06:05 +1000)
When calling sculpt from Python,
setting 3D 'location' but not 2D 'mouse' stopped working in 2.78.

Now check if the operator is running non-interactively and
skip the mouse-over check.

source/blender/editors/sculpt_paint/sculpt.c

index 44cc2720a328a26a92c8ddf9731234b1653b0293..f0c1203004e994b3a024fa44d7745f1a806c5a16 100644 (file)
@@ -4656,8 +4656,11 @@ static bool sculpt_stroke_test_start(bContext *C, struct wmOperator *op,
                                     const float mouse[2])
 {
        /* Don't start the stroke until mouse goes over the mesh.
-        * note: mouse will only be null when re-executing the saved stroke. */
-       if (!mouse || over_mesh(C, op, mouse[0], mouse[1])) {
+        * note: mouse will only be null when re-executing the saved stroke.
+        * We have exception for 'exec' strokes since they may not set 'mouse', only 'location', see: T52195. */
+       if (((op->flag & OP_IS_INVOKE) == 0) ||
+           (mouse == NULL) || over_mesh(C, op, mouse[0], mouse[1]))
+       {
                Object *ob = CTX_data_active_object(C);
                SculptSession *ss = ob->sculpt;
                Sculpt *sd = CTX_data_tool_settings(C)->sculpt;