DXF a entità aperte: con banda larga il confronto non produce punti #103
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
src/vision/costruttori.py build_dxf_compare: DXF MEVIS = 8 LINE/ARC aperti, sider_2_1 banda 0.2/0.3 → 422 «il confronto non ha prodotto punti» (cut_open_ends di compare_with_band). Con le entità unite in un contorno chiuso: banda 0.1-0.3 ok, 89-100% in banda.
ESITO: richiesta
COSA: DXF fatto di entità aperte (LINE/ARC in fila) → con banda larga il confronto DXF fallisce («disegno non sovrapponibile al pezzo: il confronto non ha prodotto punti»). Correzione: il costruttore unisce le entità aperte in contorni chiusi prima di costruire la ricetta e salva il DXF chiuso come disegno.dxf.
Segnalazione di Adriano 25/10/2026: «ho messo sider2 ma con banda 0,3 da errore di sovrapposizione. Se metto 0,2 funziona».
VERIFICATO (daitarn, build/venv313,
src.vision.costruttori.build_dxf_compare, px_per_mm 71.1238, fotoC:/Users/Adriano/Desktop/Sider foto e DXF/Foto/sider_2_*.bmp):DXF profilo/12.3X5.1MEVISS235JR_profilo.dxf= 8 entità aperte (4 LINE + 4 ARC r=1). sider_2_1: banda 0.1 ok (points_in_pct 63.6), 0.2 e 0.3 errore; sider_2_2: 0.1 ok (67.4), 0.2 ok, 0.3 errore. CompareDxf: «nessun punto del contorno misurato nella banda del disegno».vendor/visionsuite/packages/vs-dxf/src/visionsuite/dxf/band.py::compare_with_bandconcut_open_ends=Truetaglia il contorno misurato agli estremi di ogni entità DXF aperta (_remove_edge_parts); per le LINE non resta mai nulla in banda, per gli ARC con banda 0.3 nemmeno. Con il disegno spezzato i numeri sono anche sbagliati (distance_avg 0.086 mm).edgeminer.Deposit(edges, gap_tol=1e-3)+find_all_loops+edgesmith.lwpolyline_from_chain, scriptC:/Users/Adriano/AppData/Local/Temp/claude/D--Sorgenti-AI-OS/9b03ae07-a674-41a9-831d-0acc7b8b7e44/scratchpad/chiudi_dxf.py): sider_2_1..4 con banda 0.1/0.2/0.3 tutte costruite, points_in_pct 89-100, distance_avg 0.02-0.03 mm. PR165 chiuso su sider_3_1/2: banda 0.1 e 0.3 ok (94-100).MODIFICHE
src/vision/costruttori.py: funzione purachiudi_contorni(dxf_bytes: bytes) -> tuple[bytes, dict]:edgesmith.edges_from_entities_2d(LINE, ARC, LWPOLYLINE aperta, …) vanno inedgeminer.Deposit(..., gap_tol=0.01)(mm; giunzioni dei disegni CAD);find_all_loops; scelta golosa dei loop dal più lungo, ogni edge usato una volta; ogni loop → LWPOLYLINE chiusa (lwpolyline_from_chain), stesso layer dell'entità di partenza se ricavabile;build_dxf_compare(costruttori.py ~riga 191):dxf_bytes, info = chiudi_contorni(dxf_bytes)subito dopo il controllo DXF vuoto e PRIMA didxf_sha = hashlib.sha256(dxf_bytes): così disegno.dxf nella ricetta, lo sha nel grafo e il runtime (CompareDxf su disegno.dxf) usano il DXF chiuso.src/vision_worker/main.py::_dxf_preview(#101): applicachiudi_contorniprima della lettura, così l'anteprima mostra ciò che il confronto userà (MEVIS: «1 entità» invece di 8).TEST (worker): in
src/vision_worker/tests/test_dxf_compare.py(o file nuovo accanto), sincroni come quelli di #101 (venv313 non ha pytest-asyncio): rettangolo fatto di 4 LINE → 1 LWPOLYLINE chiusa, bbox invariato; LINE+ARC (asola) → 1 anello con bulge; un DXF già chiuso → byte identici; LINE isolata → resta, anelli=0 → byte identici; byte non DXF → ritornati identici. Se possibile un test dibuild_dxf_comparesu immagine sintetica (rettangolo nero su bianco) con DXF a 4 LINE e banda 0.3 che prima falliva e ora passa. Comando:C:/Users/Adriano/lavoro/TieMeasureFlow-dxfcal/build/venv313/Scripts/python.exe -m pytest <file> -q -p no:cacheprovider -k "chiudi or preview"dalla radice del worktree.NON TOCCARE:
vendor/visionsuite/**(TieVision-Core: il comportamento di cut_open_ends resta), src/backend/, src/frontend/.PROVA (Opus): dopo merge e riavvio, ricetta da
DXF profilo/12.3X5.1MEVISS235JR_profilo.dxf(quello aperto) con sider_2_1.bmp, mm/px 0,01406, banda 0,3 → ricetta creata, points_in_pct ≈ 100.Soluzione
ESITO: fatto. Ramo lavoro/daitarn-tmf-dxfcal (push
08616aa). FILE: src/vision/costruttori.py chiudi_contorni() (ezdxf edgeminer Deposit gap_tol 0.01 + find_all_loops → LWPOLYLINE chiuse; byte originali se nessun loop o errore), chiamata in build_dxf_compare prima dello sha256 e in src/vision_worker/main.py _dxf_preview. Test src/vision_worker/tests/test_chiudi_contorni.py (8). Commit77419f9, merge711abc9. PROVA dal vivo: POST /api/vision/tasks/8/recipe/dxf-compare con 12.3X5.1MEVISS235JR_profilo.dxf (8 entità aperte) + sider_2_1.bmp px/mm 71.1238: banda 0.2 e 0.3 → pass, points_in_pct 100, distance_avg 0.028 mm (prima 0.3 = errore «non sovrapponibile»); dxf-preview → entita 1, 12.3 × 5.1 mm.