From b45b31730a5ec3f5292a38530a4142c2d56ab4dd Mon Sep 17 00:00:00 2001 From: Terry Jia Date: Thu, 23 Jan 2025 11:28:41 -0500 Subject: [PATCH] [3d] improve storing Camera State logic --- src/extensions/core/load3d.ts | 34 ++++------------------------ src/extensions/core/load3d/Load3d.ts | 4 ++++ 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/extensions/core/load3d.ts b/src/extensions/core/load3d.ts index 546965a9f..d3cd1f4d1 100644 --- a/src/extensions/core/load3d.ts +++ b/src/extensions/core/load3d.ts @@ -354,20 +354,7 @@ app.registerExtension({ const fov = node.widgets.find((w: IWidget) => w.name === 'fov') - let cameraState - try { - const cameraInfo = node.properties['Camera Info'] - if ( - cameraInfo && - typeof cameraInfo === 'string' && - cameraInfo.trim() !== '' - ) { - cameraState = JSON.parse(cameraInfo) - } - } catch (error) { - console.warn('Failed to parse camera state:', error) - cameraState = undefined - } + let cameraState = node.properties['Camera Info'] configureLoad3D( load3d, @@ -386,7 +373,7 @@ app.registerExtension({ // @ts-expect-error hacky override sceneWidget.serializeValue = async () => { - node.properties['Camera Info'] = JSON.stringify(load3d.getCameraState()) + node.properties['Camera Info'] = load3d.getCameraState() const { scene: imageData, mask: maskData } = await load3d.captureScene( w.value, @@ -598,20 +585,7 @@ app.registerExtension({ const fov = node.widgets.find((w: IWidget) => w.name === 'fov') - let cameraState - try { - const cameraInfo = node.properties['Camera Info'] - if ( - cameraInfo && - typeof cameraInfo === 'string' && - cameraInfo.trim() !== '' - ) { - cameraState = JSON.parse(cameraInfo) - } - } catch (error) { - console.warn('Failed to parse camera state:', error) - cameraState = undefined - } + let cameraState = node.properties['Camera Info'] configureLoad3D( load3d, @@ -643,7 +617,7 @@ app.registerExtension({ // @ts-expect-error hacky override sceneWidget.serializeValue = async () => { - node.properties['Camera Info'] = JSON.stringify(load3d.getCameraState()) + node.properties['Camera Info'] = load3d.getCameraState() load3d.toggleAnimation(false) diff --git a/src/extensions/core/load3d/Load3d.ts b/src/extensions/core/load3d/Load3d.ts index dc539c9cd..440c4e05d 100644 --- a/src/extensions/core/load3d/Load3d.ts +++ b/src/extensions/core/load3d/Load3d.ts @@ -82,6 +82,10 @@ class Load3d { ) this.controls.enableDamping = true + this.controls.addEventListener('end', () => { + this.storeNodeProperty('Camera Info', this.getCameraState()) + }) + this.gltfLoader = new GLTFLoader() this.objLoader = new OBJLoader() this.mtlLoader = new MTLLoader()