import sys, rhino3dm, collections for p in sys.argv[1:]: m = rhino3dm.File3dm.Read(p) if m is None: print("FAIL", p); continue types = collections.Counter(); dims = collections.Counter() bb=None for o in m.Objects: g=o.Geometry; t=type(g).__name__; types[t]+=1 try: b=g.GetBoundingBox() if b.IsValid: dims['3D' if (b.Max.Z-b.Min.Z)>0.01 else 'flat']+=1 bb = b if bb is None else rhino3dm.BoundingBox(min(bb.Min.X,b.Min.X),min(bb.Min.Y,b.Min.Y),min(bb.Min.Z,b.Min.Z),max(bb.Max.X,b.Max.X),max(bb.Max.Y,b.Max.Y),max(bb.Max.Z,b.Max.Z)) except Exception: pass print("==", p.split('/')[-1], "| unités:", m.Settings.ModelUnitSystem, "| objets:", len(m.Objects), "| calques:", len(m.Layers)) print(" types:", dict(types.most_common(8))) print(" 3D vs plat:", dict(dims)) if bb: print(" emprise: %.0f x %.0f x %.0f" % (bb.Max.X-bb.Min.X, bb.Max.Y-bb.Min.Y, bb.Max.Z-bb.Min.Z)) print(" calques:", [l.Name for l in m.Layers][:25])