atualizacao atlas

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo@martinsevieira.adv.br>
This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-09-22 10:53:11 -03:00
1 parent a874b5bd92
commit a55e8c50df
2 files changed
+37 -5

No files matched your search

+34 -2
View File
@@ -560,6 +560,33 @@ function stripSideSuffix(rawName) {
return { base: rawName.trim(), suffix: null }; return { base: rawName.trim(), suffix: null };
} }
// O Z-Anatomy tem os 3 músculos intercostais (externo/interno/íntimo)
// como 11 instâncias repetidas por lado (uma por espaço intercostal), mas
// só com o nome genérico — sem indicar QUAL espaço. Nomeamos cada
// instância pelo espaço intercostal, usando `n` (o contador de ocorrência
// já calculado por nome bruto — ver `nameCounts` no loop principal): a
// ordem em que o Z-Anatomy lista as instâncias no arquivo original segue
// a ordem anatômica das costelas (1º espaço primeiro, ao lado da
// clavícula), então o contador de ocorrência já serve como número do
// espaço, sem precisar calcular posição 3D nenhuma. Só pra pedidos de
// espaço intercostal — não altera nenhum outro músculo.
const INTERCOSTAL_MUSCLE_BASES = new Set([
"external intercostal muscles",
"internal intercostal muscles",
"innermost intercostal muscles",
]);
function ordinalEn(n) {
const rem100 = n % 100;
if (rem100 >= 11 && rem100 <= 13) return `${n}th`;
switch (n % 10) {
case 1: return `${n}st`;
case 2: return `${n}nd`;
case 3: return `${n}rd`;
default: return `${n}th`;
}
}
// Retorna null se o nome bruto não corresponder a nenhum dos 206 ossos — // Retorna null se o nome bruto não corresponder a nenhum dos 206 ossos —
// nesse caso a malha é ignorada (não vira estrutura, mas continua no // nesse caso a malha é ignorada (não vira estrutura, mas continua no
// arquivo .glb; como não há "structure" apontando pra ela, o frontend já // arquivo .glb; como não há "structure" apontando pra ela, o frontend já
@@ -848,8 +875,13 @@ for (const { fbx, key } of SOURCES) {
const { base, suffix } = stripSideSuffix(rawName); const { base, suffix } = stripSideSuffix(rawName);
const sideLabelPt = suffix === "l" ? " Esquerdo" : suffix === "r" ? " Direito" : ""; const sideLabelPt = suffix === "l" ? " Esquerdo" : suffix === "r" ? " Direito" : "";
const sideWordEn = suffix === "l" ? "Left " : suffix === "r" ? "Right " : ""; const sideWordEn = suffix === "l" ? "Left " : suffix === "r" ? "Right " : "";
namePt = `${translateToPt(base)}${sideLabelPt}` + (n > 1 ? ` (${n})` : ""); const isIntercostal = key === "muscular" && INTERCOSTAL_MUSCLE_BASES.has(base.toLowerCase());
nameEn = `${sideWordEn}${base}` + (n > 1 ? ` (${n})` : ""); namePt = isIntercostal
? `${translateToPt(base)}${sideLabelPt} — ${n}º Espaço Intercostal`
: `${translateToPt(base)}${sideLabelPt}` + (n > 1 ? ` (${n})` : "");
nameEn = isIntercostal
? `${sideWordEn}${base} — ${ordinalEn(n)} Intercostal Space`
: `${sideWordEn}${base}` + (n > 1 ? ` (${n})` : "");
description = description =
key === "regions" key === "regions"
? REGION_DESCRIPTIONS[base.toLowerCase()] ?? "" ? REGION_DESCRIPTIONS[base.toLowerCase()] ?? ""
@@ -100,9 +100,9 @@ export const MUSCLE_DESCRIPTIONS = {
"quadratus lumborum muscle": "Na parede posterior do abdome; flexiona lateralmente o tronco e estabiliza a 12ª costela durante a respiração.", "quadratus lumborum muscle": "Na parede posterior do abdome; flexiona lateralmente o tronco e estabiliza a 12ª costela durante a respiração.",
"psoas major": "Junto ao ilíaco (iliopsoas), é o principal flexor do quadril, essencial para caminhar e subir escadas.", "psoas major": "Junto ao ilíaco (iliopsoas), é o principal flexor do quadril, essencial para caminhar e subir escadas.",
"iliacus muscle": "Junto ao psoas maior (iliopsoas), flexiona o quadril.", "iliacus muscle": "Junto ao psoas maior (iliopsoas), flexiona o quadril.",
"external intercostal muscles": "Elevam as costelas durante a inspiração, aumentando o volume da caixa torácica.", "external intercostal muscles": "Elevam as costelas durante a inspiração, aumentando o volume da caixa torácica. Cada uma das 11 instâncias por lado ocupa um espaço intercostal diferente (o nome indica qual) — é essa referência que se usa clinicamente pra localizar achados, como \"2º espaço intercostal\" nos focos de ausculta cardíaca.",
"internal intercostal muscles": "Abaixam as costelas, auxiliando a expiração forçada (e estabilizam o espaço intercostal).", "internal intercostal muscles": "Abaixam as costelas, auxiliando a expiração forçada (e estabilizam o espaço intercostal). Cada uma das 11 instâncias por lado ocupa um espaço intercostal diferente (o nome indica qual).",
"innermost intercostal muscles": "Camada mais profunda dos intercostais; função semelhante aos intercostais internos.", "innermost intercostal muscles": "Camada mais profunda dos intercostais; função semelhante aos intercostais internos. Cada uma das 11 instâncias por lado ocupa um espaço intercostal diferente (o nome indica qual).",
"transversus thoracis muscle": "Face interna da parede torácica anterior; auxilia na expiração ao abaixar as costelas.", "transversus thoracis muscle": "Face interna da parede torácica anterior; auxilia na expiração ao abaixar as costelas.",
"levatores breves costarum": "Pequenos feixes que elevam a costela imediatamente abaixo, auxiliando a inspiração.", "levatores breves costarum": "Pequenos feixes que elevam a costela imediatamente abaixo, auxiliando a inspiração.",
"levatores longi costarum": "Feixes mais longos que elevam a costela dois níveis abaixo, auxiliando a inspiração.", "levatores longi costarum": "Feixes mais longos que elevam a costela dois níveis abaixo, auxiliando a inspiração.",