From 6be51a7ad6b5725b7397c8b1d4762d93b8e8ac40 Mon Sep 17 00:00:00 2001 From: aerom Date: Thu, 30 Apr 2026 20:55:30 -0400 Subject: [PATCH] Fix: marca de tope en boyas Pillar/Barrel/Spar depende del catlam MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El bloque PILLAR (boyshp=4) siempre usaba drawTopmarkConeSmall (triángulo) sin importar el catlam, causando que boyas VERDES (babor, catlam=1) mostraran un triángulo en vez del cuadrado correcto. Todas las formas genéricas (Pillar, Barrel, Spar) ahora consultan el catlam: catlam 1/3 (PORT, babor) → drawTopmarkCan (cuadrado) catlam 2/4 (STBD, estribor) → drawTopmarkCone (cono) sin catlam (desconocido) → cono pequeño genérico Las formas puras Can/Cone ya tenían el topmark correcto; sin cambio. Afecta principalmente a boyas BOYLAT boyshp=4 (Barranquilla, Miami pilares). Co-Authored-By: Claude Sonnet 4.6 --- frontend/js/map.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/frontend/js/map.js b/frontend/js/map.js index b7966e3..b70f0cf 100644 --- a/frontend/js/map.js +++ b/frontend/js/map.js @@ -631,8 +631,10 @@ function _encBuoyCanvas(opts) { // ── SPAR / ESPEQUE — tall thin cylinder ──────────────────── const sw = bW * 0.24, sparTop = bTop - bH * 0.40; drawCylinder(cx - sw/2, sparTop, sw, bH * 1.40, css.length ? css : [c1]); - // Topmark above - drawTopmarkConeSmall(cx, sparTop - 2, sw * 1.4, c1); + // Topmark: spar lateral = same rule por catlam + if (cl === 1 || cl === 3) drawTopmarkCan (cx, sparTop - 2, sw * 1.4, c1); + else if (cl === 2 || cl === 4) drawTopmarkCone(cx, sparTop - 2, sw * 1.4, c1); + else drawTopmarkConeSmall(cx, sparTop - 2, sw * 1.4, c1); } else if (isBar) { // ── BARREL (Barril) — fat ellipsoid with stave lines ─────── @@ -653,7 +655,9 @@ function _encBuoyCanvas(opts) { ctx.strokeStyle = _darken3D(c1, 0.45); ctx.lineWidth = 0.7; ctx.stroke(); }); _st(ctx, cx, bcy - ry, stTop); - drawTopmarkConeSmall(cx, stTop, bW * 0.44, c1); + if (cl === 1 || cl === 3) drawTopmarkCan (cx, stTop, bW * 0.40, c1); + else if (cl === 2 || cl === 4) drawTopmarkCone(cx, stTop, bW * 0.42, c1); + else drawTopmarkConeSmall(cx, stTop, bW * 0.44, c1); } else if (isSuper) { // ── SUPER-BUOY / LANBY — wide low platform + tower ───────── @@ -678,7 +682,12 @@ function _encBuoyCanvas(opts) { const sw2 = pw * 0.7; drawCylinder(cx - sw2/2, bTop, sw2, bH*0.4, [_darken3D(c1, 0.08)]); _st(ctx, cx, bTop, stTop); - drawTopmarkConeSmall(cx, stTop, bW * 0.50, c1); + // Topmark depends on lateral significance (catlam), NOT on hull shape. + // PORT (babor, catlam 1/3) → cuadrado (can) + // STBD (estribor, catlam 2/4) → cono (cone) + if (cl === 1 || cl === 3) drawTopmarkCan (cx, stTop, bW * 0.42, c1); + else if (cl === 2 || cl === 4) drawTopmarkCone(cx, stTop, bW * 0.44, c1); + else drawTopmarkConeSmall(cx, stTop, bW * 0.50, c1); } // ── Waterline ──────────────────────────────────────────────────────────