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:
authorBastien Montagne <montagne29@wanadoo.fr>2014-05-05 22:56:38 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2014-05-05 22:57:52 +0400
commit036de9bfa58dcfceb09d804eda651f48a9986a8f (patch)
treed919d5e89196bd372fa5e5755104648f3f6fcde9 /source/blender/editors/armature/armature_utils.c
parentf5687323a362847a2f8d101da8512f06e3c1f5f3 (diff)
Make bpy.types.EditBone.matrix writeable.
Makes importing armatures from matrices (FBX...) *much* easier.
Diffstat (limited to 'source/blender/editors/armature/armature_utils.c')
-rw-r--r--source/blender/editors/armature/armature_utils.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index 52e3285d240..f22e668bcb7 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -216,6 +216,31 @@ void ED_armature_ebone_to_mat4(EditBone *ebone, float mat[4][4])
copy_v3_v3(mat[3], ebone->head);
}
+void ED_armature_ebone_from_mat3(EditBone *ebone, float mat[3][3])
+{
+ float vec[3], roll;
+ const float len = len_v3v3(ebone->head, ebone->tail);
+
+ mat3_to_vec_roll(mat, vec, &roll);
+
+ madd_v3_v3v3fl(ebone->tail, ebone->head, vec, len);
+ ebone->roll = roll;
+}
+
+void ED_armature_ebone_from_mat4(EditBone *ebone, float mat[4][4])
+{
+ float mat3[3][3];
+
+ copy_m3_m4(mat3, mat);
+ /* We want normalized matrix here, to be consistent with ebone_to_mat. */
+ BLI_ASSERT_UNIT_M3(mat3);
+
+ sub_v3_v3(ebone->tail, ebone->head);
+ copy_v3_v3(ebone->head, mat[3]);
+ add_v3_v3(ebone->tail, mat[3]);
+ ED_armature_ebone_from_mat3(ebone, mat3);
+}
+
/**
* Return a pointer to the bone of the given name
*/