3D_Reconstruction_Demo / sugar /blender /export_reference_points.py
alvin888's picture
Upload 1461 files
e2ebf5f verified
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, "scene_reference_points.json") # TODO: Depends on the scene
print('Points file path:', data_file_path)
# Get data
obj = bpy.context.active_object
m = bpy.context.object.evaluated_get(bpy.context.evaluated_depsgraph_get()).to_mesh()
vertices = m.vertices
print("Number of vertices:", len(m.vertices))
# Initialize dict
res_dict = {}
res_dict['matrix_world'] = [[obj.matrix_world[i][j] for j in range(4)] for i in range(4)]
res_dict['reference_points'] = []
res_dict['groups'] = []
res_dict['weights'] = []
# Get names of all vertex groups
vertex_group_names = {}
print("Vertex groups:")
for i in range(len(obj.vertex_groups)):
group = obj.vertex_groups[i]
print(group.index, ":", group.name)
vertex_group_names[str(group.index)] = group.name
for i in range(len(vertices)):
# Add coordinates
v = obj.matrix_world @ vertices[i].co
res_dict['reference_points'].append([v[0], v[1], v[2]])
# Add the names of the corresponding vertex groups
group_list = []
weight_list = []
for group in vertices[i].groups:
group_list.append(vertex_group_names[str(group.group)])
weight_list.append(group.weight)
res_dict['groups'].append(group_list)
res_dict['weights'].append(weight_list)
with open(data_file_path, "w") as outfile:
json.dump(res_dict, outfile)
print(f'Results saved to "{data_file_path}".')