🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 18:46:24
This commit is contained in:
@@ -268,38 +268,79 @@ const PiperackModule: React.FC = () => {
|
||||
{/* Linha do chão */}
|
||||
<line x1="20" y1="110" x2="280" y2="110" stroke="#cbd5e1" strokeWidth="2" />
|
||||
|
||||
{/* Vigas Longitudinais (Stringers) - conectando as colunas no sentido longitudinal */}
|
||||
<line x1="84" y1="40" x2="216" y2="40" stroke="#94a3b8" strokeWidth="4" />
|
||||
<line x1="84" y1="65" x2="216" y2="65" stroke="#94a3b8" strokeWidth="4" />
|
||||
{/* Renderização Dinâmica baseada no numFrames */}
|
||||
{(() => {
|
||||
const startX = 60;
|
||||
const endX = 240;
|
||||
const step = numFrames > 1 ? (endX - startX) / (numFrames - 1) : 0;
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Vigas Longitudinais */}
|
||||
{numFrames > 1 && (
|
||||
<>
|
||||
<line x1={startX + 4} y1="40" x2={endX + 4} y2="40" stroke="#94a3b8" strokeWidth="4" />
|
||||
<line x1={startX + 4} y1="65" x2={endX + 4} y2="65" stroke="#94a3b8" strokeWidth="4" />
|
||||
</>
|
||||
)}
|
||||
|
||||
{/* Coluna 1 (Frente) */}
|
||||
<rect x="80" y="35" width="8" height="75" fill="#64748b" />
|
||||
<text x="84" y="125" textAnchor="middle" fontSize="10" fill="#475569">C1 (Barlavento)</text>
|
||||
<line x1="70" y1="110" x2="70" y2="80" stroke="#ef4444" strokeWidth="2" markerEnd="url(#arrowUp)" />
|
||||
<text x="65" y="95" textAnchor="end" fill="#ef4444" fontSize="10">Tração</text>
|
||||
{/* Colunas */}
|
||||
{Array.from({ length: numFrames }).map((_, i) => {
|
||||
const colX = numFrames === 1 ? 150 : startX + i * step;
|
||||
const isFirst = i === 0;
|
||||
const isLast = i === numFrames - 1;
|
||||
|
||||
return (
|
||||
<g key={`col-${i}`}>
|
||||
<rect x={colX} y="35" width="8" height="75" fill="#64748b" />
|
||||
<text x={colX + 4} y="125" textAnchor="middle" fontSize={numFrames > 3 ? "8" : "10"} fill="#475569">
|
||||
{`C${i + 1}`}
|
||||
</text>
|
||||
|
||||
{/* Tração na primeira */}
|
||||
{isFirst && (
|
||||
<>
|
||||
<line x1={colX - 10} y1="110" x2={colX - 10} y2="80" stroke="#ef4444" strokeWidth="2" markerEnd="url(#arrowUp)" />
|
||||
<text x={colX - 15} y="95" textAnchor="end" fill="#ef4444" fontSize="10">Tração</text>
|
||||
<text x={colX + 4} y="135" textAnchor="middle" fontSize="8" fill="#475569">Barlavento</text>
|
||||
</>
|
||||
)}
|
||||
|
||||
{/* Compressão na última */}
|
||||
{isLast && numFrames > 1 && (
|
||||
<>
|
||||
<line x1={colX + 13} y1="80" x2={colX + 13} y2="110" stroke="#3b82f6" strokeWidth="2" markerEnd="url(#arrowDown)" />
|
||||
<text x={colX + 18} y="95" textAnchor="start" fill="#3b82f6" fontSize="10">Comp.</text>
|
||||
<text x={colX + 4} y="135" textAnchor="middle" fontSize="8" fill="#475569">Sotavento</text>
|
||||
</>
|
||||
)}
|
||||
</g>
|
||||
);
|
||||
})}
|
||||
|
||||
{/* Linha de cota para o espaçamento (e) entre C1 e C2 */}
|
||||
{numFrames > 1 && (
|
||||
<>
|
||||
<line x1={startX + 4} y1="145" x2={startX + step + 4} y2="145" stroke="#64748b" strokeWidth="1" />
|
||||
<line x1={startX + 4} y1="142" x2={startX + 4} y2="148" stroke="#64748b" strokeWidth="1" />
|
||||
<line x1={startX + step + 4} y1="142" x2={startX + step + 4} y2="148" stroke="#64748b" strokeWidth="1" />
|
||||
<text x={startX + step / 2 + 4} y="142" textAnchor="middle" fontSize="8" fill="#64748b">e = {spacing}m</text>
|
||||
</>
|
||||
)}
|
||||
|
||||
{/* Vento batendo na primeira coluna */}
|
||||
<line x1={numFrames === 1 ? 100 : startX - 40} y1="50" x2={numFrames === 1 ? 145 : startX - 5} y2="50" stroke="#10b981" strokeWidth="2" markerEnd="url(#arrowRight)" />
|
||||
<text x={numFrames === 1 ? 122 : startX - 22} y="45" textAnchor="middle" fill="#10b981" fontSize="10" fontWeight="bold">Vento (F)</text>
|
||||
</>
|
||||
);
|
||||
})()}
|
||||
|
||||
{/* Coluna 2 (Trás) */}
|
||||
<rect x="212" y="35" width="8" height="75" fill="#64748b" />
|
||||
<text x="216" y="125" textAnchor="middle" fontSize="10" fill="#475569">C2 (Sotavento)</text>
|
||||
<line x1="225" y1="80" x2="225" y2="110" stroke="#3b82f6" strokeWidth="2" markerEnd="url(#arrowDown)" />
|
||||
<text x="230" y="95" textAnchor="start" fill="#3b82f6" fontSize="10">Comp.</text>
|
||||
|
||||
{/* Tubulações transversais cortadas (Círculos azuis) para indicar vista lateral */}
|
||||
{/* Tubulações transversais cortadas (Círculos azuis) */}
|
||||
<circle cx="100" cy="30" r="10" fill="#3b82f6" fillOpacity="0.8" />
|
||||
<circle cx="130" cy="30" r="14" fill="#3b82f6" fillOpacity="0.8" />
|
||||
<circle cx="170" cy="30" r="8" fill="#3b82f6" fillOpacity="0.8" />
|
||||
<circle cx="200" cy="30" r="12" fill="#3b82f6" fillOpacity="0.8" />
|
||||
|
||||
{/* Vento batendo na primeira coluna/tubos */}
|
||||
<line x1="20" y1="50" x2="75" y2="50" stroke="#10b981" strokeWidth="2" markerEnd="url(#arrowRight)" />
|
||||
<text x="45" y="45" textAnchor="middle" fill="#10b981" fontSize="10" fontWeight="bold">Vento (F)</text>
|
||||
|
||||
{/* Linha de cota para o espaçamento (e) */}
|
||||
<line x1="84" y1="140" x2="216" y2="140" stroke="#64748b" strokeWidth="1" />
|
||||
<line x1="84" y1="137" x2="84" y2="143" stroke="#64748b" strokeWidth="1" />
|
||||
<line x1="216" y1="137" x2="216" y2="143" stroke="#64748b" strokeWidth="1" />
|
||||
<text x="150" y="137" textAnchor="middle" fontSize="9" fill="#64748b">Espaçamento (e) = {spacing}m</text>
|
||||
|
||||
<defs>
|
||||
<marker id="arrowUp" markerWidth="6" markerHeight="6" refX="3" refY="0" orient="auto">
|
||||
<path d="M0,6 L3,0 L6,6" fill="none" stroke="#ef4444" strokeWidth="1.5" />
|
||||
|
||||
Reference in New Issue
Block a user