+
+
+
+
+
θ = {theta}°
- {type === 'shed' ? 'Uma água' : 'Duas águas'}
+ {type === 'shed' ? 'Uma água' : type === 'gable' ? 'Duas águas' : 'Borboleta'}
+
+
+
+
+
+
@@ -216,6 +246,7 @@ const IsolatedRoofModule: React.FC = () => {
cpeLeeward={cpeLeeward}
cpeTop={cpeTop}
forceKN={forces.magnitude}
+ viewMode={viewMode}
/>
diff --git a/app/src/pages/ShelterModule.tsx b/app/src/pages/ShelterModule.tsx
index 4ada2b1..ed0786c 100644
--- a/app/src/pages/ShelterModule.tsx
+++ b/app/src/pages/ShelterModule.tsx
@@ -19,7 +19,7 @@ import { EducationalManual } from '@/components/EducationalManual';
import { WindParametersSummary } from '@/components/WindParametersSummary';
import { SaveModuleDialog } from '@/components/SaveModuleDialog';
import { exportGenericToPDF, type GenericPDFSection } from '../lib/export-generic-pdf';
-import { Eye, Box, Layers, ArrowUpRight, CheckCircle2 } from 'lucide-react';
+import { Eye, Box, Layers, ArrowUpRight, CheckCircle2, Wind } from 'lucide-react';
import { cn } from '@/lib/utils';
const conditionLabels: Record
= {
@@ -41,7 +41,7 @@ const ShelterModule: React.FC = () => {
const [backRange, setBackRange] = useState<[number, number]>([0, 75]);
const [leftClosure, setLeftClosure] = useState(100);
const [rightClosure, setRightClosure] = useState(100);
- const [viewMode, setViewMode] = useState<'3d' | 'elevation'>('3d');
+ const [viewMode, setViewMode] = useState<'3d' | 'elevation' | 'airflow'>('3d');
// Determinação automática da posição da fresta/vão a partir dos cursores (base e topo)
const bottomGap = backRange[0];
@@ -502,6 +502,9 @@ const ShelterModule: React.FC = () => {
+
@@ -512,7 +515,7 @@ const ShelterModule: React.FC = () => {
- {viewMode === '3d' ? (
+ {viewMode === '3d' || viewMode === 'airflow' ? (