47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
import trimesh
|
|
import numpy as np
|
|
|
|
cases = [
|
|
# ('06461_237_Trousers', 'temp/sampling_pyramid/06461_237_Trousers', [0,8,12,13]),
|
|
# ('01171_213_Dress', 'temp/sampling_pyramid/01171_213_Dress', [0,6,10,15]),
|
|
('01852_70_Tshirt_lvl_0', 'temp/sampling_pro_pyramid/01852_70_Tshirt', [15,10,1,5,13]),
|
|
('01852_70_Tshirt_lvl_1', 'temp/sampling_pro_pyramid/01852_70_Tshirt', [15,14,3,5,0 ]),
|
|
('01852_70_Tshirt_lvl_2', 'temp/sampling_pro_pyramid/01852_70_Tshirt', [15,12,0,8,6]),
|
|
('01852_70_Tshirt_lvl_3', 'temp/sampling_pro_pyramid/01852_70_Tshirt', [15,2,8,1,0]),
|
|
]
|
|
|
|
for case in cases:
|
|
# Load the original mesh
|
|
folder = case[1]
|
|
original_mesh = trimesh.load(f'{folder}/{case[0]}_{case[2][0]}.stl')
|
|
|
|
# Load the variation meshes
|
|
variation_meshes = []
|
|
for i in case[2][1:]:
|
|
variation_meshes.append(trimesh.load(f'{folder}/{case[0]}_{i}.stl'))
|
|
|
|
# Calculate area of original mesh
|
|
# original_area = original_mesh.area
|
|
|
|
# Calculate area difference for each variation
|
|
area_diffs = []
|
|
for variation_mesh in variation_meshes:
|
|
# calculate per vertex euclid distance
|
|
euclid = np.linalg.norm(original_mesh.vertices - variation_mesh.vertices, axis=1) * 1000
|
|
euclid_diff = np.mean(euclid)
|
|
|
|
|
|
# area_diff = abs(variation_mesh.area - original_area) / original_area
|
|
area_diffs.append(euclid_diff)
|
|
|
|
# Average area differences
|
|
# avg_area_diff = np.mean(area_diffs)
|
|
|
|
variance = np.var(area_diffs)
|
|
|
|
# Print results
|
|
print(f'Case: {case[0]}')
|
|
# print('Original area:', original_area)
|
|
print('Euclidean differences:', area_diffs)
|
|
print('Euclidean variance:', variance)
|
|
# print('Average Euclidean difference:', avg_area_diff) |