Skip to content

Commit

Permalink
Ensure camera settings only update when necessary in Model3D (#6871)
Browse files Browse the repository at this point in the history
* change reset_camera_position reactivity logic

* check for changes when resetting scene

* add changeset

* add changeset

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
  • Loading branch information
hannahblair and gradio-pr-bot committed Jan 4, 2024
1 parent 377725c commit d361a0f
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 4 deletions.
6 changes: 6 additions & 0 deletions .changeset/clear-adults-fall.md
@@ -0,0 +1,6 @@
---
"@gradio/model3d": patch
"gradio": patch
---

fix:Ensure camera settings only update when necessary in Model3D
3 changes: 2 additions & 1 deletion js/model3D/package.json
Expand Up @@ -15,7 +15,8 @@
"@gradio/utils": "workspace:^",
"@types/babylon": "^6.16.6",
"babylonjs": "^4.2.1",
"babylonjs-loaders": "^4.2.1"
"babylonjs-loaders": "^4.2.1",
"dequal": "^2.0.2"
},
"main_changeset": true,
"main": "./Index.svelte",
Expand Down
17 changes: 14 additions & 3 deletions js/model3D/shared/Model3D.svelte
Expand Up @@ -7,6 +7,7 @@
import * as BABYLON from "babylonjs";
import * as BABYLON_LOADERS from "babylonjs-loaders";
import type { I18nFormatter } from "@gradio/utils";
import { dequal } from "dequal";
export let value: FileData | null;
export let clear_color: [number, number, number, number] = [0, 0, 0, 0];
Expand All @@ -15,14 +16,15 @@
export let i18n: I18nFormatter;
export let zoom_speed = 1;
export let pan_speed = 1;
// alpha, beta, radius
export let camera_position: [number | null, number | null, number | null] = [
null,
null,
null
];
let current_settings = { camera_position, zoom_speed, pan_speed };
$: {
if (
BABYLON_LOADERS.OBJFileLoader != undefined &&
Expand Down Expand Up @@ -80,8 +82,17 @@
reset_camera_position(scene, camera_position, zoom_speed, pan_speed);
}
$: if (scene)
reset_camera_position(scene, camera_position, zoom_speed, pan_speed);
$: {
if (
scene &&
(!dequal(current_settings.camera_position, camera_position) ||
current_settings.zoom_speed !== zoom_speed ||
current_settings.pan_speed !== pan_speed)
) {
reset_camera_position(scene, camera_position, zoom_speed, pan_speed);
current_settings = { camera_position, zoom_speed, pan_speed };
}
}
</script>

<BlockLabel
Expand Down
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit d361a0f

Please sign in to comment.