Operatore, pannello visione: disegnare tutte le forme dell'overlay e le quote sull'immagine #116
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?
Chiesto da Adriano in fiera il 28/10/2026. static/js/vision_execute.js drawOverlay disegna solo gli elementi con rows/cols (points, contour): segment, line, rect2, circle, arc vengono saltati. Su TEST1 task 14 il motore manda 25 elementi (7 segment, 4 rect2 roi, 8 arc, 4 circle, 1 points, 1 contour) e l'operatore vede solo il contorno del pezzo. Fatto: tutte le forme disegnate con le convenzioni di TieVision-Studio (frontend/src/comune/overlay.js) e, per ogni quota con uscita di visione, un'etichetta 'nome valore unità' colorata per esito, agganciata alla geometria del suo strumento (come etichetteMisure/ancoraOverlay di Studio, frontend/src/editor/misure.js).
ANALISI (Opus, passo 1)
COSA: il pannello visione disegna tutte le forme dell'overlay (rect2, segment, line, circle, arc, points, contour) e un'etichetta per quota «nome valore unità» colorata per esito, agganciata alla geometria del suo strumento. Riferimento da portare: TieVision-Studio
frontend/src/comune/overlay.js(convenzioni e forme) efrontend/src/editor/misure.js(ancoraOverlay,etichetteMisure); copia locale inC:/Users/Adriano/lavoro/TieVision-Assistant/vendor/TieVision-Studio/frontend/src/.CONVENZIONI (Studio, vs-tools/detect.py): coordinate immagine row = y, col = x; angoli in gradi, positivi antiorari a video; punto su cerchio ad a gradi = (col + r cos a, row − r sin a); rect2 = centro,
phi_deg, semi-latilength1lungo phi elength2perpendicolare; arc =start_deg+extent_deg(positivo antiorario). Su canvas:g.arc(col, row, r, -rad(start), -rad(start+extent), extent > 0).FILE: nuovo
src/frontend/flask_app/static/js/vision_overlay.js, script semplice con globaleVisionOverlay = { draw, anchor, labels }emodule.exportssemoduleesiste (test node):draw(g, overlay, lw): una forma per elemento; colore per ruolo (reference#2563eb, found#16a34a, roi#f59e0b, altro#ef4444); roi tratteggiata (setLineDash([lw*3, lw*2]), spessorelw*0.75, poisetLineDash([])); points = croci di semi-latomax(3, lw*2); contour = polilinea; tipo ignoto o numeri non finiti → saltato senza errori.anchor(o): porting diancoraOverlay(segment/line punto medio, circle centro + raggio a destra, arc punto medio, points primo punto, rect2 centro, contour punto a metà).labels(rows, overlay): per ogni riga convision_outputtool.proprietàprende gli elementi contool_id === tool; ancora dal primorole: 'found'che ne dà una, altrimenti da qualsiasi; testoname + ' ' + value.toFixed(3) + ' ' + unit; righe senza ancora (Formula) → nessuna etichetta. Ritorna[{key, x, y, text, status}].FILE:
src/frontend/flask_app/static/js/vision_execute.js:rowsaggiungename(description || measurement_type || '#id') evision_output, senza cambiarelabel(#114);drawOverlayusaVisionOverlay.draw(g, overlay, lineWidth)(lineWidth come oggi); getteroverlayLabels=VisionOverlay.labels(...)conleft/topin percentuale delle dimensioni naturali (x / w * 100 + '%');labelClass(status): passbg-green-600 text-white, warningbg-amber-400 text-black, failbg-red-600 text-white, altrobg-gray-700 text-white.FILE:
src/frontend/flask_app/templates/measure/task_execute.html:<script src=".../js/vision_overlay.js">prima division_execute.js(~1179); dentro il wrapper dello zoom (#115), dopo il canvas,<template x-for="l in overlayLabels" :key="l.key">con divabsolute pointer-events-none whitespace-nowrap text-xs font-bold px-1.5 py-0.5 rounded shadow,:class="labelClass(l.status)", solo:stylestringa conleft/top+transform:translate(8px,-50%),x-text="l.text". Le etichette restano della stessa dimensione a ogni zoom perché sono HTML in percentuale.TEST: nuovo
src/frontend/flask_app/tests/js/test_vision_overlay.jscon il fixture verosrc/frontend/flask_app/tests/js/fixtures/vision_check_task14.json(risposta di/api/vision/checkdel task 14 TEST1 sul PC fiera: 25 elementi overlay,measurements12,_subtasks12 quote): canvas finto che registra le chiamate; sul fixture 25 elementi disegnati e 0 saltati; rect2 con phi 0 → verticicol±l1,row±l2; arc → argomenti dig.arcattesi; elemento malformato e tipo ignoto saltati;anchorper ogni tipo;labelssul fixture = 6 etichette (larghezza, lunghezza, R_tl, R_tr, R_br, R_bl), nessuna per le 6 differenze (Formula); il testo della quota 15 contieneLarghezzae1.668. Wrappertests/test_vision_overlay_js.py(skip senza node).tests/test_template_js_syntax.pydeve restare verde.NON TOCCARE: backend, wizard DXF,
rows.label(#114), logica di acquisizione/check/record.RAMO:
lavoro/daitarn-tmf-pannello, commit dopo #115 e #117.🔵 daitarn — preso in carico 2026-10-28T15:45:10Z
ramo:
lavoro/daitarn· capacità: build-windows, gpuSoluzione
ESITO: fatto. Il pannello visione disegna tutte le forme dell'overlay (rect2, segment, line, circle, arc, points, contour; roi tratteggiata) e un'etichetta HTML per quota «nome valore unità» colorata per esito, ancorata alla geometria dello strumento (porting di overlay.js e ancoraOverlay di TieVision-Studio). Le Formula non hanno etichetta. FILE: nuovo static/js/vision_overlay.js (VisionOverlay.draw/anchor/labels), static/js/vision_execute.js (drawOverlay, overlayLabels, labelClass), templates/measure/task_execute.html (script e strato etichette). TEST: tests/js/test_vision_overlay.js (43 controlli sul fixture vero tests/js/fixtures/vision_check_task14.json) + wrapper. Ramo lavoro/daitarn-tmf-dxfcal
b46ccbaacd94a9merge4485803, installato in fiera il 28/10. Noto: a zoom basso le etichette di quote vicine si sovrappongono (come nello Studio).