🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 20:38:34
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user