diff --git a/tools/convert-mesh/bin/convert-mesh.py b/tools/convert-mesh/bin/convert-mesh.py index de4a2111..8e2e44a5 100644 --- a/tools/convert-mesh/bin/convert-mesh.py +++ b/tools/convert-mesh/bin/convert-mesh.py @@ -190,37 +190,38 @@ if armature is not None: bones.append((p, tuple(b.head_local), tuple(map(tuple, b.matrix_local.to_3x3())))) poses = [] -for index, pose in enumerate(bpy.data.objects['armature'].pose_library.pose_markers): - print("Found pose", pose.name) +if armature is not None: + for index, pose in enumerate(bpy.data.objects['armature'].pose_library.pose_markers): + print("Found pose", pose.name) - # [rotation, scale, translation] - data = [] - for i in range(len(bone_names)): - data.append([[None, None, None, None], [None, None, None], [None, None, None]]) + # [rotation, scale, translation] + data = [] + for i in range(len(bone_names)): + data.append([[1.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0], [0.0, 0.0, 0.0]]) - marker = armature.pose_library.pose_markers[index] - frame = marker.frame - action = bpy.data.actions[armature.pose_library.name] - for g in action.groups: - if not g.name in bone_names: - continue - bone_index = bone_names.index(g.name) - for ch in g.channels: - value = ch.evaluate(float(frame)) - if ch.data_path.find('rotation_quaternion') != -1: - data[bone_index][0][ch.array_index] = value - elif ch.data_path.find('scale') != -1: - data[bone_index][1][ch.array_index] = value - elif ch.data_path.find('location') != -1: - data[bone_index][2][ch.array_index] = value + marker = armature.pose_library.pose_markers[index] + frame = marker.frame + action = bpy.data.actions[armature.pose_library.name] + for g in action.groups: + if not g.name in bone_names: + continue + bone_index = bone_names.index(g.name) + for ch in g.channels: + value = ch.evaluate(float(frame)) + if ch.data_path.find('rotation_quaternion') != -1: + data[bone_index][0][ch.array_index] = value + elif ch.data_path.find('scale') != -1: + data[bone_index][1][ch.array_index] = value + elif ch.data_path.find('location') != -1: + data[bone_index][2][ch.array_index] = value - new_data = [] - for d in data: - rotation = tuple([d[0][1], d[0][2], d[0][3], d[0][0]]) - scale = d[1][0] - translation = tuple(d[2]) - new_data.append((rotation, scale, translation)) - poses.append((pose.name, new_data)) + new_data = [] + for d in data: + rotation = tuple([d[0][1], d[0][2], d[0][3], d[0][0]]) + scale = d[1][0] + translation = tuple(d[2]) + new_data.append((rotation, scale, translation)) + poses.append((pose.name, new_data)) def to_bytes(obj): if type(obj) == Uint8: @@ -245,6 +246,8 @@ def to_bytes(obj): if type(obj) == str: b = obj.encode('utf-8') return struct.pack('