"""Where does each base_cube* node land (servo_0 frame, mm) after baking its transform?"""
import numpy as np
import trimesh
import gen_two_servo as g

s = trimesh.load("two_servo_from_blender.glb")
for node in sorted(s.graph.nodes_geometry):
    if not node.startswith("base_cube"):
        continue
    T, gname = s.graph[node]
    m = s.geometry[gname].copy()
    m.apply_transform(np.array(T, float))
    m.apply_scale(1000.0 / g.GLB_SCALE)          # GLB units -> mm
    print(f"{node}: center(mm)={np.round(m.bounds.mean(0),1).tolist()}  size(mm)={np.round(m.extents,1).tolist()}")
print("(holder spans X[-5,19] Y[-28,10] Z[-15,15]; base_cube was at (38.5,-12,0) size 40)")
