[3d] improve storing Camera State logic (#2328)

This commit is contained in:
Terry Jia
2025-01-23 14:26:13 -05:00
committed by GitHub
parent b54e270b10
commit 3f787e2dbf
3 changed files with 16 additions and 30 deletions

View File

@@ -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)

View File

@@ -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()
@@ -576,6 +580,10 @@ class Load3d {
if (this.viewHelper.animating) {
this.viewHelper.update(delta)
if (!this.viewHelper.animating) {
this.storeNodeProperty('Camera Info', this.getCameraState())
}
}
this.renderer.clear()

View File

@@ -149,6 +149,10 @@ class Load3dAnimation extends Load3d {
if (this.viewHelper.animating) {
this.viewHelper.update(delta)
if (!this.viewHelper.animating) {
this.storeNodeProperty('Camera Info', this.getCameraState())
}
}
this.viewHelper.render(this.renderer)