🚀 Auto-deploy: BrainWind atualizado em 27/07/2026 23:35:41

This commit is contained in:
2026-07-27 23:35:41 +00:00
parent b4e24e4a34
commit c2b741bcdf
+36 -24
View File
@@ -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]}% a ${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)}`,
value: `${effAreaRoof.toFixed(1)} (100%)`,
},
{
label: 'Área Parede Traseira / Laterais (2x)',
value: `${(width * height).toFixed(1)}/ ${(depth * height * 2).toFixed(1)}`,
label: 'Áreas Efetivas Parede Fundo / Laterais',
value: `${effAreaBack.toFixed(1)}(${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 = () => {
</div>
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
<span>Pressão (/m²)</span>
<span className="font-mono">{(result.forces.fzUp / (depth * width)).toFixed(2)} kN/m² ({(result.forces.fzUp / (depth * width) * 101.97).toFixed(1)} kgf/m²)</span>
<span className="font-mono">{(result.forces.fzUp / effAreaRoof).toFixed(2)} kN/m² ({(result.forces.fzUp / effAreaRoof * 101.97).toFixed(1)} kgf/m²)</span>
</div>
</div>
<div className="space-y-2 border-b pb-3">
@@ -526,7 +530,11 @@ const ShelterModule: React.FC = () => {
</div>
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
<span>Pressão (/m²)</span>
<span className="font-mono">{(result.forces.fxBack / (width * height)).toFixed(2)} kN/m² ({(result.forces.fxBack / (width * height) * 101.97).toFixed(1)} kgf/m²)</span>
<span className="font-mono">
{effAreaBack > 0
? `${(result.forces.fxBack / effAreaBack).toFixed(2)} kN/m² (${(result.forces.fxBack / effAreaBack * 101.97).toFixed(1)} kgf/m²)`
: '0.00 kN/m² (0% fechado)'}
</span>
</div>
</div>
<div className="space-y-1 border-b pb-2">
@@ -536,7 +544,11 @@ const ShelterModule: React.FC = () => {
</div>
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
<span>Pressão (/m²)</span>
<span className="font-mono">{(result.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m² ({(result.forces.fySide / (depth * height * 2) * 101.97).toFixed(1)} kgf/m²)</span>
<span className="font-mono">
{effAreaSideTotal > 0
? `${(result.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m² (${(result.forces.fySide / effAreaSideTotal * 101.97).toFixed(1)} kgf/m²)`
: '0.00 kN/m² (0% fechado)'}
</span>
</div>
</div>
<div className="flex justify-between items-center pb-2 border-b">