diff --git a/app/components/designer/ThreeDPreview.vue b/app/components/designer/ThreeDPreview.vue new file mode 100644 index 0000000..f332934 --- /dev/null +++ b/app/components/designer/ThreeDPreview.vue @@ -0,0 +1,174 @@ + + + diff --git a/app/pages/designer.vue b/app/pages/designer.vue index bf95ccc..95f511e 100644 --- a/app/pages/designer.vue +++ b/app/pages/designer.vue @@ -3,6 +3,7 @@ import DesignerCanvas from "~/components/designer/DesignerCanvas.vue"; import DesignerPreview from "~/components/designer/DesignerPreview.vue"; import DesignerToolbar from "~/components/designer/DesignerToolbar.vue"; import TemplatePicker from "~/components/designer/TemplatePicker.vue"; +import ThreeDPreview from "~/components/designer/ThreeDPreview.vue"; import { useSlipmatDesigner } from "~/composables/useSlipmatDesigner"; import type { ExportedDesign } from "~/composables/useSlipmatDesigner"; @@ -40,14 +41,21 @@ const { zoomIn, zoomOut, resetZoom, + getCanvasElement, } = useSlipmatDesigner(); // Active view selector for multi-canvas design const activeView = ref<"front" | "top" | "left" | "right">("front"); +const canvasElement = ref(null); const setActiveView = (view: "front" | "top" | "left" | "right") => { activeView.value = view; setActiveCanvas(view); + updateCanvasElement(); +}; + +const updateCanvasElement = () => { + canvasElement.value = getCanvasElement(); }; const DESIGN_PRICE_USD = 39.99; @@ -257,8 +265,17 @@ watch( { immediate: true } ); +// Update canvas element reference when canvas changes +watch( + () => getCanvasElement(), + (newCanvas) => { + canvasElement.value = newCanvas; + } +); + onMounted(() => { initAuth(); + updateCanvasElement(); }); const handleTemplateSelect = (templateId: string) => { @@ -507,8 +524,23 @@ const handleCheckout = async () => {

+ + +
+

3D Preview

+
+ +
+

+ Your design will appear on the 3D model in real-time. Rotate to view from different angles. +

+
- + { class="flex h-full w-full items-center justify-center rounded-2xl border-2 border-slate-300 bg-linear-to-br from-slate-700 to-slate-900 shadow-xl overflow-hidden" > { refreshPreview, schedulePreviewRefresh, applyTemplateToCanvas, + getCanvasElement: () => canvas.value?.lowerCanvasEl || null, }; }; diff --git a/public/LAMESA-2.glb b/public/LAMESA-2.glb new file mode 100644 index 0000000..8f8111e Binary files /dev/null and b/public/LAMESA-2.glb differ