From e8ef3852377c1e11505da2564ff9f19ff882b870 Mon Sep 17 00:00:00 2001 From: Rodrigo Bertoldo de Sousa Martins Date: Fri, 11 Sep 2026 16:27:38 -0300 Subject: [PATCH] fix render4 --- data-pipeline/scripts/extract-manifest.mjs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/data-pipeline/scripts/extract-manifest.mjs b/data-pipeline/scripts/extract-manifest.mjs index 5318446..9f369e7 100644 --- a/data-pipeline/scripts/extract-manifest.mjs +++ b/data-pipeline/scripts/extract-manifest.mjs @@ -113,6 +113,19 @@ function resolveSkeletalBone(rawName) { // apagar uma estrutura real. const LEADER_LINE_SOURCE_KEYS = new Set(["nervous", "regions"]); +// Uma linha de chamada de verdade do app original é um objeto decorativo +// simples — poucos vértices, só o suficiente pra desenhar um segmento fino +// (às vezes com um pequeno gancho na ponta). Uma faixa real de pele, MESMO +// estreita (ex: bem em cima da coluna), é parte de uma superfície contínua +// do corpo e tem muito mais vértices, porque segue o contorno real do +// tronco em vez de ser um segmento reto desenhado à mão. Sem esse teto, o +// teste de "reto e fino" sozinho não distingue as duas (uma faixa comprida +// e estreita também passa) — foi exatamente o que causou o buraco na pele +// da coluna. Esse limite só torna a classificação MAIS RESTRITIVA (nunca +// exclui mais do que excluía antes), então não tem como abrir um buraco +// novo — na pior hipótese, deixa passar algum tracinho residual. +const MAX_LEADER_LINE_MESH_VERTS = 60; + function isLeaderLineMesh(mesh) { try { // Antes, cada primitivo era julgado sozinho ("every"). Isso deixava @@ -135,6 +148,7 @@ function isLeaderLineMesh(mesh) { points.push([arr[i * 3], arr[i * 3 + 1], arr[i * 3 + 2]]); } } + if (points.length > MAX_LEADER_LINE_MESH_VERTS) return false; return isLeaderLinePointCloud(points); } catch { return false;