diff options
Diffstat (limited to 'source')
4 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index dea4b2448ff..b78fa4ffdfb 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -59,7 +59,10 @@ typedef struct EditBone { struct EditBone *parent; /* Editbones have a one-way link (i.e. children refer * to parents. This is converted to a two-way link for * normal bones when leaving editmode. */ - void *temp; /* Used to store temporary data */ + union { /* Used to store temporary data */ + void *temp; + float temp_f; + }; char name[64]; /* MAXBONENAME */ float roll; /* Roll along axis. We'll ultimately use the axis/angle method diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index f262bac9762..d1085cf9933 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -258,7 +258,6 @@ typedef struct TransData { float iloc[3]; /* Initial location */ float *val; /* Value pointer for special transforms */ float ival; /* Old value */ - float ival2; /* Another old value (for bone roll we need two different "old values" :/ ). */ float center[3]; /* Individual data center */ float mtx[3][3]; /* Transformation matrix from data space to global space */ float smtx[3][3]; /* Transformation matrix from global space to data space */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 0e2bdc11e47..91bac74e8e6 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1074,12 +1074,12 @@ static void createTransArmatureVerts_init_roll_fix(TransData *td, EditBone *ebo) if (fabsf(dot_v3v3(vec, z_axis)) > 0.999999f) { /* If nearly aligned with Z axis, do not alter roll. See T38843. */ - td->ival = ebo->roll; + ebo->temp_f = ebo->roll; } else { - td->ival = ebo->roll - ED_rollBoneToVector(ebo, z_axis, false); + ebo->temp_f = ebo->roll - ED_rollBoneToVector(ebo, z_axis, false); } - td->ival2 = ebo->roll; + td->ival = ebo->roll; } static void createTransArmatureVerts(TransInfo *t) diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 7b4f0b8eca3..4e93d3a89a3 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -823,10 +823,10 @@ static void recalcData_objects(TransInfo *t) if (fabsf(dot_v3v3(vec, z_axis)) > 0.999999f) { /* If our bone is Z-aligned, do not alter roll. See T38843. */ - ebo->roll = td->ival2; + ebo->roll = td->ival; } else { - ebo->roll = td->ival + ED_rollBoneToVector(ebo, z_axis, false); + ebo->roll = ebo->temp_f + ED_rollBoneToVector(ebo, z_axis, false); } } } |