Visore: zoom a rotellina sul punto del mouse su tutte le immagini (visore Station#12, no-layers) #126

Closed
opened 2026-10-29 12:38:58 +00:00 by Adriano · 3 comments
Owner

ESITO: richiesta
RIF: gitea:Adriano/TieMeasureFlow (questa issue); sorgente del visore: gitea:Adriano/TieVision-Station#12 (main 04c11cc)
COSA: tutte le immagini di TMF usano il visore di TieVision-Station#12 (rotella senza Ctrl = zoom sul punto del mouse, con ancora fra scatti), con l'attributo no-layers: niente menu dei livelli e disegno identico a TMF di prima.
RICHIESTA: Adriano 29/10/2026: «le modifiche con zoom con mouse devi metterla su tutte immagini di TMF; usa quello di DA con flag per non visualizzare gestione layer».

BASE

  • TMF: ramo lavoro/daitarn-tmf-dxfcal @ 5897a9e (versione installata sul PC fiera, non ancora su V3.0.0). Nuovo ramo lavoro/daitarn-tmf-rotella da 5897a9e.
  • VERIFICATO: src/frontend/flask_app/static/js/{image_viewer.js,vision_overlay.js,save_image.js} di TMF 5897a9e == TieVision-Station 39674e8 src/visionsuite/station/static/ (diff vuoto). I test JS differiscono solo per il percorso del modulo (riga MOD/require).
  • Station: #12 ha cambiato image_viewer.js e vision_overlay.js (save_image.js no). Oggi in Station no-layers nasconde solo il menu.

CONTRATTO no-layers (file image_viewer.js identico nei due repo)
Con l'attributo no-layers presente:

  1. menu .tmfv-layers nascosto (gia' cosi').
  2. overlay = un solo disegno come prima di #12: VO.svg(tutte le forme nell'ordine dato, {zoom}) seguito dalle quote delle etichette (quotaSvg / linea della scritta spostata); nessun , nessun opacity, nessuna forma nascosta. Lo stato _lay e il localStorage non contano (non si leggono per disegnare, l'immagine resta visibile).
  3. etichette sempre visibili, testo = l.text (Nomi accesi), posizione da _labelPos; niente trascinamento: nessun listener pointerdown/dblclick, pointer-events none (regola CSS tmf-viewer[no-layers] .tmfv-label{pointer-events:none;cursor:default} o equivalente), nessun evento quota-spostata.
  4. rotella, pulsanti, Adatta, Salva, pan: come senza no-layers.
  5. attributo aggiunto/tolto a runtime: ridisegno (attributeChangedCallback 'no-layers' -> _syncLayers + _drawOverlay + _drawLabels).
    Senza no-layers: comportamento invariato (pagina De Angeli).

FILE

  • TieVision-Station (worktree C:/Users/Adriano/lavoro/TieVision-Station-nolayers, ramo lavoro/daitarn-nolayers da main 04c11cc):
    • src/visionsuite/station/static/image_viewer.js — contratto no-layers sopra; commento in testa (righe 17-21) aggiornato.
    • tests/js/fixtures/ (se manca la pagina demo, copiarla da TMF src/frontend/flask_app/tests/js/fixtures/image_viewer_demo.html con i percorsi adattati) — viewer con no-layers e controlli nel #log.
  • TieMeasureFlow (worktree C:/Users/Adriano/lavoro/TieMeasureFlow-rotella, ramo lavoro/daitarn-tmf-rotella da 5897a9e):
    • src/frontend/flask_app/static/js/image_viewer.js, vision_overlay.js — copia byte per byte dei file Station dopo la modifica (LF: .gitattributes vuole eol=lf in static/**).
    • src/frontend/flask_app/tests/js/test_vision_overlay.js, test_image_viewer.js — copia dei test Station con il solo percorso del modulo di TMF.
    • src/frontend/flask_app/tests/js/fixtures/image_viewer_demo.html — viewer con no-layers e controlli.
    • attributo no-layers su OGNI di TMF: src/frontend/flask_app/templates/maker/task_editor.html (3: righe ~736, ~748, ~793), src/frontend/flask_app/templates/measure/task_execute.html (1: riga ~584), scripts/calibrazione_pagina.py (4: righe ~173, ~181, ~244, ~271). Nessun createElement('tmf-viewer') nei JS (VERIFICATO grep).
    • commenti #N accanto a ogni modifica (regola del repo: ogni modifica ha il suo commento).

TEST

  • Station: node --test tests/js/test_image_viewer.js tests/js/test_vision_overlay.js tests/js/test_stazione.js tests/js/test_save_image.js → tutti verdi; uv run pytest -q → 354 passed invariati.
  • Station e TMF, pagina demo in Chromium (Playwright: uv run --no-project -q --with playwright==1.63.0 python <script>, file:// va bene): viewer no-layers con overlay misto (role found e non found, layer ricerca) e etichette con key → nessun g[data-layer], nessun attributo opacity, tutte le forme presenti anche con localStorage tmf-viewer-layers {ricerca:false}, .tmfv-layers hidden, etichetta con pointer-events none e nessun quota-spostata dopo un trascinamento simulato; rotella senza Ctrl cambia lo zoom; viewer senza no-layers invariato (gruppi presenti).
  • TMF: node src/frontend/flask_app/tests/js/test_image_viewer.js (e gli altri due) → exit 0; uv run pytest src/frontend/flask_app/tests -q → stessi esiti della base 5897a9e (in locale 5 fallimenti noti per i .mo compilati: confrontare con la base, non contare quelli).
  • grep: ogni "<tmf-viewer" in src/frontend/flask_app/templates e scripts/calibrazione_pagina.py ha no-layers.

NON TOCCARE: TMF backend, vision, vision_worker, ramo V3.0.0, ramo lavoro/daitarn-tmf-dxfcal; Station lavoro.py, stazione.js, vision_overlay.js (in Station), main di Station; scratchpad De Angeli; PC fiera (il deploy lo fa chi coordina, dopo l'ok di Adriano).

ESITO: richiesta RIF: gitea:Adriano/TieMeasureFlow (questa issue); sorgente del visore: gitea:Adriano/TieVision-Station#12 (main 04c11cc) COSA: tutte le immagini di TMF usano il visore <tmf-viewer> di TieVision-Station#12 (rotella senza Ctrl = zoom sul punto del mouse, con ancora fra scatti), con l'attributo no-layers: niente menu dei livelli e disegno identico a TMF di prima. RICHIESTA: Adriano 29/10/2026: «le modifiche con zoom con mouse devi metterla su tutte immagini di TMF; usa quello di DA con flag per non visualizzare gestione layer». BASE - TMF: ramo lavoro/daitarn-tmf-dxfcal @ 5897a9e (versione installata sul PC fiera, non ancora su V3.0.0). Nuovo ramo lavoro/daitarn-tmf-rotella da 5897a9e. - VERIFICATO: src/frontend/flask_app/static/js/{image_viewer.js,vision_overlay.js,save_image.js} di TMF 5897a9e == TieVision-Station 39674e8 src/visionsuite/station/static/ (diff vuoto). I test JS differiscono solo per il percorso del modulo (riga MOD/require). - Station: #12 ha cambiato image_viewer.js e vision_overlay.js (save_image.js no). Oggi in Station no-layers nasconde solo il menu. CONTRATTO no-layers (file image_viewer.js identico nei due repo) Con l'attributo no-layers presente: 1. menu .tmfv-layers nascosto (gia' cosi'). 2. overlay = un solo disegno come prima di #12: VO.svg(tutte le forme nell'ordine dato, {zoom}) seguito dalle quote delle etichette (quotaSvg / linea della scritta spostata); nessun <g data-layer>, nessun opacity, nessuna forma nascosta. Lo stato _lay e il localStorage non contano (non si leggono per disegnare, l'immagine resta visibile). 3. etichette sempre visibili, testo = l.text (Nomi accesi), posizione da _labelPos; niente trascinamento: nessun listener pointerdown/dblclick, pointer-events none (regola CSS tmf-viewer[no-layers] .tmfv-label{pointer-events:none;cursor:default} o equivalente), nessun evento quota-spostata. 4. rotella, pulsanti, Adatta, Salva, pan: come senza no-layers. 5. attributo aggiunto/tolto a runtime: ridisegno (attributeChangedCallback 'no-layers' -> _syncLayers + _drawOverlay + _drawLabels). Senza no-layers: comportamento invariato (pagina De Angeli). FILE - TieVision-Station (worktree C:/Users/Adriano/lavoro/TieVision-Station-nolayers, ramo lavoro/daitarn-nolayers da main 04c11cc): - src/visionsuite/station/static/image_viewer.js — contratto no-layers sopra; commento in testa (righe 17-21) aggiornato. - tests/js/fixtures/ (se manca la pagina demo, copiarla da TMF src/frontend/flask_app/tests/js/fixtures/image_viewer_demo.html con i percorsi adattati) — viewer con no-layers e controlli nel #log. - TieMeasureFlow (worktree C:/Users/Adriano/lavoro/TieMeasureFlow-rotella, ramo lavoro/daitarn-tmf-rotella da 5897a9e): - src/frontend/flask_app/static/js/image_viewer.js, vision_overlay.js — copia byte per byte dei file Station dopo la modifica (LF: .gitattributes vuole eol=lf in static/**). - src/frontend/flask_app/tests/js/test_vision_overlay.js, test_image_viewer.js — copia dei test Station con il solo percorso del modulo di TMF. - src/frontend/flask_app/tests/js/fixtures/image_viewer_demo.html — viewer con no-layers e controlli. - attributo no-layers su OGNI <tmf-viewer> di TMF: src/frontend/flask_app/templates/maker/task_editor.html (3: righe ~736, ~748, ~793), src/frontend/flask_app/templates/measure/task_execute.html (1: riga ~584), scripts/calibrazione_pagina.py (4: righe ~173, ~181, ~244, ~271). Nessun createElement('tmf-viewer') nei JS (VERIFICATO grep). - commenti #N accanto a ogni modifica (regola del repo: ogni modifica ha il suo commento). TEST - Station: node --test tests/js/test_image_viewer.js tests/js/test_vision_overlay.js tests/js/test_stazione.js tests/js/test_save_image.js → tutti verdi; uv run pytest -q → 354 passed invariati. - Station e TMF, pagina demo in Chromium (Playwright: uv run --no-project -q --with playwright==1.63.0 python <script>, file:// va bene): viewer no-layers con overlay misto (role found e non found, layer ricerca) e etichette con key → nessun g[data-layer], nessun attributo opacity, tutte le forme presenti anche con localStorage tmf-viewer-layers {ricerca:false}, .tmfv-layers hidden, etichetta con pointer-events none e nessun quota-spostata dopo un trascinamento simulato; rotella senza Ctrl cambia lo zoom; viewer senza no-layers invariato (gruppi presenti). - TMF: node src/frontend/flask_app/tests/js/test_image_viewer.js (e gli altri due) → exit 0; uv run pytest src/frontend/flask_app/tests -q → stessi esiti della base 5897a9e (in locale 5 fallimenti noti per i .mo compilati: confrontare con la base, non contare quelli). - grep: ogni "<tmf-viewer" in src/frontend/flask_app/templates e scripts/calibrazione_pagina.py ha no-layers. NON TOCCARE: TMF backend, vision, vision_worker, ramo V3.0.0, ramo lavoro/daitarn-tmf-dxfcal; Station lavoro.py, stazione.js, vision_overlay.js (in Station), main di Station; scratchpad De Angeli; PC fiera (il deploy lo fa chi coordina, dopo l'ok di Adriano).
Adriano added the sviluppo label 2026-10-29 12:38:58 +00:00
Author
Owner

ESITO: fatto (passo 3, revisione Opus del codice Sonnet claude-sonnet-5-5)
RIF: gitea:Adriano/TieMeasureFlow#126
COSA: diff conforme al contratto no-layers; nessuna correzione richiesta.
COMMIT: TieVision-Station b1af911 (lavoro/daitarn-nolayers, pushato); TieMeasureFlow 8c361c1 (lavoro/daitarn-tmf-rotella da 5897a9e, pushato).
VERIFICATO: no-layers -> _drawOverlay = VO.svg(tutte le forme) + quote, identico a 39674e8 per etichette senza quota/testo; _drawLabels testo = text, nessun listener; attributeChangedCallback protetto da _built.
VERIFICATO: cmp image_viewer.js / vision_overlay.js / save_image.js TMF == Station b1af911; LF.
PROVA: Station node --test 4 file -> pass 4 fail 0; TMF node test_image_viewer/test_vision_overlay/test_save_image -> exit 0; TMF pytest src/frontend/flask_app/tests (PYTHONPATH=src/frontend;src, venv dxfcal) -> 443 passed, 2 skipped (= base 5897a9e secondo il rapporto Sonnet); demo TMF Playwright -> 38/38 ok, trascinamento reale nessun quota-spostata, mouse.wheel senza Ctrl zoom 1.6 -> 2.
PROVA: PC fiera C:\Tielogic\TieMeasureFlow-src, i 5 file toccati == 5897a9e (diff con CRLF tolti).
MANCA: prova di Adriano su daitarn (pagina demo aperta); deploy fiera con riavvio TMF solo con ok esplicito (staging-126 + dep126.ps1 pronti nello scratchpad della sessione e91af050); merge Station b1af911 su main; TMF resta sul ramo (dxfcal non e' su V3.0.0).

ESITO: fatto (passo 3, revisione Opus del codice Sonnet claude-sonnet-5-5) RIF: gitea:Adriano/TieMeasureFlow#126 COSA: diff conforme al contratto no-layers; nessuna correzione richiesta. COMMIT: TieVision-Station b1af911 (lavoro/daitarn-nolayers, pushato); TieMeasureFlow 8c361c1 (lavoro/daitarn-tmf-rotella da 5897a9e, pushato). VERIFICATO: no-layers -> _drawOverlay = VO.svg(tutte le forme) + quote, identico a 39674e8 per etichette senza quota/testo; _drawLabels testo = text, nessun listener; attributeChangedCallback protetto da _built. VERIFICATO: cmp image_viewer.js / vision_overlay.js / save_image.js TMF == Station b1af911; LF. PROVA: Station node --test 4 file -> pass 4 fail 0; TMF node test_image_viewer/test_vision_overlay/test_save_image -> exit 0; TMF pytest src/frontend/flask_app/tests (PYTHONPATH=src/frontend;src, venv dxfcal) -> 443 passed, 2 skipped (= base 5897a9e secondo il rapporto Sonnet); demo TMF Playwright -> 38/38 ok, trascinamento reale nessun quota-spostata, mouse.wheel senza Ctrl zoom 1.6 -> 2. PROVA: PC fiera C:\Tielogic\TieMeasureFlow-src, i 5 file toccati == 5897a9e (diff con CRLF tolti). MANCA: prova di Adriano su daitarn (pagina demo aperta); deploy fiera con riavvio TMF solo con ok esplicito (staging-126 + dep126.ps1 pronti nello scratchpad della sessione e91af050); merge Station b1af911 su main; TMF resta sul ramo (dxfcal non e' su V3.0.0).
Author
Owner

ESITO: fatto (deploy sulla demo; l'issue resta aperta per la prova di Adriano)
RIF: gitea:Adriano/TieMeasureFlow#126
COSA: V3.0.0 portato in fast-forward a 8c361c1 (lavoro/daitarn-tmf-rotella, contiene dxfcal 5897a9e e #118-#125); demo tieflow.tielogic.xyz aggiornata da be904ba a 8c361c1 il 2026-11-06 (macchina daitarn, VPS goldrake /opt/docker/tiemeasureflow).
FILE: nessuna modifica al codice; push origin lavoro/daitarn-tmf-rotella:V3.0.0 (ae2353f..8c361c1).
PROVA: backup goldrake:/opt/docker/tiemeasureflow-backup/20261106/ (db.sql.gz, uploads.tgz, env.bak) + immagini taggate tiemeasureflow-{server,client,vision}:pre-rotella-20261106
PROVA: docker compose run --rm --no-deps server uv run alembic ... upgrade head → MySQLImpl, 019 → 020 → 021 → 022, RC=0
PROVA: docker compose ps → client, server, vision, mysql healthy; alembic_version = 022_measurement_value_nullable; users = 7 (DB conservato)
PROVA: GET /api/health → ok; vision /health → engine_version 06b549a25d0bff7504a0e8bbbd233fd5fc05652a; GET / → 200 /auth/login, piè di pagina "v3.0.0 · 8c361c1"
PROVA: sha1 di /static/js/image_viewer.js servito == sha1 del file nel checkout 8c361c1 (297c2694…)
MANCA: prova di Adriano del visore (rotella, no-layers) sulla demo; merge TieVision-Station b1af911 (lavoro/daitarn-nolayers) su main.
NOTA: vendor/visionsuite punta a TieVision-Core 06b549a, presente solo sul ramo Core lavoro/daitarn-dxfoverlay (main Core 474ecbb): se quel ramo si cancella il submodule non si risolve più.
ROLLBACK: docker tag tiemeasureflow-:pre-rotella-20261106 tiemeasureflow-:latest per server/client/vision, ripristino OBBLIGATORIO di db.sql.gz (il codice be904ba non conosce la revisione 022: senza ripristino l'alembic dell'avvio si ferma con "Can't locate revision"), docker compose up -d.

ESITO: fatto (deploy sulla demo; l'issue resta aperta per la prova di Adriano) RIF: gitea:Adriano/TieMeasureFlow#126 COSA: V3.0.0 portato in fast-forward a 8c361c1 (lavoro/daitarn-tmf-rotella, contiene dxfcal 5897a9e e #118-#125); demo tieflow.tielogic.xyz aggiornata da be904ba a 8c361c1 il 2026-11-06 (macchina daitarn, VPS goldrake /opt/docker/tiemeasureflow). FILE: nessuna modifica al codice; push origin lavoro/daitarn-tmf-rotella:V3.0.0 (ae2353f..8c361c1). PROVA: backup goldrake:/opt/docker/tiemeasureflow-backup/20261106/ (db.sql.gz, uploads.tgz, env.bak) + immagini taggate tiemeasureflow-{server,client,vision}:pre-rotella-20261106 PROVA: docker compose run --rm --no-deps server uv run alembic ... upgrade head → MySQLImpl, 019 → 020 → 021 → 022, RC=0 PROVA: docker compose ps → client, server, vision, mysql healthy; alembic_version = 022_measurement_value_nullable; users = 7 (DB conservato) PROVA: GET /api/health → ok; vision /health → engine_version 06b549a25d0bff7504a0e8bbbd233fd5fc05652a; GET / → 200 /auth/login, piè di pagina "v3.0.0 · 8c361c1" PROVA: sha1 di /static/js/image_viewer.js servito == sha1 del file nel checkout 8c361c1 (297c2694…) MANCA: prova di Adriano del visore (rotella, no-layers) sulla demo; merge TieVision-Station b1af911 (lavoro/daitarn-nolayers) su main. NOTA: vendor/visionsuite punta a TieVision-Core 06b549a, presente solo sul ramo Core lavoro/daitarn-dxfoverlay (main Core 474ecbb): se quel ramo si cancella il submodule non si risolve più. ROLLBACK: docker tag tiemeasureflow-<s>:pre-rotella-20261106 tiemeasureflow-<s>:latest per server/client/vision, ripristino OBBLIGATORIO di db.sql.gz (il codice be904ba non conosce la revisione 022: senza ripristino l'alembic dell'avvio si ferma con "Can't locate revision"), docker compose up -d.
Author
Owner

Soluzione

ESITO: fatto (chiusa su richiesta di Adriano del 06/11/2026: «completa quelle di TMF»)
RIF: gitea:Adriano/TieMeasureFlow#126; visore: gitea:Adriano/TieVision-Station#12
COSA: tutte le immagini di TMF usano con no-layers (rotella senza Ctrl = zoom sul punto del mouse, niente menu livelli, disegno come prima).
FATTO:

  • TMF: origin/V3.0.0 8c361c1 (fast-forward da ae2353f, contiene anche dxfcal 5897a9e); demo tieflow.tielogic.xyz su 8c361c1 dal 06/11 (backup e rollback nel commento del 06/11).
  • TieVision-Station: lavoro/daitarn-nolayers b1af911 portato su main in fast-forward (04c11cc..b1af911), 06/11.
  • TieVision-Core: il submodule vendor/visionsuite di 8c361c1 punta a 06b549a, presente solo sul ramo lavoro/daitarn-dxfoverlay (3 commit avanti, 50 indietro rispetto a main 474ecbb: niente fast-forward). Messo al sicuro col tag annotato tmf-v3.0.0-8c361c1 → 06b549a, pushato.
    PROVA: sha1 di static/js/image_viewer.js in TMF 8c361c1 == Station b1af911 (297c2694…); servito dalla demo identico al checkout (06/11); Station ℹ tests 0
    ℹ suites 0
    ℹ pass 0
    ℹ fail 0
    ℹ cancelled 0
    ℹ skipped 0
    ℹ todo 0
    ℹ duration_ms 11.5852 → 4 file, 4 pass, 0 fail (daitarn, Node 24.18).
    NON FATTO: la prova a schermo di Adriano del visore sulla demo; i test Python di Station non girati (submodule non inizializzato nel worktree, il diff tocca solo image_viewer.js e la fixture JS).
    APERTO: unione di Core lavoro/daitarn-dxfoverlay su main (decisione dell'area TieVision-Core).
**Soluzione** ESITO: fatto (chiusa su richiesta di Adriano del 06/11/2026: «completa quelle di TMF») RIF: gitea:Adriano/TieMeasureFlow#126; visore: gitea:Adriano/TieVision-Station#12 COSA: tutte le immagini di TMF usano <tmf-viewer> con no-layers (rotella senza Ctrl = zoom sul punto del mouse, niente menu livelli, disegno come prima). FATTO: - TMF: origin/V3.0.0 8c361c1 (fast-forward da ae2353f, contiene anche dxfcal 5897a9e); demo tieflow.tielogic.xyz su 8c361c1 dal 06/11 (backup e rollback nel commento del 06/11). - TieVision-Station: lavoro/daitarn-nolayers b1af911 portato su main in fast-forward (04c11cc..b1af911), 06/11. - TieVision-Core: il submodule vendor/visionsuite di 8c361c1 punta a 06b549a, presente solo sul ramo lavoro/daitarn-dxfoverlay (3 commit avanti, 50 indietro rispetto a main 474ecbb: niente fast-forward). Messo al sicuro col tag annotato tmf-v3.0.0-8c361c1 → 06b549a, pushato. PROVA: sha1 di static/js/image_viewer.js in TMF 8c361c1 == Station b1af911 (297c2694…); servito dalla demo identico al checkout (06/11); Station ℹ tests 0 ℹ suites 0 ℹ pass 0 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 11.5852 → 4 file, 4 pass, 0 fail (daitarn, Node 24.18). NON FATTO: la prova a schermo di Adriano del visore sulla demo; i test Python di Station non girati (submodule non inizializzato nel worktree, il diff tocca solo image_viewer.js e la fixture JS). APERTO: unione di Core lavoro/daitarn-dxfoverlay su main (decisione dell'area TieVision-Core).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#126