Integra il parser esatto del .asm nella GUI (fase 4 e 5)
AsmRecordReader (spostato da scripts/CreoBom.cs nel progetto principale, unica fonte di verita' condivisa con lo script via #:project) sostituisce AssemblyComponentScanner in Form1.RisolviAlberoComponenti (fase "Trova componenti referenziati") e AssiemeCompleto (fase "Verifica completezza"): legge esattamente la sezione "members" del binario invece di contare occorrenze testuali, eliminando i falsi positivi/negativi noti dell'euristica (riferimenti fantasma, placement senza suffisso, ecc.). Se un file non rispetta il formato validato (InvalidDataException, coperto solo dagli 8 campioni usati per il reverse engineering) Form1 ripiega sull'euristica di AssemblyComponentScanner, che resta quindi come fallback e come fonte di verita' per gli script BomViaDb.cs/ExtractCreoStrings.cs. Aggiunti test per AsmRecordReader (fixture binarie costruite a mano: lettura membri, risoluzione ConfigName, conteggio disallineato, sezione assente). Aggiornata la documentazione (CLAUDE.md, docs/architettura.md, docs/formato-asm.md, docs/formato-asm-record.md) di conseguenza. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
60dfd26e8b
commit
cce377a091
8 files changed
+363
-163
No files matched your search
@@ -59,13 +59,16 @@ designer visuale):
|
||||
3. **Crea cartella raw** — `TrovaPercorsiCad` + `CopiaFileTrovati` (parallela, vedi
|
||||
`docs/copia-raw-parallela.md`) copiano in `raw/` i file CAD dei componenti del CSV trovati
|
||||
nell'indice.
|
||||
4. **Trova componenti referenziati** — `AssemblyComponentScanner` legge euristicamente i
|
||||
`.asm` in `raw/` per risolvere ricorsivamente sotto-assiemi/parti (`RisolviAlberoComponenti`),
|
||||
copiandoli anch'essi in `raw/`. Euristica e falsi positivi noti in `docs/formato-asm.md`.
|
||||
4. **Trova componenti referenziati** — legge i `.asm` in `raw/` per risolvere ricorsivamente
|
||||
sotto-assiemi/parti (`RisolviAlberoComponenti`), copiandoli anch'essi in `raw/`. Usa
|
||||
`AsmRecordReader` (parser esatto dei record binari, `docs/formato-asm-record.md`) e ripiega
|
||||
su `AssemblyComponentScanner` (euristica testuale, `docs/formato-asm.md`) solo se il file
|
||||
non rispetta il formato validato (`InvalidDataException`).
|
||||
5. **Verifica completezza** — mostra i `.asm` della distinta già in `raw/`, trascinabili su
|
||||
Creo per l'esportazione STEP (Distributed Batch, manuale, fuori dall'app); "Verifica
|
||||
completezza assiemi" controlla ricorsivamente sull'indice (non su `raw/`) se tutti i
|
||||
sotto-componenti di ogni assieme sono presenti.
|
||||
completezza assiemi" controlla ricorsivamente sull'indice (non su `raw/`, stessa
|
||||
`AsmRecordReader`/fallback della fase 4) se tutti i sotto-componenti di ogni assieme sono
|
||||
presenti.
|
||||
|
||||
## Script standalone (`scripts/`)
|
||||
|
||||
@@ -74,10 +77,13 @@ lanciati dalla root del repo — **non** da dentro `PrepStep/`, che ha un `.cspr
|
||||
`dotnet run` lì avvia la GUI vera invece dello script). Elenco e dettaglio di ciascuno in
|
||||
`docs/architettura.md`.
|
||||
|
||||
Il pattern da preservare: `ExtractCreoStrings.cs`/`BomViaDb.cs` referenziano
|
||||
`PrepStep/PrepStep.csproj` via `#:project` invece di duplicare l'euristica di
|
||||
estrazione/placement, che vive **solo** in `PrepStep/AssemblyComponentScanner.cs` — un'unica
|
||||
fonte di verità condivisa da GUI e script (vedi `docs/formato-asm.md` per l'euristica e i
|
||||
falsi positivi noti). `CreoBom.cs` è l'eccezione deliberata: legge la struttura a record del
|
||||
binario invece di contare occorrenze testuali (`docs/formato-asm-record.md`), non passa da
|
||||
`AssemblyComponentScanner`/`cad_index.db` e non la sostituisce nella GUI.
|
||||
Il pattern da preservare: gli script referenziano `PrepStep/PrepStep.csproj` via `#:project`
|
||||
invece di duplicare la logica di lettura dei `.asm`, che vive **solo** nel progetto
|
||||
principale — un'unica fonte di verità condivisa da GUI e script. Due famiglie distinte, non
|
||||
intercambiabili:
|
||||
|
||||
- `ExtractCreoStrings.cs`/`BomViaDb.cs` usano `AssemblyComponentScanner` (euristica testuale,
|
||||
`docs/formato-asm.md`) e risolvono i sottoassiemi contro `cad_index.db`.
|
||||
- `CreoBom.cs` usa `AsmRecordReader` (parser esatto dei record binari,
|
||||
`docs/formato-asm-record.md`, condiviso con la GUI in fase 4/5) e risolve i sottoassiemi
|
||||
cercandoli in cartelle locali (`-p`), non contro `cad_index.db`.
|
||||
Reference in new issue
Block a user