- Batch the DB lookup per file instead of per code in scripts/ExtractCreoStrings.cs:
files_ultima_versione is an unmaterialized view, so each query rescanned the whole
files table (~230ms) - batching cuts a multi-minute BFS to seconds.
- Widen the code regex to accept a revision letter and a "_..." suffix together
(e.g. "9284200366A_C01"), and purely numeric "_NNNN" suffixes (e.g. dimensional
variants like "2702220182_8188"), not just letter+digits.
- Require bare digit-only candidates to also appear inside a real
"Componente ID N (...)"/"Component id N (...)" placement, filtering out
incidental references to a containing assembly's own code.
- scripts/ExtractCreoStrings.cs now reports only the direct references of the given
.asm (one level, matching Creo's own tree for that file) instead of recursing into
sub-assemblies.
- Port the regex and placement-check refinements to the production
AssemblyComponentScanner.cs used by the app's "Trova componenti referenziati" and
"Verifica completezza" phases.
- Document the new false-positive categories (parent/container self-reference,
suppressed/removed components with residual placement, placement missing
suffix/bracket detail) in docs/formato-asm.md, generalized beyond the specific
assemblies used to find them.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
A component with no .stp could mean two different things: the CAD source
was never found in the index at all, or it's indexed but nobody exported
the STEP yet. Cross-references the missing codes against cad_index.db
(reusing the phase-2 verification cache when available) and reports each
as EsitoStep.StepMancante vs ComponenteNonTrovato, colored differently.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sub-components discovered recursively in phase 4 exist only to complete
raw/, not to define what final STEP files are expected - including them
made step_finali report unrelated sub-parts as missing/created. Also drops
the now-unused _componentiRisolti field.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
These appear in the .asm binary as a family-table instance name (e.g.
"R6--_-_U6592<UNI6592>"), not a separate file on disk - only the generic
"uni6592.prt" is actually indexed. Extract just the "<UNI...>" content
instead of the full instance name, in both the standalone script and the
production scanner, so standard hardware stops being silently dropped as
"not found in index".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Previously it only compared the top-level BOM against step/ and reported
matches, without copying anything. Now it unions the BOM codes with the
sub-components resolved in phase 4, copies every matching .stp into a new
step_finali/ folder, and reports what got created vs what's still missing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
"Trova componenti referenziati" ran the recursive BFS synchronously on the
UI thread with no feedback. Runs it on a background task instead and shows
a modal dialog with a percentage bar, updated as each .asm in the queue is
processed.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The standalone script already excluded internal saved-view IDs
(ModelView#<numero>) from the referenced-codes heuristic; the app's own
"Trova componenti referenziati" phase used the same regex without the fix.
Ports the lookbehind so both stay consistent, per docs/formato-asm.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Avoids re-running the same lookup against cad_index.db twice when the
user already clicked "Verifica presenza nel DB" before "Crea cartella raw".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Lets the user spot missing components right after import instead of
discovering it later in the raw-folder step, by coloring each grid row
green/red based on a lookup against cad_index.db.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Reverse-engineered the Creo .asm binary format enough to extract referenced
component codes via a text heuristic, mirroring AssemblyComponentScanner's
approach and Form1's recursive resolution against cad_index.db. Documents
known false-positive classes (ModelView# view IDs, self-references, and
phantom references to superseded/renamed codes).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Restructure Form1 into a sequential wizard (database -> import -> raw ->
recursive component resolution -> completeness/STEP report), fix
case-sensitivity bugs in codice/tipo_file lookups and a word-boundary gap
in the assembly scanner that missed _D100-style sub-assembly references,
and treat the distinta's general assembly as an ordinary CSV row (derived
from the DBP_<codice>_<timestamp> filename) instead of special-casing it
throughout. Also adds CadSearchGui.Tests (xUnit) covering the scanner,
filename parsing, and the case-insensitive DB lookup behavior.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add 'Unificati' and 'Commerciali' as indexed root folders alongside the
existing four, updating Indexer.CartelleRadice and the docs.
- Replace the separate "Pulisci cartella raw" / "Pulisci cartella step"
buttons with a single "Pulisci raw e step" that clears both under one
confirmation; falls back to a folder picker when no path is known yet
in the session instead of staying disabled.
- "Trova componenti referenziati" now also writes a persistent summary
(PRT/sub-assemblies found and copied, codes not found) to the main
window's status line, not just the popup dialog, and reports clearly
when no database is loaded instead of failing silently.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Assemblies reference other assemblies and parts internally; a flat
single-level copy into raw/ left Creo unable to load models ("Dati di
input non completi"). AssemblyComponentScanner heuristically extracts
component codes embedded as readable strings inside the otherwise
binary .asm files; each candidate is validated against the index (which
filters out scan noise), copied into raw/, and if it's itself an
assembly, queued for the same treatment until the whole tree resolves
to PRT leaves. PrtMancantiForm reports what was found and copied.
Also ignore Creo Distributed Batch job files (*.dxc).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Split the import flow into explicit steps: import/preview CSV, then a
separate "Crea cartella raw" button that looks up CAD paths and copies
matched files into raw/ next to the source distinta file.
- Redesign the top panel with grouped, auto-sized sections (database vs.
import) instead of hand-tuned row heights, fixing overlap/clipping bugs;
style the primary action button and polish the results grid.
- Remember the last successfully loaded database path in
%AppData%\CadSearchGui\ultimo_db.txt so it reloads automatically on
future launches regardless of the working directory.
- Ignore the /step/ working folder.
- Add a README with build/run/publish instructions and project overview.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Drop the free-text search UI; the single remaining view imports the
Distinta Base, generates the CSV, and looks up each Componente code in
the indexed DB (files_ultima_versione, prt/asm) to show its CAD file
path directly in the results grid.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Reads the ERP-exported "Distinta Base" file (SpreadsheetML XML or real
binary .xls/.xlsx via ExcelDataReader), extracts Componente/Descrizione,
writes a CSV and previews it in a new tab alongside the existing CAD
search. Also ignore the exported Excel/CSV files dropped in the repo root.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Indicizza le cartelle __Accessori, __B.end, __Corpi, __Fondi in un DB
SQLite locale ed espone una GUI di ricerca (codice, tipo, cartella,
solo ultima versione) con aggiornamento incrementale dell'indice e
stima del tempo rimanente.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>