diff options
Diffstat (limited to 'source/blender/editors/armature/armature_utils.c')
-rw-r--r-- | source/blender/editors/armature/armature_utils.c | 15 |
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]) |