@@ -99,6 +99,36 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
9999 } )
100100 }
101101
102+ function syncRemoteCamera ( ) {
103+ console . log ( "syncRemoteCamera" )
104+ const renderer = genericRenderWindow . value . getRenderer ( )
105+ const camera = renderer . getActiveCamera ( )
106+ const params = {
107+ camera_options : {
108+ focal_point : camera . getFocalPoint ( ) ,
109+ view_up : camera . getViewUp ( ) ,
110+ position : camera . getPosition ( ) ,
111+ view_angle : camera . getViewAngle ( ) ,
112+ clipping_range : camera . getClippingRange ( ) ,
113+ distance : camera . getDistance ( ) ,
114+ } ,
115+ }
116+ viewer_call (
117+ {
118+ schema : viewer_schemas . opengeodeweb_viewer . viewer . update_camera ,
119+ params,
120+ } ,
121+ {
122+ response_function : ( ) => {
123+ remoteRender ( )
124+ for ( const key in params . camera_options ) {
125+ camera_options [ key ] = params . camera_options [ key ]
126+ }
127+ } ,
128+ } ,
129+ )
130+ }
131+
102132 function remoteRender ( ) {
103133 viewer_call ( {
104134 schema : viewer_schemas . opengeodeweb_viewer . viewer . render ,
@@ -201,74 +231,34 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
201231 }
202232
203233 const cam = snapshot ?. camera_options
204- if ( cam ) {
205- console . log ( "[hybrid_viewer] importStores snapshot camera" , cam )
206- const renderer = genericRenderWindow . value . getRenderer ( )
207- const camera = renderer . getActiveCamera ( )
208-
209- const fp = toNumArray ( cam . focal_point , 3 )
210- const vu = toNumArray ( cam . view_up , 3 )
211- const pos = toNumArray ( cam . position , 3 )
212- const cr = toNumArray ( cam . clipping_range , 2 )
213- const va = Number ( cam . view_angle )
234+ if ( ! cam ) return
214235
215- const valid = fp && vu && pos && cr && Number . isFinite ( va )
216-
217- console . log ( "[hybrid_viewer] importStores normalized camera" , {
218- focal_point : fp ,
219- view_up : vu ,
220- position : pos ,
221- view_angle : va ,
222- clipping_range : cr ,
223- valid,
224- } )
225-
226- if ( ! valid ) {
227- console . warn (
228- "[hybrid_viewer] importStores camera skipped: invalid snapshot camera" ,
229- cam ,
230- )
231- return
232- }
236+ const renderer = genericRenderWindow . value . getRenderer ( )
237+ const camera = renderer . getActiveCamera ( )
233238
234- camera . setFocalPoint ( fp )
235- camera . setViewUp ( vu )
236- camera . setPosition ( pos )
237- camera . setViewAngle ( va )
238- camera . setClippingRange ( cr )
239+ // Applique directement les valeurs du snapshot (elles sont déjà numériques)
240+ camera . setFocalPoint ( cam . focal_point )
241+ camera . setViewUp ( cam . view_up )
242+ camera . setPosition ( cam . position )
243+ camera . setViewAngle ( cam . view_angle )
244+ camera . setClippingRange ( cam . clipping_range )
239245
240- genericRenderWindow . value . getRenderWindow ( ) . render ( )
246+ genericRenderWindow . value . getRenderWindow ( ) . render ( )
241247
242- console . log ( "[hybrid_viewer] importStores -> viewer.update_camera" , {
243- camera_options : {
244- focal_point : fp ,
245- view_up : vu ,
246- position : pos ,
247- view_angle : va ,
248- clipping_range : cr ,
249- } ,
250- } )
251- await viewer_call ( {
248+ // Envoie tel quel au viewer distant (inclut distance si présente)
249+ const payload = { camera_options : cam }
250+ viewer_call (
251+ {
252252 schema : viewer_schemas . opengeodeweb_viewer . viewer . update_camera ,
253- params : {
254- camera_options : {
255- focal_point : fp ,
256- view_up : vu ,
257- position : pos ,
258- view_angle : va ,
259- clipping_range : cr ,
260- } ,
253+ params : payload ,
254+ } ,
255+ {
256+ response_function : ( ) => {
257+ remoteRender ( )
258+ Object . assign ( camera_options , payload . camera_options )
261259 } ,
262- } )
263-
264- Object . assign ( camera_options , {
265- focal_point : fp ,
266- view_up : vu ,
267- position : pos ,
268- view_angle : va ,
269- clipping_range : cr ,
270- } )
271- }
260+ } ,
261+ )
272262 }
273263
274264 return {
0 commit comments