Atualizou visual de bordas

X-Lovable-Edit-ID: edt-f5acd6ab-7778-44a9-9aae-716f987b2f62
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-24 19:28:57 +00:00
5 changed files with 20 additions and 19 deletions
+8 -10
View File
@@ -11,13 +11,14 @@ import * as THREE from 'three';
import { elementKey, sceneRef } from '@/components/three/ModelViewer'; import { elementKey, sceneRef } from '@/components/three/ModelViewer';
const WIRE_COLORS = [ const WIRE_COLORS = [
{ label: 'Cinza', value: '#8899aa' }, { label: 'Ciano (radiante)', value: '#00f3ff' },
{ label: 'Vermelho', value: '#ef4444' }, { label: 'Vermelho', value: '#ef4444' },
{ label: 'Verde', value: '#22c55e' }, { label: 'Verde', value: '#22c55e' },
{ label: 'Azul', value: '#3b82f6' }, { label: 'Azul', value: '#3b82f6' },
{ label: 'Amarelo', value: '#eab308' }, { label: 'Amarelo', value: '#eab308' },
{ label: 'Laranja', value: '#f97316' }, { label: 'Laranja', value: '#f97316' },
{ label: 'Branco', value: '#e2e8f0' }, { label: 'Branco', value: '#e2e8f0' },
{ label: 'Cinza', value: '#8899aa' },
]; ];
export function ViewerControls() { export function ViewerControls() {
@@ -108,22 +109,19 @@ export function ViewerControls() {
<ScaleSelector /> <ScaleSelector />
<Button <Button
variant={renderMode !== 'solid' ? 'default' : 'outline'} variant={renderMode === 'edges' ? 'default' : 'outline'}
size="sm" size="sm"
className="gap-2 h-9" className="gap-2 h-9"
onClick={() => { onClick={() => setRenderMode(renderMode === 'edges' ? 'solid' : 'edges')}
const next = renderMode === 'solid' ? 'wireframe' : renderMode === 'wireframe' ? 'edges' : 'solid';
setRenderMode(next);
}}
> >
{renderMode === 'edges' ? <Box className="h-3.5 w-3.5" /> : <Grid3X3 className="h-3.5 w-3.5" />} <Box className="h-3.5 w-3.5" />
<span className="font-mono text-xs"> <span className="font-mono text-xs">
{renderMode === 'solid' ? 'Sólido' : renderMode === 'wireframe' ? 'Wireframe' : 'Bordas'} {renderMode === 'edges' ? 'Bordas' : 'Sólido'}
</span> </span>
</Button> </Button>
{/* Wireframe/Edges settings popover */} {/* Edges color/thickness/threshold popover */}
{renderMode !== 'solid' && ( {renderMode === 'edges' && (
<Popover> <Popover>
<PopoverTrigger asChild> <PopoverTrigger asChild>
<Button variant="outline" size="sm" className="gap-2 h-9"> <Button variant="outline" size="sm" className="gap-2 h-9">
+4 -7
View File
@@ -342,15 +342,12 @@ export function XRHud({ freeMove, onToggleFreeMove, placementMode = false, onTog
</Button> </Button>
<Button <Button
variant={renderMode !== 'solid' ? 'default' : 'outline'} variant={renderMode === 'edges' ? 'default' : 'outline'}
size="sm" className="h-8 gap-1.5 text-[10px] font-mono" size="sm" className="h-8 gap-1.5 text-[10px] font-mono"
onClick={() => { onClick={() => setRenderMode(renderMode === 'edges' ? 'solid' : 'edges')}
const next = renderMode === 'solid' ? 'wireframe' : renderMode === 'wireframe' ? 'edges' : 'solid';
setRenderMode(next);
}}
> >
{renderMode === 'edges' ? <Box className="h-3.5 w-3.5" /> : <Grid3X3 className="h-3.5 w-3.5" />} <Box className="h-3.5 w-3.5" />
{renderMode === 'solid' ? 'Sólido' : renderMode === 'wireframe' ? 'Wire' : 'Bordas'} {renderMode === 'edges' ? 'Bordas' : 'Sólido'}
</Button> </Button>
<Button <Button
+3
View File
@@ -190,6 +190,9 @@ function GLBModel({ sceneModel, isActive }: { sceneModel: SceneModel; isActive:
const lineMat = new THREE.LineBasicMaterial({ const lineMat = new THREE.LineBasicMaterial({
color: measureMode ? '#00f3ff' : wireframeColor, color: measureMode ? '#00f3ff' : wireframeColor,
linewidth: measureMode ? 2 : wireframeThickness, linewidth: measureMode ? 2 : wireframeThickness,
toneMapped: false,
transparent: true,
opacity: 0.95,
}); });
const lineSegments = new THREE.LineSegments(edgesGeo, lineMat); const lineSegments = new THREE.LineSegments(edgesGeo, lineMat);
lineSegments.userData.__edgeLine = true; lineSegments.userData.__edgeLine = true;
+3
View File
@@ -182,6 +182,9 @@ function XRModel({ sceneModel }: { sceneModel: import('@/stores/useModelStore').
const lineMat = new THREE.LineBasicMaterial({ const lineMat = new THREE.LineBasicMaterial({
color: measureMode ? '#00f3ff' : wireframeColor, color: measureMode ? '#00f3ff' : wireframeColor,
linewidth: measureMode ? 2 : wireframeThickness, linewidth: measureMode ? 2 : wireframeThickness,
toneMapped: false,
transparent: true,
opacity: 0.95,
}); });
const lineSegments = new THREE.LineSegments(edgesGeo, lineMat); const lineSegments = new THREE.LineSegments(edgesGeo, lineMat);
lineSegments.userData.__edgeLine = true; lineSegments.userData.__edgeLine = true;
+2 -2
View File
@@ -485,10 +485,10 @@ export const useModelStore = create<ModelStore>((set, get) => ({
setGridAutoFollow: (gridAutoFollow) => set({ gridAutoFollow }), setGridAutoFollow: (gridAutoFollow) => set({ gridAutoFollow }),
nudgeGridY: (delta) => set((s) => ({ gridY: s.gridY + delta, gridAutoFollow: false })), nudgeGridY: (delta) => set((s) => ({ gridY: s.gridY + delta, gridAutoFollow: false })),
wireframeColor: '#8899aa', wireframeColor: '#00f3ff',
setWireframeColor: (wireframeColor) => set({ wireframeColor }), setWireframeColor: (wireframeColor) => set({ wireframeColor }),
wireframeThickness: 1, wireframeThickness: 2,
setWireframeThickness: (wireframeThickness) => set({ wireframeThickness }), setWireframeThickness: (wireframeThickness) => set({ wireframeThickness }),
edgeThresholdAngle: 15, edgeThresholdAngle: 15,