🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 18:50:57

This commit is contained in:
2026-07-13 18:50:57 +00:00
parent 805ee7e251
commit dc764d8c39
+44 -30
View File
@@ -73,24 +73,23 @@ const PiperackModule: React.FC = () => {
], ],
}, },
{ {
title: 'Forças e Cargas', title: 'Forças e Momentos Globais',
type: 'grid', type: 'grid',
gridItems: [ gridItems: [
{ label: 'Carga Linear Pórtico Frontal', value: `${result.linearLoadFront.toFixed(2)} kN/m` }, { label: 'Carga Linear Pórtico Frontal', value: `${result.linearLoadFront.toFixed(2)} kN/m` },
{ label: 'Carga Linear Pórtico Traseiros (cada)', value: `${result.linearLoadBack.toFixed(2)} kN/m` }, { label: 'Carga Linear Pórticos Traseiros (cada)', value: `${result.linearLoadBack.toFixed(2)} kN/m` },
{ label: 'Força Global Total', value: `${result.globalForce.toFixed(2)} kN` }, { label: 'Força Global Total', value: `${result.globalForce.toFixed(2)} kN` },
{ label: 'Momento Total de Tombamento', value: `${(result.linearLoadFront * width * elevation + (numFrames > 1 ? (numFrames - 1) * result.linearLoadBack * width * elevation : 0)).toFixed(2)} kN·m` },
], ],
}, },
{ {
title: 'Reações Simplificadas na Base (Binário de Tombamento)', title: 'Reações Globais Simplificadas (Ação de Conjunto)',
type: 'grid', type: 'grid',
gridItems: [ gridItems: numFrames > 1 ? [
{ label: 'Pórtico Frontal - Momento (M)', value: `${(result.linearLoadFront * width * elevation).toFixed(2)} kN·m` }, { label: 'Braço de Alavanca Total (L)', value: `${((numFrames - 1) * spacing).toFixed(2)} m` },
{ label: 'Pórtico Frontal - C1 (Tração) / C2 (Compressão)', value: `±${((result.linearLoadFront * width * elevation) / spacing).toFixed(2)} kN` }, { label: `Reação nas Extremidades (C1 / C${numFrames})`, value: `±${((result.linearLoadFront * width * elevation + (numFrames - 1) * result.linearLoadBack * width * elevation) / ((numFrames - 1) * spacing)).toFixed(2)} kN` },
...(numFrames > 1 ? [ ] : [
{ label: 'Pórtico Traseiro - Momento (M)', value: `${(result.linearLoadBack * width * elevation).toFixed(2)} kN·m` }, { label: 'Momento Fletor na Base (Pórtico Único)', value: `${(result.linearLoadFront * width * elevation).toFixed(2)} kN·m` }
{ label: 'Pórtico Traseiro - C1 (Tração) / C2 (Compressão)', value: `±${((result.linearLoadBack * width * elevation) / spacing).toFixed(2)} kN` },
] : [])
], ],
} }
]; ];
@@ -260,11 +259,19 @@ const PiperackModule: React.FC = () => {
<span className="font-mono font-bold text-primary">{result.linearLoadBack.toFixed(2)} kN/m</span> <span className="font-mono font-bold text-primary">{result.linearLoadBack.toFixed(2)} kN/m</span>
</div> </div>
<div className="pt-2"> {(() => {
<h4 className="font-semibold text-sm mb-3">Reações Simplificadas (Vista Lateral)</h4> const mFrontal = result.linearLoadFront * width * elevation;
<div className="bg-muted/30 p-3 rounded-md border text-xs space-y-4"> const mTraseiro = numFrames > 1 ? result.linearLoadBack * width * elevation : 0;
const mTotal = mFrontal + (numFrames - 1) * mTraseiro;
const braco = (numFrames - 1) * spacing;
const reacaoGlobal = braco > 0 ? mTotal / braco : 0;
<svg width="100%" height="150" viewBox="0 0 300 150" className="bg-white rounded border"> return (
<div className="pt-2">
<h4 className="font-semibold text-sm mb-3">Reações Simplificadas (Vista Lateral)</h4>
<div className="bg-muted/30 p-3 rounded-md border text-xs space-y-4">
<svg width="100%" height="150" viewBox="0 0 300 150" className="bg-white rounded border">
{/* Linha do chão */} {/* Linha do chão */}
<line x1="20" y1="110" x2="280" y2="110" stroke="#cbd5e1" strokeWidth="2" /> <line x1="20" y1="110" x2="280" y2="110" stroke="#cbd5e1" strokeWidth="2" />
@@ -354,24 +361,31 @@ const PiperackModule: React.FC = () => {
</defs> </defs>
</svg> </svg>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4 pt-2">
<div className="space-y-1"> <div className="space-y-1">
<div className="font-bold text-primary">Pórtico Frontal</div> <div className="font-bold text-primary">Forças e Momentos</div>
<div className="flex justify-between text-muted-foreground"><span>F (Transv.):</span> <span className="font-mono">{(result.linearLoadFront * width).toFixed(2)} kN</span></div> <div className="flex justify-between text-muted-foreground"><span>F. Frontal:</span> <span className="font-mono">{(result.linearLoadFront * width).toFixed(2)} kN</span></div>
<div className="flex justify-between text-muted-foreground"><span>Momento:</span> <span className="font-mono">{(result.linearLoadFront * width * elevation).toFixed(2)} kN·m</span></div> {numFrames > 1 && <div className="flex justify-between text-muted-foreground"><span>F. Traseiros (Total):</span> <span className="font-mono">{((numFrames - 1) * result.linearLoadBack * width).toFixed(2)} kN</span></div>}
<div className="flex justify-between text-muted-foreground"><span>Reação (C1/C2):</span> <span className="font-mono">±{((result.linearLoadFront * width * elevation) / spacing).toFixed(2)} kN</span></div> <div className="flex justify-between text-muted-foreground font-semibold mt-1"><span>Momento Global:</span> <span className="font-mono">{mTotal.toFixed(2)} kN·m</span></div>
</div> </div>
{numFrames > 1 && ( <div className="space-y-1">
<div className="space-y-1"> <div className="font-bold text-primary">Reações Globais (Conjunto)</div>
<div className="font-bold text-primary">Pórticos Traseiros</div> {numFrames > 1 ? (
<div className="flex justify-between text-muted-foreground"><span>F (Transv.):</span> <span className="font-mono">{(result.linearLoadBack * width).toFixed(2)} kN</span></div> <>
<div className="flex justify-between text-muted-foreground"><span>Momento:</span> <span className="font-mono">{(result.linearLoadBack * width * elevation).toFixed(2)} kN·m</span></div> <div className="flex justify-between text-muted-foreground"><span>Alavanca Total (L):</span> <span className="font-mono">{braco.toFixed(2)} m</span></div>
<div className="flex justify-between text-muted-foreground"><span>Reação (C1/C2):</span> <span className="font-mono">±{((result.linearLoadBack * width * elevation) / spacing).toFixed(2)} kN</span></div> <div className="flex justify-between text-muted-foreground font-semibold mt-1"><span>Reação (C1/C{numFrames}):</span> <span className="font-mono text-primary">±{reacaoGlobal.toFixed(2)} kN</span></div>
</>
) : (
<div className="text-muted-foreground text-[10px] leading-tight mt-1">
Pórtico único. O momento de {mTotal.toFixed(2)} kN·m é absorvido como momento fletor engastado nas bases das colunas.
</div>
)}
</div>
</div> </div>
)} </div>
</div> </div>
</div> );
</div> })()}
</CardContent> </CardContent>
</Card> </Card>