🚀 Auto-deploy: BrainWind atualizado em 27/07/2026 23:35:41
This commit is contained in:
@@ -97,6 +97,10 @@ const ShelterModule: React.FC = () => {
|
|||||||
};
|
};
|
||||||
}, [condition, q, depth, width, height, theta, backClosure, backRange, leftClosure, rightClosure, openingPos, windAngle]);
|
}, [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 handleExportPDF = () => {
|
||||||
const angleLabel = windAngle === 0 ? '0° (Frontal)' : windAngle === 45 ? '45° (Oblíquo)' : '90° (Lateral)';
|
const angleLabel = windAngle === 0 ? '0° (Frontal)' : windAngle === 45 ? '45° (Oblíquo)' : '90° (Lateral)';
|
||||||
const sections: GenericPDFSection[] = [
|
const sections: GenericPDFSection[] = [
|
||||||
@@ -108,9 +112,9 @@ const ShelterModule: React.FC = () => {
|
|||||||
{ label: 'Largura (b)', value: `${width.toFixed(1)} m` },
|
{ label: 'Largura (b)', value: `${width.toFixed(1)} m` },
|
||||||
{ label: 'Altura do Pilar (h)', value: `${height.toFixed(1)} m` },
|
{ label: 'Altura do Pilar (h)', value: `${height.toFixed(1)} m` },
|
||||||
{ label: 'Inclinação da Cobertura (θ)', value: `${theta}°` },
|
{ label: 'Inclinação da Cobertura (θ)', value: `${theta}°` },
|
||||||
{ label: 'Incidência do Vento (Direção)', value: angleLabel },
|
{ label: 'Condição NBR 6123 (Sec. 6.3)', value: condition },
|
||||||
{ label: 'Fechamento da Parede Traseira', value: `${backClosure}%` },
|
{ label: 'Fechamento Parede de Fundo', value: `${backClosure}%` },
|
||||||
{ label: 'Faixa de Parede [Base, Topo]', value: backRange ? `${backRange[0]}% até ${backRange[1]}%` : '0% até 100%' },
|
{ label: 'Fresta Parede de Fundo', value: backRange ? `${backRange[0]}% a ${backRange[1]}%` : 'Sem fresta' },
|
||||||
{ label: 'Fechamento Lateral Esq / Dir', value: `${leftClosure}% / ${rightClosure}%` },
|
{ label: 'Fechamento Lateral Esq / Dir', value: `${leftClosure}% / ${rightClosure}%` },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -132,15 +136,15 @@ const ShelterModule: React.FC = () => {
|
|||||||
gridItems: [
|
gridItems: [
|
||||||
{
|
{
|
||||||
label: 'Pressão na Cobertura (Fz / A_telhado)',
|
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)',
|
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)',
|
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)',
|
label: 'Pressão Dinâmica Base do Vento (q)',
|
||||||
@@ -148,11 +152,11 @@ const ShelterModule: React.FC = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Área da Cobertura (Telhado)',
|
label: 'Área da Cobertura (Telhado)',
|
||||||
value: `${(depth * width).toFixed(1)} m²`,
|
value: `${effAreaRoof.toFixed(1)} m² (100%)`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Área Parede Traseira / Laterais (2x)',
|
label: 'Áreas Efetivas Parede Fundo / Laterais',
|
||||||
value: `${(width * height).toFixed(1)} m² / ${(depth * height * 2).toFixed(1)} m²`,
|
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²)',
|
' ↳ Pressão Cobertura (kN/m²)',
|
||||||
`${(envelope.res0.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`,
|
`${(envelope.res0.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`,
|
||||||
`${(envelope.res45.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`,
|
`${(envelope.res45.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`,
|
||||||
`${(envelope.res90.forces.fzUp / (depth * width)).toFixed(2)} kN/m²`,
|
`${(envelope.res90.forces.fzUp / effAreaRoof).toFixed(2)} kN/m²`,
|
||||||
`${(envelope.criticalUp.value / (depth * width)).toFixed(2)} kN/m² (${envelope.criticalUp.angle}°)`
|
`${(envelope.criticalUp.value / effAreaRoof).toFixed(2)} kN/m² (${envelope.criticalUp.angle}°)`
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
' ↳ Pressão Parede Fundo (kN/m²)',
|
' ↳ Pressão Parede Fundo (kN/m²)',
|
||||||
`${(envelope.res0.forces.fxBack / (width * height)).toFixed(2)} kN/m²`,
|
effAreaBack > 0 ? `${(envelope.res0.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.res45.forces.fxBack / (width * height)).toFixed(2)} kN/m²`,
|
effAreaBack > 0 ? `${(envelope.res45.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.res90.forces.fxBack / (width * height)).toFixed(2)} kN/m²`,
|
effAreaBack > 0 ? `${(envelope.res90.forces.fxBack / effAreaBack).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.criticalFx.value / (width * height)).toFixed(2)} kN/m² (${envelope.criticalFx.angle}°)`
|
effAreaBack > 0 ? `${(envelope.criticalFx.value / effAreaBack).toFixed(2)} kN/m² (${envelope.criticalFx.angle}°)` : '0.00 kN/m²'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
' ↳ Pressão Paredes Lat. (kN/m²)',
|
' ↳ Pressão Paredes Lat. (kN/m²)',
|
||||||
`${(envelope.res0.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`,
|
effAreaSideTotal > 0 ? `${(envelope.res0.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.res45.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`,
|
effAreaSideTotal > 0 ? `${(envelope.res45.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.res90.forces.fySide / (depth * height * 2)).toFixed(2)} kN/m²`,
|
effAreaSideTotal > 0 ? `${(envelope.res90.forces.fySide / effAreaSideTotal).toFixed(2)} kN/m²` : '0.00 kN/m²',
|
||||||
`${(envelope.criticalFy.value / (depth * height * 2)).toFixed(2)} kN/m² (${envelope.criticalFy.angle}°)`
|
effAreaSideTotal > 0 ? `${(envelope.criticalFy.value / effAreaSideTotal).toFixed(2)} kN/m² (${envelope.criticalFy.angle}°)` : '0.00 kN/m²'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'Carga Horiz. no Pilar',
|
'Carga Horiz. no Pilar',
|
||||||
@@ -512,7 +516,7 @@ const ShelterModule: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
||||||
<span>Pressão (/m²)</span>
|
<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>
|
</div>
|
||||||
<div className="space-y-2 border-b pb-3">
|
<div className="space-y-2 border-b pb-3">
|
||||||
@@ -526,7 +530,11 @@ const ShelterModule: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
||||||
<span>Pressão (/m²)</span>
|
<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>
|
</div>
|
||||||
<div className="space-y-1 border-b pb-2">
|
<div className="space-y-1 border-b pb-2">
|
||||||
@@ -536,7 +544,11 @@ const ShelterModule: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
<div className="flex justify-between items-center text-[11px] text-muted-foreground/80">
|
||||||
<span>Pressão (/m²)</span>
|
<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>
|
</div>
|
||||||
<div className="flex justify-between items-center pb-2 border-b">
|
<div className="flex justify-between items-center pb-2 border-b">
|
||||||
|
|||||||
Reference in New Issue
Block a user