diff --git a/app/src/pages/ShelterModule.tsx b/app/src/pages/ShelterModule.tsx index 2365c57..255201d 100644 --- a/app/src/pages/ShelterModule.tsx +++ b/app/src/pages/ShelterModule.tsx @@ -97,6 +97,10 @@ const ShelterModule: React.FC = () => { }; }, [condition, q, depth, width, height, theta, backClosure, backRange, leftClosure, rightClosure, openingPos, windAngle]); + const effAreaRoof = depth * width; + const effAreaBack = (width * height) * (backClosure / 100); + const effAreaSideTotal = (depth * height) * ((leftClosure + rightClosure) / 100); + const handleExportPDF = () => { const angleLabel = windAngle === 0 ? '0° (Frontal)' : windAngle === 45 ? '45° (Oblíquo)' : '90° (Lateral)'; const sections: GenericPDFSection[] = [ @@ -108,9 +112,9 @@ const ShelterModule: React.FC = () => { { label: 'Largura (b)', value: `${width.toFixed(1)} m` }, { label: 'Altura do Pilar (h)', value: `${height.toFixed(1)} m` }, { label: 'Inclinação da Cobertura (θ)', value: `${theta}°` }, - { label: 'Incidência do Vento (Direção)', value: angleLabel }, - { label: 'Fechamento da Parede Traseira', value: `${backClosure}%` }, - { label: 'Faixa de Parede [Base, Topo]', value: backRange ? `${backRange[0]}% até ${backRange[1]}%` : '0% até 100%' }, + { label: 'Condição NBR 6123 (Sec. 6.3)', value: condition }, + { label: 'Fechamento Parede de Fundo', value: `${backClosure}%` }, + { label: 'Fresta Parede de Fundo', value: backRange ? `${backRange[0]}% a ${backRange[1]}%` : 'Sem fresta' }, { label: 'Fechamento Lateral Esq / Dir', value: `${leftClosure}% / ${rightClosure}%` }, ], }, @@ -132,15 +136,15 @@ const ShelterModule: React.FC = () => { gridItems: [ { label: 'Pressão na Cobertura (Fz / A_telhado)', - value: `${(result.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`, + value: `${(result.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`, }, { label: 'Pressão na Parede Traseira (Fx / A_fundo)', - value: `${(result.forces.fxBack / (width * height)).toFixed(2)} kN/m²`, + value: effAreaBack > 0 ? `${(result.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m² (0% fechado)', }, { label: 'Pressão nas Paredes Laterais (Fy / A_lat)', - value: `${(result.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`, + value: effAreaSideTotal > 0 ? `${(result.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m² (0% fechado)', }, { label: 'Pressão Dinâmica Base do Vento (q)', @@ -148,11 +152,11 @@ const ShelterModule: React.FC = () => { }, { label: 'Área da Cobertura (Telhado)', - value: `${(depth * width).toFixed(1)} m²`, + value: `${effAreaRoof.toFixed(1)} m² (100%)`, }, { - label: 'Área Parede Traseira / Laterais (2x)', - value: `${(width * height).toFixed(1)} m² / ${(depth * height * 2).toFixed(1)} m²`, + label: 'Áreas Efetivas Parede Fundo / Laterais', + value: `${effAreaBack.toFixed(1)} m² (${backClosure}%) / ${effAreaSideTotal.toFixed(1)} m² (Esq ${leftClosure}% + Dir ${rightClosure}%)`, }, ], }, @@ -205,24 +209,24 @@ const ShelterModule: React.FC = () => { ], [ ' ↳ Pressão Cobertura (kN/m²)', - `${(envelope.res0.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`, - `${(envelope.res45.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`, - `${(envelope.res90.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`, - `${(envelope.criticalUp.value / (depth * width)).toFixed(2)} kN/m² (${envelope.criticalUp.angle}°)` + `${(envelope.res0.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`, + `${(envelope.res45.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`, + `${(envelope.res90.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`, + `${(envelope.criticalUp.value / effAreaRoof).toFixed(2)} kN/m² (${envelope.criticalUp.angle}°)` ], [ ' ↳ Pressão Parede Fundo (kN/m²)', - `${(envelope.res0.forces.fxBack / (width * height)).toFixed(2)} kN/m²`, - `${(envelope.res45.forces.fxBack / (width * height)).toFixed(2)} kN/m²`, - `${(envelope.res90.forces.fxBack / (width * height)).toFixed(2)} kN/m²`, - `${(envelope.criticalFx.value / (width * height)).toFixed(2)} kN/m² (${envelope.criticalFx.angle}°)` + effAreaBack > 0 ? `${(envelope.res0.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaBack > 0 ? `${(envelope.res45.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaBack > 0 ? `${(envelope.res90.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaBack > 0 ? `${(envelope.criticalFx.value / effAreaBack).toFixed(2)} kN/m² (${envelope.criticalFx.angle}°)` : '0.00 kN/m²' ], [ ' ↳ Pressão Paredes Lat. (kN/m²)', - `${(envelope.res0.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`, - `${(envelope.res45.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`, - `${(envelope.res90.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`, - `${(envelope.criticalFy.value / (depth * height * 2)).toFixed(2)} kN/m² (${envelope.criticalFy.angle}°)` + effAreaSideTotal > 0 ? `${(envelope.res0.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaSideTotal > 0 ? `${(envelope.res45.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaSideTotal > 0 ? `${(envelope.res90.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²', + effAreaSideTotal > 0 ? `${(envelope.criticalFy.value / effAreaSideTotal).toFixed(2)} kN/m² (${envelope.criticalFy.angle}°)` : '0.00 kN/m²' ], [ 'Carga Horiz. no Pilar', @@ -512,7 +516,7 @@ const ShelterModule: React.FC = () => {