From ff3c8e2156cfd27ec769608093f164e565f6fd72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=B0=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=A0=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BC?= Date: Sat, 27 Dec 2025 21:39:32 +0300 Subject: [PATCH] 3D view --- src/components/PreviewStep.tsx | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/components/PreviewStep.tsx b/src/components/PreviewStep.tsx index 2b2dc6e..b18b6d8 100644 --- a/src/components/PreviewStep.tsx +++ b/src/components/PreviewStep.tsx @@ -8,7 +8,7 @@ import { createBinGeometry, generateSTL, exportSTL } from '../services/geometryG import { Download, Package, Info, Loader2, Share2, Check, Ruler } from 'lucide-react'; import { generateShareUrl } from '../utils/share'; -// --- DrawerFrame (Каркас ящика) --- +// --- DrawerFrame (Каркас) --- const DrawerFrame = ({ config }: { config: AppConfig }) => { const { width, depth, height } = config.drawer; const offset = 0.5; @@ -26,37 +26,33 @@ const DrawerFrame = ({ config }: { config: AppConfig }) => { interface BinMeshProps { part: GeneratedPart; thickness: number; - cornerRadius: number; // Важный проп для радиуса + cornerRadius: number; isSelected: boolean; onClick: () => void; } const BinMesh: React.FC = ({ part, thickness, cornerRadius, isSelected, onClick }) => { - // 1. Создаем основную геометрию ячейки const geometry = useMemo(() => { return createBinGeometry(part.width, part.depth, part.height, thickness, cornerRadius); }, [part, thickness, cornerRadius]); - // 2. Создаем геометрию для рамки выделения - // Используем EdgesGeometry с порогом 20 градусов. - // Это скроет линии на плавных изгибах (где угол между полигонами ~5-6 градусов), - // но оставит четкие грани сверху, снизу и по углам. const edgesGeometry = useMemo(() => { return new THREE.EdgesGeometry(geometry, 20); }, [geometry]); return ( - {/* Сама модель */} + {/* Модель */} { e.stopPropagation(); onClick(); }}> - {/* Подсветка выделения (теперь повторяет форму скругления) */} + {/* Белая обводка */} {isSelected && ( @@ -66,7 +62,7 @@ const BinMesh: React.FC = ({ part, thickness, cornerRadius, isSele ); }; -// --- PreviewStep (Основной компонент) --- +// --- PreviewStep (Основной) --- interface Props { parts: GeneratedPart[]; config: AppConfig; @@ -149,15 +145,12 @@ export const PreviewStep: React.FC = ({ parts, config, splits }) => { return (
- {/* Верхняя панель: Размеры + Поделиться */}
-
Размеры ящика:
-
Ширина: @@ -174,7 +167,6 @@ export const PreviewStep: React.FC = ({ parts, config, splits }) => { мм
-
- {/* 3D Viewer */}
@@ -227,7 +218,7 @@ export const PreviewStep: React.FC = ({ parts, config, splits }) => { key={part.id} part={part} thickness={config.wallThickness} - cornerRadius={config.cornerRadius || 0} // <-- ИСПРАВЛЕНО: Передаем радиус + cornerRadius={config.cornerRadius || 0} isSelected={selectedId === part.id} onClick={() => setSelectedId(part.id)} /> @@ -239,7 +230,6 @@ export const PreviewStep: React.FC = ({ parts, config, splits }) => {
- {/* Sidebar List */}