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:
-rw-r--r--source/blender/editors/armature/armature_utils.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index 2b18fc15f63..451148ed936 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -232,11 +232,22 @@ EditBone *ED_armature_ebone_find_shared_parent(EditBone *ebone_child[],
void ED_armature_ebone_to_mat3(EditBone *ebone, float mat[3][3])
{
- float delta[3];
+ float delta[3], roll;
/* Find the current bone matrix */
sub_v3_v3v3(delta, ebone->tail, ebone->head);
- vec_roll_to_mat3(delta, ebone->roll, mat);
+ roll = ebone->roll;
+ if (!normalize_v3(delta)) {
+ /* Use the orientation of the parent bone if any. */
+ const EditBone *ebone_parent = ebone->parent;
+ if (ebone_parent) {
+ sub_v3_v3v3(delta, ebone_parent->tail, ebone_parent->head);
+ normalize_v3(delta);
+ roll = ebone_parent->roll;
+ }
+ }
+
+ vec_roll_to_mat3_normalized(delta, roll, mat);
}
void ED_armature_ebone_to_mat4(EditBone *ebone, float mat[4][4])