Skip to content

Commit 57e13f3

Browse files
committed
test camera_options
1 parent e23b7e7 commit 57e13f3

File tree

1 file changed

+83
-1
lines changed

1 file changed

+83
-1
lines changed

stores/hybrid_viewer.js

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,96 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
199199
}
200200

201201
function exportStores() {
202-
return { zScale: zScale.value }
202+
const cam =
203+
Object.keys(camera_options).length > 0
204+
? { ...camera_options }
205+
: (() => {
206+
if (!genericRenderWindow.value || status.value !== Status.CREATED) {
207+
return undefined
208+
}
209+
const renderer = genericRenderWindow.value.getRenderer()
210+
const camera = renderer.getActiveCamera()
211+
return {
212+
focal_point: camera.getFocalPoint(),
213+
view_up: camera.getViewUp(),
214+
position: camera.getPosition(),
215+
view_angle: camera.getViewAngle(),
216+
clipping_range: camera.getClippingRange(),
217+
distance: camera.getDistance(),
218+
// Ajouts pour style et zoom corrects
219+
parallel_projection:
220+
typeof camera.getParallelProjection === "function"
221+
? camera.getParallelProjection()
222+
: undefined,
223+
parallel_scale:
224+
typeof camera.getParallelScale === "function"
225+
? camera.getParallelScale()
226+
: undefined,
227+
roll:
228+
typeof camera.getRoll === "function"
229+
? camera.getRoll()
230+
: undefined,
231+
}
232+
})()
233+
return { zScale: zScale.value, camera_options: cam }
203234
}
204235

205236
async function importStores(snapshot) {
206237
const z_scale = snapshot?.zScale
207238
if (z_scale != null) {
208239
await setZScaling(z_scale)
209240
}
241+
242+
const cam = snapshot?.camera_options
243+
if (cam && genericRenderWindow.value && status.value === Status.CREATED) {
244+
const renderer = genericRenderWindow.value.getRenderer()
245+
const camera = renderer.getActiveCamera()
246+
247+
// Appliquer après que la scène soit prête (évite les reset ultérieurs)
248+
await new Promise((resolve) => requestAnimationFrame(resolve))
249+
250+
// Mode de projection et zoom
251+
if (cam.parallel_projection !== undefined &&
252+
typeof camera.setParallelProjection === "function") {
253+
camera.setParallelProjection(!!cam.parallel_projection)
254+
}
255+
256+
// Pose / orientation
257+
if (cam.focal_point) camera.setFocalPoint(...cam.focal_point)
258+
if (cam.view_up) camera.setViewUp(...cam.view_up)
259+
if (cam.position) camera.setPosition(...cam.position)
260+
261+
// Zoom selon le mode
262+
if (typeof camera.getParallelProjection === "function" &&
263+
camera.getParallelProjection() &&
264+
cam.parallel_scale !== undefined &&
265+
typeof camera.setParallelScale === "function") {
266+
camera.setParallelScale(cam.parallel_scale)
267+
} else if (cam.view_angle != null) {
268+
camera.setViewAngle(cam.view_angle)
269+
}
270+
271+
// Roll (si dispo)
272+
if (cam.roll != null && typeof camera.setRoll === "function") {
273+
camera.setRoll(cam.roll)
274+
}
275+
276+
// Clipping et rendu
277+
if (cam.clipping_range) camera.setClippingRange(...cam.clipping_range)
278+
if (typeof camera.modified === "function") camera.modified()
279+
renderer.resetCameraClippingRange()
280+
genericRenderWindow.value.getRenderWindow().render()
281+
282+
// Sync côté viewer distant (si schéma présent)
283+
const schema =
284+
viewer_schemas?.opengeodeweb_viewer?.viewer?.update_camera
285+
if (schema) {
286+
await viewer_call({
287+
schema,
288+
params: { camera_options: cam },
289+
})
290+
}
291+
}
210292
}
211293

212294
return {

0 commit comments

Comments
 (0)