Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_mode_bbone_resize.c
| Show All 31 Lines | |||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "UI_interface.h" | #include "UI_interface.h" | ||||
| #include "BLT_translation.h" | #include "BLT_translation.h" | ||||
| #include "transform.h" | #include "transform.h" | ||||
| #include "transform_constraints.h" | #include "transform_constraints.h" | ||||
| #include "transform_data.h" | |||||
| #include "transform_mode.h" | #include "transform_mode.h" | ||||
| #include "transform_snap.h" | #include "transform_snap.h" | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /* Transform (EditBone (B-bone) width scaling) */ | /* Transform (EditBone (B-bone) width scaling) */ | ||||
| /** \name Transform B-bone width scaling | /** \name Transform B-bone width scaling | ||||
| * \{ */ | * \{ */ | ||||
| Show All 34 Lines | BLI_snprintf(str, | ||||
| &tvec[0], | &tvec[0], | ||||
| &tvec[NUM_STR_REP_LEN], | &tvec[NUM_STR_REP_LEN], | ||||
| &tvec[NUM_STR_REP_LEN * 2], | &tvec[NUM_STR_REP_LEN * 2], | ||||
| t->con.text, | t->con.text, | ||||
| t->proptext); | t->proptext); | ||||
| } | } | ||||
| } | } | ||||
| static void ElementBoneSize(TransInfo *t, TransDataContainer *tc, TransData *td, float mat[3][3]) | static void ElementBoneSize(TransInfo *t, TransDataContainer *tc, const int tdi, float mat[3][3]) | ||||
| { | { | ||||
| TransData *td = tc->data; | |||||
| float tmat[3][3], smat[3][3], oldy; | float tmat[3][3], smat[3][3], oldy; | ||||
| float sizemat[3][3]; | float sizemat[3][3]; | ||||
| mul_m3_m3m3(smat, mat, td->mtx); | mul_m3_m3m3(smat, mat, td->space[tdi].mtx); | ||||
| mul_m3_m3m3(tmat, td->smtx, smat); | mul_m3_m3m3(tmat, td->space[tdi].smtx, smat); | ||||
| if (t->con.applySize) { | if (t->con.applySize) { | ||||
| t->con.applySize(t, tc, td, tmat); | t->con.applySize(t, tc, tdi, tmat); | ||||
| } | } | ||||
| /* we've tucked the scale in loc */ | /* we've tucked the scale in loc */ | ||||
| oldy = td->iloc[1]; | oldy = td->basic[tdi].iloc[1]; | ||||
| size_to_mat3(sizemat, td->iloc); | size_to_mat3(sizemat, td->basic[tdi].iloc); | ||||
| mul_m3_m3m3(tmat, tmat, sizemat); | mul_m3_m3m3(tmat, tmat, sizemat); | ||||
| mat3_to_size(td->loc, tmat); | mat3_to_size(td->basic[tdi].loc, tmat); | ||||
| td->loc[1] = oldy; | td->basic[tdi].loc[1] = oldy; | ||||
| } | } | ||||
| static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2])) | static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2])) | ||||
| { | { | ||||
| float mat[3][3]; | float mat[3][3]; | ||||
| int i; | |||||
| char str[UI_MAX_DRAW_STR]; | char str[UI_MAX_DRAW_STR]; | ||||
| if (t->flag & T_INPUT_IS_VALUES_FINAL) { | if (t->flag & T_INPUT_IS_VALUES_FINAL) { | ||||
| copy_v3_v3(t->values_final, t->values); | copy_v3_v3(t->values_final, t->values); | ||||
| } | } | ||||
| else { | else { | ||||
| float ratio = t->values[0]; | float ratio = t->values[0]; | ||||
| copy_v3_fl(t->values_final, ratio); | copy_v3_fl(t->values_final, ratio); | ||||
| snapGridIncrement(t, t->values_final); | snapGridIncrement(t, t->values_final); | ||||
| if (applyNumInput(&t->num, t->values_final)) { | if (applyNumInput(&t->num, t->values_final)) { | ||||
| constraintNumInput(t, t->values_final); | constraintNumInput(t, t->values_final); | ||||
| } | } | ||||
| } | } | ||||
| size_to_mat3(mat, t->values_final); | size_to_mat3(mat, t->values_final); | ||||
| if (t->con.applySize) { | if (t->con.applySize) { | ||||
| t->con.applySize(t, NULL, NULL, mat); | t->con.applySize(t, NULL, 0, mat); | ||||
| } | } | ||||
| copy_m3_m3(t->mat, mat); // used in gizmo | copy_m3_m3(t->mat, mat); // used in gizmo | ||||
| headerBoneSize(t, t->values_final, str); | headerBoneSize(t, t->values_final, str); | ||||
| FOREACH_TRANS_DATA_CONTAINER (t, tc) { | FOREACH_TRANS_DATA_CONTAINER (t, tc) { | ||||
| TransData *td = tc->data; | TransData *td = tc->data; | ||||
| for (i = 0; i < tc->data_len; i++, td++) { | for (int tdi = 0; tdi < tc->data_len; tdi++) { | ||||
| if (td->flag & TD_SKIP) { | if (td->basic[tdi].flag & TD_SKIP) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| ElementBoneSize(t, tc, td, mat); | ElementBoneSize(t, tc, tdi, mat); | ||||
| } | } | ||||
| } | } | ||||
| recalcData(t); | recalcData(t); | ||||
| ED_area_status_text(t->area, str); | ED_area_status_text(t->area, str); | ||||
| } | } | ||||
| Show All 24 Lines | |||||