Scaffold Vite + TypeScript + Three.js (scène vide : sol + boîte, marqueur de build), store et encodage de l'état dans l'URL (5 tests), lint de frontières entre modules, pipeline d'extraction Rhino (graine du 26/09) et première géométrie v0, deploy.sh statique (releases + lien symbolique + smoke), AGENTS.md, RUNBOOK, licences MIT + CC BY-SA 4.0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
20 lines
1.0 KiB
Python
20 lines
1.0 KiB
Python
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])
|