🚀 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 */} {/* Suportes para tubulação quando n=1 */}
<line x1={numFrames === 1 ? 100 : startX - 40} y1="50" x2={numFrames === 1 ? 145 : startX - 5} y2="50" stroke="#10b981" strokeWidth="2" markerEnd="url(#arrowRight)" /> {numFrames === 1 && pipes.length > 0 && (
<text x={numFrames === 1 ? 122 : startX - 22} y="45" textAnchor="middle" fill="#10b981" fontSize="10" fontWeight="bold">Vento (F)</text> <g>
</> <line x1="90" y1="35" x2="210" y2="35" stroke="#94a3b8" strokeWidth="3" />
); </g>
})()} )}
{/* Tubulações transversais cortadas (Círculos azuis) */} {/* Vento batendo na primeira coluna */}
<circle cx="100" cy="30" r="10" fill="#3b82f6" fillOpacity="0.8" /> <line x1={numFrames === 1 ? 100 : startX - 40} y1="50" x2={numFrames === 1 ? 145 : startX - 5} y2="50" stroke="#10b981" strokeWidth="2" markerEnd="url(#arrowRight)" />
<circle cx="130" cy="30" r="14" fill="#3b82f6" fillOpacity="0.8" /> <text x={numFrames === 1 ? 122 : startX - 22} y="45" textAnchor="middle" fill="#10b981" fontSize="10" fontWeight="bold">Vento (F)</text>
<circle cx="170" cy="30" r="8" fill="#3b82f6" fillOpacity="0.8" /> </>
<circle cx="200" cy="30" r="12" fill="#3b82f6" fillOpacity="0.8" /> );
})()}
<defs> {/* Tubulações transversais cortadas (Círculos azuis) */}
<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" /> if (pipes.length === 0) return null;
</marker>
</defs> const startX = numFrames === 1 ? 100 : 60;
</svg> 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="pt-2 space-y-2">
<div className="font-bold text-primary">Forças e Momentos Aerodinâmicos</div> <div className="font-bold text-primary">Forças e Momentos Aerodinâmicos</div>