From 89d7b9a0a6cdd0a2183a8e0f931f38c52303f848 Mon Sep 17 00:00:00 2001 From: Benjy Cook Date: Wed, 6 Jul 2011 13:27:40 +0000 Subject: [PATCH] Added a small useful operator: Fix Armature Rotate. It fixes the common issue with mocap files that sometimes are rotated around the wrong axis --- release/scripts/modules/mocap_tools.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/release/scripts/modules/mocap_tools.py b/release/scripts/modules/mocap_tools.py index e9891bbf498..fb48bac60c7 100644 --- a/release/scripts/modules/mocap_tools.py +++ b/release/scripts/modules/mocap_tools.py @@ -18,10 +18,10 @@ # -from math import hypot, sqrt, isfinite +from math import hypot, sqrt, isfinite, radians import bpy import time -from mathutils import Vector +from mathutils import Vector, Matrix #Vector utility functions @@ -547,3 +547,25 @@ def denoise_median(): newValue = sum(neighborhood) / len(neighborhood) pt.co[1] = newValue return + + +def rotate_fix_armature(arm_data): + global_matrix = Matrix.Rotation(radians(90),4,"X") + bpy.ops.object.mode_set(mode='EDIT', toggle=False) + if global_matrix!=Matrix(): #optimization: this might not be needed. + #disconnect all bones for ease of global rotation + connectedBones = [] + for bone in arm_data.edit_bones: + if bone.use_connect: + connectedBones.append(bone.name) + bone.use_connect=False + + #rotate all the bones around their center + for bone in arm_data.edit_bones: + bone.transform(global_matrix) + + #reconnect the bones + for bone in connectedBones: + arm_data.edit_bones[bone].use_connect=True + + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) \ No newline at end of file