Spaces:
Runtime error
Runtime error
| import bpy | |
| import csv | |
| import os | |
| import json | |
| # Get the path to the current Blender file | |
| blend_file_path = bpy.data.filepath | |
| # Get the directory of the Blender file | |
| blend_dir = os.path.dirname(blend_file_path) | |
| path = './' | |
| # Construct the absolute path to the "data.csv" file | |
| data_file_path = os.path.join(blend_dir, path) | |
| data_file_path = os.path.join(data_file_path, "animation.json") # TODO: Depends on the animation | |
| print('Pose file path:', data_file_path) | |
| start_frame = 1 | |
| end_frame = 100 # TODO: Depends on the animation | |
| res_dict = {} | |
| obj = bpy.context.active_object | |
| armature = obj.data | |
| # Initialize dict | |
| res_dict['matrix_world'] = [[obj.matrix_world[i][j] for j in range(4)] for i in range(4)] | |
| res_dict['rest_bones'] = {} | |
| res_dict['pose_bones'] = {} | |
| # Save rest poses for all bones | |
| for bone in armature.bones: | |
| mat = obj.matrix_world @ bone.matrix_local | |
| mat_list = [[mat[i][j] for j in range(4)] for i in range(4)] | |
| res_dict['rest_bones'][bone.name] = mat_list | |
| res_dict['pose_bones'][bone.name] = [] | |
| # Save frame poses for all bones | |
| for i_frame in range(start_frame, end_frame+1): | |
| print('Frame', i_frame) | |
| # Set frame | |
| bpy.context.scene.frame_set(i_frame) | |
| # Get object transform | |
| obj = bpy.context.active_object | |
| pose = obj.pose | |
| armature = obj.data | |
| print("pose_position:", armature.pose_position) | |
| for bone in pose.bones: | |
| mat = obj.matrix_world @ bone.matrix | |
| mat_list = [[mat[i][j] for j in range(4)] for i in range(4)] | |
| res_dict['pose_bones'][bone.name].append(mat_list) | |
| with open(data_file_path, "w") as outfile: | |
| json.dump(res_dict, outfile) | |
| print(f'Results saved to "{data_file_path}".') | |