diff --git a/src/components/load3d/Load3D.vue b/src/components/load3d/Load3D.vue index f2d6f60b76..cbbc41b68d 100644 --- a/src/components/load3d/Load3D.vue +++ b/src/components/load3d/Load3D.vue @@ -54,6 +54,7 @@ @updateUpDirection="handleUpdateUpDirection" @updateMaterialMode="handleUpdateMaterialMode" @updateEdgeThreshold="handleUpdateEdgeThreshold" + @exportModel="handleExportModel" /> @@ -72,6 +73,7 @@ import { } from '@/extensions/core/load3d/interfaces' import type { CustomInputSpec } from '@/schemas/nodeDef/nodeDefSchemaV2' import type { ComponentWidget } from '@/scripts/domWidget' +import { useToastStore } from '@/stores/toastStore' const { widget } = defineProps<{ widget: ComponentWidget @@ -183,6 +185,22 @@ const handleUpdateMaterialMode = (value: MaterialMode) => { node.properties['Material Mode'] = value } +const handleExportModel = async (format: string) => { + if (!load3DSceneRef.value?.load3d) { + useToastStore().addAlert('No 3D scene to export') + return + } + + try { + await load3DSceneRef.value.load3d.exportModel(format) + } catch (error) { + console.error('Error exporting model:', error) + useToastStore().addAlert( + `Failed to export model as ${format.toUpperCase()}` + ) + } +} + const listenMaterialModeChange = (mode: MaterialMode) => { materialMode.value = mode diff --git a/src/components/load3d/Load3DControls.vue b/src/components/load3d/Load3DControls.vue index d407b45f7c..07c51ae8c7 100644 --- a/src/components/load3d/Load3DControls.vue +++ b/src/components/load3d/Load3DControls.vue @@ -16,14 +16,14 @@ >
@@ -70,6 +70,12 @@ @updateLightIntensity="handleUpdateLightIntensity" ref="lightControlsRef" /> + +