Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2013-02-19 07:26:18 +0400
committerJoshua Leung <aligorith@gmail.com>2013-02-19 07:26:18 +0400
commit926e0e7eb71726fdd1be3f9d299bf3d9c3ad0a7a (patch)
treef47877b1ba4962a65898a60860f947572bc4050b /source/blender/editors/transform
parent6550fb8452da5cdb1f913a1e57e13354b4ea6f5f (diff)
Bugfix [#34283] armature bones losing their roll setting upon translation in
edit mode My earlier fix for [#33974] (in r.54061) was causing some problems where manually specified roll values on horizontal or angled bones were getting reset. This could be nasty as you might not notice the changes for a while (especially when using stick bones without axes displayed). I've now put in place a hacky compromise solution which should catch both of these situations nicely. For z-axis (i.e. vertical) movements, the r.54061 fix is used, while for everything else (moving or just touch-n-go), the old setting is used.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform_generics.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index f97a8175101..76ca9d8959a 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -809,6 +809,7 @@ static void recalcData_view3d(TransInfo *t)
if (td->extra) {
float vec[3], up_axis[3];
float qrot[4];
+ bool ztrans_hack = false;
ebo = td->extra;
copy_v3_v3(up_axis, td->axismtx[2]);
@@ -823,7 +824,25 @@ static void recalcData_view3d(TransInfo *t)
mul_m3_v3(t->mat, up_axis);
}
- ebo->roll = ED_rollBoneToVector(ebo, up_axis, TRUE);
+ /* "ztrans_hack" is a hacky compromise fix for two bug reports
+ * - [#33974] : When extruding/translating bones vertically,
+ * the roll of each bone in such vertical chains would
+ * flip between z-axis forward and z-axis backwards
+ * - [#34283] : For "normal" transforms, the original fix for [#33974]
+ * would cause manually-set roll values on horizontal and
+ * diagonal bones to constantly get reset to values the system
+ * deems "correct" (usually 180 degree flips of the manual version)
+ */
+ if (t->mode == TFM_TRANSLATION) {
+ const float ZAXIS_REF[3] = {0.0f, 0.0f, 1.0f};
+ float tdelta[3];
+
+ /* tdelta is the translation - enable this hack when it is z-axis movement */
+ normalize_v3_v3(tdelta, t->values);
+ ztrans_hack = compare_v3v3(tdelta, ZAXIS_REF, 0.1f);
+ }
+
+ ebo->roll = ED_rollBoneToVector(ebo, up_axis, ztrans_hack);
}
}
}