@geode/opengeodeweb-front 10.31.0 → 10.31.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  <script setup>
2
2
  import ToolPanel from "@ogw_front/components/ToolPanel";
3
- import { applyCameraOptions } from "@ogw_internal/stores/hybrid_viewer_camera";
3
+ import { applyCameraOptions } from "@ogw_internal/stores/hybrid_viewer/camera";
4
4
  import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
5
5
  import { newInstance as vtkAnnotatedCubeActor } from "@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor";
6
6
  import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow";
@@ -1,80 +1,42 @@
1
- import {
2
- ACTOR_COLOR,
3
- BACKGROUND_COLOR,
4
- WHEEL_TIME_OUT_MS,
5
- } from "@ogw_internal/stores/hybrid_viewer_constants";
6
1
  import {
7
2
  applySnapshot,
8
3
  getCameraOptions,
9
- performCameraOrientation,
10
- performFocusCameraOnObject,
11
- performSetCamera,
12
- performSyncRemoteCamera,
13
- } from "@ogw_internal/stores/hybrid_viewer_camera";
14
- import {
15
- createClearHoverData,
16
- createHoverHighlight,
17
- } from "@ogw_internal/stores/hybrid_viewer_highlight";
18
- import {
19
- performAddItem,
20
- performClear,
21
- performClearHoverHighlight,
22
- performClickPicking,
23
- performRemoveItem,
24
- performResize,
25
- performSetClippingPlanes,
26
- performSetContainer,
27
- performSetShrink,
28
- performSetVisibility,
29
- performSetZScaling,
30
- } from "@ogw_internal/stores/hybrid_viewer";
31
- import { computeAverageBrightness } from "@ogw_internal/stores/hybrid_viewer_brightness";
32
- import { newInstance as vtkActor } from "@kitware/vtk.js/Rendering/Core/Actor";
4
+ useHybridViewerCamera,
5
+ } from "@ogw_internal/stores/hybrid_viewer/camera";
6
+ import { BACKGROUND_COLOR } from "@ogw_internal/stores/hybrid_viewer/constants";
7
+ import { useHybridViewerBrightness } from "@ogw_internal/stores/hybrid_viewer/brightness";
8
+ import { useHybridViewerFilters } from "@ogw_internal/stores/hybrid_viewer/filters";
9
+ import { useHybridViewerHighlight } from "@ogw_internal/stores/hybrid_viewer/highlight";
10
+ import { useHybridViewerScene } from "@ogw_internal/stores/hybrid_viewer/scene";
11
+ import { useHybridViewerViewport } from "@ogw_internal/stores/hybrid_viewer/viewport";
33
12
  import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering/Misc/GenericRenderWindow";
34
- import { newInstance as vtkMapper } from "@kitware/vtk.js/Rendering/Core/Mapper";
35
- import { newInstance as vtkXMLPolyDataReader } from "@kitware/vtk.js/IO/XML/XMLPolyDataReader";
36
13
 
37
14
  import { Status } from "@ogw_front/utils/status";
38
- import { useDataStore } from "@ogw_front/stores/data";
39
15
  import { useViewerStore } from "@ogw_front/stores/viewer";
40
16
 
41
17
  import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
42
18
 
43
19
  // oxlint-disable max-lines-per-function, max-statements
