Fix extrude glitch where undo state was visible
This commit is contained in:
@@ -451,11 +451,18 @@ static void manipulator_mesh_extrude_refresh(const bContext *C, wmManipulatorGro
|
|||||||
wmOperator *op_transform = op->macro.last;
|
wmOperator *op_transform = op->macro.last;
|
||||||
wmManipulatorOpElem *mpop = WM_manipulator_operator_get(man->axis_redo, 0);
|
wmManipulatorOpElem *mpop = WM_manipulator_operator_get(man->axis_redo, 0);
|
||||||
|
|
||||||
|
PointerRNA macroptr = RNA_pointer_get(&mpop->ptr, "TRANSFORM_OT_translate");
|
||||||
|
|
||||||
float value[4];
|
float value[4];
|
||||||
RNA_float_get_array(op_transform->ptr, "value", value);
|
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);
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2230,6 +2230,33 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
|||||||
calculatePropRatio(t);
|
calculatePropRatio(t);
|
||||||
calculateCenter(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) {
|
if (event) {
|
||||||
/* Initialize accurate transform to settings requested by keymap. */
|
/* Initialize accurate transform to settings requested by keymap. */
|
||||||
bool use_accurate = false;
|
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;
|
t->context = NULL;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -490,6 +490,15 @@ static int transform_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||||||
WM_event_add_modal_handler(C, op);
|
WM_event_add_modal_handler(C, op);
|
||||||
|
|
||||||
op->flag |= OP_IS_MODAL_GRAB_CURSOR; // XXX maybe we want this with the manipulator only?
|
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;
|
return OPERATOR_RUNNING_MODAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user