🚀 Auto-deploy: BrainWind atualizado em 13/07/2026 19:59:48
This commit is contained in:
@@ -77,14 +77,14 @@ export function WindFlowGrid2D({ type }: WindFlowGrid2DProps) {
|
|||||||
// Define quais itens de legenda devem ser exibidos para cada tipo de módulo
|
// Define quais itens de legenda devem ser exibidos para cada tipo de módulo
|
||||||
const getVisibleLegendItems = () => {
|
const getVisibleLegendItems = () => {
|
||||||
const hasCpi = ['warehouse'].includes(type);
|
const hasCpi = ['warehouse'].includes(type);
|
||||||
const hasVortex = ['isolated-roof', 'bar', 'tower', 'vault', 'cylinder', 'sign', 'dynamics'].includes(type);
|
const hasVortex = ['isolated-roof', 'bar', 'tower', 'vault', 'cylinder', 'sign', 'dynamics', 'piperack'].includes(type);
|
||||||
const hasLift = ['bridge', 'isolated-roof'].includes(type);
|
const hasLift = ['bridge', 'isolated-roof'].includes(type);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
wind: true,
|
wind: true,
|
||||||
fast: true,
|
fast: true,
|
||||||
vortex: hasVortex,
|
vortex: hasVortex,
|
||||||
vortexSpin: ['cylinder', 'dynamics', 'sign'].includes(type),
|
vortexSpin: ['cylinder', 'dynamics', 'sign', 'piperack'].includes(type),
|
||||||
cpiPos: hasCpi,
|
cpiPos: hasCpi,
|
||||||
cpiNeg: hasCpi,
|
cpiNeg: hasCpi,
|
||||||
lift: hasLift,
|
lift: hasLift,
|
||||||
@@ -98,6 +98,7 @@ export function WindFlowGrid2D({ type }: WindFlowGrid2DProps) {
|
|||||||
case 'vault':
|
case 'vault':
|
||||||
case 'dome':
|
case 'dome':
|
||||||
case 'warehouse':
|
case 'warehouse':
|
||||||
|
case 'piperack':
|
||||||
return 'Vista Lateral (Corte Transversal)';
|
return 'Vista Lateral (Corte Transversal)';
|
||||||
case 'cylinder':
|
case 'cylinder':
|
||||||
case 'sign':
|
case 'sign':
|
||||||
@@ -693,6 +694,76 @@ export function WindFlowGrid2D({ type }: WindFlowGrid2DProps) {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
case 'piperack':
|
||||||
|
return (
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
|
{/* Caso 1 */}
|
||||||
|
<div className="flex flex-col gap-2 bg-white dark:bg-slate-950 border border-border/60 p-3 rounded-lg">
|
||||||
|
<span className="text-xs font-bold text-sky-400">Pórtico Frontal (Sem Proteção)</span>
|
||||||
|
<div className="relative aspect-video bg-slate-100 dark:bg-slate-900/60 rounded-md overflow-hidden border border-border/30">
|
||||||
|
<svg viewBox="0 0 300 150" className="w-full h-full">
|
||||||
|
{styleBlock}
|
||||||
|
<line x1="0" y1="130" x2="300" y2="130" stroke="#475569" strokeWidth="2" />
|
||||||
|
<path d="M -20,30 L 320,30" className="wind-line-slow" />
|
||||||
|
<path d="M -20,60 C 100,60 120,40 150,40 C 180,40 200,60 320,60" className="wind-line" />
|
||||||
|
<path d="M -20,100 C 100,100 120,70 150,70 C 180,70 200,100 320,100" className="wind-line-fast" />
|
||||||
|
|
||||||
|
{/* Esteira turbulenta no sotavento */}
|
||||||
|
<circle cx="180" cy="85" r="12" fill="none" stroke="#ef4444" strokeWidth="1.2" strokeDasharray="2 4" className="vortex-spin-cw" />
|
||||||
|
<path d="M 160,110 Q 210,85 320,120" className="vortex-line" />
|
||||||
|
|
||||||
|
{/* Pórtico Pipe-rack */}
|
||||||
|
<rect x="145" y="40" width="10" height="90" fill="#475569" stroke="#64748b" strokeWidth="1.5" />
|
||||||
|
<rect x="135" y="50" width="30" height="8" fill="#475569" stroke="#64748b" strokeWidth="1.5" />
|
||||||
|
<circle cx="150" cy="45" r="12" fill="#3b82f6" stroke="#2563eb" strokeWidth="1.5" /> {/* Tubo */}
|
||||||
|
<circle cx="150" cy="75" r="8" fill="#f59e0b" stroke="#d97706" strokeWidth="1.5" /> {/* Tubo */}
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<p className="text-[10px] text-muted-foreground leading-snug">Vento limpo atinge o pórtico frontal e suas tubulações com 100% da velocidade. Arrasto máximo (Ca Frontal).</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Caso 2 */}
|
||||||
|
<div className="flex flex-col gap-2 bg-white dark:bg-slate-950 border border-border/60 p-3 rounded-lg">
|
||||||
|
<span className="text-xs font-bold text-rose-400">Pórticos Traseiros (Sombra Aerodinâmica)</span>
|
||||||
|
<div className="relative aspect-video bg-slate-100 dark:bg-slate-900/60 rounded-md overflow-hidden border border-border/30">
|
||||||
|
<svg viewBox="0 0 300 150" className="w-full h-full">
|
||||||
|
{styleBlock}
|
||||||
|
<line x1="0" y1="130" x2="300" y2="130" stroke="#475569" strokeWidth="2" />
|
||||||
|
<path d="M -20,30 L 320,30" className="wind-line-slow" />
|
||||||
|
<path d="M -20,60 C 80,60 100,30 150,30 C 200,30 220,60 320,60" className="wind-line" />
|
||||||
|
|
||||||
|
{/* Esteira turbulenta cobrindo pórticos traseiros */}
|
||||||
|
<path d="M 120,100 Q 170,60 220,100 T 320,100" className="vortex-line" />
|
||||||
|
<path d="M 130,80 Q 180,50 230,80 T 320,80" className="vortex-line" />
|
||||||
|
<circle cx="150" cy="90" r="15" fill="none" stroke="#ef4444" strokeWidth="1.2" strokeDasharray="2 4" className="vortex-spin-cw" />
|
||||||
|
<circle cx="210" cy="85" r="15" fill="none" stroke="#ef4444" strokeWidth="1.2" strokeDasharray="2 4" className="vortex-spin-ccw" />
|
||||||
|
|
||||||
|
{/* Pórticos Múltiplos */}
|
||||||
|
{/* Pórtico 1 */}
|
||||||
|
<g transform="translate(80, 0)">
|
||||||
|
<rect x="0" y="40" width="10" height="90" fill="#475569" stroke="#64748b" strokeWidth="1.5" />
|
||||||
|
<rect x="-10" y="50" width="30" height="8" fill="#475569" stroke="#64748b" strokeWidth="1.5" />
|
||||||
|
<circle cx="5" cy="45" r="12" fill="#3b82f6" stroke="#2563eb" strokeWidth="1.5" />
|
||||||
|
</g>
|
||||||
|
{/* Pórtico 2 */}
|
||||||
|
<g transform="translate(140, 0)">
|
||||||
|
<rect x="0" y="40" width="10" height="90" fill="#64748b" stroke="#94a3b8" strokeWidth="1.5" opacity="0.8" />
|
||||||
|
<rect x="-10" y="50" width="30" height="8" fill="#64748b" stroke="#94a3b8" strokeWidth="1.5" opacity="0.8" />
|
||||||
|
<circle cx="5" cy="45" r="12" fill="#3b82f6" stroke="#2563eb" strokeWidth="1.5" opacity="0.8" />
|
||||||
|
</g>
|
||||||
|
{/* Pórtico 3 */}
|
||||||
|
<g transform="translate(200, 0)">
|
||||||
|
<rect x="0" y="40" width="10" height="90" fill="#94a3b8" stroke="#cbd5e1" strokeWidth="1.5" opacity="0.6" />
|
||||||
|
<rect x="-10" y="50" width="30" height="8" fill="#94a3b8" stroke="#cbd5e1" strokeWidth="1.5" opacity="0.6" />
|
||||||
|
<circle cx="5" cy="45" r="12" fill="#3b82f6" stroke="#2563eb" strokeWidth="1.5" opacity="0.6" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<p className="text-[10px] text-muted-foreground leading-snug">Pórticos sucessivos ficam imersos na esteira turbulenta do primeiro (Fator de proteção η). A carga neles é drasticamente atenuada.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Caso padrão dinâmico geral (Módulos dinâmicos simples)
|
// Caso padrão dinâmico geral (Módulos dinâmicos simples)
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user