44
20
  export const useHybridViewerStore = defineStore("hybridViewer", () => {
45
- const dataStore = useDataStore();
46
- const hybridDb = reactive({});
47
21
  const viewerStore = useViewerStore();
48
- const camera_options = reactive({});
49
22
  const genericRenderWindow = reactive({});
50
23
  const status = ref(Status.NOT_CREATED);
51
24
  const is_moving = ref(false);
52
25
  const is_picking = ref(false);
53
- const is_hover_highlight = ref(false);
54
- const hover_highlight_field_type = ref("CELL");
55
- const hoverData = ref(undefined);
56
- const hoverPosition = ref({ x: 0, y: 0 });
57
- const zScale = ref(1);
58
26
  let imageStyle = undefined;
59
- let viewStream = undefined;
60
- let wheelEventEndTimeout = undefined;
61
- const gridActor = undefined;
62
27
 
63
28
  watch(is_picking, (value) => {
64
- const element = genericRenderWindow.value
65
- ?.getApiSpecificRenderWindow()
66
- ?.getCanvas()?.parentElement;
67
- if (element) {
68
- element.style.cursor = value ? "crosshair" : "default";
29
+ if (!genericRenderWindow.value) {
30
+ return;
31
+ }
32
+ const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
33
+ const canvas = webGLRenderWindow.getCanvas();
34
+ if (canvas && canvas.parentElement) {
35
+ canvas.parentElement.style.cursor = value ? "crosshair" : "default";
69
36
  }
70
37
  });
71
38
 
72
- const latestImage = ref(undefined);
73
- const offscreenCanvas =
74
- typeof document === "undefined" ? undefined : document.createElement("canvas");
75
- const offscreenCtx = offscreenCanvas
76
- ? offscreenCanvas.getContext("2d", { willReadFrequently: true })
77
- : undefined;
39
+ const brightnessStore = useHybridViewerBrightness();
78
40
 
79
41
  async function initHybridViewer() {
80
42
  if (status.value !== Status.NOT_CREATED) {
@@ -89,112 +51,25 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
89
51
  imageStyle = webGLRenderWindow.getReferenceByName("bgImage").style;
90
52
  Object.assign(imageStyle, { transition: "opacity 0.1s ease-in", zIndex: 1 });
91
53
  await viewerStore.ws_connect();
92
- viewStream = viewerStore.client.getImageStream().createViewStream("-1");
93
- viewStream.onImageReady((event) => {
54
+ const imageStream = viewerStore.client.getImageStream();
55
+ viewportStore.viewStream.value = imageStream.createViewStream("-1");
56
+ viewportStore.viewStream.value.onImageReady((event) => {
94
57
  if (is_moving.value) {
95
58
  return;
96
59
  }
97
- latestImage.value = event.image;
60
+ brightnessStore.latestImage.value = event.image;
98
61
  webGLRenderWindow.setBackgroundImage(event.image);
99
62
  imageStyle.opacity = 1;
100
63
  });
101
- const camera = genericRenderWindow.value.getRenderer().getActiveCamera();
102
- Object.assign(camera_options, getCameraOptions(camera));
64
+ const renderer = genericRenderWindow.value.getRenderer();
65
+ const camera = renderer.getActiveCamera();
66
+ Object.assign(cameraStore.camera_options, getCameraOptions(camera));
103
67
  camera.onModified(() => {
104
- Object.assign(camera_options, getCameraOptions(camera));
68
+ Object.assign(cameraStore.camera_options, getCameraOptions(camera));
105
69
  });
106
70
  status.value = Status.CREATED;
107
71
  }
108
72
 
109
- async function addItem(id) {
110
- await performAddItem(id, {
111
- genericRenderWindow: genericRenderWindow.value,
112
- dataStore,
113
- vtkXMLPolyDataReader,
114
- vtkActor,
115
- vtkMapper,
116
- actorColor: ACTOR_COLOR,
117
- hybridDb,
118
- });
119
- }
120
-
121
- function removeItem(id) {
122
- performRemoveItem(id, { genericRenderWindow: genericRenderWindow.value, hybridDb });
123
- }
124
-
125
- function setVisibility(id, visibility) {
126
- performSetVisibility(id, visibility, {
127
- genericRenderWindow: genericRenderWindow.value,
128
- hybridDb,
129
- });
130
- }
131
-
132
- async function setZScaling(z_scale) {
133
- await performSetZScaling(z_scale, {
134
- zScale,
135
- genericRenderWindow: genericRenderWindow.value,
136
- gridActor,
137
- viewerStore,
138
- viewer_schemas,
139
- remoteRender,
140
- });
141
- }
142
-
143
- async function setClippingPlanes(ids, planes) {
144
- await performSetClippingPlanes(ids, planes, { viewerStore, viewer_schemas, remoteRender });
145
- }
146
-
147
- async function setShrink(ids, shrink_factor) {
148
- await performSetShrink(ids, shrink_factor, { viewerStore, viewer_schemas, remoteRender });
149
- }
150
-
151
- function resetCamera() {
152
- genericRenderWindow.value.getRenderer().resetCamera();
153
- genericRenderWindow.value.getRenderWindow().render();
154
- syncRemoteCamera();
155
- }
156
-
157
- async function focusCameraOnObject(id, block_ids = []) {
158
- await performFocusCameraOnObject(id, {
159
- hybridDb,
160
- viewerStore,
161
- viewer_schemas,
162
- genericRenderWindow: genericRenderWindow.value,
163
- block_ids,
164
- is_moving,
165
- imageStyle,
166
- syncRemoteCamera,
167
- });
168
- }
169
-
170
- function setCameraOrientation(orientation) {
171
- performCameraOrientation(orientation, {
172
- genericRenderWindow: genericRenderWindow.value,
173
- is_moving,
174
- imageStyle,
175
- syncRemoteCamera,
176
- });
177
- }
178
-
179
- function setCamera(targetCameraOptions) {
180
- performSetCamera(targetCameraOptions, {
181
- genericRenderWindow: genericRenderWindow.value,
182
- is_moving,
183
- imageStyle,
184
- syncRemoteCamera,
185
- });
186
- }
187
-
188
- function syncRemoteCamera() {
189
- performSyncRemoteCamera({
190
- genericRenderWindow: genericRenderWindow.value,
191
- viewerStore,
192
- viewer_schemas,
193
- remoteRender,
194
- camera_options,
195
- });
196
- }
197
-
198
73
  let renderPromise = undefined;
199
74
  let renderPending = false;
200
75
 
@@ -219,124 +94,35 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => {
219
94
  return renderPromise;
220
95
  }
221
96
 
222
- const hoverTimeoutRef = ref(undefined);
223
- const currentHoverId = ref(undefined);
224
-
225
- const clearHoverData = createClearHoverData(hoverTimeoutRef, hoverData, currentHoverId);
226
-
227
- const hoverHighlight = createHoverHighlight({
228
- genericRenderWindow,
229
- is_hover_highlight,
230
- viewerStore,
231
- viewer_schemas,
232
- hover_highlight_field_type,
233
- hybridDb,
234
- hoverData,
235
- hoverPosition,
236
- currentHoverId,
237
- hoverTimeoutRef,
238
- clearHoverData,
239
- });
240
-
241
- function clearHoverHighlight() {
242
- clearHoverData();
243
- performClearHoverHighlight({
244
- viewerStore,
245
- viewer_schemas,
246
- hover_highlight_field_type,
247
- hybridDb,
248
- });
249
- }
250
-
251
- function setContainer(container) {
252
- performSetContainer({
253
- container,
254
- genericRenderWindow: genericRenderWindow.value,
255
- imageStyleSetter: (style) => (imageStyle = style),
256
- resize,
257
- useMousePressed,
258
- useEventListener,
259
- is_picking,
260
- is_moving,
261
- clickPickingCallback: performClickPicking,
262
- viewerStore,
263
- viewer_schemas,
264
- syncRemoteCamera,
265
- hoverHighlight,
266
- wheelTimeoutMs: WHEEL_TIME_OUT_MS,
267
- wheelEventEndTimeout,
268
- wheelTimeoutSetter: (timeout) => (wheelEventEndTimeout = timeout),
269
- });
270
- }
271
-
272
- async function resize(width, height) {
273
- await performResize(width, height, {
274
- viewerStore,
275
- status,
276
- Status,
277
- genericRenderWindow: genericRenderWindow.value,
278
- viewStream,
279
- remoteRender,
280
- });
281
- }
282
-
283
- function getAverageBrightness(rect) {
284
- return computeAverageBrightness(rect, {
285
- latestImage: latestImage.value,
286
- offscreenCtx,
287
- offscreenCanvas,
288
- genericRenderWindow: genericRenderWindow.value,
289
- });
290
- }
97
+ const sceneStore = useHybridViewerScene();
98
+ const filtersStore = useHybridViewerFilters();
99
+ const highlightStore = useHybridViewerHighlight();
100
+ const cameraStore = useHybridViewerCamera();
101
+ const viewportStore = useHybridViewerViewport();
291
102
 
292
103
  function exportStores() {
293
- const camera = genericRenderWindow.value.getRenderer().getActiveCamera();
294
- return { zScale: zScale.value, camera_options: getCameraOptions(camera) || camera_options };
295
- }
296
-
297
- async function importStores(snapshot) {
298
- await applySnapshot(snapshot, {
299
- genericRenderWindow: genericRenderWindow.value,
300
- setZScaling,
301
- syncRemoteCamera,
302
- setCamera,
303
- });
304
- }
305
-
306
- function clear() {
307
- performClear({ genericRenderWindow: genericRenderWindow.value, hybridDb });
104
+ const renderer = genericRenderWindow.value.getRenderer();
105
+ const camera = renderer.getActiveCamera();
106
+ return {
107
+ zScale: sceneStore.zScale.value,
108
+ camera_options: getCameraOptions(camera) || cameraStore.camera_options,
109
+ };
308
110
  }
309
111
 
310
112
  return {
311
- hybridDb,
312
113
  genericRenderWindow,
313
- addItem,
314
- removeItem,
315
- setVisibility,
316
- setZScaling,
317
- setClippingPlanes,
318
- setShrink,
319
- syncRemoteCamera,
320
- setCamera,
114
+ status,
115
+ is_moving,
116
+ is_picking,
321
117
  initHybridViewer,
322
118
  remoteRender,
323
- resize,
324
- resetCamera,
325
- focusCameraOnObject,
326
- setCameraOrientation,
327
- setContainer,
328
- zScale,
329
- is_picking,
330
- is_hover_highlight,
331
- hover_highlight_field_type,
332
- clearHoverHighlight,
333
- hoverData,
334
- hoverPosition,
335
- clear,
336
119
  exportStores,
337
- importStores,
338
- camera_options,
339
- latestImage,
340
- getAverageBrightness,
120
+ importStores: applySnapshot,
121
+ ...brightnessStore,
122
+ ...sceneStore,
123
+ ...viewportStore,
124
+ ...filtersStore,
125
+ ...highlightStore,
126
+ ...cameraStore,
341
127
  };
342
128
  });
@@ -1,9 +1,32 @@
1
- import { BACKGROUND_GREY_VALUE, RGB_MAX } from "./hybrid_viewer_constants";
1
+ import { BACKGROUND_GREY_VALUE, RGB_MAX } from "./constants";
2
+ import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
2
3
 
3
4
  const RGBA_CHANNELS = 4;
4
5
  const SAMPLE_SIZE = 10;
5
6
  const TOTAL_CHANNELS = 400;
6
7
 
8
+ function useHybridViewerBrightness() {
9
+ const latestImage = ref(undefined);
10
+ const offscreenCanvas =
11
+ typeof document === "undefined" ? undefined : document.createElement("canvas");
12
+ const offscreenCtx = offscreenCanvas
13
+ ? offscreenCanvas.getContext("2d", { willReadFrequently: true })
14
+ : undefined;
15
+
16
+ function getAverageBrightness(rect) {
17
+ return computeAverageBrightness(rect, {
18
+ latestImage: latestImage.value,
19
+ offscreenCtx,
20
+ offscreenCanvas,
21
+ });
22
+ }
23
+
24
+ return {
25
+ latestImage,
26
+ getAverageBrightness,
27
+ };
28
+ }
29
+
7
30
  function mapRect(rect, latestImage, canvasRect) {
8
31
  const scaleX = latestImage.width / canvasRect.width;
9
32
  const scaleY = latestImage.height / canvasRect.height;
@@ -16,11 +39,12 @@ function mapRect(rect, latestImage, canvasRect) {
16
39
  }
17
40
 
18
41
  function computeAverageBrightness(rect, options) {
19
- const { latestImage, offscreenCtx, offscreenCanvas, genericRenderWindow } = options;
20
- if (!latestImage || !offscreenCtx || !offscreenCanvas || !genericRenderWindow) {
42
+ const { latestImage, offscreenCtx, offscreenCanvas } = options;
43
+ const { genericRenderWindow } = useHybridViewerStore();
44
+ if (!latestImage || !offscreenCtx || !offscreenCanvas || !genericRenderWindow.value) {
21
45
  return BACKGROUND_GREY_VALUE / RGB_MAX;
22
46
  }
23
- const canvas = genericRenderWindow.getApiSpecificRenderWindow().getCanvas();
47
+ const canvas = genericRenderWindow.value.getApiSpecificRenderWindow().getCanvas();
24
48
  if (!canvas) {
25
49
  return BACKGROUND_GREY_VALUE / RGB_MAX;
26
50
  }
@@ -59,4 +83,4 @@ function computeAverageBrightness(rect, options) {
59
83
  }
60
84
  }
61
85
 
62
- export { computeAverageBrightness };
86
+ export { computeAverageBrightness, useHybridViewerBrightness };
@@ -3,8 +3,11 @@ import {
3
3
  SHORT_ANIMATION_DURATION,
4
4
  animateCamera,
5
5
  computeAnimationDuration,
6
- } from "@ogw_internal/stores/hybrid_viewer_camera_animation";
6
+ } from "./camera_animation";
7
7
  import { dot } from "@kitware/vtk.js/Common/Core/Math";
8
+ import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
9
+ import { useViewerStore } from "@ogw_front/stores/viewer";
10
+ import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
8
11
 
9
12
  const BUMP_MULTIPLIER = 0.2;
10
13
  const ALIGNMENT_THRESHOLD = 0.9;
@@ -19,8 +22,59 @@ const ORIENTATIONS = {
19
22
  xminus: { position: [-1, 0, 0], view_up: [0, 0, 1] },
20
23
  };
21
24
 
25
+ function getImageStyle() {
26
+ const { genericRenderWindow } = useHybridViewerStore();
27
+ if (!genericRenderWindow.value) {
28
+ return undefined;
29
+ }
30
+ const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
31
+ if (!webGLRenderWindow) {
32
+ return undefined;
33
+ }
34
+ const bgImage = webGLRenderWindow.getReferenceByName("bgImage");
35
+ return bgImage ? bgImage.style : undefined;
36
+ }
37
+
38
+ function useHybridViewerCamera() {
39
+ const camera_options = reactive({});
40
+
41
+ function syncRemoteCamera() {
42
+ performSyncRemoteCamera();
43
+ }
44
+
45
+ function setCamera(targetCameraOptions) {
46
+ performSetCamera(targetCameraOptions);
47
+ }
48
+
49
+ function resetCamera() {
50
+ const { genericRenderWindow } = useHybridViewerStore();
51
+ const renderer = genericRenderWindow.value.getRenderer();
52
+ renderer.resetCamera();
53
+ const renderWindow = genericRenderWindow.value.getRenderWindow();
54
+ renderWindow.render();
55
+ syncRemoteCamera();
56
+ }
57
+
58
+ async function focusCameraOnObject(id, block_ids = []) {
59
+ await performFocusCameraOnObject(id, block_ids);
60
+ }
61
+
62
+ function setCameraOrientation(orientation) {
63
+ performCameraOrientation(orientation);
64
+ }
65
+
66
+ return {
67
+ camera_options,
68
+ syncRemoteCamera,
69
+ setCamera,
70
+ resetCamera,
71
+ focusCameraOnObject,
72
+ setCameraOrientation,
73
+ };
74
+ }
75
+
22
76
  function getCameraOptions(camera) {
23
- if (!camera?.getFocalPoint) {
77
+ if (!camera || !camera.getFocalPoint) {
24
78
  return camera;
25
79
  }
26
80
  return {
@@ -34,7 +88,7 @@ function getCameraOptions(camera) {
34
88
  }
35
89
 
36
90
  function applyCameraOptions(camera, options) {
37
- if (camera?.set && options) {
91
+ if (camera && camera.set && options) {
38
92
  camera.set({
39
93
  focalPoint: options.focal_point,
40
94
  viewUp: options.view_up,
@@ -59,9 +113,13 @@ function centerCameraOnPosition(camera, pickedPosition) {
59
113
  );
60
114
  }
61
115
 
62
- function performSetCamera(targetCameraOptions, options) {
63
- const { genericRenderWindow, is_moving, imageStyle, syncRemoteCamera } = options;
64
- const camera = genericRenderWindow.getRenderer().getActiveCamera();
116
+ function performSetCamera(targetCameraOptions) {
117
+ const hybridViewerStore = useHybridViewerStore();
118
+ const { genericRenderWindow, syncRemoteCamera } = hybridViewerStore;
119
+ const { is_moving } = storeToRefs(hybridViewerStore);
120
+ const imageStyle = getImageStyle();
121
+ const renderer = genericRenderWindow.value.getRenderer();
122
+ const camera = renderer.getActiveCamera();
65
123
  const startState = getCameraOptions(camera);
66
124
  const duration = computeAnimationDuration(startState, targetCameraOptions);
67
125
  is_moving.value = true;
@@ -75,20 +133,27 @@ function performSetCamera(targetCameraOptions, options) {
75
133
  duration,
76
134
  bumpMultiplier: 0,
77
135
  easeExponent: EASE_EXPONENT,
78
- onUpdate: () => genericRenderWindow.getRenderWindow().render(),
136
+ onUpdate: () => {
137
+ const renderWindow = genericRenderWindow.value.getRenderWindow();
138
+ renderWindow.render();
139
+ },
79
140
  onEnd: () => {
80
141
  applyCameraOptions(camera, targetCameraOptions);
81
- genericRenderWindow.getRenderWindow().render();
142
+ const renderWindow = genericRenderWindow.value.getRenderWindow();
143
+ renderWindow.render();
82
144
  is_moving.value = false;
83
145
  syncRemoteCamera();
84
146
  },
85
147
  });
86
148
  }
87
149
 
88
- function performCameraOrientation(orientation, options) {
89
- const { genericRenderWindow, is_moving, imageStyle, syncRemoteCamera } = options;
150
+ function performCameraOrientation(orientation) {
151
+ const hybridViewerStore = useHybridViewerStore();
152
+ const { genericRenderWindow, syncRemoteCamera } = hybridViewerStore;
153
+ const { is_moving } = storeToRefs(hybridViewerStore);
154
+ const imageStyle = getImageStyle();
90
155
  const config = ORIENTATIONS[orientation.toLowerCase()];
91
- const renderer = genericRenderWindow.getRenderer();
156
+ const renderer = genericRenderWindow.value.getRenderer();
92
157
  const camera = renderer.getActiveCamera();
93
158
  const startState = getCameraOptions(camera);
94
159
 
@@ -105,7 +170,9 @@ function performCameraOrientation(orientation, options) {
105
170
  const duration =
106
171
  alignment > ALIGNMENT_THRESHOLD ? LONG_ANIMATION_DURATION : SHORT_ANIMATION_DURATION;
107
172
  is_moving.value = true;
108
- imageStyle.opacity = 0;
173
+ if (imageStyle) {
174
+ imageStyle.opacity = 0;
175
+ }
109
176
 
110
177
  animateCamera({
111
178
  camera,
@@ -114,7 +181,10 @@ function performCameraOrientation(orientation, options) {
114
181
  duration,
115
182
  bumpMultiplier: BUMP_MULTIPLIER,
116
183
  easeExponent: EASE_EXPONENT,
117
- onUpdate: () => genericRenderWindow.getRenderWindow().render(),
184
+ onUpdate: () => {
185
+ const renderWindow = genericRenderWindow.value.getRenderWindow();
186
+ renderWindow.render();
187
+ },
118
188
  onEnd: () => {
119
189
  is_moving.value = false;
120
190
  syncRemoteCamera();
@@ -122,22 +192,14 @@ function performCameraOrientation(orientation, options) {
122
192
  });
123
193
  }
124
194
 
125
- async function performFocusCameraOnObject(id, options) {
126
- const {
127
- hybridDb,
128
- viewerStore,
129
- viewer_schemas,
130
- genericRenderWindow,
131
- block_ids = [],
132
- is_moving,
133
- imageStyle,
134
- syncRemoteCamera,
135
- } = options;
195
+ async function performFocusCameraOnObject(id, block_ids = []) {
196
+ const { genericRenderWindow, hybridDb } = useHybridViewerStore();
136
197
 
137
198
  if (!hybridDb[id]) {
138
199
  return;
139
200
  }
140
201
 
202
+ const viewerStore = useViewerStore();
141
203
  let bounds = [];
142
204
  if (block_ids.length > 0) {
143
205
  const schema = viewer_schemas.opengeodeweb_viewer.model.get_blocks_bounds;
@@ -147,25 +209,21 @@ async function performFocusCameraOnObject(id, options) {
147
209
  bounds = hybridDb[id].actor.getBounds();
148
210
  }
149
211
 
150
- const renderer = genericRenderWindow.getRenderer();
212
+ const renderer = genericRenderWindow.value.getRenderer();
151
213
  const camera = renderer.getActiveCamera();
152
214
  const startOptions = getCameraOptions(camera);
153
215
  renderer.resetCamera(bounds);
154
216
  const targetOptions = getCameraOptions(camera);
155
217
  applyCameraOptions(camera, startOptions);
156
218
 
157
- performSetCamera(targetOptions, {
158
- genericRenderWindow,
159
- is_moving,
160
- imageStyle,
161
- syncRemoteCamera,
162
- });
219
+ performSetCamera(targetOptions);
163
220
  }
164
221
 
165
- function performSyncRemoteCamera(options) {
166
- const { genericRenderWindow, viewerStore, viewer_schemas, remoteRender, camera_options } =
167
- options;
168
- const camera = genericRenderWindow.getRenderer().getActiveCamera();
222
+ function performSyncRemoteCamera() {
223
+ const { genericRenderWindow, camera_options, remoteRender } = useHybridViewerStore();
224
+ const viewerStore = useViewerStore();
225
+ const renderer = genericRenderWindow.value.getRenderer();
226
+ const camera = renderer.getActiveCamera();
169
227
  const options_camera = getCameraOptions(camera);
170
228
  const schema = viewer_schemas.opengeodeweb_viewer.viewer.update_camera;
171
229
  const params = { camera_options: options_camera };
@@ -177,39 +235,30 @@ function performSyncRemoteCamera(options) {
177
235
  {
178
236
  response_function: () => {
179
237
  remoteRender();
180
- Object.assign(camera_options, options_camera);
238
+ if (camera_options) {
239
+ Object.assign(camera_options, options_camera);
240
+ }
181
241
  },
182
242
  },
183
243
  );
184
244
  }
185
245
 
186
- async function applySnapshot(snapshot, options) {
187
- const { genericRenderWindow, setZScaling, syncRemoteCamera, setCamera } = options;
246
+ async function applySnapshot(snapshot) {
188
247
  if (!snapshot) {
189
248
  return;
190
249
  }
191
- const z_scale = snapshot.zScale;
192
- if (typeof z_scale === "number") {
193
- await setZScaling(z_scale);
194
- }
195
- const { camera_options: snapshot_camera_options } = snapshot;
196
- if (snapshot_camera_options) {
197
- if (setCamera) {
198
- setCamera(snapshot_camera_options);
199
- } else {
200
- applyCameraOptions(
201
- genericRenderWindow.getRenderer().getActiveCamera(),
202
- snapshot_camera_options,
203
- );
204
- genericRenderWindow.getRenderWindow().render();
205
- syncRemoteCamera();
206
- }
250
+ const { setZScaling, setCamera } = useHybridViewerStore();
251
+ if (typeof snapshot.zScale === "number") {
252
+ await setZScaling(snapshot.zScale);
253
+ }
254
+ if (snapshot.camera_options) {
255
+ setCamera(snapshot.camera_options);
207
256
  }
208
257
  }
209
258
 
210
259
  export {
211
- BUMP_MULTIPLIER,
212
260
  ALIGNMENT_THRESHOLD,
261
+ BUMP_MULTIPLIER,
213
262
  EASE_EXPONENT,
214
263
  ORIENTATIONS,
215
264
  applyCameraOptions,
@@ -220,4 +269,5 @@ export {
220
269
  performFocusCameraOnObject,
221
270
  performSetCamera,
222
271
  performSyncRemoteCamera,
272
+ useHybridViewerCamera,
223
273
  };