From 796ccb8052ac833bce711ee07b7f18614380d360 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 4 May 2026 21:54:16 +0200 Subject: [PATCH] fix(web): simmetria invariante (0) collassava a 360 per || default Bug JS: SYM_MAP[user.simmetria] || 360 trasforma il valore valido 0 (invariante = nessuna rotazione) in 360 = no simmetria. Risultato: cambiare simmetria nel pannello avanzato non aveva effetto se selezionato invariante; per le altre opzioni il valore passava ma con potenziale altri valori 0 in futuro. Sostituito con ?? per distinguere "chiave mancante" da "valore zero". Stessa fix per PREC_MAP. Inoltre allineato FP_MAP JS al server (medio 0.35 -> 0.50, ecc.) per coerenza UI/backend. Co-Authored-By: Claude Opus 4.7 (1M context) --- pm2d/web/static/app.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pm2d/web/static/app.js b/pm2d/web/static/app.js index 7ad8063..a4f3993 100644 --- a/pm2d/web/static/app.js +++ b/pm2d/web/static/app.js @@ -294,12 +294,17 @@ async function doMatch() { const SCALE_MAP = {fissa:[1,1,0.1], mini:[0.9,1.1,0.05], medio:[0.75,1.25,0.05], max:[0.5,1.5,0.05]}; const PREC_MAP = {veloce:10, normale:5, preciso:2}; - const FP_MAP = {off:0, leggero:0.20, medio:0.35, forte:0.50}; + // Allineato a FILTRO_FP_MAP server-side (server.py) + const FP_MAP = {off:0, leggero:0.30, medio:0.50, forte:0.70}; const [smin, smax, sstep] = SCALE_MAP[user.scala]; + // NB: SYM_MAP[invariante]=0 e' valido (zero rotazioni). Uso ?? per + // distinguere "chiave mancante" da "valore zero": altrimenti 0 || 360 + // collassa invariante a 360 = bug "simmetria non ha effetto". + const angMax = SYM_MAP[user.simmetria] ?? 360; body = { model_id: state.model.id, scene_id: state.scene.id, roi: state.roi, - angle_min: 0, angle_max: SYM_MAP[user.simmetria] || 360, - angle_step: PREC_MAP[user.precisione] || 5, + angle_min: 0, angle_max: angMax, + angle_step: PREC_MAP[user.precisione] ?? 5, scale_min: smin, scale_max: smax, scale_step: sstep, min_score: user.min_score, max_matches: user.max_matches, num_features: adv.num_features ?? 96, @@ -307,7 +312,7 @@ async function doMatch() { strong_grad: adv.strong_grad ?? 60, spread_radius: adv.spread_radius ?? 5, pyramid_levels: adv.pyramid_levels ?? 3, - verify_threshold: adv.verify_threshold ?? (FP_MAP[user.filtro_fp] ?? 0.35), + verify_threshold: adv.verify_threshold ?? (FP_MAP[user.filtro_fp] ?? 0.50), nms_radius: adv.nms_radius ?? 0, }; } else {