Skip to content

Commit fca8a2a

Browse files
committed
OMGGGGG
1 parent c0df47c commit fca8a2a

File tree

1 file changed

+48
-9
lines changed

1 file changed

+48
-9
lines changed

stores/hybrid_viewer.js

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,38 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
1919
let viewStream
2020
let gridActor = null
2121

22+
// Helper: conversion stricte aux types/schema + logs des types
23+
function sanitizeCameraOptions(opts) {
24+
if (!opts) return null
25+
const toNums = (arr, size) =>
26+
Array.from(arr || [])
27+
.slice(0, size)
28+
.map((n) => Number(n))
29+
return {
30+
focal_point: toNums(opts.focal_point, 3),
31+
view_up: toNums(opts.view_up, 3),
32+
position: toNums(opts.position, 3),
33+
view_angle: Number(opts.view_angle),
34+
clipping_range: toNums(opts.clipping_range, 2),
35+
}
36+
}
37+
38+
function logCameraOptions(label, opts) {
39+
const types = (arr) => Array.from(arr || []).map((v) => typeof v)
40+
console.log(`[Camera] ${label}`, {
41+
focal_point: opts?.focal_point,
42+
focal_point_types: types(opts?.focal_point),
43+
view_up: opts?.view_up,
44+
view_up_types: types(opts?.view_up),
45+
position: opts?.position,
46+
position_types: types(opts?.position),
47+
view_angle: opts?.view_angle,
48+
view_angle_type: typeof opts?.view_angle,
49+
clipping_range: opts?.clipping_range,
50+
clipping_range_types: types(opts?.clipping_range),
51+
})
52+
}
53+
2254
async function initHybridViewer() {
2355
if (status.value !== Status.NOT_CREATED) return
2456
status.value = Status.CREATING
@@ -100,7 +132,6 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
100132
}
101133

102134
function syncRemoteCamera() {
103-
console.log("syncRemoteCamera")
104135
const renderer = genericRenderWindow.value.getRenderer()
105136
const camera = renderer.getActiveCamera()
106137
const params = {
@@ -110,7 +141,6 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
110141
position: camera.getPosition(),
111142
view_angle: camera.getViewAngle(),
112143
clipping_range: camera.getClippingRange(),
113-
distance: camera.getDistance(),
114144
},
115145
}
116146
viewer_call(
@@ -222,6 +252,7 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
222252
return { zScale: zScale.value, camera_options: cameraSnapshot }
223253
}
224254

255+
225256
async function importStores(snapshot) {
226257
const z_scale = snapshot?.zScale
227258
if (z_scale != null) {
@@ -234,17 +265,25 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
234265
const renderer = genericRenderWindow.value.getRenderer()
235266
const camera = renderer.getActiveCamera()
236267

237-
// Applique directement les valeurs du snapshot (elles sont déjà numériques)
238-
camera.setFocalPoint(cam.focal_point)
239-
camera.setViewUp(cam.view_up)
240-
camera.setPosition(cam.position)
268+
// Appliquer les composantes (x, y, z), pas le tableau
269+
camera.setFocalPoint(...cam.focal_point)
270+
camera.setViewUp(...cam.view_up)
271+
camera.setPosition(...cam.position)
241272
camera.setViewAngle(cam.view_angle)
242-
camera.setClippingRange(cam.clipping_range)
273+
camera.setClippingRange(...cam.clipping_range)
243274

244275
genericRenderWindow.value.getRenderWindow().render()
245276

246-
// Envoie tel quel au viewer distant (inclut distance si présente)
247-
const payload = { camera_options: cam }
277+
// Envoyer uniquement les champs conformes au schéma (sans distance)
278+
const payload = {
279+
camera_options: {
280+
focal_point: cam.focal_point,
281+
view_up: cam.view_up,
282+
position: cam.position,
283+
view_angle: cam.view_angle,
284+
clipping_range: cam.clipping_range,
285+
},
286+
}
248287
viewer_call(
249288
{
250289
schema: viewer_schemas.opengeodeweb_viewer.viewer.update_camera,

0 commit comments

Comments
 (0)