Extrude Widget: with/without axis constraint
This commit is contained in:
@@ -500,12 +500,9 @@ static void manipulator_mesh_extrude_refresh(const bContext *C, wmManipulatorGro
|
||||
RNA_float_get_array(op_transform->ptr, "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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2257,6 +2257,36 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
||||
}
|
||||
}
|
||||
|
||||
/* Transformation axis from operator */
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "axis")) && RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_get_array(op->ptr, prop, t->axis);
|
||||
normalize_v3(t->axis);
|
||||
copy_v3_v3(t->axis_orig, t->axis);
|
||||
}
|
||||
|
||||
/* Constraint init from operator */
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")) && RNA_property_is_set(op->ptr, prop)) {
|
||||
int constraint_axis[3];
|
||||
|
||||
RNA_property_boolean_get_array(op->ptr, prop, constraint_axis);
|
||||
|
||||
if (constraint_axis[0] || constraint_axis[1] || constraint_axis[2]) {
|
||||
t->con.mode |= CON_APPLY;
|
||||
|
||||
if (constraint_axis[0]) {
|
||||
t->con.mode |= CON_AXIS0;
|
||||
}
|
||||
if (constraint_axis[1]) {
|
||||
t->con.mode |= CON_AXIS1;
|
||||
}
|
||||
if (constraint_axis[2]) {
|
||||
t->con.mode |= CON_AXIS2;
|
||||
}
|
||||
|
||||
setUserConstraint(t, t->current_orientation, t->con.mode, "%s");
|
||||
}
|
||||
}
|
||||
|
||||
if (event) {
|
||||
/* Initialize accurate transform to settings requested by keymap. */
|
||||
bool use_accurate = false;
|
||||
@@ -2405,36 +2435,6 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Transformation axis from operator */
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "axis")) && RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_get_array(op->ptr, prop, t->axis);
|
||||
normalize_v3(t->axis);
|
||||
copy_v3_v3(t->axis_orig, t->axis);
|
||||
}
|
||||
|
||||
/* Constraint init from operator */
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")) && RNA_property_is_set(op->ptr, prop)) {
|
||||
int constraint_axis[3];
|
||||
|
||||
RNA_property_boolean_get_array(op->ptr, prop, constraint_axis);
|
||||
|
||||
if (constraint_axis[0] || constraint_axis[1] || constraint_axis[2]) {
|
||||
t->con.mode |= CON_APPLY;
|
||||
|
||||
if (constraint_axis[0]) {
|
||||
t->con.mode |= CON_AXIS0;
|
||||
}
|
||||
if (constraint_axis[1]) {
|
||||
t->con.mode |= CON_AXIS1;
|
||||
}
|
||||
if (constraint_axis[2]) {
|
||||
t->con.mode |= CON_AXIS2;
|
||||
}
|
||||
|
||||
setUserConstraint(t, t->current_orientation, t->con.mode, "%s");
|
||||
}
|
||||
}
|
||||
|
||||
t->context = NULL;
|
||||
|
||||
return 1;
|
||||
|
||||
@@ -419,7 +419,12 @@ void applyMouseInput(TransInfo *t, MouseInput *mi, const int mval[2], float outp
|
||||
|
||||
if (!is_zero_v3(t->values_modal_offset)) {
|
||||
float values_ofs[3];
|
||||
mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset);
|
||||
if (t->con.mode & CON_APPLY) {
|
||||
mul_v3_m3v3(values_ofs, t->spacemtx, t->values_modal_offset);
|
||||
}
|
||||
else {
|
||||
copy_v3_v3(values_ofs, t->values_modal_offset);
|
||||
}
|
||||
add_v3_v3(t->values, values_ofs);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user