[Bf-blender-cvs] [b7d7bbfc488] blender2.8: Fix extrude glitch where undo state was visible

Campbell Barton noreply at git.blender.org
Sun May 6 11:51:06 CEST 2018


Commit: b7d7bbfc488c37c110c00baf51d58eb12f8b2efb
Author: Campbell Barton
Date:   Sun May 6 11:48:32 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBb7d7bbfc488c37c110c00baf51d58eb12f8b2efb

Fix extrude glitch where undo state was visible

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

M	source/blender/editors/mesh/editmesh_extrude.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_ops.c

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

diff --git a/source/blender/editors/mesh/editmesh_extrude.c b/source/blender/editors/mesh/editmesh_extrude.c
index 85472b7a0aa..3d19ee8c241 100644
--- a/source/blender/editors/mesh/editmesh_extrude.c
+++ b/source/blender/editors/mesh/editmesh_extrude.c
@@ -451,11 +451,18 @@ static void manipulator_mesh_extrude_refresh(const bContext *C, wmManipulatorGro
 		wmOperator *op_transform = op->macro.last;
 		wmManipulatorOpElem *mpop = WM_manipulator_operator_get(man->axis_redo, 0);
 
+		PointerRNA macroptr = RNA_pointer_get(&mpop->ptr, "TRANSFORM_OT_translate");
+
 		float value[4];
 		RNA_float_get_array(op_transform->ptr, "value", value);
-
-		PointerRNA macroptr = RNA_pointer_get(&mpop->ptr, "TRANSFORM_OT_translate");
 		RNA_float_set_array(&macroptr, "value", value);
+
+		/* Currently has glitch in re-applying. */
+#if 0
+		int constraint_axis[3];
+		RNA_boolean_get_array(op_transform->ptr, "constraint_axis", constraint_axis);
+		RNA_boolean_set_array(&macroptr, "constraint_axis", constraint_axis);
+#endif
 	}
 }
 
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 0f1abe00eb4..6b36e738cc0 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2230,6 +2230,33 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 	calculatePropRatio(t);
 	calculateCenter(t);
 
+	/* Overwrite initial values if operator supplied a non-null vector.
+	 *
+	 * Run before init functions so 'values_modal_offset' can be applied on mouse input.
+	 */
+	BLI_assert(is_zero_v4(t->values_modal_offset));
+	if ((prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop)) {
+		float values[4] = {0}; /* in case value isn't length 4, avoid uninitialized memory  */
+
+		if (RNA_property_array_check(prop)) {
+			RNA_float_get_array(op->ptr, "value", values);
+		}
+		else {
+			values[0] = RNA_float_get(op->ptr, "value");
+		}
+
+		copy_v4_v4(t->values, values);
+
+		if (t->flag & T_MODAL) {
+			copy_v4_v4(t->values_modal_offset, values);
+			t->redraw = TREDRAW_HARD;
+		}
+		else {
+			copy_v4_v4(t->auto_values, values);
+			t->flag |= T_AUTOVALUES;
+		}
+	}
+
 	if (event) {
 		/* Initialize accurate transform to settings requested by keymap. */
 		bool use_accurate = false;
@@ -2408,33 +2435,6 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 		}
 	}
 
-	BLI_assert(is_zero_v4(t->values_modal_offset));
-
-	/* overwrite initial values if operator supplied a non-null vector
-	 *
-	 * keep last so we can apply the constraints space.
-	 */
-	if ((prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop)) {
-		float values[4] = {0}; /* in case value isn't length 4, avoid uninitialized memory  */
-
-		if (RNA_property_array_check(prop)) {
-			RNA_float_get_array(op->ptr, "value", values);
-		}
-		else {
-			values[0] = RNA_float_get(op->ptr, "value");
-		}
-
-		copy_v4_v4(t->values, values);
-
-		if (t->flag & T_MODAL) {
-			copy_v4_v4(t->values_modal_offset, values);
-		}
-		else {
-			copy_v4_v4(t->auto_values, values);
-			t->flag |= T_AUTOVALUES;
-		}
-	}
-
 	t->context = NULL;
 
 	return 1;
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index eba03087711..870c0e36a3b 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -490,6 +490,15 @@ static int transform_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 		WM_event_add_modal_handler(C, op);
 
 		op->flag |= OP_IS_MODAL_GRAB_CURSOR; // XXX maybe we want this with the manipulator only?
+
+		/* Use when modal input has some transformation to begin with. */
+		{
+			TransInfo *t = op->customdata;
+			if (UNLIKELY(!is_zero_v4(t->values_modal_offset))) {
+				transformApply(C, t);
+			}
+		}
+
 		return OPERATOR_RUNNING_MODAL;
 	}
 }



More information about the Bf-blender-cvs mailing list