import { Eye, Grid3X3, Ruler, Trash2, Camera, LayoutGrid, Palette, Box } 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 { ScaleSelector } from '@/components/ScaleSelector'; 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, showGrid, setShowGrid, wireframeColor, setWireframeColor, wireframeThickness, setWireframeThickness, edgeThresholdAngle, setEdgeThresholdAngle, } = useModelStore(); const handleScreenshot = useCallback(() => { const canvas = document.querySelector('canvas'); if (!canvas) { toast.error('Canvas não encontrado'); return; } const dataUrl = canvas.toDataURL('image/png'); addScreenshot(dataUrl); toast.success('Screenshot capturado!'); }, [addScreenshot]); return (
{/* Opacity slider */}
Opacidade
{Math.round(opacity * 100)}%
setOpacity(v / 100)} />
{/* Grid toggle */} {/* Scale presets */} {/* Wireframe/Edges settings popover */} {renderMode !== 'solid' && (
Cor das Linhas
{WIRE_COLORS.map((c) => (
Espessura {wireframeThickness.toFixed(1)}
setWireframeThickness(v)} />
{renderMode === 'edges' && (
Ângulo Limite {edgeThresholdAngle}°
setEdgeThresholdAngle(v)} />
)}
)} {/* Measure tool */}
{measurements.length > 0 && ( )}
{/* Screenshot */}
); }