Editor annotazioni: al resize gli oggetti non vengono riscalati, il salvataggio sposta i marker #28

Closed
opened 2026-09-21 20:14:50 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: media
FILE: src/frontend/flask_app/static/js/annotation-editor.js:476-509 (_fitCanvasToImage), 1099-1108, 1137
COSA: al resize canvas e sfondo si riscalano, gli oggetti no (solo setCoords). Il salvataggio scrive imageScale nuovo con coordinate vecchie: posizioni sbagliate anche nel viewer dell'operatore. isDirty non è usato come guardia (nessun beforeunload).
INPUT: disegno più largo del contenitore, marker messi, tablet ruotato, salvataggio.
VERIFICATO: lettura di _fitCanvasToImage: unica operazione sugli oggetti è forEachObject(obj.setCoords()).

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: media FILE: src/frontend/flask_app/static/js/annotation-editor.js:476-509 (_fitCanvasToImage), 1099-1108, 1137 COSA: al resize canvas e sfondo si riscalano, gli oggetti no (solo `setCoords`). Il salvataggio scrive `imageScale` nuovo con coordinate vecchie: posizioni sbagliate anche nel viewer dell'operatore. `isDirty` non è usato come guardia (nessun `beforeunload`). INPUT: disegno più largo del contenitore, marker messi, tablet ruotato, salvataggio. VERIFICATO: lettura di _fitCanvasToImage: unica operazione sugli oggetti è `forEachObject(obj.setCoords())`. ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:50 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:23:12 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:23:12Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:23:12Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto B2

MODIFICHE: src/frontend/flask_app/static/js/annotation-editor.js _fitCanvasToImage (476-509) — al resize, se la scala cambia da oldScale a newScale, riscalare ogni oggetto del canvas (escluso lo sfondo) di f = newScale/oldScale: left*=f, top*=f, scaleX*=f, scaleY*=f, poi setCoords(); per linee/frecce costruite con x1,y1,x2,y2 verifica come sono serializzate in getAnnotationsJson e mantieni coerenza con loadAnnotationsJson (1137), che è il riferimento giusto. Conserva this._currentScale. Aggiungi guardia beforeunload quando isDirty.
TEST: test node se l'editor è caricabile senza Fabric reale (probabilmente no): allora verifica a lettura e passi manuali nel rapporto.
NON TOCCARE: annotation-viewer.js salvo bug speculare dimostrato.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto B2 MODIFICHE: src/frontend/flask_app/static/js/annotation-editor.js `_fitCanvasToImage` (476-509) — al resize, se la scala cambia da `oldScale` a `newScale`, riscalare ogni oggetto del canvas (escluso lo sfondo) di `f = newScale/oldScale`: `left*=f, top*=f, scaleX*=f, scaleY*=f`, poi `setCoords()`; per linee/frecce costruite con x1,y1,x2,y2 verifica come sono serializzate in `getAnnotationsJson` e mantieni coerenza con `loadAnnotationsJson` (1137), che è il riferimento giusto. Conserva `this._currentScale`. Aggiungi guardia `beforeunload` quando `isDirty`. TEST: test node se l'editor è caricabile senza Fabric reale (probabilmente no): allora verifica a lettura e passi manuali nel rapporto. NON TOCCARE: annotation-viewer.js salvo bug speculare dimostrato.
Author
Owner

Soluzione

ESITO: fatto
COSA: _fitCanvasToImage riscalare ogni oggetto del fattore newScale/oldScale (posizione, dimensioni, font, estremi delle frecce); guardia beforeunload con modifiche non salvate. Test node con canvas fittizio; Fabric reale non caricabile in node. PROVA MANUALE: marker, rotazione tablet, salvataggio, riapertura.
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): c375331
PROVA: uv run --extra server --extra client --extra dev pytest -q → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).

**Soluzione** ESITO: fatto COSA: `_fitCanvasToImage` riscalare ogni oggetto del fattore newScale/oldScale (posizione, dimensioni, font, estremi delle frecce); guardia `beforeunload` con modifiche non salvate. Test node con canvas fittizio; Fabric reale non caricabile in node. PROVA MANUALE: marker, rotazione tablet, salvataggio, riapertura. COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): c375331 PROVA: `uv run --extra server --extra client --extra dev pytest -q` → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:34 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#28