Transform: Allow orientation change with custom matrix in modal

This commit is contained in:
Germano Cavalcante 2020-05-01 17:40:54 -03:00
parent 87602d886f
commit 06839379c5
Notes: blender-bot 2023-02-14 03:34:17 +01:00
Referenced by issue #76381, Blender 2.8 external renderer shader node bug
Referenced by issue #76318, Preferences: Lower left button broken
4 changed files with 11 additions and 10 deletions

View File

@ -828,7 +828,7 @@ static void transform_event_xyz_constraint(TransInfo *t, short key_type, bool is
if (ELEM(cmode, '\0', axis)) {
/* Successive presses on existing axis, cycle orientation modes. */
t->orientation.index = (t->orientation.index + 1) % ARRAY_SIZE(t->orientation.types);
initTransformOrientation(t->context, t);
initTransformOrientation(t->context, t, t->orientation.types[t->orientation.index]);
}
if (t->orientation.index == 0) {
@ -1893,7 +1893,13 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
unit_m3(t->spacemtx);
initTransInfo(C, t, op, event);
initTransformOrientation(C, t);
/* Use the custom orientation when it is set. */
short orientation = t->orientation.types[0] == V3D_ORIENT_CUSTOM_MATRIX ?
V3D_ORIENT_CUSTOM_MATRIX :
t->orientation.types[t->orientation.index];
initTransformOrientation(C, t, orientation);
if (t->spacetype == SPACE_VIEW3D) {
t->draw_handle_apply = ED_region_draw_cb_activate(

View File

@ -912,7 +912,7 @@ void transform_data_ext_rotate(TransData *td, float mat[3][3], bool use_drot);
/*********************** Transform Orientations ******************************/
void initTransformOrientation(struct bContext *C, TransInfo *t);
void initTransformOrientation(struct bContext *C, TransInfo *t, short orientation);
/* Those two fill in mat and return non-zero on success */
bool createSpaceNormal(float mat[3][3], const float normal[3]);

View File

@ -996,7 +996,7 @@ void initSelectConstraint(TransInfo *t, bool force_global)
else {
if (t->orientation.index == 0) {
t->orientation.index = 1;
initTransformOrientation(t->context, t);
initTransformOrientation(t->context, t, t->orientation.types[t->orientation.index]);
}
orientation = t->orientation.types[t->orientation.index];
}

View File

@ -438,16 +438,11 @@ static int armature_bone_transflags_update_recursive(bArmature *arm,
return total;
}
void initTransformOrientation(bContext *C, TransInfo *t)
void initTransformOrientation(bContext *C, TransInfo *t, short orientation)
{
Object *ob = CTX_data_active_object(C);
Object *obedit = CTX_data_active_object(C);
/* Use the custom orientation when it is set. */
short orientation = t->orientation.types[0] == V3D_ORIENT_CUSTOM_MATRIX ?
V3D_ORIENT_CUSTOM_MATRIX :
t->orientation.types[t->orientation.index];
switch (orientation) {
case V3D_ORIENT_GLOBAL:
unit_m3(t->spacemtx);