File size: 1,766 Bytes
a2694e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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}".')