"""Probe: can trimesh round-trip a NAMED multi-object scene with per-object transforms via glTF?
That's what we need — Blender exports named servo objects + transforms, I read them, write back."""
import numpy as np
import trimesh

s = trimesh.Scene()
for i, x in enumerate([0.0, 0.12, 0.24]):
    b = trimesh.creation.box(extents=[0.045, 0.038, 0.025])
    T = np.eye(4)
    T[:3, 3] = [x, 0, 0.01 * i]
    T[:3, :3] = trimesh.transformations.rotation_matrix(0.3 * i, [0, 0, 1])[:3, :3]
    s.add_geometry(b, node_name=f"servo_{i}", geom_name=f"servo_{i}", transform=T)
s.export("/tmp/probe.glb")

r = trimesh.load("/tmp/probe.glb")
print("nodes:", sorted(r.graph.nodes_geometry))
for n in sorted(r.graph.nodes_geometry):
    T, gname = r.graph[n]
    print(f"  {n}: geom={gname} pos={np.round(T[:3,3],3).tolist()} "
          f"yaw={round(float(np.degrees(trimesh.transformations.euler_from_matrix(T)[2])),1)}")
