@geode/opengeodeweb-front 10.31.0 → 10.32.0-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.
- package/app/components/CameraOrientation.vue +1 -1
- package/app/components/HybridRenderingView.vue +8 -0
- package/app/components/Ruler.vue +144 -0
- package/app/components/ViewToolbar.vue +12 -0
- package/app/components/Viewer/Ui.vue +27 -1
- package/app/stores/hybrid_viewer.js +52 -262
- package/internal/stores/{hybrid_viewer_brightness.js → hybrid_viewer/brightness.js} +29 -5
- package/internal/stores/{hybrid_viewer_camera.js → hybrid_viewer/camera.js} +105 -55
- package/internal/stores/hybrid_viewer/filters.js +38 -0
- package/internal/stores/hybrid_viewer/highlight.js +162 -0
- package/internal/stores/hybrid_viewer/ruler.js +121 -0
- package/internal/stores/hybrid_viewer/scene.js +141 -0
- package/internal/stores/hybrid_viewer/viewport.js +148 -0
- package/package.json +3 -3
- package/internal/stores/hybrid_viewer.js +0 -300
- package/internal/stores/hybrid_viewer_highlight.js +0 -114
- /package/internal/stores/{hybrid_viewer_camera_animation.js → hybrid_viewer/camera_animation.js} +0 -0
- /package/internal/stores/{hybrid_viewer_constants.js → hybrid_viewer/constants.js} +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ACTOR_COLOR } from "./constants";
|
|
2
|
+
import { useDataStore } from "@ogw_front/stores/data";
|
|
3
|
+
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
4
|
+
import { useViewerStore } from "@ogw_front/stores/viewer";
|
|
5
|
+
import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
|
|
6
|
+
import { newInstance as vtkActor } from "@kitware/vtk.js/Rendering/Core/Actor";
|
|
7
|
+
import { newInstance as vtkMapper } from "@kitware/vtk.js/Rendering/Core/Mapper";
|
|
8
|
+
import { newInstance as vtkXMLPolyDataReader } from "@kitware/vtk.js/IO/XML/XMLPolyDataReader";
|
|
9
|
+
|
|
10
|
+
function useHybridViewerScene() {
|
|
11
|
+
const hybridDb = reactive({});
|
|
12
|
+
const zScale = ref(1);
|
|
13
|
+
|
|
14
|
+
async function addItem(id) {
|
|
15
|
+
await performAddItem(id);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function removeItem(id) {
|
|
19
|
+
performRemoveItem(id);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function setVisibility(id, visibility) {
|
|
23
|
+
performSetVisibility(id, visibility);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async function setZScaling(z_scale) {
|
|
27
|
+
await performSetZScaling(z_scale);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function clear() {
|
|
31
|
+
performClear();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
hybridDb,
|
|
36
|
+
zScale,
|
|
37
|
+
addItem,
|
|
38
|
+
removeItem,
|
|
39
|
+
setVisibility,
|
|
40
|
+
setZScaling,
|
|
41
|
+
clear,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function performAddItem(id) {
|
|
46
|
+
const { genericRenderWindow, hybridDb } = useHybridViewerStore();
|
|
47
|
+
if (!genericRenderWindow.value) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const dataStore = useDataStore();
|
|
51
|
+
const value = await dataStore.item(id);
|
|
52
|
+
if (value && !dataStore.isItemViewable(value)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const reader = vtkXMLPolyDataReader();
|
|
57
|
+
await reader.parseAsArrayBuffer(new TextEncoder().encode(value.binary_light_viewable));
|
|
58
|
+
const actor = vtkActor();
|
|
59
|
+
const mapper = vtkMapper();
|
|
60
|
+
const polydata = reader.getOutputData(0);
|
|
61
|
+
mapper.setInputData(polydata);
|
|
62
|
+
const property = actor.getProperty();
|
|
63
|
+
property.setColor(ACTOR_COLOR);
|
|
64
|
+
actor.setMapper(mapper);
|
|
65
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
66
|
+
if (hybridDb[id] && hybridDb[id].actor) {
|
|
67
|
+
renderer.removeActor(hybridDb[id].actor);
|
|
68
|
+
}
|
|
69
|
+
const actors = renderer.getActors();
|
|
70
|
+
const isFirst = actors.length === 0;
|
|
71
|
+
renderer.addActor(actor);
|
|
72
|
+
if (isFirst) {
|
|
73
|
+
renderer.resetCamera();
|
|
74
|
+
}
|
|
75
|
+
hybridDb[id] = { actor, polydata, mapper };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function performRemoveItem(id) {
|
|
79
|
+
const { genericRenderWindow, hybridDb } = useHybridViewerStore();
|
|
80
|
+
if (!hybridDb[id]) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
84
|
+
renderer.removeActor(hybridDb[id].actor);
|
|
85
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
86
|
+
renderWindow.render();
|
|
87
|
+
delete hybridDb[id];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function performSetVisibility(id, visibility) {
|
|
91
|
+
const { genericRenderWindow, hybridDb } = useHybridViewerStore();
|
|
92
|
+
if (!hybridDb[id]) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
hybridDb[id].actor.setVisibility(visibility);
|
|
96
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
97
|
+
renderWindow.render();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async function performSetZScaling(z_scale) {
|
|
101
|
+
const hybridViewerStore = useHybridViewerStore();
|
|
102
|
+
const { genericRenderWindow, remoteRender } = hybridViewerStore;
|
|
103
|
+
const { zScale } = storeToRefs(hybridViewerStore);
|
|
104
|
+
zScale.value = z_scale;
|
|
105
|
+
|
|
106
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
107
|
+
for (const actor of renderer.getActors()) {
|
|
108
|
+
const scale = actor.getScale();
|
|
109
|
+
actor.setScale(scale[0], scale[1], z_scale);
|
|
110
|
+
}
|
|
111
|
+
renderer.resetCamera();
|
|
112
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
113
|
+
renderWindow.render();
|
|
114
|
+
const viewerStore = useViewerStore();
|
|
115
|
+
const schema = viewer_schemas.opengeodeweb_viewer.viewer.set_z_scaling;
|
|
116
|
+
const params = { z_scale };
|
|
117
|
+
await viewerStore.request({ schema, params });
|
|
118
|
+
await remoteRender();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function performClear() {
|
|
122
|
+
const { genericRenderWindow, hybridDb } = useHybridViewerStore();
|
|
123
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
124
|
+
for (const actor of renderer.getActors()) {
|
|
125
|
+
renderer.removeActor(actor);
|
|
126
|
+
}
|
|
127
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
128
|
+
renderWindow.render();
|
|
129
|
+
for (const id of Object.keys(hybridDb)) {
|
|
130
|
+
delete hybridDb[id];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export {
|
|
135
|
+
performAddItem,
|
|
136
|
+
performClear,
|
|
137
|
+
performRemoveItem,
|
|
138
|
+
performSetVisibility,
|
|
139
|
+
performSetZScaling,
|
|
140
|
+
useHybridViewerScene,
|
|
141
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Status } from "@ogw_front/utils/status";
|
|
2
|
+
import { WHEEL_TIME_OUT_MS } from "./constants";
|
|
3
|
+
import { centerCameraOnPosition } from "./camera";
|
|
4
|
+
import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer";
|
|
5
|
+
import { useViewerStore } from "@ogw_front/stores/viewer";
|
|
6
|
+
import viewer_schemas from "@geode/opengeodeweb-viewer/opengeodeweb_viewer_schemas.json";
|
|
7
|
+
|
|
8
|
+
function useHybridViewerViewport() {
|
|
9
|
+
const viewStream = ref(undefined);
|
|
10
|
+
|
|
11
|
+
function setContainer(container) {
|
|
12
|
+
performSetContainer(container);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function resize(width, height) {
|
|
16
|
+
await performResize(width, height);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
setContainer,
|
|
21
|
+
resize,
|
|
22
|
+
viewStream,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function performClickPicking(event, containerElement) {
|
|
27
|
+
const { genericRenderWindow, syncRemoteCamera } = useHybridViewerStore();
|
|
28
|
+
const viewerStore = useViewerStore();
|
|
29
|
+
const rect = containerElement.getBoundingClientRect();
|
|
30
|
+
const schema = viewer_schemas.opengeodeweb_viewer.viewer.get_point_position;
|
|
31
|
+
const params = {
|
|
32
|
+
x: Math.round(event.clientX - rect.left),
|
|
33
|
+
y: Math.round(rect.height - (event.clientY - rect.top)),
|
|
34
|
+
};
|
|
35
|
+
viewerStore.request(
|
|
36
|
+
{
|
|
37
|
+
schema,
|
|
38
|
+
params,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
response_function: ({ x, y, z }) => {
|
|
42
|
+
const pickedPos = [x, y, z];
|
|
43
|
+
if (pickedPos.some((val) => val !== 0)) {
|
|
44
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
45
|
+
const camera = renderer.getActiveCamera();
|
|
46
|
+
centerCameraOnPosition(camera, pickedPos);
|
|
47
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
48
|
+
renderWindow.render();
|
|
49
|
+
syncRemoteCamera();
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function performSetContainer(container) {
|
|
57
|
+
if (!container || !container.value) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const hybridViewerStore = useHybridViewerStore();
|
|
62
|
+
const { genericRenderWindow, syncRemoteCamera, hoverHighlight } = hybridViewerStore;
|
|
63
|
+
const { is_picking, is_moving } = storeToRefs(hybridViewerStore);
|
|
64
|
+
|
|
65
|
+
genericRenderWindow.value.setContainer(container.value.$el);
|
|
66
|
+
const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
|
|
67
|
+
webGLRenderWindow.setUseBackgroundImage(true);
|
|
68
|
+
const imageStyle = webGLRenderWindow.getReferenceByName("bgImage").style;
|
|
69
|
+
Object.assign(imageStyle, { transition: "opacity 0.1s ease-in", zIndex: 1 });
|
|
70
|
+
|
|
71
|
+
performResize(container.value.$el.offsetWidth, container.value.$el.offsetHeight);
|
|
72
|
+
|
|
73
|
+
let has_dragged = false;
|
|
74
|
+
useMousePressed({
|
|
75
|
+
target: container,
|
|
76
|
+
onPressed: (event) => {
|
|
77
|
+
if (event.button !== 0 && event.button !== 1) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (event.button === 0 && is_picking.value) {
|
|
81
|
+
performClickPicking(event, container.value.$el);
|
|
82
|
+
is_picking.value = false;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
is_moving.value = true;
|
|
86
|
+
has_dragged = false;
|
|
87
|
+
event.stopPropagation();
|
|
88
|
+
},
|
|
89
|
+
onReleased: () => {
|
|
90
|
+
is_moving.value = false;
|
|
91
|
+
if (has_dragged) {
|
|
92
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
93
|
+
renderer.resetCameraClippingRange();
|
|
94
|
+
syncRemoteCamera();
|
|
95
|
+
}
|
|
96
|
+
has_dragged = false;
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
useEventListener(container, "mousemove", (event) => {
|
|
101
|
+
if (is_moving.value) {
|
|
102
|
+
has_dragged = true;
|
|
103
|
+
if (imageStyle) {
|
|
104
|
+
imageStyle.opacity = 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
hoverHighlight(event);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
let wheelEventEndTimeout = undefined;
|
|
111
|
+
useEventListener(container, "wheel", () => {
|
|
112
|
+
is_moving.value = true;
|
|
113
|
+
if (imageStyle) {
|
|
114
|
+
imageStyle.opacity = 0;
|
|
115
|
+
}
|
|
116
|
+
clearTimeout(wheelEventEndTimeout);
|
|
117
|
+
wheelEventEndTimeout = setTimeout(() => {
|
|
118
|
+
is_moving.value = false;
|
|
119
|
+
const renderer = genericRenderWindow.value.getRenderer();
|
|
120
|
+
renderer.resetCameraClippingRange();
|
|
121
|
+
syncRemoteCamera();
|
|
122
|
+
}, WHEEL_TIME_OUT_MS);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
async function performResize(width, height) {
|
|
127
|
+
const hybridViewerStore = useHybridViewerStore();
|
|
128
|
+
const { genericRenderWindow, remoteRender } = hybridViewerStore;
|
|
129
|
+
const { status, viewStream } = storeToRefs(hybridViewerStore);
|
|
130
|
+
const viewerStore = useViewerStore();
|
|
131
|
+
if (viewerStore.status !== Status.CONNECTED || status.value !== Status.CREATED) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const webGLRenderWindow = genericRenderWindow.value.getApiSpecificRenderWindow();
|
|
135
|
+
const canvas = webGLRenderWindow.getCanvas();
|
|
136
|
+
canvas.width = width;
|
|
137
|
+
canvas.height = height;
|
|
138
|
+
await nextTick();
|
|
139
|
+
webGLRenderWindow.setSize(width, height);
|
|
140
|
+
if (viewStream.value) {
|
|
141
|
+
viewStream.value.setSize(width, height);
|
|
142
|
+
}
|
|
143
|
+
const renderWindow = genericRenderWindow.value.getRenderWindow();
|
|
144
|
+
renderWindow.render();
|
|
145
|
+
await remoteRender();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export { performClickPicking, performResize, performSetContainer, useHybridViewerViewport };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geode/opengeodeweb-front",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.32.0-rc.1",
|
|
4
4
|
"description": "OpenSource Vue/Nuxt/Pinia/Vuetify framework for web applications",
|
|
5
5
|
"homepage": "https://github.com/Geode-solutions/OpenGeodeWeb-Front",
|
|
6
6
|
"bugs": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"build": ""
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@geode/opengeodeweb-back": "
|
|
43
|
-
"@geode/opengeodeweb-viewer": "
|
|
42
|
+
"@geode/opengeodeweb-back": "next",
|
|
43
|
+
"@geode/opengeodeweb-viewer": "next",
|
|
44
44
|
"@google-cloud/run": "3.2.0",
|
|
45
45
|
"@kitware/vtk.js": "33.3.0",
|
|
46
46
|
"@mdi/font": "7.4.47",
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { centerCameraOnPosition } from "./hybrid_viewer_camera";
|
|
2
|
-
|
|
3
|
-
function performClickPicking(event, options) {
|
|
4
|
-
const { container, viewerStore, viewer_schemas, genericRenderWindow, syncRemoteCamera } = options;
|
|
5
|
-
const rect = container.getBoundingClientRect();
|
|
6
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.get_point_position;
|
|
7
|
-
const params = {
|
|
8
|
-
x: Math.round(event.clientX - rect.left),
|
|
9
|
-
y: Math.round(rect.height - (event.clientY - rect.top)),
|
|
10
|
-
};
|
|
11
|
-
viewerStore.request(
|
|
12
|
-
{
|
|
13
|
-
schema,
|
|
14
|
-
params,
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
response_function: ({ x, y, z }) => {
|
|
18
|
-
const pickedPos = [x, y, z];
|
|
19
|
-
if (pickedPos.some((val) => val !== 0)) {
|
|
20
|
-
const camera = genericRenderWindow.getRenderer().getActiveCamera();
|
|
21
|
-
centerCameraOnPosition(camera, pickedPos);
|
|
22
|
-
genericRenderWindow.getRenderWindow().render();
|
|
23
|
-
syncRemoteCamera();
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function performHoverHighlight(event, options) {
|
|
31
|
-
const {
|
|
32
|
-
is_hover_highlight,
|
|
33
|
-
genericRenderWindow,
|
|
34
|
-
viewerStore,
|
|
35
|
-
viewer_schemas,
|
|
36
|
-
hover_highlight_field_type,
|
|
37
|
-
hybridDb,
|
|
38
|
-
onResponse,
|
|
39
|
-
} = options;
|
|
40
|
-
if (!is_hover_highlight.value) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const container = genericRenderWindow.getContainer();
|
|
44
|
-
if (!container) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const rect = container.getBoundingClientRect();
|
|
48
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.highlight;
|
|
49
|
-
const params = {
|
|
50
|
-
x: Math.round(event.clientX - rect.left),
|
|
51
|
-
y: Math.round(rect.height - (event.clientY - rect.top)),
|
|
52
|
-
field_type: hover_highlight_field_type.value,
|
|
53
|
-
ids: Object.keys(hybridDb),
|
|
54
|
-
};
|
|
55
|
-
viewerStore.request(
|
|
56
|
-
{
|
|
57
|
-
schema,
|
|
58
|
-
params,
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
response_function: onResponse,
|
|
62
|
-
},
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function performClearHoverHighlight(options) {
|
|
67
|
-
const { viewerStore, viewer_schemas, hover_highlight_field_type, hybridDb } = options;
|
|
68
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.highlight;
|
|
69
|
-
const params = {
|
|
70
|
-
x: -1,
|
|
71
|
-
y: -1,
|
|
72
|
-
field_type: hover_highlight_field_type.value,
|
|
73
|
-
ids: Object.keys(hybridDb),
|
|
74
|
-
};
|
|
75
|
-
viewerStore.request({ schema, params });
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async function performAddItem(id, options) {
|
|
79
|
-
const {
|
|
80
|
-
genericRenderWindow,
|
|
81
|
-
dataStore,
|
|
82
|
-
vtkXMLPolyDataReader,
|
|
83
|
-
vtkActor,
|
|
84
|
-
vtkMapper,
|
|
85
|
-
actorColor,
|
|
86
|
-
hybridDb,
|
|
87
|
-
} = options;
|
|
88
|
-
if (!genericRenderWindow) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const value = await dataStore.item(id);
|
|
92
|
-
if (value && !dataStore.isItemViewable(value)) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const reader = vtkXMLPolyDataReader();
|
|
96
|
-
await reader.parseAsArrayBuffer(new TextEncoder().encode(value.binary_light_viewable));
|
|
97
|
-
const actor = vtkActor();
|
|
98
|
-
const mapper = vtkMapper();
|
|
99
|
-
const polydata = reader.getOutputData(0);
|
|
100
|
-
mapper.setInputData(polydata);
|
|
101
|
-
actor.getProperty().setColor(actorColor);
|
|
102
|
-
actor.setMapper(mapper);
|
|
103
|
-
const renderer = genericRenderWindow.getRenderer();
|
|
104
|
-
if (hybridDb[id] && hybridDb[id].actor) {
|
|
105
|
-
renderer.removeActor(hybridDb[id].actor);
|
|
106
|
-
}
|
|
107
|
-
const isFirst = renderer.getActors().length === 0;
|
|
108
|
-
renderer.addActor(actor);
|
|
109
|
-
if (isFirst) {
|
|
110
|
-
renderer.resetCamera();
|
|
111
|
-
}
|
|
112
|
-
hybridDb[id] = { actor, polydata, mapper };
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
async function performSetZScaling(z_scale, options) {
|
|
116
|
-
const { zScale, genericRenderWindow, gridActor, viewerStore, viewer_schemas, remoteRender } =
|
|
117
|
-
options;
|
|
118
|
-
zScale.value = z_scale;
|
|
119
|
-
const renderer = genericRenderWindow.getRenderer();
|
|
120
|
-
for (const actor of renderer.getActors()) {
|
|
121
|
-
if (actor !== gridActor) {
|
|
122
|
-
const scale = actor.getScale();
|
|
123
|
-
actor.setScale(scale[0], scale[1], z_scale);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
renderer.resetCamera();
|
|
127
|
-
genericRenderWindow.getRenderWindow().render();
|
|
128
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.set_z_scaling;
|
|
129
|
-
const params = { z_scale };
|
|
130
|
-
await viewerStore.request({ schema, params });
|
|
131
|
-
remoteRender();
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function performSetContainer(options) {
|
|
135
|
-
const {
|
|
136
|
-
container,
|
|
137
|
-
genericRenderWindow,
|
|
138
|
-
imageStyleSetter,
|
|
139
|
-
resize,
|
|
140
|
-
useMousePressed,
|
|
141
|
-
useEventListener,
|
|
142
|
-
is_picking,
|
|
143
|
-
is_moving,
|
|
144
|
-
clickPickingCallback,
|
|
145
|
-
viewerStore,
|
|
146
|
-
viewer_schemas,
|
|
147
|
-
syncRemoteCamera,
|
|
148
|
-
hoverHighlight,
|
|
149
|
-
wheelTimeoutMs,
|
|
150
|
-
wheelEventEndTimeout,
|
|
151
|
-
wheelTimeoutSetter,
|
|
152
|
-
} = options;
|
|
153
|
-
|
|
154
|
-
if (!container.value) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
genericRenderWindow.setContainer(container.value.$el);
|
|
159
|
-
const webGLRenderWindow = genericRenderWindow.getApiSpecificRenderWindow();
|
|
160
|
-
webGLRenderWindow.setUseBackgroundImage(true);
|
|
161
|
-
const imageStyle = webGLRenderWindow.getReferenceByName("bgImage").style;
|
|
162
|
-
Object.assign(imageStyle, { transition: "opacity 0.1s ease-in", zIndex: 1 });
|
|
163
|
-
imageStyleSetter(imageStyle);
|
|
164
|
-
|
|
165
|
-
resize(container.value.$el.offsetWidth, container.value.$el.offsetHeight);
|
|
166
|
-
|
|
167
|
-
let has_dragged = false;
|
|
168
|
-
useMousePressed({
|
|
169
|
-
target: container,
|
|
170
|
-
onPressed: (event) => {
|
|
171
|
-
if (event.button !== 0 && event.button !== 1) {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
if (event.button === 0 && is_picking.value) {
|
|
175
|
-
clickPickingCallback(event, {
|
|
176
|
-
container: container.value.$el,
|
|
177
|
-
viewerStore,
|
|
178
|
-
viewer_schemas,
|
|
179
|
-
genericRenderWindow,
|
|
180
|
-
syncRemoteCamera,
|
|
181
|
-
});
|
|
182
|
-
is_picking.value = false;
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
is_moving.value = true;
|
|
186
|
-
has_dragged = false;
|
|
187
|
-
event.stopPropagation();
|
|
188
|
-
},
|
|
189
|
-
onReleased: () => {
|
|
190
|
-
is_moving.value = false;
|
|
191
|
-
if (has_dragged) {
|
|
192
|
-
genericRenderWindow.getRenderer().resetCameraClippingRange();
|
|
193
|
-
syncRemoteCamera();
|
|
194
|
-
}
|
|
195
|
-
has_dragged = false;
|
|
196
|
-
},
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
useEventListener(container, "mousemove", (event) => {
|
|
200
|
-
if (is_moving.value) {
|
|
201
|
-
has_dragged = true;
|
|
202
|
-
if (imageStyle) {
|
|
203
|
-
imageStyle.opacity = 0;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
hoverHighlight(event);
|
|
207
|
-
});
|
|
208
|
-
useEventListener(container, "wheel", () => {
|
|
209
|
-
is_moving.value = true;
|
|
210
|
-
if (imageStyle) {
|
|
211
|
-
imageStyle.opacity = 0;
|
|
212
|
-
}
|
|
213
|
-
clearTimeout(wheelEventEndTimeout);
|
|
214
|
-
wheelTimeoutSetter(
|
|
215
|
-
setTimeout(() => {
|
|
216
|
-
is_moving.value = false;
|
|
217
|
-
genericRenderWindow.getRenderer().resetCameraClippingRange();
|
|
218
|
-
syncRemoteCamera();
|
|
219
|
-
}, wheelTimeoutMs),
|
|
220
|
-
);
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
function performRemoveItem(id, options) {
|
|
225
|
-
const { genericRenderWindow, hybridDb } = options;
|
|
226
|
-
if (!hybridDb[id]) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
genericRenderWindow.getRenderer().removeActor(hybridDb[id].actor);
|
|
230
|
-
genericRenderWindow.getRenderWindow().render();
|
|
231
|
-
delete hybridDb[id];
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
function performSetVisibility(id, visibility, options) {
|
|
235
|
-
const { genericRenderWindow, hybridDb } = options;
|
|
236
|
-
if (!hybridDb[id]) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
hybridDb[id].actor.setVisibility(visibility);
|
|
240
|
-
genericRenderWindow.getRenderWindow().render();
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function performClear(options) {
|
|
244
|
-
const { genericRenderWindow, hybridDb } = options;
|
|
245
|
-
const renderer = genericRenderWindow.getRenderer();
|
|
246
|
-
for (const actor of renderer.getActors()) {
|
|
247
|
-
renderer.removeActor(actor);
|
|
248
|
-
}
|
|
249
|
-
genericRenderWindow.getRenderWindow().render();
|
|
250
|
-
for (const id of Object.keys(hybridDb)) {
|
|
251
|
-
delete hybridDb[id];
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
async function performSetClippingPlanes(ids, planes, options) {
|
|
256
|
-
const { viewerStore, viewer_schemas, remoteRender } = options;
|
|
257
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.clipping_planes;
|
|
258
|
-
const params = { ids, planes };
|
|
259
|
-
await viewerStore.request({ schema, params });
|
|
260
|
-
await remoteRender();
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
async function performSetShrink(ids, shrink_factor, options) {
|
|
264
|
-
const { viewerStore, viewer_schemas, remoteRender } = options;
|
|
265
|
-
const schema = viewer_schemas.opengeodeweb_viewer.viewer.shrink;
|
|
266
|
-
const params = { ids, shrink_factor };
|
|
267
|
-
await viewerStore.request({ schema, params });
|
|
268
|
-
await remoteRender();
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
async function performResize(width, height, options) {
|
|
272
|
-
const { viewerStore, status, Status, genericRenderWindow, viewStream, remoteRender } = options;
|
|
273
|
-
if (viewerStore.status !== Status.CONNECTED || status.value !== Status.CREATED) {
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
const webGLRenderWindow = genericRenderWindow.getApiSpecificRenderWindow();
|
|
277
|
-
const canvas = webGLRenderWindow.getCanvas();
|
|
278
|
-
canvas.width = width;
|
|
279
|
-
canvas.height = height;
|
|
280
|
-
await nextTick();
|
|
281
|
-
webGLRenderWindow.setSize(width, height);
|
|
282
|
-
viewStream.setSize(width, height);
|
|
283
|
-
genericRenderWindow.getRenderWindow().render();
|
|
284
|
-
remoteRender();
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
export {
|
|
288
|
-
performAddItem,
|
|
289
|
-
performClear,
|
|
290
|
-
performClearHoverHighlight,
|
|
291
|
-
performClickPicking,
|
|
292
|
-
performHoverHighlight,
|
|
293
|
-
performRemoveItem,
|
|
294
|
-
performResize,
|
|
295
|
-
performSetClippingPlanes,
|
|
296
|
-
performSetContainer,
|
|
297
|
-
performSetShrink,
|
|
298
|
-
performSetVisibility,
|
|
299
|
-
performSetZScaling,
|
|
300
|
-
};
|