@geode/opengeodeweb-front 10.20.1-rc.1 → 10.20.1-rc.2
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/CameraManager/List.vue +18 -14
- package/app/components/CameraManager/Saver.vue +5 -3
- package/app/components/CameraManager.vue +18 -3
- package/app/components/CameraOrientation.vue +11 -9
- package/app/components/Screenshot.vue +52 -15
- package/app/components/ToolPanel.vue +15 -3
- package/app/components/ViewToolbar.vue +1 -1
- package/app/components/ZScaling.vue +20 -9
- package/package.json +1 -1
|
@@ -39,11 +39,11 @@ async function saveRename() {
|
|
|
39
39
|
</script>
|
|
40
40
|
|
|
41
41
|
<template>
|
|
42
|
-
<v-list v-if="savedPositions.length > 0" class="bg-transparent pa-
|
|
42
|
+
<v-list v-if="savedPositions.length > 0" class="bg-transparent pa-1">
|
|
43
43
|
<v-list-item
|
|
44
44
|
v-for="position in savedPositions"
|
|
45
45
|
:key="position.id"
|
|
46
|
-
class="rounded-lg mb-1"
|
|
46
|
+
class="rounded-lg mb-1 px-2"
|
|
47
47
|
:active="editingId === position.id"
|
|
48
48
|
active-color="primary"
|
|
49
49
|
>
|
|
@@ -52,16 +52,16 @@ async function saveRename() {
|
|
|
52
52
|
icon
|
|
53
53
|
variant="tonal"
|
|
54
54
|
color="success"
|
|
55
|
-
size="small"
|
|
56
|
-
class="mr-
|
|
55
|
+
size="x-small"
|
|
56
|
+
class="mr-1"
|
|
57
57
|
@click="restorePosition(position.id)"
|
|
58
58
|
>
|
|
59
|
-
<v-icon size="
|
|
59
|
+
<v-icon size="14">mdi-play</v-icon>
|
|
60
60
|
<v-tooltip activator="parent" location="top">Restore</v-tooltip>
|
|
61
61
|
</v-btn>
|
|
62
62
|
</template>
|
|
63
63
|
|
|
64
|
-
<v-list-item-title class="font-weight-
|
|
64
|
+
<v-list-item-title class="font-weight-semibold text-caption">
|
|
65
65
|
<v-text-field
|
|
66
66
|
v-if="editingId === position.id"
|
|
67
67
|
v-model="editingName"
|
|
@@ -69,6 +69,7 @@ async function saveRename() {
|
|
|
69
69
|
variant="underlined"
|
|
70
70
|
hide-details
|
|
71
71
|
autofocus
|
|
72
|
+
class="text-caption"
|
|
72
73
|
@keyup.enter="saveRename"
|
|
73
74
|
@blur="saveRename"
|
|
74
75
|
></v-text-field>
|
|
@@ -76,39 +77,42 @@ async function saveRename() {
|
|
|
76
77
|
</v-list-item-title>
|
|
77
78
|
|
|
78
79
|
<template #append>
|
|
79
|
-
<div class="d-flex
|
|
80
|
+
<div class="d-flex ga-1">
|
|
80
81
|
<v-btn
|
|
81
82
|
icon
|
|
82
83
|
variant="text"
|
|
83
|
-
size="small"
|
|
84
|
+
size="x-small"
|
|
84
85
|
color="grey-darken-1"
|
|
85
86
|
@click="startEditing(position)"
|
|
86
87
|
>
|
|
87
|
-
<v-icon size="
|
|
88
|
+
<v-icon size="14">mdi-pencil</v-icon>
|
|
88
89
|
<v-tooltip activator="parent" location="top">Rename</v-tooltip>
|
|
89
90
|
</v-btn>
|
|
90
91
|
<v-btn
|
|
91
92
|
icon
|
|
92
93
|
variant="text"
|
|
93
|
-
size="small"
|
|
94
|
+
size="x-small"
|
|
94
95
|
color="error"
|
|
95
96
|
@click="deletePosition(position.id)"
|
|
96
97
|
>
|
|
97
|
-
<v-icon size="
|
|
98
|
+
<v-icon size="14">mdi-delete</v-icon>
|
|
98
99
|
<v-tooltip activator="parent" location="top">Delete</v-tooltip>
|
|
99
100
|
</v-btn>
|
|
100
101
|
</div>
|
|
101
102
|
</template>
|
|
102
103
|
</v-list-item>
|
|
103
104
|
</v-list>
|
|
104
|
-
<div v-else class="text-center text-grey-lighten-1 py-
|
|
105
|
-
<v-icon size="
|
|
105
|
+
<div v-else class="text-center text-grey-lighten-1 py-4 italic text-caption">
|
|
106
|
+
<v-icon size="32" class="mb-1 d-block mx-auto opacity-20">mdi-camera-off</v-icon>
|
|
106
107
|
No saved positions yet.
|
|
107
108
|
</div>
|
|
108
109
|
</template>
|
|
109
110
|
|
|
110
111
|
<style scoped>
|
|
111
112
|
:deep(.v-list-item__prepend) {
|
|
112
|
-
margin-inline-end:
|
|
113
|
+
margin-inline-end: 6px !important;
|
|
114
|
+
}
|
|
115
|
+
:deep(.v-list-item__append) {
|
|
116
|
+
margin-inline-start: 6px !important;
|
|
113
117
|
}
|
|
114
118
|
</style>
|
|
@@ -20,7 +20,7 @@ async function saveCurrentPosition() {
|
|
|
20
20
|
</script>
|
|
21
21
|
|
|
22
22
|
<template>
|
|
23
|
-
<v-container class="pa-
|
|
23
|
+
<v-container class="pa-3 pb-1 bg-surface-variant-lighten-5">
|
|
24
24
|
<v-row dense>
|
|
25
25
|
<v-col cols="12">
|
|
26
26
|
<v-text-field
|
|
@@ -30,7 +30,7 @@ async function saveCurrentPosition() {
|
|
|
30
30
|
density="compact"
|
|
31
31
|
variant="outlined"
|
|
32
32
|
hide-details
|
|
33
|
-
class="mb-
|
|
33
|
+
class="mb-2 text-caption"
|
|
34
34
|
></v-text-field>
|
|
35
35
|
</v-col>
|
|
36
36
|
<v-col cols="12" class="d-flex align-center">
|
|
@@ -38,9 +38,11 @@ async function saveCurrentPosition() {
|
|
|
38
38
|
color="primary"
|
|
39
39
|
variant="elevated"
|
|
40
40
|
block
|
|
41
|
+
size="small"
|
|
41
42
|
:disabled="!newPositionName"
|
|
42
43
|
@click="saveCurrentPosition"
|
|
43
|
-
height="
|
|
44
|
+
height="32"
|
|
45
|
+
class="text-caption font-weight-bold"
|
|
44
46
|
>
|
|
45
47
|
Save
|
|
46
48
|
</v-btn>
|
|
@@ -7,7 +7,7 @@ const emit = defineEmits(["close"]);
|
|
|
7
7
|
|
|
8
8
|
const { show_dialog, width } = defineProps({
|
|
9
9
|
show_dialog: { type: Boolean, required: true },
|
|
10
|
-
width: { type: Number, required: false, default:
|
|
10
|
+
width: { type: Number, required: false, default: 260 },
|
|
11
11
|
});
|
|
12
12
|
</script>
|
|
13
13
|
|
|
@@ -31,9 +31,24 @@ const { show_dialog, width } = defineProps({
|
|
|
31
31
|
|
|
32
32
|
<v-divider></v-divider>
|
|
33
33
|
|
|
34
|
-
<v-card-actions class="pa-
|
|
34
|
+
<v-card-actions class="pa-2">
|
|
35
35
|
<v-spacer></v-spacer>
|
|
36
|
-
<v-btn
|
|
36
|
+
<v-btn
|
|
37
|
+
variant="text"
|
|
38
|
+
size="small"
|
|
39
|
+
color="white"
|
|
40
|
+
class="text-caption text-none"
|
|
41
|
+
@click="emit('close')"
|
|
42
|
+
>Close</v-btn
|
|
43
|
+
>
|
|
37
44
|
</v-card-actions>
|
|
38
45
|
</GlassCard>
|
|
39
46
|
</template>
|
|
47
|
+
|
|
48
|
+
<style scoped>
|
|
49
|
+
:deep(.v-card-title) {
|
|
50
|
+
font-size: 0.95rem !important;
|
|
51
|
+
font-weight: bold !important;
|
|
52
|
+
padding: 10px 14px 6px 14px !important;
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
@@ -7,7 +7,7 @@ import { newInstance as vtkGenericRenderWindow } from "@kitware/vtk.js/Rendering
|
|
|
7
7
|
|
|
8
8
|
const { panel, width } = defineProps({
|
|
9
9
|
panel: { type: Boolean, default: false },
|
|
10
|
-
width: { type: Number, default:
|
|
10
|
+
width: { type: Number, default: 260 },
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
const show = defineModel("show", { type: Boolean, default: false });
|
|
@@ -36,7 +36,7 @@ const orientations = [
|
|
|
36
36
|
face: "front",
|
|
37
37
|
vtkKey: "YPlus",
|
|
38
38
|
rotation: 180,
|
|
39
|
-
position: { top: "35%", left: "
|
|
39
|
+
position: { top: "35%", left: "22%" },
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
label: "Y-",
|
|
@@ -44,7 +44,7 @@ const orientations = [
|
|
|
44
44
|
face: "back",
|
|
45
45
|
vtkKey: "YMinus",
|
|
46
46
|
rotation: 0,
|
|
47
|
-
position: { top: "65%", left: "
|
|
47
|
+
position: { top: "65%", left: "78%" },
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
label: "X+",
|
|
@@ -52,7 +52,7 @@ const orientations = [
|
|
|
52
52
|
face: "right",
|
|
53
53
|
vtkKey: "XPlus",
|
|
54
54
|
rotation: 90,
|
|
55
|
-
position: { top: "35%", left: "
|
|
55
|
+
position: { top: "35%", left: "78%" },
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
label: "X-",
|
|
@@ -60,7 +60,7 @@ const orientations = [
|
|
|
60
60
|
face: "left",
|
|
61
61
|
vtkKey: "XMinus",
|
|
62
62
|
rotation: -90,
|
|
63
|
-
position: { top: "65%", left: "
|
|
63
|
+
position: { top: "65%", left: "22%" },
|
|
64
64
|
},
|
|
65
65
|
];
|
|
66
66
|
|
|
@@ -177,7 +177,7 @@ watch(hoveredFace, (newFace, oldFace) => {
|
|
|
177
177
|
<div
|
|
178
178
|
class="pa-0 overflow-hidden position-relative"
|
|
179
179
|
style="
|
|
180
|
-
height:
|
|
180
|
+
height: 220px;
|
|
181
181
|
background: radial-gradient(circle at center, rgba(255, 255, 255, 0.05), transparent 70%);
|
|
182
182
|
"
|
|
183
183
|
>
|
|
@@ -200,7 +200,7 @@ watch(hoveredFace, (newFace, oldFace) => {
|
|
|
200
200
|
class="position-absolute d-flex align-center justify-center"
|
|
201
201
|
style="top: 50%; left: 50%; transform: translate(-50%, -50%)"
|
|
202
202
|
>
|
|
203
|
-
<div ref="cubeContainer" style="width:
|
|
203
|
+
<div ref="cubeContainer" style="width: 70px; height: 70px; pointer-events: none" />
|
|
204
204
|
</div>
|
|
205
205
|
|
|
206
206
|
<v-btn
|
|
@@ -208,7 +208,7 @@ watch(hoveredFace, (newFace, oldFace) => {
|
|
|
208
208
|
:key="orientation.value"
|
|
209
209
|
icon
|
|
210
210
|
variant="tonal"
|
|
211
|
-
size="
|
|
211
|
+
size="32"
|
|
212
212
|
class="satellite-node position-absolute"
|
|
213
213
|
:style="orientation.position"
|
|
214
214
|
@mouseenter="hoveredFace = orientation.face"
|
|
@@ -216,7 +216,9 @@ watch(hoveredFace, (newFace, oldFace) => {
|
|
|
216
216
|
@click.stop="emit('select', orientation.value)"
|
|
217
217
|
>
|
|
218
218
|
<v-tooltip activator="parent" location="top">{{ orientation.value }} View</v-tooltip>
|
|
219
|
-
<span class="text-caption font-weight-black"
|
|
219
|
+
<span class="text-caption font-weight-black" style="font-size: 0.7rem !important">{{
|
|
220
|
+
orientation.label
|
|
221
|
+
}}</span>
|
|
220
222
|
</v-btn>
|
|
221
223
|
</div>
|
|
222
224
|
</ToolPanel>
|
|
@@ -9,7 +9,7 @@ import { useViewerStore } from "@ogw_front/stores/viewer";
|
|
|
9
9
|
const show = defineModel({ type: Boolean, default: false });
|
|
10
10
|
|
|
11
11
|
const { width } = defineProps({
|
|
12
|
-
width: { type: Number, default:
|
|
12
|
+
width: { type: Number, default: 260 },
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
const output_extensions =
|
|
@@ -77,55 +77,92 @@ watch(screenshot_type, (value) => {
|
|
|
77
77
|
action-label="Screenshot"
|
|
78
78
|
@action="takeScreenshot"
|
|
79
79
|
>
|
|
80
|
-
<v-container class="pa-
|
|
81
|
-
<v-row justify="center">
|
|
80
|
+
<v-container class="pa-3 py-1">
|
|
81
|
+
<v-row justify="center" dense>
|
|
82
82
|
<v-col cols="12" class="py-0 d-flex justify-center">
|
|
83
83
|
<v-btn-toggle
|
|
84
84
|
v-model="screenshot_type"
|
|
85
85
|
mandatory
|
|
86
86
|
color="primary"
|
|
87
87
|
variant="outlined"
|
|
88
|
-
class="mb-
|
|
89
|
-
density="
|
|
88
|
+
class="mb-2"
|
|
89
|
+
density="compact"
|
|
90
90
|
>
|
|
91
|
-
<v-btn
|
|
92
|
-
|
|
91
|
+
<v-btn
|
|
92
|
+
value="file"
|
|
93
|
+
prepend-icon="mdi-file-download-outline"
|
|
94
|
+
size="small"
|
|
95
|
+
class="text-caption text-none"
|
|
96
|
+
>
|
|
97
|
+
File
|
|
98
|
+
</v-btn>
|
|
99
|
+
<v-btn
|
|
100
|
+
value="clipboard"
|
|
101
|
+
prepend-icon="mdi-content-copy"
|
|
102
|
+
size="small"
|
|
103
|
+
class="text-caption text-none"
|
|
104
|
+
>
|
|
105
|
+
Clipboard
|
|
106
|
+
</v-btn>
|
|
93
107
|
</v-btn-toggle>
|
|
94
108
|
</v-col>
|
|
95
109
|
</v-row>
|
|
96
110
|
|
|
97
|
-
<v-row v-if="screenshot_type === 'file'">
|
|
98
|
-
<v-col cols="
|
|
99
|
-
<v-text-field
|
|
111
|
+
<v-row dense v-if="screenshot_type === 'file'">
|
|
112
|
+
<v-col cols="12" class="py-1">
|
|
113
|
+
<v-text-field
|
|
114
|
+
v-model="filename"
|
|
115
|
+
label="File name"
|
|
116
|
+
variant="outlined"
|
|
117
|
+
density="compact"
|
|
118
|
+
hide-details
|
|
119
|
+
class="text-caption"
|
|
120
|
+
></v-text-field>
|
|
100
121
|
</v-col>
|
|
101
|
-
<v-col cols="
|
|
122
|
+
<v-col cols="12" class="py-1">
|
|
102
123
|
<v-select
|
|
103
124
|
v-model="output_extension"
|
|
104
125
|
:items="output_extensions"
|
|
105
126
|
label="Extension"
|
|
127
|
+
variant="outlined"
|
|
128
|
+
density="compact"
|
|
129
|
+
hide-details
|
|
106
130
|
required
|
|
131
|
+
class="text-caption"
|
|
107
132
|
/>
|
|
108
133
|
</v-col>
|
|
109
134
|
</v-row>
|
|
110
135
|
|
|
111
|
-
<v-row>
|
|
112
|
-
<v-col cols="12" class="py-
|
|
136
|
+
<v-row dense>
|
|
137
|
+
<v-col cols="12" class="py-1">
|
|
113
138
|
<v-switch
|
|
114
139
|
v-model="include_background"
|
|
115
140
|
:disabled="screenshot_type === 'file' && output_extension !== 'png'"
|
|
116
141
|
label="Include background"
|
|
142
|
+
density="compact"
|
|
143
|
+
hide-details
|
|
117
144
|
inset
|
|
145
|
+
class="text-caption"
|
|
118
146
|
></v-switch>
|
|
119
147
|
</v-col>
|
|
120
148
|
</v-row>
|
|
121
149
|
</v-container>
|
|
122
150
|
|
|
123
151
|
<template #actions>
|
|
124
|
-
<v-card-actions class="justify-center pb-
|
|
125
|
-
<v-btn
|
|
152
|
+
<v-card-actions class="justify-center pb-3 pt-0" style="gap: 8px">
|
|
153
|
+
<v-btn
|
|
154
|
+
variant="text"
|
|
155
|
+
size="small"
|
|
156
|
+
color="white"
|
|
157
|
+
class="text-caption text-none"
|
|
158
|
+
@click="show = false"
|
|
159
|
+
>
|
|
160
|
+
Cancel
|
|
161
|
+
</v-btn>
|
|
126
162
|
<v-btn
|
|
127
163
|
variant="outlined"
|
|
128
164
|
size="small"
|
|
165
|
+
class="text-caption text-none"
|
|
129
166
|
:disabled="(screenshot_type === 'file' && !filename) || !output_extension"
|
|
130
167
|
color="white"
|
|
131
168
|
@click="takeScreenshot()"
|
|
@@ -3,7 +3,7 @@ import GlassCard from "@ogw_front/components/GlassCard";
|
|
|
3
3
|
|
|
4
4
|
const { title, width, closeLabel, actionLabel } = defineProps({
|
|
5
5
|
title: { type: String, default: "" },
|
|
6
|
-
width: { type: Number, default:
|
|
6
|
+
width: { type: Number, default: 260 },
|
|
7
7
|
closeLabel: { type: String, default: "Close" },
|
|
8
8
|
actionLabel: { type: String, default: undefined },
|
|
9
9
|
});
|
|
@@ -34,8 +34,14 @@ function close() {
|
|
|
34
34
|
|
|
35
35
|
<template #actions>
|
|
36
36
|
<slot name="actions">
|
|
37
|
-
<v-card-actions class="justify-center pb-
|
|
38
|
-
<v-btn
|
|
37
|
+
<v-card-actions class="justify-center pb-3 pt-0" style="gap: 8px">
|
|
38
|
+
<v-btn
|
|
39
|
+
variant="text"
|
|
40
|
+
size="small"
|
|
41
|
+
color="white"
|
|
42
|
+
class="text-caption text-none"
|
|
43
|
+
@click="close"
|
|
44
|
+
>
|
|
39
45
|
{{ closeLabel }}
|
|
40
46
|
</v-btn>
|
|
41
47
|
<v-btn
|
|
@@ -43,6 +49,7 @@ function close() {
|
|
|
43
49
|
variant="outlined"
|
|
44
50
|
size="small"
|
|
45
51
|
color="white"
|
|
52
|
+
class="text-caption text-none"
|
|
46
53
|
@click="emit('action')"
|
|
47
54
|
>
|
|
48
55
|
{{ actionLabel }}
|
|
@@ -59,4 +66,9 @@ function close() {
|
|
|
59
66
|
top: 90px;
|
|
60
67
|
right: 55px;
|
|
61
68
|
}
|
|
69
|
+
:deep(.v-card-title) {
|
|
70
|
+
font-size: 0.9rem !important;
|
|
71
|
+
font-weight: bold !important;
|
|
72
|
+
padding: 8px 12px 4px 12px !important;
|
|
73
|
+
}
|
|
62
74
|
</style>
|
|
@@ -5,7 +5,7 @@ const zScale = defineModel({ type: Number, default: 1 });
|
|
|
5
5
|
const show = defineModel("show", { type: Boolean, default: false });
|
|
6
6
|
|
|
7
7
|
const { width } = defineProps({
|
|
8
|
-
width: { type: Number, default:
|
|
8
|
+
width: { type: Number, default: 260 },
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
const emit = defineEmits(["apply"]);
|
|
@@ -24,23 +24,34 @@ function apply() {
|
|
|
24
24
|
action-label="Apply"
|
|
25
25
|
@action="apply"
|
|
26
26
|
>
|
|
27
|
-
<v-container class="pa-
|
|
28
|
-
<v-row>
|
|
29
|
-
<v-col cols="12" class="py-
|
|
30
|
-
<v-slider
|
|
27
|
+
<v-container class="pa-3 py-1">
|
|
28
|
+
<v-row dense>
|
|
29
|
+
<v-col cols="12" class="py-1">
|
|
30
|
+
<v-slider
|
|
31
|
+
v-model="zScale"
|
|
32
|
+
:min="1"
|
|
33
|
+
:max="10"
|
|
34
|
+
:step="0.2"
|
|
35
|
+
label="Z Scale"
|
|
36
|
+
density="compact"
|
|
37
|
+
hide-details
|
|
38
|
+
thumb-label
|
|
39
|
+
class="text-caption"
|
|
40
|
+
/>
|
|
31
41
|
</v-col>
|
|
32
42
|
</v-row>
|
|
33
|
-
<v-row>
|
|
34
|
-
<v-col cols="12" class="py-
|
|
43
|
+
<v-row dense>
|
|
44
|
+
<v-col cols="12" class="py-1">
|
|
35
45
|
<v-text-field
|
|
36
46
|
v-model.number="zScale"
|
|
37
47
|
type="number"
|
|
38
48
|
label="Z Scale Value"
|
|
39
|
-
outlined
|
|
40
|
-
|
|
49
|
+
variant="outlined"
|
|
50
|
+
density="compact"
|
|
41
51
|
hide-details
|
|
42
52
|
step="0.1"
|
|
43
53
|
:min="1"
|
|
54
|
+
class="text-caption"
|
|
44
55
|
/>
|
|
45
56
|
</v-col>
|
|
46
57
|
</v-row>
|
package/package.json
CHANGED