🚀 Auto-deploy: BrainWind atualizado em 12/07/2026 16:34:24

This commit is contained in:
2026-07-12 16:34:24 +00:00
parent 270d0c5676
commit 9a60b0c499
7 changed files with 55 additions and 11 deletions
+43
View File
@@ -0,0 +1,43 @@
import React from 'react';
import { Separator } from '@/components/ui/separator';
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
export const PressureLegend: React.FC = () => {
return (
<div className="absolute bottom-4 left-4 z-10 flex gap-3 p-3 bg-background/90 backdrop-blur-md border border-border rounded-lg shadow-sm">
<Tooltip>
<TooltipTrigger asChild>
<div className="flex items-center gap-2 cursor-help">
<div className="w-3 h-3 rounded-full bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.5)]" />
<span className="text-xs font-medium text-foreground underline decoration-dashed decoration-muted-foreground underline-offset-4">
Pressão (Empuxo)
</span>
</div>
</TooltipTrigger>
<TooltipContent side="top">
<p className="text-sm">
<b>Azul (+)</b>: O vento está "empurrando" a superfície para dentro.
</p>
</TooltipContent>
</Tooltip>
<Separator orientation="vertical" className="h-4" />
<Tooltip>
<TooltipTrigger asChild>
<div className="flex items-center gap-2 cursor-help">
<div className="w-3 h-3 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]" />
<span className="text-xs font-medium text-foreground underline decoration-dashed decoration-muted-foreground underline-offset-4">
Sucção (Arrasto)
</span>
</div>
</TooltipTrigger>
<TooltipContent side="top">
<p className="text-sm">
<b>Vermelho (-)</b>: O vento está "puxando" a superfície para fora.
</p>
</TooltipContent>
</Tooltip>
</div>
);
};
+2
View File
@@ -11,6 +11,7 @@ import Cylinder3DViewer from '@/components/three/Cylinder3D';
import SceneCapturePanel from '../components/SceneCapturePanel';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
const CylinderModule: React.FC = () => {
@@ -146,6 +147,7 @@ const CylinderModule: React.FC = () => {
<div className="absolute top-4 right-4 z-10">
<EducationalManual type="cylinder" params={{ surface, endType, cpi: result.cpi }} />
</div>
<PressureLegend />
<div className="w-full h-full bg-muted/20">
<Cylinder3DViewer
diameter={diameter}
+2
View File
@@ -11,6 +11,7 @@ import Dome3DViewer from '@/components/three/Dome3D';
import SceneCapturePanel from '../components/SceneCapturePanel';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
const DomeModule: React.FC = () => {
@@ -124,6 +125,7 @@ const DomeModule: React.FC = () => {
<div className="absolute top-4 right-4 z-10">
<EducationalManual type="dome" params={{ rise, diameter, cpi }} />
</div>
<PressureLegend />
<div className="w-full h-full bg-muted/20">
<Dome3DViewer
diameter={diameter}
+2 -11
View File
@@ -14,6 +14,7 @@ import { Separator } from '@/components/ui/separator';
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
const GalpaoModule: React.FC = () => {
const {
@@ -150,17 +151,7 @@ const GalpaoModule: React.FC = () => {
</div>
</div>
<div className="absolute bottom-4 left-4 z-10 flex gap-3 p-3 bg-background/90 backdrop-blur-md border border-border rounded-lg shadow-sm">
<div className="flex items-center gap-2">
<div className="w-3 h-3 rounded-full bg-blue-500 shadow-[0_0_8px_rgba(59,130,246,0.5)]" />
<span className="text-xs font-medium text-foreground">Pressão (Empuxo)</span>
</div>
<Separator orientation="vertical" className="h-4" />
<div className="flex items-center gap-2">
<div className="w-3 h-3 rounded-full bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.5)]" />
<span className="text-xs font-medium text-foreground">Sucção (Arrasto)</span>
</div>
</div>
<PressureLegend />
<div className="w-full h-full cursor-grab active:cursor-grabbing bg-muted/20">
<Warehouse3DViewer />
+2
View File
@@ -10,6 +10,7 @@ import IsolatedRoof3DViewer from '@/components/three/IsolatedRoof3D';
import SceneCapturePanel from '../components/SceneCapturePanel';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
const IsolatedRoofModule: React.FC = () => {
@@ -168,6 +169,7 @@ const IsolatedRoofModule: React.FC = () => {
<div className="absolute top-4 right-4 z-10">
<EducationalManual type="isolated-roof" params={{ theta, type }} />
</div>
<PressureLegend />
<IsolatedRoof3DViewer
type={type}
theta={theta}
+2
View File
@@ -10,6 +10,7 @@ import Sign3DViewer from '@/components/three/Sign3D';
import SceneCapturePanel from '../components/SceneCapturePanel';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
const SignModule: React.FC = () => {
@@ -122,6 +123,7 @@ const SignModule: React.FC = () => {
<div className="absolute top-4 right-4 z-10">
<EducationalManual type="sign" params={{ length, height, alpha, hasEndPlates }} />
</div>
<PressureLegend />
<Sign3DViewer
length={length}
+2
View File
@@ -10,6 +10,7 @@ import Vault3DViewer from '@/components/three/Vault3D';
import SceneCapturePanel from '../components/SceneCapturePanel';
import ExportMenu from '../components/ExportMenu';
import { EducationalManual } from '@/components/EducationalManual';
import { PressureLegend } from '@/components/PressureLegend';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
const VaultModule: React.FC = () => {
@@ -130,6 +131,7 @@ const VaultModule: React.FC = () => {
<div className="absolute top-4 right-4 z-10">
<EducationalManual type="vault" params={{ rise, span, regime, localCpi }} />
</div>
<PressureLegend />
<div className="w-full h-full bg-muted/20">
<Vault3DViewer span={span} length={length} rise={rise} cpi={localCpi} cpeProfile={{ ...result.windPerpendicular }} />
</div>