"""Check ConveyorTrack_05 geometry, existing floor/ground, and lighting in the fresh stage.""" import omni.usd from pxr import Usd, UsdGeom, UsdLux stage = omni.usd.get_context().get_stage() bbc = UsdGeom.BBoxCache(Usd.TimeCode.Default(), [UsdGeom.Tokens.default_, UsdGeom.Tokens.render]) xc = UsdGeom.XformCache() def report(path): prim = stage.GetPrimAtPath(path) if not prim.IsValid(): print(f"{path} MISSING"); return r = bbc.ComputeWorldBound(prim).ComputeAlignedRange() mn, mx = r.GetMin(), r.GetMax() M = xc.GetLocalToWorldTransform(prim) lx = M.TransformDir((1,0,0)); lx = lx/(lx.GetLength() or 1) print(f"{path}") print(f" bbox x[{mn[0]:+.3f}..{mx[0]:+.3f}] y[{mn[1]:+.3f}..{mx[1]:+.3f}] z[{mn[2]:+.3f}..{mx[2]:+.3f}]") print(f" local+X in world = ({lx[0]:+.3f},{lx[1]:+.3f},{lx[2]:+.3f})") for p in ["/World/ConveyorTrack_05", "/World/ConveyorTrack_05/Belt"]: report(p) print("\n=== whole /World bbox ===") w = stage.GetPrimAtPath("/World") r = bbc.ComputeWorldBound(w).ComputeAlignedRange() print(f" x[{r.GetMin()[0]:+.2f}..{r.GetMax()[0]:+.2f}] y[{r.GetMin()[1]:+.2f}..{r.GetMax()[1]:+.2f}] z[{r.GetMin()[2]:+.2f}..{r.GetMax()[2]:+.2f}]") print("\n=== lights ===") n = 0 for p in stage.Traverse(): if p.IsA(UsdLux.BoundableLightBase) or p.IsA(UsdLux.NonboundableLightBase): n += 1 inten = p.GetAttribute("inputs:intensity") vis = UsdGeom.Imageable(p).ComputeVisibility() print(f" {p.GetPath()} type={p.GetTypeName()} intensity={inten.Get() if inten else '?'} vis={vis}") print(f" total lights: {n}") print("\n=== any ground/floor plane already present? ===") for p in stage.Traverse(): name = p.GetName().lower() if "floor" in name or "ground" in name or "plane" in name: print(" candidate:", p.GetPath(), p.GetTypeName())