[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(¯optr, "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(¯optr, "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