From c0f153df1c95c0af0e34095b9abc50b65b7938e0 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 02:04:21 +0000 Subject: [PATCH] Changes --- src/components/ViewerControls.tsx | 76 ++++++++++++++++++++++++++-- src/components/three/ModelViewer.tsx | 42 ++++++++++----- src/stores/useModelStore.ts | 18 +++++++ 3 files changed, 120 insertions(+), 16 deletions(-) diff --git a/src/components/ViewerControls.tsx b/src/components/ViewerControls.tsx index dfc2695..a70a402 100644 --- a/src/components/ViewerControls.tsx +++ b/src/components/ViewerControls.tsx @@ -1,12 +1,30 @@ -import { Eye, Grid3X3, Ruler, Trash2, Camera } from 'lucide-react'; +import { Eye, Grid3X3, Ruler, Trash2, Camera, LayoutGrid, Palette } from 'lucide-react'; import { Slider } from '@/components/ui/slider'; import { Button } from '@/components/ui/button'; +import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { useModelStore } from '@/stores/useModelStore'; import { useCallback } from 'react'; import { toast } from 'sonner'; +const WIRE_COLORS = [ + { label: 'Cinza', value: '#8899aa' }, + { label: 'Vermelho', value: '#ef4444' }, + { label: 'Verde', value: '#22c55e' }, + { label: 'Azul', value: '#3b82f6' }, + { label: 'Amarelo', value: '#eab308' }, + { label: 'Laranja', value: '#f97316' }, + { label: 'Branco', value: '#e2e8f0' }, +]; + export function ViewerControls() { - const { opacity, setOpacity, renderMode, setRenderMode, measureMode, setMeasureMode, measurements, clearMeasurements, measurePoints, addScreenshot } = useModelStore(); + const { + opacity, setOpacity, renderMode, setRenderMode, + measureMode, setMeasureMode, measurements, clearMeasurements, + measurePoints, addScreenshot, + showGrid, setShowGrid, + wireframeColor, setWireframeColor, + wireframeThickness, setWireframeThickness, + } = useModelStore(); const handleScreenshot = useCallback(() => { const canvas = document.querySelector('canvas'); @@ -20,7 +38,7 @@ export function ViewerControls() { }, [addScreenshot]); return ( -
+
{/* Opacity slider */}
@@ -39,6 +57,17 @@ export function ViewerControls() { />
+ {/* Grid toggle */} + + {/* Render mode toggle */} + {/* Wireframe settings popover */} + {renderMode === 'wireframe' && ( + + + + + +
+ Cor do Wireframe +
+ {WIRE_COLORS.map((c) => ( +
+
+
+
+ Espessura + {wireframeThickness.toFixed(1)} +
+ setWireframeThickness(v)} + /> +
+
+
+ )} + {/* Measure tool */}