Files
Jules NényandClaude Fable 5.1 2e249f1027 LOT Q0 : socle du démonstrateur Quelque part en 2035
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>
2026-09-27 15:21:40 +02:00

13 lines
627 B
Python

import sys, rhino3dm, collections
m = rhino3dm.File3dm.Read(sys.argv[1])
layers = {i: l.Name for i, l in enumerate(m.Layers)}
cnt = collections.Counter(); closed = collections.Counter(); blocks=collections.Counter()
for o in m.Objects:
li = o.Attributes.LayerIndex; g = o.Geometry
cnt[li]+=1
if isinstance(g, rhino3dm.Curve) and g.IsClosed: closed[li]+=1
if isinstance(g, rhino3dm.InstanceReference): blocks[li]+=1
for li,n in cnt.most_common():
print(f"{n:6d} obj | {closed[li]:5d} fermés | {blocks[li]:5d} blocs | {layers.get(li)}")
print("blocs définis:", [d.Name for d in m.InstanceDefinitions][:30])