🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 20:38:34

This commit is contained in:
2026-07-13 20:38:34 +00:00
parent 287b8358a6
commit d4e0abe260
+37 -17
View File
@@ -301,25 +301,45 @@ const PiperackModule: React.FC = () => {
</>
)}
{/* 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>
</>
);
})()}
{/* Suportes para tubulação quando n=1 */}
{numFrames === 1 && pipes.length > 0 && (
<g>
<line x1="90" y1="35" x2="210" y2="35" stroke="#94a3b8" strokeWidth="3" />
</g>
)}
{/* 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 */}
<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>
</>
);
})()}
<defs>
<marker id="arrowRight" markerWidth="6" markerHeight="6" refX="6" refY="3" orient="auto">
<path d="M0,0 L6,3 L0,6" fill="none" stroke="#10b981" strokeWidth="1.5" />
</marker>
</defs>
</svg>
{/* Tubulações transversais cortadas (Círculos azuis) */}
{(() => {
if (pipes.length === 0) return null;
const startX = numFrames === 1 ? 100 : 60;
const endX = numFrames === 1 ? 200 : 240;
const gap = pipes.length > 1 ? (endX - startX) / (pipes.length - 1) : 0;
return pipes.map((p, idx) => {
const cx = pipes.length === 1 ? (startX + endX)/2 : startX + idx * gap;
const r = Math.max(4, Math.min(15, p.diameter * 8)); // escala visual
// y=25 para repousar sobre o suporte (y=35 para n=1) ou viga (y=40 para n>1)
const cy = numFrames === 1 ? 35 - r : 40 - r;
return (
<circle key={p.id} cx={cx} cy={cy} r={r} fill="#3b82f6" fillOpacity="0.8" />
);
});
})()}
<defs>
<marker id="arrowRight" markerWidth="6" markerHeight="6" refX="6" refY="3" orient="auto">
<path d="M0,0 L6,3 L0,6" fill="none" stroke="#10b981" strokeWidth="1.5" />
</marker>
</defs>
</svg>
<div className="pt-2 space-y-2">
<div className="font-bold text-primary">Forças e Momentos Aerodinâmicos</div>