diff --git a/data-pipeline/seed/build-manifest.mjs b/data-pipeline/seed/build-manifest.mjs index 2714afc..37aead0 100644 --- a/data-pipeline/seed/build-manifest.mjs +++ b/data-pipeline/seed/build-manifest.mjs @@ -31,6 +31,35 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); const structures = []; +// O Z-Anatomy-Sample (verificado na íntegra em Assets/Models/1.0 Models, +// via API do GitHub) NÃO tem nenhum arquivo de pele/tegumento — só +// SkeletalSystem, MuscularSystem, NervousSystem, CardioVascular, +// VisceralSystem, Joints, LymphoidOrgans, Regions e Reference lines — +// confirma o que já estava documentado: não existe dataset de corpo +// inteiro com camadas de pele, daqui vem a necessidade do bloco esquemático. +// +// Todo o desenho abaixo é escrito em "unidades de projeto" (a escala +// original, pensada peça por peça) e só na hora de gerar a estrutura final +// o add() aplica o fator SCALE — assim dá pra aumentar/diminuir o bloco +// inteiro (pedido do usuário: "aumente o tamanho dele") mudando um único +// número, sem precisar recalcular à mão a posição de cada uma das ~20 peças. +const SCALE = 3; + +function scaleShape(shape) { + const scaled = { ...shape }; + for (const key of ["w", "h", "d", "r", "rt", "rb"]) { + if (scaled[key] != null) scaled[key] *= SCALE; + } + return scaled; +} + +// Escala a posição em torno da âncora do bloco (CX, CY, Z_TOP) — assim o +// bloco cresce a partir do ponto onde "gruda" no antebraço, em vez de só se +// afastar dele. +function scalePosition([x, y, z]) { + return [CX + (x - CX) * SCALE, CY + (y - CY) * SCALE, Z_TOP - (Z_TOP - z) * SCALE]; +} + function add(system, slug, namePt, nameEn, region, shape, position, opts = {}) { structures.push({ system, @@ -42,8 +71,8 @@ function add(system, slug, namePt, nameEn, region, shape, position, opts = {}) { regionPath: region, modelFile: `${system}.glb`, meshName: slug, - shape, - position, + shape: scaleShape(shape), + position: scalePosition(position), rotation: opts.rotation ?? [0, 0, 0], color: opts.color, });