vesium 1.0.1-beta.52 → 1.0.1-beta.54
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/README.md +1 -1
- package/dist/index.cjs +147 -699
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -555
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +50 -555
- package/dist/index.d.mts.map +1 -1
- package/dist/index.iife.js +910 -1466
- package/dist/index.iife.js.map +1 -1
- package/dist/index.iife.min.js +1 -1
- package/dist/index.iife.min.js.map +1 -1
- package/dist/index.min.cjs +1 -1
- package/dist/index.min.cjs.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +121 -645
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -5
package/dist/index.iife.js
CHANGED
|
@@ -1,1604 +1,1041 @@
|
|
|
1
|
-
(function(exports, __vueuse_core, cesium, vue) {
|
|
1
|
+
(function(exports, __vueuse_core, cesium, vue, __vesium_shared) {
|
|
2
2
|
|
|
3
3
|
//#region rolldown:runtime
|
|
4
|
-
var __create = Object.create;
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}) : target, mod));
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
12
|
+
key = keys[i];
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: ((k) => from[k]).bind(null, key),
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
21
|
+
value: mod,
|
|
22
|
+
enumerable: true
|
|
23
|
+
}) : target, mod));
|
|
24
24
|
|
|
25
25
|
//#endregion
|
|
26
26
|
__vueuse_core = __toESM(__vueuse_core);
|
|
27
27
|
cesium = __toESM(cesium);
|
|
28
28
|
vue = __toESM(vue);
|
|
29
|
+
__vesium_shared = __toESM(__vesium_shared);
|
|
29
30
|
|
|
30
31
|
//#region createViewer/index.ts
|
|
31
32
|
/**
|
|
32
|
-
* @internal
|
|
33
|
-
*/
|
|
34
|
-
const CREATE_VIEWER_INJECTION_KEY = Symbol("CREATE_VIEWER_INJECTION_KEY");
|
|
35
|
-
/**
|
|
36
|
-
* @internal
|
|
37
|
-
*/
|
|
38
|
-
const CREATE_VIEWER_COLLECTION = /* @__PURE__ */ new WeakMap();
|
|
39
|
-
/**
|
|
40
|
-
*/
|
|
41
|
-
function createViewer(...args) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
});
|
|
54
|
-
(0, vue.watchEffect)((onCleanup) => {
|
|
55
|
-
const [arg1, arg2] = args;
|
|
56
|
-
const value = (0, vue.toRaw)((0, vue.toValue)(arg1));
|
|
57
|
-
if (value instanceof cesium.Viewer) viewer.value = (0, vue.markRaw)(value);
|
|
58
|
-
else if (value) {
|
|
59
|
-
const element = value;
|
|
60
|
-
const options = arg2;
|
|
61
|
-
viewer.value = new cesium.Viewer(element, options);
|
|
62
|
-
onCleanup(() => !viewer.value?.isDestroyed() && viewer.value?.destroy());
|
|
63
|
-
} else viewer.value = void 0;
|
|
64
|
-
});
|
|
65
|
-
(0, __vueuse_core.tryOnScopeDispose)(() => {
|
|
66
|
-
viewer.value = void 0;
|
|
67
|
-
});
|
|
68
|
-
return (0, vue.computed)(() => {
|
|
69
|
-
return viewer.value?.isDestroyed() ? void 0 : viewer.value;
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
//#endregion
|
|
74
|
-
//#region utils/arrayDiff.ts
|
|
75
|
-
/**
|
|
76
|
-
* 计算两个数组的差异,返回新增和删除的元素
|
|
77
|
-
*/
|
|
78
|
-
function arrayDiff(list, oldList) {
|
|
79
|
-
const oldListSet = new Set(oldList);
|
|
80
|
-
const added = list.filter((obj) => !oldListSet.has(obj));
|
|
81
|
-
const newListSet = new Set(list);
|
|
82
|
-
const removed = oldList?.filter((obj) => !newListSet.has(obj)) ?? [];
|
|
83
|
-
return {
|
|
84
|
-
added,
|
|
85
|
-
removed
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
//#endregion
|
|
90
|
-
//#region utils/canvasCoordToCartesian.ts
|
|
91
|
-
/**
|
|
92
|
-
* Convert canvas coordinates to Cartesian coordinates
|
|
93
|
-
*
|
|
94
|
-
* @param canvasCoord Canvas coordinates
|
|
95
|
-
* @param scene Cesium.Scene instance
|
|
96
|
-
* @param mode optional values are 'pickPosition' | 'globePick' | 'auto' | 'noHeight' @default 'auto'
|
|
97
|
-
*
|
|
98
|
-
* `pickPosition`: Use scene.pickPosition for conversion, which can be used for picking models, oblique photography, etc.
|
|
99
|
-
* However, if depth detection is not enabled (globe.depthTestAgainstTerrain=false), picking terrain or inaccurate issues may occur
|
|
100
|
-
*
|
|
101
|
-
* `globePick`: Use camera.getPickRay for conversion, which cannot be used for picking models or oblique photography,
|
|
102
|
-
* but can be used for picking terrain. If terrain does not exist, the picked elevation is 0
|
|
103
|
-
*
|
|
104
|
-
* `auto`: Automatically determine which picking content to return
|
|
105
|
-
*
|
|
106
|
-
* Calculation speed comparison: globePick > auto >= pickPosition
|
|
107
|
-
*/
|
|
108
|
-
function canvasCoordToCartesian(canvasCoord, scene, mode = "auto") {
|
|
109
|
-
if (mode === "pickPosition") return scene.pickPosition(canvasCoord);
|
|
110
|
-
else if (mode === "globePick") {
|
|
111
|
-
const ray = scene.camera.getPickRay(canvasCoord);
|
|
112
|
-
return ray && scene.globe.pick(ray, scene);
|
|
113
|
-
} else {
|
|
114
|
-
if (scene.globe.depthTestAgainstTerrain) return scene.pickPosition(canvasCoord);
|
|
115
|
-
const position1 = scene.pickPosition(canvasCoord);
|
|
116
|
-
const ray = scene.camera.getPickRay(canvasCoord);
|
|
117
|
-
const position2 = ray && scene.globe.pick(ray, scene);
|
|
118
|
-
if (!position1) return position2;
|
|
119
|
-
const height1 = (position1 && cesium.Ellipsoid.WGS84.cartesianToCartographic(position1).height) ?? 0;
|
|
120
|
-
const height2 = (position2 && cesium.Ellipsoid.WGS84.cartesianToCartographic(position2).height) ?? 0;
|
|
121
|
-
return height1 < height2 ? position1 : position2;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
//#endregion
|
|
126
|
-
//#region utils/cartesianToCanvasCoord.ts
|
|
127
|
-
/**
|
|
128
|
-
* Convert Cartesian coordinates to canvas coordinates
|
|
129
|
-
*
|
|
130
|
-
* @param position Cartesian coordinates
|
|
131
|
-
* @param scene Cesium.Scene instance
|
|
132
|
-
*/
|
|
133
|
-
function cartesianToCanvasCoord(position, scene) {
|
|
134
|
-
return scene.cartesianToCanvasCoordinates(position);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
//#endregion
|
|
138
|
-
//#region utils/is.ts
|
|
139
|
-
const toString = Object.prototype.toString;
|
|
140
|
-
function isDef(val) {
|
|
141
|
-
return typeof val !== "undefined";
|
|
142
|
-
}
|
|
143
|
-
function isBoolean(val) {
|
|
144
|
-
return typeof val === "boolean";
|
|
145
|
-
}
|
|
146
|
-
function isFunction(val) {
|
|
147
|
-
return typeof val === "function";
|
|
148
|
-
}
|
|
149
|
-
function isNumber(val) {
|
|
150
|
-
return typeof val === "number";
|
|
151
|
-
}
|
|
152
|
-
function isString(val) {
|
|
153
|
-
return typeof val === "string";
|
|
154
|
-
}
|
|
155
|
-
function isObject(val) {
|
|
156
|
-
return toString.call(val) === "[object Object]";
|
|
157
|
-
}
|
|
158
|
-
function isWindow(val) {
|
|
159
|
-
return typeof window !== "undefined" && toString.call(val) === "[object Window]";
|
|
160
|
-
}
|
|
161
|
-
function isPromise(val) {
|
|
162
|
-
return !!val && (typeof val === "object" || typeof val === "function") && typeof val.then === "function";
|
|
163
|
-
}
|
|
164
|
-
function isElement(val) {
|
|
165
|
-
return !!(val && val.nodeName && val.nodeType === 1);
|
|
166
|
-
}
|
|
167
|
-
const isArray = Array.isArray;
|
|
168
|
-
function isBase64(val) {
|
|
169
|
-
const reg = /^\s*data:([a-z]+\/[\d+.a-z-]+(;[a-z-]+=[\da-z-]+)?)?(;base64)?,([\s\w!$%&'()*+,./:;=?@~-]*?)\s*$/i;
|
|
170
|
-
return reg.test(val);
|
|
171
|
-
}
|
|
172
|
-
function assertError(condition, error) {
|
|
173
|
-
if (condition) throw new Error(error);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
//#endregion
|
|
177
|
-
//#region utils/cesiumEquals.ts
|
|
178
|
-
/**
|
|
179
|
-
* Determines if two Cesium objects are equal.
|
|
180
|
-
*
|
|
181
|
-
* This function not only judges whether the instances are equal,
|
|
182
|
-
* but also judges the equals method in the example.
|
|
183
|
-
*
|
|
184
|
-
* @param left The first Cesium object
|
|
185
|
-
* @param right The second Cesium object
|
|
186
|
-
* @returns Returns true if the two Cesium objects are equal, otherwise false
|
|
187
|
-
*/
|
|
188
|
-
function cesiumEquals(left, right) {
|
|
189
|
-
return left === right || isFunction(left?.equals) && left.equals(right) || isFunction(right?.equals) && right.equals(left);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
//#endregion
|
|
193
|
-
//#region utils/toCoord.ts
|
|
194
|
-
/**
|
|
195
|
-
* Converts coordinates to an array or object in the specified format.
|
|
196
|
-
*
|
|
197
|
-
* @param position The coordinate to be converted, which can be a Cartesian3, Cartographic, array, or object.
|
|
198
|
-
* @param options Conversion options, including conversion type and whether to include altitude information.
|
|
199
|
-
* @returns The converted coordinate, which may be an array or object. If the input position is empty, undefined is returned.
|
|
200
|
-
*
|
|
201
|
-
* @template T Conversion type, optional values are 'Array' or 'Object', @default 'Array'.
|
|
202
|
-
* @template Alt Whether to include altitude information, default is false
|
|
203
|
-
*/
|
|
204
|
-
function toCoord(position, options = {}) {
|
|
205
|
-
if (!position) return void 0;
|
|
206
|
-
const { type = "Array", alt = false } = options;
|
|
207
|
-
let longitude, latitude, height;
|
|
208
|
-
if (position instanceof cesium.Cartesian3) {
|
|
209
|
-
const cartographic = cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
|
|
210
|
-
longitude = cesium.Math.toDegrees(cartographic.longitude);
|
|
211
|
-
latitude = cesium.Math.toDegrees(cartographic.latitude);
|
|
212
|
-
height = cartographic.height;
|
|
213
|
-
} else if (position instanceof cesium.Cartographic) {
|
|
214
|
-
const cartographic = position;
|
|
215
|
-
longitude = cesium.Math.toDegrees(cartographic.longitude);
|
|
216
|
-
latitude = cesium.Math.toDegrees(cartographic.latitude);
|
|
217
|
-
height = cartographic.height;
|
|
218
|
-
} else if (Array.isArray(position)) {
|
|
219
|
-
longitude = cesium.Math.toDegrees(position[0]);
|
|
220
|
-
latitude = cesium.Math.toDegrees(position[1]);
|
|
221
|
-
height = position[2];
|
|
222
|
-
} else {
|
|
223
|
-
longitude = position.longitude;
|
|
224
|
-
latitude = position.latitude;
|
|
225
|
-
height = position.height;
|
|
226
|
-
}
|
|
227
|
-
if (type === "Array") return alt ? [
|
|
228
|
-
longitude,
|
|
229
|
-
latitude,
|
|
230
|
-
height
|
|
231
|
-
] : [longitude, latitude];
|
|
232
|
-
else return alt ? {
|
|
233
|
-
longitude,
|
|
234
|
-
latitude,
|
|
235
|
-
height
|
|
236
|
-
} : {
|
|
237
|
-
longitude,
|
|
238
|
-
latitude
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
//#endregion
|
|
243
|
-
//#region utils/convertDMS.ts
|
|
244
|
-
/**
|
|
245
|
-
* Convert degrees to DMS (Degrees Minutes Seconds) format string
|
|
246
|
-
*
|
|
247
|
-
* @param degrees The angle value
|
|
248
|
-
* @param precision The number of decimal places to retain for the seconds, defaults to 3
|
|
249
|
-
* @returns A DMS formatted string in the format: degrees° minutes′ seconds″
|
|
250
|
-
*/
|
|
251
|
-
function dmsEncode(degrees, precision = 3) {
|
|
252
|
-
const str = `${degrees}`;
|
|
253
|
-
let i = str.indexOf(".");
|
|
254
|
-
const d = i < 0 ? str : str.slice(0, Math.max(0, i));
|
|
255
|
-
let m = "0";
|
|
256
|
-
let s = "0";
|
|
257
|
-
if (i > 0) {
|
|
258
|
-
m = `0${str.slice(Math.max(0, i))}`;
|
|
259
|
-
m = `${+m * 60}`;
|
|
260
|
-
i = m.indexOf(".");
|
|
261
|
-
if (i > 0) {
|
|
262
|
-
s = `0${m.slice(Math.max(0, i))}`;
|
|
263
|
-
m = m.slice(0, Math.max(0, i));
|
|
264
|
-
s = `${+s * 60}`;
|
|
265
|
-
i = s.indexOf(".");
|
|
266
|
-
s = s.slice(0, Math.max(0, i + 4));
|
|
267
|
-
s = (+s).toFixed(precision);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return `${Math.abs(+d)}°${+m}′${+s}″`;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Decode a DMS (Degrees Minutes Seconds) formatted string to a decimal angle value
|
|
274
|
-
*
|
|
275
|
-
* @param dmsCode DMS formatted string, e.g. "120°30′45″N"
|
|
276
|
-
* @returns The decoded decimal angle value, or 0 if decoding fails
|
|
277
|
-
*/
|
|
278
|
-
function dmsDecode(dmsCode) {
|
|
279
|
-
const [dd, msStr] = dmsCode.split("°") ?? [];
|
|
280
|
-
const [mm, sStr] = msStr?.split("′") ?? [];
|
|
281
|
-
const ss = sStr?.split("″")[0];
|
|
282
|
-
const d = Number(dd) || 0;
|
|
283
|
-
const m = (Number(mm) || 0) / 60;
|
|
284
|
-
const s = (Number(ss) || 0) / 60 / 60;
|
|
285
|
-
const degrees = d + m + s;
|
|
286
|
-
if (degrees === 0) return 0;
|
|
287
|
-
else {
|
|
288
|
-
let res = degrees;
|
|
289
|
-
if ([
|
|
290
|
-
"W",
|
|
291
|
-
"w",
|
|
292
|
-
"S",
|
|
293
|
-
"s"
|
|
294
|
-
].includes(dmsCode[dmsCode.length - 1])) res = -res;
|
|
295
|
-
return res;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Convert latitude and longitude coordinates to degrees-minutes-seconds format
|
|
300
|
-
*
|
|
301
|
-
* @param position The latitude and longitude coordinates
|
|
302
|
-
* @param precision The number of decimal places to retain for 'seconds', default is 3
|
|
303
|
-
* @returns Returns the coordinates in degrees-minutes-seconds format, or undefined if the conversion fails
|
|
304
|
-
*/
|
|
305
|
-
function degreesToDms(position, precision = 3) {
|
|
306
|
-
const coord = toCoord(position, { alt: true });
|
|
307
|
-
if (!coord) return;
|
|
308
|
-
const [longitude, latitude, height] = coord;
|
|
309
|
-
const x = dmsEncode(longitude, precision);
|
|
310
|
-
const y = dmsEncode(latitude, precision);
|
|
311
|
-
return [
|
|
312
|
-
`${x}${longitude > 0 ? "E" : "W"}`,
|
|
313
|
-
`${y}${latitude > 0 ? "N" : "S"}`,
|
|
314
|
-
height
|
|
315
|
-
];
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Convert DMS (Degrees Minutes Seconds) format to decimal degrees for latitude and longitude coordinates
|
|
319
|
-
*
|
|
320
|
-
* @param dms The latitude or longitude coordinate in DMS format
|
|
321
|
-
* @returns Returns the coordinate in decimal degrees format, or undefined if the conversion fails
|
|
322
|
-
*/
|
|
323
|
-
function dmsToDegrees(dms) {
|
|
324
|
-
const [x, y, height] = dms;
|
|
325
|
-
const longitude = dmsDecode(x);
|
|
326
|
-
const latitude = dmsDecode(y);
|
|
327
|
-
return [
|
|
328
|
-
longitude,
|
|
329
|
-
latitude,
|
|
330
|
-
Number(height) || 0
|
|
331
|
-
];
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
//#endregion
|
|
335
|
-
//#region utils/isCesiumConstant.ts
|
|
336
|
-
/**
|
|
337
|
-
* Determines if the Cesium property is a constant.
|
|
338
|
-
*
|
|
339
|
-
* @param value Cesium property
|
|
340
|
-
*/
|
|
341
|
-
function isCesiumConstant(value) {
|
|
342
|
-
return !(0, cesium.defined)(value) || !!value.isConstant;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
//#endregion
|
|
346
|
-
//#region utils/material.ts
|
|
347
|
-
/**
|
|
348
|
-
* Only as a type fix for `Cesium.Material`
|
|
349
|
-
*/
|
|
350
|
-
var CesiumMaterial = class extends cesium.Material {
|
|
351
|
-
constructor(options) {
|
|
352
|
-
super(options);
|
|
353
|
-
}
|
|
354
|
-
};
|
|
355
|
-
/**
|
|
356
|
-
* Get material from cache, alias of `Material._materialCache.getMaterial`
|
|
357
|
-
*/
|
|
358
|
-
function getMaterialCache(type) {
|
|
359
|
-
return cesium.Material._materialCache.getMaterial(type);
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Add material to Cesium's material cache, alias of `Material._materialCache.addMaterial`
|
|
363
|
-
*/
|
|
364
|
-
function addMaterialCache(type, material) {
|
|
365
|
-
return cesium.Material._materialCache.addMaterial(type, material);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
//#endregion
|
|
369
|
-
//#region utils/pick.ts
|
|
370
|
-
/**
|
|
371
|
-
* Analyze the result of Cesium's `scene.pick` and convert it to an array format
|
|
372
|
-
*/
|
|
373
|
-
function resolvePick(pick = {}) {
|
|
374
|
-
const { primitive, id, primitiveCollection, collection } = pick;
|
|
375
|
-
const entityCollection = id && id.entityCollection || null;
|
|
376
|
-
const dataSource = entityCollection && entityCollection.owner || null;
|
|
377
|
-
const ids = Array.isArray(id) ? id : [id].filter(Boolean);
|
|
378
|
-
return [
|
|
379
|
-
...ids,
|
|
380
|
-
primitive,
|
|
381
|
-
primitiveCollection,
|
|
382
|
-
collection,
|
|
383
|
-
entityCollection,
|
|
384
|
-
dataSource
|
|
385
|
-
].filter((e) => !!e);
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Determine if the given array of graphics is hit by Cesium's `scene.pick`
|
|
389
|
-
*
|
|
390
|
-
* @param pick The `scene.pick` object used for matching
|
|
391
|
-
* @param graphic An array of graphics to check for hits
|
|
392
|
-
*/
|
|
393
|
-
function pickHitGraphic(pick, graphic) {
|
|
394
|
-
if (!Array.isArray(graphic) || !graphic.length) return false;
|
|
395
|
-
const elements = resolvePick(pick);
|
|
396
|
-
if (!elements.length) return false;
|
|
397
|
-
return elements.some((element) => graphic.includes(element));
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
//#endregion
|
|
401
|
-
//#region utils/property.ts
|
|
402
|
-
/**
|
|
403
|
-
* Is Cesium.Property
|
|
404
|
-
* @param value - The target object
|
|
405
|
-
*/
|
|
406
|
-
function isProperty(value) {
|
|
407
|
-
return value && isFunction(value.getValue);
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Converts a value that may be a Property into its target value, @see {toProperty} for the reverse operation
|
|
411
|
-
* ```typescript
|
|
412
|
-
* toPropertyValue('val') //=> 'val'
|
|
413
|
-
* toPropertyValue(new ConstantProperty('val')) //=> 'val'
|
|
414
|
-
* toPropertyValue(new CallbackProperty(()=>'val')) //=> 'val'
|
|
415
|
-
* ```
|
|
416
|
-
*
|
|
417
|
-
* @param value - The value to convert
|
|
418
|
-
*/
|
|
419
|
-
function toPropertyValue(value, time) {
|
|
420
|
-
return isProperty(value) ? value.getValue(time) : value;
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Converts a value that may be a Property into a Property object, @see {toPropertyValue} for the reverse operation
|
|
424
|
-
*
|
|
425
|
-
* @param value - The property value or getter to convert, can be undefined or null
|
|
426
|
-
* @param isConstant - The second parameter for converting to CallbackProperty
|
|
427
|
-
* @returns Returns the converted Property object, if value is undefined or null, returns undefined
|
|
428
|
-
*/
|
|
429
|
-
function toProperty(value, isConstant = false) {
|
|
430
|
-
return isProperty(value) ? value : isFunction(value) ? new cesium.CallbackProperty(value, isConstant) : new cesium.ConstantProperty(value);
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Create a Cesium property key
|
|
434
|
-
*
|
|
435
|
-
* @param scope The host object
|
|
436
|
-
* @param field The property name
|
|
437
|
-
* @param maybeProperty Optional property or getter
|
|
438
|
-
* @param readonly Whether the property is read-only
|
|
439
|
-
*/
|
|
440
|
-
function createPropertyField(scope, field, maybeProperty, readonly$2) {
|
|
441
|
-
let removeOwnerListener;
|
|
442
|
-
const ownerBinding = (value) => {
|
|
443
|
-
removeOwnerListener?.();
|
|
444
|
-
if ((0, cesium.defined)(value?.definitionChanged)) removeOwnerListener = value?.definitionChanged?.addEventListener(() => {
|
|
445
|
-
scope.definitionChanged.raiseEvent(scope, field, value, value);
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
const CREATE_VIEWER_INJECTION_KEY = Symbol("CREATE_VIEWER_INJECTION_KEY");
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
const CREATE_VIEWER_COLLECTION = /* @__PURE__ */ new WeakMap();
|
|
40
|
+
/**
|
|
41
|
+
*/
|
|
42
|
+
function createViewer(...args) {
|
|
43
|
+
const viewer = (0, vue.shallowRef)();
|
|
44
|
+
const readonlyViewer = (0, vue.shallowReadonly)(viewer);
|
|
45
|
+
(0, vue.provide)(CREATE_VIEWER_INJECTION_KEY, readonlyViewer);
|
|
46
|
+
const scope = (0, vue.getCurrentScope)();
|
|
47
|
+
if (scope) CREATE_VIEWER_COLLECTION.set(scope, readonlyViewer);
|
|
48
|
+
const canvas = (0, vue.computed)(() => viewer.value?.canvas);
|
|
49
|
+
(0, __vueuse_core.useMutationObserver)(document?.body, () => {
|
|
50
|
+
if (canvas.value && !document?.body.contains(canvas.value)) viewer.value = void 0;
|
|
51
|
+
}, {
|
|
52
|
+
childList: true,
|
|
53
|
+
subtree: true
|
|
446
54
|
});
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
if (scope[privateField] !== value) {
|
|
462
|
-
scope[privateField] = value;
|
|
463
|
-
ownerBinding(value);
|
|
464
|
-
if ((0, cesium.defined)(scope.definitionChanged)) scope.definitionChanged.raiseEvent(scope, field, value, previous);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
function createCesiumAttribute(scope, key, value, options = {}) {
|
|
470
|
-
const allowToProperty = !!options.toProperty;
|
|
471
|
-
const shallowClone = !!options.shallowClone;
|
|
472
|
-
const changedEventKey = options.changedEventKey || "definitionChanged";
|
|
473
|
-
const changedEvent = Reflect.get(scope, changedEventKey);
|
|
474
|
-
const privateKey = `_${String(key)}`;
|
|
475
|
-
const attribute = allowToProperty ? toProperty(value) : value;
|
|
476
|
-
Reflect.set(scope, privateKey, attribute);
|
|
477
|
-
const obj = { get() {
|
|
478
|
-
const value$1 = Reflect.get(scope, privateKey);
|
|
479
|
-
if (shallowClone) return Array.isArray(value$1) ? [...value$1] : { ...value$1 };
|
|
480
|
-
else return value$1;
|
|
481
|
-
} };
|
|
482
|
-
let previousListener;
|
|
483
|
-
const serial = (property, previous) => {
|
|
484
|
-
previousListener?.();
|
|
485
|
-
previousListener = property?.definitionChanged?.addEventListener(() => {
|
|
486
|
-
changedEvent?.raiseEvent.bind(changedEvent)(scope, key, property, previous);
|
|
55
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
56
|
+
const [arg1, arg2] = args;
|
|
57
|
+
const value = (0, vue.toRaw)((0, vue.toValue)(arg1));
|
|
58
|
+
if (value instanceof cesium.Viewer) viewer.value = (0, vue.markRaw)(value);
|
|
59
|
+
else if (value) {
|
|
60
|
+
viewer.value = new cesium.Viewer(value, arg2);
|
|
61
|
+
onCleanup(() => !viewer.value?.isDestroyed() && viewer.value?.destroy());
|
|
62
|
+
} else viewer.value = void 0;
|
|
63
|
+
});
|
|
64
|
+
(0, __vueuse_core.tryOnScopeDispose)(() => {
|
|
65
|
+
viewer.value = void 0;
|
|
66
|
+
});
|
|
67
|
+
return (0, vue.computed)(() => {
|
|
68
|
+
return viewer.value?.isDestroyed() ? void 0 : viewer.value;
|
|
487
69
|
});
|
|
488
|
-
};
|
|
489
|
-
if (!options.readonly) {
|
|
490
|
-
if (allowToProperty && isProperty(value)) serial(value);
|
|
491
|
-
obj.set = (value$1) => {
|
|
492
|
-
if (allowToProperty && !isProperty(value$1)) throw new Error(`The value of ${String(key)} must be a Cesium.Property object`);
|
|
493
|
-
const previous = Reflect.get(scope, privateKey);
|
|
494
|
-
if (previous !== value$1) {
|
|
495
|
-
Reflect.set(scope, privateKey, value$1);
|
|
496
|
-
changedEvent?.raiseEvent.bind(changedEvent)(scope, key, value$1, previous);
|
|
497
|
-
if (allowToProperty) serial(value$1);
|
|
498
|
-
}
|
|
499
|
-
};
|
|
500
70
|
}
|
|
501
|
-
Object.defineProperty(scope, key, obj);
|
|
502
|
-
}
|
|
503
|
-
function createCesiumProperty(scope, key, value, options = {}) {
|
|
504
|
-
return createCesiumAttribute(scope, key, value, {
|
|
505
|
-
...options,
|
|
506
|
-
toProperty: true
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
//#endregion
|
|
511
|
-
//#region utils/throttle.ts
|
|
512
|
-
/**
|
|
513
|
-
* Throttle function, which limits the frequency of execution of the function
|
|
514
|
-
*
|
|
515
|
-
* @param callback raw function
|
|
516
|
-
* @param delay Throttled delay duration (ms)
|
|
517
|
-
* @param trailing Trigger callback function after last call @default true
|
|
518
|
-
* @param leading Trigger the callback function immediately on the first call @default false
|
|
519
|
-
* @returns Throttle function
|
|
520
|
-
*/
|
|
521
|
-
function throttle(callback, delay = 100, trailing = true, leading = false) {
|
|
522
|
-
const restList = [];
|
|
523
|
-
let tracked = false;
|
|
524
|
-
const trigger = async () => {
|
|
525
|
-
await (0, __vueuse_core.promiseTimeout)(delay);
|
|
526
|
-
tracked = false;
|
|
527
|
-
if (leading) try {
|
|
528
|
-
callback(...restList[0]);
|
|
529
|
-
} catch (error) {
|
|
530
|
-
console.error(error);
|
|
531
|
-
}
|
|
532
|
-
if (trailing && (!leading || restList.length > 1)) try {
|
|
533
|
-
callback(...restList[restList.length - 1]);
|
|
534
|
-
} catch (error) {
|
|
535
|
-
console.error(error);
|
|
536
|
-
}
|
|
537
|
-
restList.length = 0;
|
|
538
|
-
};
|
|
539
|
-
return (...rest) => {
|
|
540
|
-
if (restList.length < 2) restList.push(rest);
|
|
541
|
-
else restList[1] = rest;
|
|
542
|
-
if (!tracked) {
|
|
543
|
-
tracked = true;
|
|
544
|
-
trigger();
|
|
545
|
-
}
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
//#endregion
|
|
550
|
-
//#region utils/toCartesian3.ts
|
|
551
|
-
/**
|
|
552
|
-
* Converts position to a coordinate point in the Cartesian coordinate system
|
|
553
|
-
*
|
|
554
|
-
* @param position Position information, which can be a Cartesian coordinate point (Cartesian3), a geographic coordinate point (Cartographic), an array, or an object containing WGS84 latitude, longitude, and height information
|
|
555
|
-
* @returns The converted Cartesian coordinate point. If the input parameter is invalid, undefined is returned
|
|
556
|
-
*/
|
|
557
|
-
function toCartesian3(position) {
|
|
558
|
-
if (!position) return void 0;
|
|
559
|
-
if (position instanceof cesium.Cartesian3) return position.clone();
|
|
560
|
-
else if (position instanceof cesium.Cartographic) return cesium.Ellipsoid.WGS84.cartographicToCartesian(position);
|
|
561
|
-
else if (Array.isArray(position)) return cesium.Cartesian3.fromDegrees(position[0], position[1], position[2]);
|
|
562
|
-
else return cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, position.height);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
//#endregion
|
|
566
|
-
//#region utils/toCartographic.ts
|
|
567
|
-
/**
|
|
568
|
-
* Converts a position to a Cartographic coordinate point
|
|
569
|
-
*
|
|
570
|
-
* @param position Position information, which can be a Cartesian3 coordinate point, a Cartographic coordinate point, an array, or an object containing WGS84 longitude, latitude, and height information
|
|
571
|
-
* @returns The converted Cartographic coordinate point, or undefined if the input parameter is invalid
|
|
572
|
-
*/
|
|
573
|
-
function toCartographic(position) {
|
|
574
|
-
if (!position) return void 0;
|
|
575
|
-
if (position instanceof cesium.Cartesian3) return cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
|
|
576
|
-
else if (position instanceof cesium.Cartographic) return position.clone();
|
|
577
|
-
else if (Array.isArray(position)) return cesium.Cartographic.fromDegrees(position[0], position[1], position[2]);
|
|
578
|
-
else return cesium.Cartographic.fromDegrees(position.longitude, position.latitude, position.height);
|
|
579
|
-
}
|
|
580
71
|
|
|
581
72
|
//#endregion
|
|
582
|
-
//#region
|
|
73
|
+
//#region toPromiseValue/index.ts
|
|
583
74
|
/**
|
|
584
|
-
*
|
|
585
|
-
*
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
75
|
+
* Similar to Vue's built-in `toValue`, but capable of handling asynchronous functions, thus returning a `await value`.
|
|
76
|
+
*
|
|
77
|
+
* Used in conjunction with VueUse's `computedAsync`.
|
|
78
|
+
*
|
|
79
|
+
* @param source The source value, which can be a reactive reference or an asynchronous getter.
|
|
80
|
+
* @param options Conversion options
|
|
81
|
+
* @returns The converted value.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
*
|
|
86
|
+
* const data = computedAsync(async ()=> {
|
|
87
|
+
* return await toPromiseValue(promiseRef)
|
|
88
|
+
* })
|
|
89
|
+
*
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
async function toPromiseValue(source, options = {}) {
|
|
589
93
|
try {
|
|
590
|
-
|
|
94
|
+
const { raw = true } = options;
|
|
95
|
+
let value;
|
|
96
|
+
if ((0, __vesium_shared.isFunction)(source)) value = await source();
|
|
97
|
+
else {
|
|
98
|
+
const result = (0, vue.toValue)(source);
|
|
99
|
+
value = (0, __vesium_shared.isPromise)(result) ? await result : result;
|
|
100
|
+
}
|
|
101
|
+
return raw ? (0, vue.toRaw)(value) : value;
|
|
591
102
|
} catch (error) {
|
|
592
103
|
console.error(error);
|
|
104
|
+
throw error;
|
|
593
105
|
}
|
|
594
|
-
};
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
//#endregion
|
|
598
|
-
//#region toPromiseValue/index.ts
|
|
599
|
-
/**
|
|
600
|
-
* Similar to Vue's built-in `toValue`, but capable of handling asynchronous functions, thus returning a `await value`.
|
|
601
|
-
*
|
|
602
|
-
* Used in conjunction with VueUse's `computedAsync`.
|
|
603
|
-
*
|
|
604
|
-
* @param source The source value, which can be a reactive reference or an asynchronous getter.
|
|
605
|
-
* @param options Conversion options
|
|
606
|
-
* @returns The converted value.
|
|
607
|
-
*
|
|
608
|
-
* @example
|
|
609
|
-
* ```ts
|
|
610
|
-
*
|
|
611
|
-
* const data = computedAsync(async ()=> {
|
|
612
|
-
* return await toPromiseValue(promiseRef)
|
|
613
|
-
* })
|
|
614
|
-
*
|
|
615
|
-
* ```
|
|
616
|
-
*/
|
|
617
|
-
async function toPromiseValue(source, options = {}) {
|
|
618
|
-
try {
|
|
619
|
-
const { raw = true } = options;
|
|
620
|
-
let value;
|
|
621
|
-
if (isFunction(source)) value = await source();
|
|
622
|
-
else {
|
|
623
|
-
const result = (0, vue.toValue)(source);
|
|
624
|
-
value = isPromise(result) ? await result : result;
|
|
625
|
-
}
|
|
626
|
-
return raw ? (0, vue.toRaw)(value) : value;
|
|
627
|
-
} catch (error) {
|
|
628
|
-
console.error(error);
|
|
629
|
-
throw error;
|
|
630
106
|
}
|
|
631
|
-
}
|
|
632
107
|
|
|
633
108
|
//#endregion
|
|
634
109
|
//#region useCesiumEventListener/index.ts
|
|
635
110
|
/**
|
|
636
|
-
* Easily use the `addEventListener` in `Cesium.Event` instances,
|
|
637
|
-
* when the dependent data changes or the component is unmounted,
|
|
638
|
-
* the listener function will automatically reload or destroy.
|
|
639
|
-
*
|
|
640
|
-
* @param event The Cesium.Event instance
|
|
641
|
-
* @param listener The listener function
|
|
642
|
-
* @param options additional options
|
|
643
|
-
* @returns A function that can be called to remove the event listener
|
|
644
|
-
*/
|
|
645
|
-
function useCesiumEventListener(event, listener, options = {}) {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
111
|
+
* Easily use the `addEventListener` in `Cesium.Event` instances,
|
|
112
|
+
* when the dependent data changes or the component is unmounted,
|
|
113
|
+
* the listener function will automatically reload or destroy.
|
|
114
|
+
*
|
|
115
|
+
* @param event The Cesium.Event instance
|
|
116
|
+
* @param listener The listener function
|
|
117
|
+
* @param options additional options
|
|
118
|
+
* @returns A function that can be called to remove the event listener
|
|
119
|
+
*/
|
|
120
|
+
function useCesiumEventListener(event, listener, options = {}) {
|
|
121
|
+
const isActive = (0, vue.toRef)(options.isActive ?? true);
|
|
122
|
+
const cleanup = (0, vue.watchEffect)((onCleanup) => {
|
|
123
|
+
const _event = (0, vue.toValue)(event);
|
|
124
|
+
const events = Array.isArray(_event) ? _event : [_event];
|
|
125
|
+
if (events) {
|
|
126
|
+
if (events.length && isActive.value) {
|
|
127
|
+
const stopFns = events.map((event$1) => {
|
|
128
|
+
const e = (0, vue.toValue)(event$1);
|
|
129
|
+
return e?.addEventListener(listener, e);
|
|
130
|
+
});
|
|
131
|
+
onCleanup(() => stopFns.forEach((stop) => stop?.()));
|
|
132
|
+
}
|
|
657
133
|
}
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
}
|
|
134
|
+
});
|
|
135
|
+
(0, __vueuse_core.tryOnScopeDispose)(cleanup.stop);
|
|
136
|
+
return cleanup.stop;
|
|
137
|
+
}
|
|
663
138
|
|
|
664
139
|
//#endregion
|
|
665
140
|
//#region useViewer/index.ts
|
|
666
141
|
/**
|
|
667
|
-
* Obtain the `Viewer` instance injected through `createViewer` in the current component or its ancestor components.
|
|
668
|
-
*
|
|
669
|
-
* note:
|
|
670
|
-
* - If `createViewer` and `useViewer` are called in the same component, the `Viewer` instance injected by `createViewer` will be used preferentially.
|
|
671
|
-
* - When calling `createViewer` and `useViewer` in the same component, `createViewer` should be called before `useViewer`.
|
|
672
|
-
*/
|
|
673
|
-
function useViewer() {
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
142
|
+
* Obtain the `Viewer` instance injected through `createViewer` in the current component or its ancestor components.
|
|
143
|
+
*
|
|
144
|
+
* note:
|
|
145
|
+
* - If `createViewer` and `useViewer` are called in the same component, the `Viewer` instance injected by `createViewer` will be used preferentially.
|
|
146
|
+
* - When calling `createViewer` and `useViewer` in the same component, `createViewer` should be called before `useViewer`.
|
|
147
|
+
*/
|
|
148
|
+
function useViewer() {
|
|
149
|
+
const scope = (0, vue.getCurrentScope)();
|
|
150
|
+
const instanceViewer = scope ? CREATE_VIEWER_COLLECTION.get(scope) : void 0;
|
|
151
|
+
if (instanceViewer) return instanceViewer;
|
|
152
|
+
else {
|
|
153
|
+
const injectViewer = (0, vue.inject)(CREATE_VIEWER_INJECTION_KEY);
|
|
154
|
+
if (!injectViewer) throw new Error("The `Viewer` instance injected by `createViewer` was not found in the current component or its ancestor components. Have you called `createViewer`?");
|
|
155
|
+
return injectViewer;
|
|
156
|
+
}
|
|
681
157
|
}
|
|
682
|
-
}
|
|
683
158
|
|
|
684
159
|
//#endregion
|
|
685
160
|
//#region useCameraState/index.ts
|
|
686
161
|
/**
|
|
687
|
-
* Reactive Cesium Camera state
|
|
688
|
-
* @param options options
|
|
689
|
-
* @returns Reactive camera states
|
|
690
|
-
*/
|
|
691
|
-
function useCameraState(options = {}) {
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
162
|
+
* Reactive Cesium Camera state
|
|
163
|
+
* @param options options
|
|
164
|
+
* @returns Reactive camera states
|
|
165
|
+
*/
|
|
166
|
+
function useCameraState(options = {}) {
|
|
167
|
+
let getCamera = options.camera;
|
|
168
|
+
if (!getCamera) {
|
|
169
|
+
const viewer = useViewer();
|
|
170
|
+
getCamera = () => viewer.value?.scene.camera;
|
|
171
|
+
}
|
|
172
|
+
const camera = (0, vue.computed)(() => (0, vue.toValue)(getCamera));
|
|
173
|
+
const event = (0, vue.computed)(() => {
|
|
174
|
+
const eventField = (0, vue.toValue)(options.event) || "changed";
|
|
175
|
+
return camera.value?.[eventField];
|
|
176
|
+
});
|
|
177
|
+
const changedSymbol = (0, __vueuse_core.refThrottled)((0, vue.shallowRef)(Symbol("camera change")), options.delay ?? 8, true, false);
|
|
178
|
+
const setChangedSymbol = () => {
|
|
179
|
+
changedSymbol.value = Symbol("camera change");
|
|
180
|
+
};
|
|
181
|
+
(0, vue.watch)(camera, () => setChangedSymbol());
|
|
182
|
+
useCesiumEventListener(event, () => setChangedSymbol());
|
|
183
|
+
return {
|
|
184
|
+
camera,
|
|
185
|
+
position: (0, vue.computed)(() => changedSymbol.value ? camera.value?.position?.clone() : void 0),
|
|
186
|
+
direction: (0, vue.computed)(() => changedSymbol.value ? camera.value?.direction?.clone() : void 0),
|
|
187
|
+
up: (0, vue.computed)(() => changedSymbol.value ? camera.value?.up?.clone() : void 0),
|
|
188
|
+
right: (0, vue.computed)(() => changedSymbol.value ? camera.value?.right?.clone() : void 0),
|
|
189
|
+
positionCartographic: (0, vue.computed)(() => changedSymbol.value ? camera.value?.positionCartographic?.clone() : void 0),
|
|
190
|
+
positionWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.positionWC?.clone() : void 0),
|
|
191
|
+
directionWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
192
|
+
upWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
193
|
+
rightWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
194
|
+
viewRectangle: (0, vue.computed)(() => changedSymbol.value ? camera.value?.computeViewRectangle() : void 0),
|
|
195
|
+
heading: (0, vue.computed)(() => changedSymbol.value ? camera.value?.heading : void 0),
|
|
196
|
+
pitch: (0, vue.computed)(() => changedSymbol.value ? camera.value?.pitch : void 0),
|
|
197
|
+
roll: (0, vue.computed)(() => changedSymbol.value ? camera.value?.roll : void 0),
|
|
198
|
+
level: (0, vue.computed)(() => changedSymbol.value && camera.value?.positionCartographic?.height ? computeLevel(camera.value.positionCartographic.height) : void 0)
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const A = 40487.57;
|
|
202
|
+
const B = 7096758e-11;
|
|
203
|
+
const C = 91610.74;
|
|
204
|
+
const D = -40467.74;
|
|
205
|
+
/**
|
|
206
|
+
* Compute the camera level at a given height.
|
|
207
|
+
*/
|
|
208
|
+
function computeLevel(height) {
|
|
209
|
+
return D + (A - D) / (1 + (height / C) ** B);
|
|
696
210
|
}
|
|
697
|
-
const camera = (0, vue.computed)(() => (0, vue.toValue)(getCamera));
|
|
698
|
-
const event = (0, vue.computed)(() => {
|
|
699
|
-
const eventField = (0, vue.toValue)(options.event) || "changed";
|
|
700
|
-
return camera.value?.[eventField];
|
|
701
|
-
});
|
|
702
|
-
const changedSymbol = (0, __vueuse_core.refThrottled)((0, vue.shallowRef)(Symbol("camera change")), options.delay ?? 8, true, false);
|
|
703
|
-
const setChangedSymbol = () => {
|
|
704
|
-
changedSymbol.value = Symbol("camera change");
|
|
705
|
-
};
|
|
706
|
-
(0, vue.watch)(camera, () => setChangedSymbol());
|
|
707
|
-
useCesiumEventListener(event, () => setChangedSymbol());
|
|
708
|
-
return {
|
|
709
|
-
camera,
|
|
710
|
-
position: (0, vue.computed)(() => changedSymbol.value ? camera.value?.position?.clone() : void 0),
|
|
711
|
-
direction: (0, vue.computed)(() => changedSymbol.value ? camera.value?.direction?.clone() : void 0),
|
|
712
|
-
up: (0, vue.computed)(() => changedSymbol.value ? camera.value?.up?.clone() : void 0),
|
|
713
|
-
right: (0, vue.computed)(() => changedSymbol.value ? camera.value?.right?.clone() : void 0),
|
|
714
|
-
positionCartographic: (0, vue.computed)(() => changedSymbol.value ? camera.value?.positionCartographic?.clone() : void 0),
|
|
715
|
-
positionWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.positionWC?.clone() : void 0),
|
|
716
|
-
directionWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
717
|
-
upWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
718
|
-
rightWC: (0, vue.computed)(() => changedSymbol.value ? camera.value?.directionWC?.clone() : void 0),
|
|
719
|
-
viewRectangle: (0, vue.computed)(() => changedSymbol.value ? camera.value?.computeViewRectangle() : void 0),
|
|
720
|
-
heading: (0, vue.computed)(() => changedSymbol.value ? camera.value?.heading : void 0),
|
|
721
|
-
pitch: (0, vue.computed)(() => changedSymbol.value ? camera.value?.pitch : void 0),
|
|
722
|
-
roll: (0, vue.computed)(() => changedSymbol.value ? camera.value?.roll : void 0),
|
|
723
|
-
level: (0, vue.computed)(() => changedSymbol.value && camera.value?.positionCartographic?.height ? computeLevel(camera.value.positionCartographic.height) : void 0)
|
|
724
|
-
};
|
|
725
|
-
}
|
|
726
|
-
const A = 40487.57;
|
|
727
|
-
const B = 7096758e-11;
|
|
728
|
-
const C = 91610.74;
|
|
729
|
-
const D = -40467.74;
|
|
730
|
-
/**
|
|
731
|
-
* Compute the camera level at a given height.
|
|
732
|
-
*/
|
|
733
|
-
function computeLevel(height) {
|
|
734
|
-
return D + (A - D) / (1 + (height / C) ** B);
|
|
735
|
-
}
|
|
736
211
|
|
|
737
212
|
//#endregion
|
|
738
213
|
//#region useCesiumFps/index.ts
|
|
739
214
|
/**
|
|
740
|
-
* Reactive get the frame rate of Cesium
|
|
741
|
-
* @param options options
|
|
742
|
-
* @returns Reactive fps states
|
|
743
|
-
*/
|
|
744
|
-
function useCesiumFps(options = {}) {
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
}
|
|
215
|
+
* Reactive get the frame rate of Cesium
|
|
216
|
+
* @param options options
|
|
217
|
+
* @returns Reactive fps states
|
|
218
|
+
*/
|
|
219
|
+
function useCesiumFps(options = {}) {
|
|
220
|
+
const { delay = 100 } = options;
|
|
221
|
+
const viewer = useViewer();
|
|
222
|
+
const p = (0, vue.shallowRef)(performance.now());
|
|
223
|
+
useCesiumEventListener(() => viewer.value?.scene.postRender, () => p.value = performance.now());
|
|
224
|
+
const interval = (0, vue.ref)(0);
|
|
225
|
+
(0, __vueuse_core.watchThrottled)(p, (value, oldValue) => {
|
|
226
|
+
interval.value = value - oldValue;
|
|
227
|
+
}, { throttle: delay });
|
|
228
|
+
const fps = (0, vue.computed)(() => {
|
|
229
|
+
return 1e3 / interval.value;
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
interval: (0, vue.readonly)(interval),
|
|
233
|
+
fps
|
|
234
|
+
};
|
|
235
|
+
}
|
|
761
236
|
|
|
762
237
|
//#endregion
|
|
763
238
|
//#region useCollectionScope/index.ts
|
|
764
239
|
/**
|
|
765
|
-
* Scope the SideEffects of Cesium-related `Collection` and automatically remove them when unmounted.
|
|
766
|
-
* - note: This is a basic function that is intended to be called by other lower-level function
|
|
767
|
-
* @
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
removeScope
|
|
809
|
-
};
|
|
810
|
-
}
|
|
240
|
+
* Scope the SideEffects of Cesium-related `Collection` and automatically remove them when unmounted.
|
|
241
|
+
* - note: This is a basic function that is intended to be called by other lower-level function
|
|
242
|
+
* @returns Contains side effect addition and removal functions
|
|
243
|
+
*/
|
|
244
|
+
function useCollectionScope(options) {
|
|
245
|
+
const { addEffect, removeEffect, removeScopeArgs } = options;
|
|
246
|
+
const scope = (0, vue.shallowReactive)(/* @__PURE__ */ new Set());
|
|
247
|
+
const add = (instance, ...args) => {
|
|
248
|
+
const result = addEffect(instance, ...args);
|
|
249
|
+
if ((0, __vesium_shared.isPromise)(result)) return new Promise((resolve, reject) => {
|
|
250
|
+
result.then((i) => {
|
|
251
|
+
scope.add(i);
|
|
252
|
+
resolve(i);
|
|
253
|
+
}).catch((error) => reject(error));
|
|
254
|
+
});
|
|
255
|
+
else {
|
|
256
|
+
scope.add(result);
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
const remove = (instance, ...args) => {
|
|
261
|
+
scope.delete(instance);
|
|
262
|
+
return removeEffect(instance, ...args);
|
|
263
|
+
};
|
|
264
|
+
const removeWhere = (predicate, ...args) => {
|
|
265
|
+
scope.forEach((instance) => {
|
|
266
|
+
if (predicate(instance)) remove(instance, ...args);
|
|
267
|
+
});
|
|
268
|
+
};
|
|
269
|
+
const removeScope = (...args) => {
|
|
270
|
+
scope.forEach((instance) => {
|
|
271
|
+
remove(instance, ...args);
|
|
272
|
+
});
|
|
273
|
+
};
|
|
274
|
+
(0, __vueuse_core.tryOnScopeDispose)(() => removeScope(...removeScopeArgs));
|
|
275
|
+
return {
|
|
276
|
+
scope: (0, vue.shallowReadonly)(scope),
|
|
277
|
+
add,
|
|
278
|
+
remove,
|
|
279
|
+
removeWhere,
|
|
280
|
+
removeScope
|
|
281
|
+
};
|
|
282
|
+
}
|
|
811
283
|
|
|
812
284
|
//#endregion
|
|
813
285
|
//#region useDataSource/index.ts
|
|
814
|
-
function useDataSource(dataSources, options = {}) {
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
}
|
|
286
|
+
function useDataSource(dataSources, options = {}) {
|
|
287
|
+
const { destroyOnRemove, collection, isActive = true, evaluating } = options;
|
|
288
|
+
const result = (0, __vueuse_core.computedAsync)(() => toPromiseValue(dataSources), void 0, { evaluating });
|
|
289
|
+
const viewer = useViewer();
|
|
290
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
291
|
+
if ((0, vue.toValue)(isActive)) {
|
|
292
|
+
const list = Array.isArray(result.value) ? [...result.value] : [result.value];
|
|
293
|
+
const _collection = collection ?? viewer.value?.dataSources;
|
|
294
|
+
list.forEach((item) => item && _collection?.add(item));
|
|
295
|
+
onCleanup(() => {
|
|
296
|
+
const destroy = (0, vue.toValue)(destroyOnRemove);
|
|
297
|
+
!_collection?.isDestroyed() && list.forEach((dataSource) => dataSource && _collection?.remove(dataSource, destroy));
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
832
303
|
|
|
833
304
|
//#endregion
|
|
834
305
|
//#region useDataSourceScope/index.ts
|
|
835
306
|
/**
|
|
836
|
-
*
|
|
837
|
-
*/
|
|
838
|
-
function useDataSourceScope(options = {}) {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
307
|
+
* Scope the SideEffects of `DataSourceCollection` operations and automatically remove them when unmounted
|
|
308
|
+
*/
|
|
309
|
+
function useDataSourceScope(options = {}) {
|
|
310
|
+
const { collection: _collection, destroyOnRemove } = options;
|
|
311
|
+
const viewer = useViewer();
|
|
312
|
+
const collection = (0, vue.computed)(() => {
|
|
313
|
+
return (0, vue.toValue)(_collection) ?? viewer.value?.dataSources;
|
|
314
|
+
});
|
|
315
|
+
return useCollectionScope({
|
|
316
|
+
addEffect(instance) {
|
|
317
|
+
if (!collection.value) throw new Error("collection is not defined");
|
|
318
|
+
if ((0, __vesium_shared.isPromise)(instance)) return new Promise((resolve, reject) => {
|
|
319
|
+
instance.then((i) => {
|
|
320
|
+
collection.value.add(i);
|
|
321
|
+
resolve(i);
|
|
322
|
+
}).catch((error) => reject(error));
|
|
323
|
+
});
|
|
324
|
+
else {
|
|
325
|
+
collection.value.add(instance);
|
|
326
|
+
return instance;
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
removeEffect(instance, destroy) {
|
|
330
|
+
return !!collection.value?.remove(instance, destroy);
|
|
331
|
+
},
|
|
332
|
+
removeScopeArgs: [destroyOnRemove]
|
|
333
|
+
});
|
|
334
|
+
}
|
|
860
335
|
|
|
861
336
|
//#endregion
|
|
862
337
|
//#region useElementOverlay/index.ts
|
|
863
338
|
/**
|
|
864
|
-
* Cesium HtmlElement Overlay
|
|
865
|
-
*/
|
|
866
|
-
function useElementOverlay(target, position, options = {}) {
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
339
|
+
* Cesium HtmlElement Overlay
|
|
340
|
+
*/
|
|
341
|
+
function useElementOverlay(target, position, options = {}) {
|
|
342
|
+
const { referenceWindow, horizontal = "center", vertical = "bottom", offset = {
|
|
343
|
+
x: 0,
|
|
344
|
+
y: 0
|
|
345
|
+
} } = options;
|
|
346
|
+
const cartesian3 = (0, vue.computed)(() => (0, __vesium_shared.toCartesian3)((0, vue.toValue)(position)));
|
|
347
|
+
const viewer = useViewer();
|
|
348
|
+
const coord = (0, vue.shallowRef)();
|
|
349
|
+
useCesiumEventListener(() => viewer.value?.scene.postRender, () => {
|
|
350
|
+
if (!viewer.value?.scene) return;
|
|
351
|
+
if (!cartesian3.value) coord.value = void 0;
|
|
352
|
+
else {
|
|
353
|
+
const result = (0, __vesium_shared.cartesianToCanvasCoord)(cartesian3.value, viewer.value.scene);
|
|
354
|
+
coord.value = !cesium.Cartesian2.equals(result, coord.value) ? result : coord.value;
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
const canvasBounding = (0, __vueuse_core.useElementBounding)(() => viewer.value?.canvas.parentElement);
|
|
358
|
+
const targetBounding = (0, __vueuse_core.useElementBounding)(target);
|
|
359
|
+
const finalOffset = (0, vue.computed)(() => {
|
|
360
|
+
const _offset = (0, vue.toValue)(offset);
|
|
361
|
+
let x$1 = _offset?.x ?? 0;
|
|
362
|
+
const _horizontal = (0, vue.toValue)(horizontal);
|
|
363
|
+
if (_horizontal === "center") x$1 -= targetBounding.width.value / 2;
|
|
364
|
+
else if (_horizontal === "right") x$1 -= targetBounding.width.value;
|
|
365
|
+
let y$1 = _offset?.y ?? 0;
|
|
366
|
+
const _vertical = (0, vue.toValue)(vertical);
|
|
367
|
+
if (_vertical === "center") y$1 -= targetBounding.height.value / 2;
|
|
368
|
+
else if (_vertical === "bottom") y$1 -= targetBounding.height.value;
|
|
369
|
+
return {
|
|
370
|
+
x: x$1,
|
|
371
|
+
y: y$1
|
|
372
|
+
};
|
|
373
|
+
});
|
|
374
|
+
const location = (0, vue.computed)(() => {
|
|
375
|
+
const data = {
|
|
376
|
+
x: coord.value?.x ?? 0,
|
|
377
|
+
y: coord.value?.y ?? 0
|
|
378
|
+
};
|
|
379
|
+
if ((0, vue.toValue)(referenceWindow)) {
|
|
380
|
+
data.x += canvasBounding.x.value;
|
|
381
|
+
data.y += canvasBounding.y.value;
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
x: finalOffset.value.x + data.x,
|
|
385
|
+
y: finalOffset.value.y + data.y
|
|
386
|
+
};
|
|
387
|
+
});
|
|
388
|
+
const x = (0, vue.computed)(() => location.value.x);
|
|
389
|
+
const y = (0, vue.computed)(() => location.value.y);
|
|
390
|
+
const style = (0, vue.computed)(() => ({
|
|
391
|
+
left: `${x.value?.toFixed(2)}px`,
|
|
392
|
+
top: `${y.value?.toFixed(2)}px`
|
|
393
|
+
}));
|
|
394
|
+
(0, vue.watchEffect)(() => {
|
|
395
|
+
const element = (0, vue.toValue)(target);
|
|
396
|
+
if (element && (0, vue.toValue)(options.applyStyle ?? true)) {
|
|
397
|
+
element.style?.setProperty?.("left", style.value.left);
|
|
398
|
+
element.style?.setProperty?.("top", style.value.top);
|
|
399
|
+
}
|
|
400
|
+
});
|
|
908
401
|
return {
|
|
909
|
-
x
|
|
910
|
-
y
|
|
402
|
+
x,
|
|
403
|
+
y,
|
|
404
|
+
style
|
|
911
405
|
};
|
|
912
|
-
}
|
|
913
|
-
const x = (0, vue.computed)(() => location.value.x);
|
|
914
|
-
const y = (0, vue.computed)(() => location.value.y);
|
|
915
|
-
const style = (0, vue.computed)(() => ({
|
|
916
|
-
left: `${x.value?.toFixed(2)}px`,
|
|
917
|
-
top: `${y.value?.toFixed(2)}px`
|
|
918
|
-
}));
|
|
919
|
-
(0, vue.watchEffect)(() => {
|
|
920
|
-
const element = (0, vue.toValue)(target);
|
|
921
|
-
if (element && (0, vue.toValue)(options.applyStyle ?? true)) {
|
|
922
|
-
element.style?.setProperty?.("left", style.value.left);
|
|
923
|
-
element.style?.setProperty?.("top", style.value.top);
|
|
924
|
-
}
|
|
925
|
-
});
|
|
926
|
-
return {
|
|
927
|
-
x,
|
|
928
|
-
y,
|
|
929
|
-
style
|
|
930
|
-
};
|
|
931
|
-
}
|
|
406
|
+
}
|
|
932
407
|
|
|
933
408
|
//#endregion
|
|
934
409
|
//#region useEntity/index.ts
|
|
935
|
-
function useEntity(data, options = {}) {
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
}
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
}
|
|
410
|
+
function useEntity(data, options = {}) {
|
|
411
|
+
const { collection, isActive = true, evaluating } = options;
|
|
412
|
+
const result = (0, __vueuse_core.computedAsync)(() => toPromiseValue(data), [], { evaluating });
|
|
413
|
+
const viewer = useViewer();
|
|
414
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
415
|
+
if ((0, vue.toValue)(isActive)) {
|
|
416
|
+
const list = Array.isArray(result.value) ? [...result.value] : [result.value];
|
|
417
|
+
const _collection = collection ?? viewer.value?.entities;
|
|
418
|
+
list.forEach((item) => item && _collection?.add(item));
|
|
419
|
+
onCleanup(() => {
|
|
420
|
+
list.forEach((item) => item && _collection?.remove(item));
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
return result;
|
|
425
|
+
}
|
|
952
426
|
|
|
953
427
|
//#endregion
|
|
954
428
|
//#region useEntityScope/index.ts
|
|
955
429
|
/**
|
|
956
|
-
* Make `add` and `remove` operations of `EntityCollection` scoped,
|
|
957
|
-
* automatically remove `Entity` instance when component is unmounted.
|
|
958
|
-
*/
|
|
959
|
-
function useEntityScope(options = {}) {
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
}
|
|
430
|
+
* Make `add` and `remove` operations of `EntityCollection` scoped,
|
|
431
|
+
* automatically remove `Entity` instance when component is unmounted.
|
|
432
|
+
*/
|
|
433
|
+
function useEntityScope(options = {}) {
|
|
434
|
+
const { collection: _collection } = options;
|
|
435
|
+
const viewer = useViewer();
|
|
436
|
+
const collection = (0, vue.computed)(() => {
|
|
437
|
+
return (0, vue.toValue)(_collection) ?? viewer.value?.entities;
|
|
438
|
+
});
|
|
439
|
+
return useCollectionScope({
|
|
440
|
+
addEffect(instance) {
|
|
441
|
+
if (!collection.value) throw new Error("collection is not defined");
|
|
442
|
+
if ((0, __vesium_shared.isPromise)(instance)) return new Promise((resolve, reject) => {
|
|
443
|
+
instance.then((i) => {
|
|
444
|
+
collection.value.add(i);
|
|
445
|
+
resolve(i);
|
|
446
|
+
}).catch((error) => reject(error));
|
|
447
|
+
});
|
|
448
|
+
else {
|
|
449
|
+
collection.value.add(instance);
|
|
450
|
+
return instance;
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
removeEffect(instance) {
|
|
454
|
+
return !!collection.value?.remove(instance);
|
|
455
|
+
},
|
|
456
|
+
removeScopeArgs: []
|
|
457
|
+
});
|
|
458
|
+
}
|
|
982
459
|
|
|
983
460
|
//#endregion
|
|
984
461
|
//#region useScenePick/index.ts
|
|
985
|
-
const pickCache = /* @__PURE__ */ new WeakMap();
|
|
986
|
-
/**
|
|
987
|
-
* Uses the `scene.pick` function in Cesium's Scene object to perform screen point picking,
|
|
988
|
-
* return a computed property containing the pick result, or undefined if no object is picked.
|
|
989
|
-
*
|
|
990
|
-
* @param windowPosition The screen coordinates of the pick point.
|
|
991
|
-
*/
|
|
992
|
-
function useScenePick(windowPosition, options = {}) {
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
462
|
+
const pickCache = /* @__PURE__ */ new WeakMap();
|
|
463
|
+
/**
|
|
464
|
+
* Uses the `scene.pick` function in Cesium's Scene object to perform screen point picking,
|
|
465
|
+
* return a computed property containing the pick result, or undefined if no object is picked.
|
|
466
|
+
*
|
|
467
|
+
* @param windowPosition The screen coordinates of the pick point.
|
|
468
|
+
*/
|
|
469
|
+
function useScenePick(windowPosition, options = {}) {
|
|
470
|
+
const { width = 3, height = 3, throttled = 8 } = options;
|
|
471
|
+
const isActive = (0, vue.toRef)(options.isActive ?? true);
|
|
472
|
+
const viewer = useViewer();
|
|
473
|
+
const position = (0, __vueuse_core.refThrottled)((0, vue.computed)(() => (0, vue.toValue)(windowPosition)?.clone()), throttled, false, true);
|
|
474
|
+
const pick = (0, vue.shallowRef)();
|
|
475
|
+
(0, vue.watchEffect)(() => {
|
|
476
|
+
if (viewer.value && position.value && isActive.value) {
|
|
477
|
+
const cache = pickCache.get(viewer.value);
|
|
478
|
+
if (cache && cache[0].equals(position.value)) pick.value = cache[1];
|
|
479
|
+
else {
|
|
480
|
+
pickCache.set(viewer.value, [position.value.clone(), pick.value]);
|
|
481
|
+
pick.value = viewer.value?.scene.pick(position.value, (0, vue.toValue)(width), (0, vue.toValue)(height));
|
|
482
|
+
}
|
|
1005
483
|
}
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
}
|
|
484
|
+
});
|
|
485
|
+
return pick;
|
|
486
|
+
}
|
|
1010
487
|
|
|
1011
488
|
//#endregion
|
|
1012
489
|
//#region useScreenSpaceEventHandler/index.ts
|
|
1013
490
|
/**
|
|
1014
|
-
* Easily use the `ScreenSpaceEventHandler`,
|
|
1015
|
-
* when the dependent data changes or the component is unmounted,
|
|
1016
|
-
* the listener function will automatically reload or destroy.
|
|
1017
|
-
*
|
|
1018
|
-
* @param type Types of mouse event
|
|
1019
|
-
* @param inputAction Callback function for listening
|
|
1020
|
-
*/
|
|
1021
|
-
function useScreenSpaceEventHandler(type, inputAction, options = {}) {
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
}
|
|
491
|
+
* Easily use the `ScreenSpaceEventHandler`,
|
|
492
|
+
* when the dependent data changes or the component is unmounted,
|
|
493
|
+
* the listener function will automatically reload or destroy.
|
|
494
|
+
*
|
|
495
|
+
* @param type Types of mouse event
|
|
496
|
+
* @param inputAction Callback function for listening
|
|
497
|
+
*/
|
|
498
|
+
function useScreenSpaceEventHandler(type, inputAction, options = {}) {
|
|
499
|
+
const { modifier } = options;
|
|
500
|
+
const viewer = useViewer();
|
|
501
|
+
const isActive = (0, vue.toRef)(options.isActive ?? true);
|
|
502
|
+
const handler = (0, vue.computed)(() => {
|
|
503
|
+
if (viewer.value?.cesiumWidget?.canvas) return new cesium.ScreenSpaceEventHandler(viewer.value.cesiumWidget.canvas);
|
|
504
|
+
});
|
|
505
|
+
const cleanup1 = (0, vue.watch)(handler, (_value, previous) => {
|
|
506
|
+
viewer.value?.cesiumWidget && previous?.destroy();
|
|
507
|
+
});
|
|
508
|
+
const cleanup2 = (0, vue.watchEffect)((onCleanup) => {
|
|
509
|
+
const typeValue = (0, vue.toValue)(type);
|
|
510
|
+
const modifierValue = (0, vue.toValue)(modifier);
|
|
511
|
+
const handlerValue = (0, vue.toValue)(handler);
|
|
512
|
+
if (!handlerValue || !isActive.value || !inputAction) return;
|
|
513
|
+
if ((0, __vesium_shared.isDef)(typeValue)) {
|
|
514
|
+
handlerValue.setInputAction(inputAction, typeValue, modifierValue);
|
|
515
|
+
onCleanup(() => handlerValue.removeInputAction(typeValue, modifierValue));
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
const stop = () => {
|
|
519
|
+
cleanup1();
|
|
520
|
+
cleanup2();
|
|
521
|
+
};
|
|
522
|
+
(0, __vueuse_core.tryOnScopeDispose)(stop);
|
|
523
|
+
return stop;
|
|
524
|
+
}
|
|
1048
525
|
|
|
1049
526
|
//#endregion
|
|
1050
527
|
//#region useGraphicEvent/useDrag.ts
|
|
1051
528
|
/**
|
|
1052
|
-
* Use graphic drag events with ease, and remove listener automatically on unmounted.
|
|
1053
|
-
*/
|
|
1054
|
-
function useDrag(listener) {
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
529
|
+
* Use graphic drag events with ease, and remove listener automatically on unmounted.
|
|
530
|
+
*/
|
|
531
|
+
function useDrag(listener) {
|
|
532
|
+
const position = (0, vue.shallowRef)();
|
|
533
|
+
const pick = useScenePick(position);
|
|
534
|
+
const motionEvent = (0, vue.shallowRef)();
|
|
535
|
+
const dragging = (0, vue.ref)(false);
|
|
536
|
+
const viewer = useViewer();
|
|
537
|
+
const cameraLocked = (0, vue.ref)(false);
|
|
538
|
+
(0, vue.watch)(cameraLocked, (cameraLocked$1) => {
|
|
539
|
+
viewer.value && (viewer.value.scene.screenSpaceCameraController.enableRotate = !cameraLocked$1);
|
|
540
|
+
});
|
|
541
|
+
const lockCamera = () => {
|
|
542
|
+
cameraLocked.value = true;
|
|
543
|
+
};
|
|
544
|
+
const execute = (pick$1, startPosition, endPosition) => {
|
|
545
|
+
listener({
|
|
546
|
+
event: {
|
|
547
|
+
startPosition: startPosition.clone(),
|
|
548
|
+
endPosition: endPosition.clone()
|
|
549
|
+
},
|
|
550
|
+
pick: pick$1,
|
|
551
|
+
dragging: dragging.value,
|
|
552
|
+
lockCamera
|
|
553
|
+
});
|
|
554
|
+
(0, vue.nextTick)(() => {
|
|
555
|
+
if (!dragging.value && cameraLocked.value) cameraLocked.value = false;
|
|
556
|
+
});
|
|
557
|
+
};
|
|
558
|
+
const stopLeftDownWatch = useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.LEFT_DOWN, (event) => {
|
|
559
|
+
dragging.value = true;
|
|
560
|
+
position.value = event.position.clone();
|
|
561
|
+
});
|
|
562
|
+
const stopMouseMoveWatch = useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.MOUSE_MOVE, (0, __vesium_shared.throttle)(({ startPosition, endPosition }) => {
|
|
563
|
+
motionEvent.value = {
|
|
564
|
+
startPosition: motionEvent.value?.endPosition.clone() || startPosition.clone(),
|
|
1071
565
|
endPosition: endPosition.clone()
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
566
|
+
};
|
|
567
|
+
}, 8, false, true));
|
|
568
|
+
(0, vue.watch)([pick, motionEvent], ([pick$1, motionEvent$1]) => {
|
|
569
|
+
if (pick$1 && motionEvent$1) {
|
|
570
|
+
const { startPosition, endPosition } = motionEvent$1;
|
|
571
|
+
dragging.value && execute(pick$1, startPosition, endPosition);
|
|
572
|
+
}
|
|
1076
573
|
});
|
|
1077
|
-
(
|
|
1078
|
-
|
|
574
|
+
const stopLeftUpWatch = useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.LEFT_UP, (event) => {
|
|
575
|
+
dragging.value = false;
|
|
576
|
+
if (pick.value && motionEvent.value) execute(pick.value, motionEvent.value.endPosition, event.position);
|
|
577
|
+
position.value = void 0;
|
|
578
|
+
motionEvent.value = void 0;
|
|
1079
579
|
});
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
});
|
|
1085
|
-
const stopMouseMoveWatch = useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.MOUSE_MOVE, throttle(({ startPosition, endPosition }) => {
|
|
1086
|
-
motionEvent.value = {
|
|
1087
|
-
startPosition: motionEvent.value?.endPosition.clone() || startPosition.clone(),
|
|
1088
|
-
endPosition: endPosition.clone()
|
|
580
|
+
const stop = () => {
|
|
581
|
+
stopLeftDownWatch();
|
|
582
|
+
stopMouseMoveWatch();
|
|
583
|
+
stopLeftUpWatch();
|
|
1089
584
|
};
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
const { startPosition, endPosition } = motionEvent$1;
|
|
1094
|
-
dragging.value && execute(pick$1, startPosition, endPosition);
|
|
1095
|
-
}
|
|
1096
|
-
});
|
|
1097
|
-
const stopLeftUpWatch = useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.LEFT_UP, (event) => {
|
|
1098
|
-
dragging.value = false;
|
|
1099
|
-
if (pick.value && motionEvent.value) execute(pick.value, motionEvent.value.endPosition, event.position);
|
|
1100
|
-
position.value = void 0;
|
|
1101
|
-
motionEvent.value = void 0;
|
|
1102
|
-
});
|
|
1103
|
-
const stop = () => {
|
|
1104
|
-
stopLeftDownWatch();
|
|
1105
|
-
stopMouseMoveWatch();
|
|
1106
|
-
stopLeftUpWatch();
|
|
1107
|
-
};
|
|
1108
|
-
(0, __vueuse_core.tryOnScopeDispose)(stop);
|
|
1109
|
-
return stop;
|
|
1110
|
-
}
|
|
585
|
+
(0, __vueuse_core.tryOnScopeDispose)(stop);
|
|
586
|
+
return stop;
|
|
587
|
+
}
|
|
1111
588
|
|
|
1112
589
|
//#endregion
|
|
1113
590
|
//#region useGraphicEvent/useHover.ts
|
|
1114
591
|
/**
|
|
1115
|
-
* Use graphic hover events with ease, and remove listener automatically on unmounted.
|
|
1116
|
-
*/
|
|
1117
|
-
function useHover(listener) {
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
592
|
+
* Use graphic hover events with ease, and remove listener automatically on unmounted.
|
|
593
|
+
*/
|
|
594
|
+
function useHover(listener) {
|
|
595
|
+
const motionEvent = (0, vue.shallowRef)();
|
|
596
|
+
const pick = useScenePick(() => motionEvent.value?.endPosition);
|
|
597
|
+
const execute = (pick$1, startPosition, endPosition, hovering) => {
|
|
598
|
+
listener({
|
|
599
|
+
event: {
|
|
600
|
+
startPosition: startPosition.clone(),
|
|
601
|
+
endPosition: endPosition.clone()
|
|
602
|
+
},
|
|
603
|
+
pick: pick$1,
|
|
604
|
+
hovering
|
|
605
|
+
});
|
|
606
|
+
};
|
|
607
|
+
useScreenSpaceEventHandler(cesium.ScreenSpaceEventType.MOUSE_MOVE, ({ startPosition, endPosition }) => {
|
|
608
|
+
if (!startPosition.equals(motionEvent.value?.startPosition) || !endPosition.equals(motionEvent.value?.endPosition)) motionEvent.value = {
|
|
1123
609
|
startPosition: startPosition.clone(),
|
|
1124
610
|
endPosition: endPosition.clone()
|
|
1125
|
-
}
|
|
1126
|
-
pick: pick$1,
|
|
1127
|
-
hovering
|
|
611
|
+
};
|
|
1128
612
|
});
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
};
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
}
|
|
1141
|
-
}
|
|
1142
|
-
(0, vue.watch)(pick, (pick$1, prevPick) => {
|
|
1143
|
-
if (prevPick && motionEvent.value) {
|
|
1144
|
-
const { startPosition, endPosition } = motionEvent.value;
|
|
1145
|
-
execute(prevPick, startPosition, endPosition, false);
|
|
1146
|
-
}
|
|
1147
|
-
});
|
|
1148
|
-
}
|
|
613
|
+
(0, vue.watch)([pick, motionEvent], ([pick$1, motionEvent$1]) => {
|
|
614
|
+
if (pick$1 && motionEvent$1) {
|
|
615
|
+
const { startPosition, endPosition } = motionEvent$1;
|
|
616
|
+
execute(pick$1, startPosition, endPosition, true);
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
(0, vue.watch)(pick, (pick$1, prevPick) => {
|
|
620
|
+
if (prevPick && motionEvent.value) {
|
|
621
|
+
const { startPosition, endPosition } = motionEvent.value;
|
|
622
|
+
execute(prevPick, startPosition, endPosition, false);
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
}
|
|
1149
626
|
|
|
1150
627
|
//#endregion
|
|
1151
628
|
//#region useGraphicEvent/usePositioned.ts
|
|
1152
629
|
/**
|
|
1153
|
-
* @internal
|
|
1154
|
-
*/
|
|
1155
|
-
const EVENT_TYPE_RECORD = {
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
};
|
|
1167
|
-
function usePositioned(type, listener) {
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
630
|
+
* @internal
|
|
631
|
+
*/
|
|
632
|
+
const EVENT_TYPE_RECORD = {
|
|
633
|
+
LEFT_DOWN: cesium.ScreenSpaceEventType.LEFT_DOWN,
|
|
634
|
+
LEFT_UP: cesium.ScreenSpaceEventType.LEFT_UP,
|
|
635
|
+
LEFT_CLICK: cesium.ScreenSpaceEventType.LEFT_CLICK,
|
|
636
|
+
LEFT_DOUBLE_CLICK: cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK,
|
|
637
|
+
RIGHT_DOWN: cesium.ScreenSpaceEventType.RIGHT_DOWN,
|
|
638
|
+
RIGHT_UP: cesium.ScreenSpaceEventType.RIGHT_UP,
|
|
639
|
+
RIGHT_CLICK: cesium.ScreenSpaceEventType.RIGHT_CLICK,
|
|
640
|
+
MIDDLE_DOWN: cesium.ScreenSpaceEventType.MIDDLE_DOWN,
|
|
641
|
+
MIDDLE_UP: cesium.ScreenSpaceEventType.MIDDLE_UP,
|
|
642
|
+
MIDDLE_CLICK: cesium.ScreenSpaceEventType.MIDDLE_CLICK
|
|
643
|
+
};
|
|
644
|
+
function usePositioned(type, listener) {
|
|
645
|
+
const screenEvent = EVENT_TYPE_RECORD[type];
|
|
646
|
+
const viewer = useViewer();
|
|
647
|
+
useScreenSpaceEventHandler(screenEvent, (event) => {
|
|
648
|
+
const position = event.position;
|
|
649
|
+
const pick = viewer.value?.scene.pick(position);
|
|
650
|
+
pick && position && listener({
|
|
651
|
+
event: { position },
|
|
652
|
+
pick
|
|
653
|
+
});
|
|
1176
654
|
});
|
|
1177
|
-
}
|
|
1178
|
-
}
|
|
655
|
+
}
|
|
1179
656
|
|
|
1180
657
|
//#endregion
|
|
1181
658
|
//#region useGraphicEvent/index.ts
|
|
1182
|
-
const GLOBAL_GRAPHIC_SYMBOL = Symbol("GLOBAL_GRAPHIC_SYMBOL");
|
|
1183
|
-
const POSITIONED_EVENT_TYPES = [
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
];
|
|
1195
|
-
/**
|
|
1196
|
-
* Handle graphic event listeners and cursor styles for Cesium graphics.
|
|
1197
|
-
* You don't need to overly worry about memory leaks from the function, as it automatically cleans up internally.
|
|
1198
|
-
*/
|
|
1199
|
-
function useGraphicEvent() {
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
collection.get(graphic)?.get(type)?.forEach((fn) => tryRun(fn)?.(event));
|
|
659
|
+
const GLOBAL_GRAPHIC_SYMBOL = Symbol("GLOBAL_GRAPHIC_SYMBOL");
|
|
660
|
+
const POSITIONED_EVENT_TYPES = [
|
|
661
|
+
"LEFT_DOWN",
|
|
662
|
+
"LEFT_UP",
|
|
663
|
+
"LEFT_CLICK",
|
|
664
|
+
"LEFT_DOUBLE_CLICK",
|
|
665
|
+
"RIGHT_DOWN",
|
|
666
|
+
"RIGHT_UP",
|
|
667
|
+
"RIGHT_CLICK",
|
|
668
|
+
"MIDDLE_DOWN",
|
|
669
|
+
"MIDDLE_UP",
|
|
670
|
+
"MIDDLE_CLICK"
|
|
671
|
+
];
|
|
672
|
+
/**
|
|
673
|
+
* Handle graphic event listeners and cursor styles for Cesium graphics.
|
|
674
|
+
* You don't need to overly worry about memory leaks from the function, as it automatically cleans up internally.
|
|
675
|
+
*/
|
|
676
|
+
function useGraphicEvent() {
|
|
677
|
+
const collection = /* @__PURE__ */ new WeakMap();
|
|
678
|
+
const cursorCollection = /* @__PURE__ */ new WeakMap();
|
|
679
|
+
const dragCursorCollection = /* @__PURE__ */ new WeakMap();
|
|
680
|
+
const remove = (graphic, type, listener) => {
|
|
681
|
+
const _graphic = graphic === "global" ? GLOBAL_GRAPHIC_SYMBOL : graphic;
|
|
682
|
+
collection?.get(_graphic)?.get(type)?.delete(listener);
|
|
683
|
+
cursorCollection?.get(_graphic)?.get(type)?.delete(listener);
|
|
684
|
+
if (collection?.get(_graphic)?.get(type)?.size === 0) collection.get(_graphic).delete(type);
|
|
685
|
+
if (collection.get(_graphic)?.size === 0) collection.delete(_graphic);
|
|
686
|
+
cursorCollection?.get(_graphic)?.get(type)?.delete(listener);
|
|
687
|
+
if (cursorCollection?.get(_graphic)?.get(type)?.size === 0) cursorCollection?.get(_graphic)?.delete(type);
|
|
688
|
+
if (cursorCollection?.get(_graphic)?.size === 0) cursorCollection?.delete(_graphic);
|
|
689
|
+
dragCursorCollection?.get(_graphic)?.get(type)?.delete(listener);
|
|
690
|
+
if (dragCursorCollection?.get(_graphic)?.get(type)?.size === 0) dragCursorCollection?.get(_graphic)?.delete(type);
|
|
691
|
+
if (dragCursorCollection?.get(_graphic)?.size === 0) dragCursorCollection?.delete(_graphic);
|
|
692
|
+
};
|
|
693
|
+
const add = (graphic, type, listener, options = {}) => {
|
|
694
|
+
const _graphic = graphic === "global" ? GLOBAL_GRAPHIC_SYMBOL : graphic;
|
|
695
|
+
collection.get(_graphic) ?? collection.set(_graphic, /* @__PURE__ */ new Map());
|
|
696
|
+
const eventTypeMap = collection.get(_graphic);
|
|
697
|
+
eventTypeMap.get(type) ?? eventTypeMap.set(type, /* @__PURE__ */ new Set());
|
|
698
|
+
eventTypeMap.get(type).add(listener);
|
|
699
|
+
let { cursor = "pointer", dragCursor } = options;
|
|
700
|
+
if ((0, __vesium_shared.isDef)(cursor)) {
|
|
701
|
+
const _cursor = (0, __vesium_shared.isFunction)(cursor) ? cursor : () => cursor;
|
|
702
|
+
cursorCollection.get(_graphic) ?? cursorCollection.set(_graphic, /* @__PURE__ */ new Map());
|
|
703
|
+
cursorCollection.get(_graphic).get(type) ?? cursorCollection.get(_graphic).set(type, /* @__PURE__ */ new Map());
|
|
704
|
+
cursorCollection.get(_graphic).get(type).set(listener, _cursor);
|
|
705
|
+
}
|
|
706
|
+
if (type === "DRAG") dragCursor ??= ((event) => event?.dragging ? "crosshair" : void 0);
|
|
707
|
+
if ((0, __vesium_shared.isDef)(dragCursor)) {
|
|
708
|
+
const _dragCursor = (0, __vesium_shared.isFunction)(dragCursor) ? dragCursor : () => dragCursor;
|
|
709
|
+
dragCursorCollection.get(_graphic) ?? dragCursorCollection.set(_graphic, /* @__PURE__ */ new Map());
|
|
710
|
+
dragCursorCollection.get(_graphic).get(type) ?? dragCursorCollection.get(_graphic).set(type, /* @__PURE__ */ new Map());
|
|
711
|
+
dragCursorCollection.get(_graphic).get(type).set(listener, _dragCursor);
|
|
712
|
+
}
|
|
713
|
+
return () => remove(graphic, type, listener);
|
|
714
|
+
};
|
|
715
|
+
const clear = (graphic, type) => {
|
|
716
|
+
const _graphic = graphic === "global" ? GLOBAL_GRAPHIC_SYMBOL : graphic;
|
|
717
|
+
if (type === "all") {
|
|
718
|
+
collection.delete(_graphic);
|
|
719
|
+
cursorCollection.delete(_graphic);
|
|
720
|
+
dragCursorCollection.delete(_graphic);
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
collection.get(_graphic)?.delete(type);
|
|
724
|
+
if (collection.get(_graphic)?.size === 0) collection.delete(_graphic);
|
|
725
|
+
cursorCollection?.get(_graphic)?.delete(type);
|
|
726
|
+
dragCursorCollection?.get(_graphic)?.delete(type);
|
|
727
|
+
if (cursorCollection?.get(_graphic)?.size === 0) cursorCollection?.delete(_graphic);
|
|
728
|
+
if (dragCursorCollection?.get(_graphic)?.size === 0) dragCursorCollection?.delete(_graphic);
|
|
729
|
+
};
|
|
730
|
+
for (const type of POSITIONED_EVENT_TYPES) usePositioned(type, (event) => {
|
|
731
|
+
(0, __vesium_shared.resolvePick)(event.pick).concat(GLOBAL_GRAPHIC_SYMBOL).forEach((graphic) => {
|
|
732
|
+
collection.get(graphic)?.get(type)?.forEach((fn) => (0, __vesium_shared.tryRun)(fn)?.(event));
|
|
733
|
+
});
|
|
1258
734
|
});
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
viewer.value?.canvas.style?.setProperty("cursor", cursor);
|
|
735
|
+
const dragging = (0, vue.ref)(false);
|
|
736
|
+
const viewer = useViewer();
|
|
737
|
+
useHover((event) => {
|
|
738
|
+
(0, __vesium_shared.resolvePick)(event.pick).concat(GLOBAL_GRAPHIC_SYMBOL).forEach((graphic) => {
|
|
739
|
+
collection.get(graphic)?.get("HOVER")?.forEach((fn) => (0, __vesium_shared.tryRun)(fn)?.(event));
|
|
740
|
+
if (!dragging.value) cursorCollection.get(graphic)?.forEach((map) => {
|
|
741
|
+
map.forEach((fn) => {
|
|
742
|
+
const cursor = event.hovering ? (0, __vesium_shared.tryRun)(fn)(event) : "";
|
|
743
|
+
viewer.value?.canvas.style?.setProperty("cursor", cursor);
|
|
744
|
+
});
|
|
1270
745
|
});
|
|
1271
746
|
});
|
|
1272
747
|
});
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
748
|
+
useDrag((event) => {
|
|
749
|
+
const graphics = (0, __vesium_shared.resolvePick)(event.pick).concat(GLOBAL_GRAPHIC_SYMBOL);
|
|
750
|
+
dragging.value = event.dragging;
|
|
751
|
+
graphics.forEach((graphic) => {
|
|
752
|
+
collection.get(graphic)?.get("DRAG")?.forEach((fn) => (0, __vesium_shared.tryRun)(fn)(event));
|
|
753
|
+
dragCursorCollection.get(graphic)?.forEach((map) => {
|
|
754
|
+
map.forEach((fn) => {
|
|
755
|
+
const cursor = event.dragging ? (0, __vesium_shared.tryRun)(fn)(event) : "";
|
|
756
|
+
viewer.value?.canvas.style?.setProperty("cursor", cursor);
|
|
757
|
+
});
|
|
1283
758
|
});
|
|
1284
759
|
});
|
|
1285
760
|
});
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
761
|
+
return {
|
|
762
|
+
add,
|
|
763
|
+
remove,
|
|
764
|
+
clear
|
|
765
|
+
};
|
|
766
|
+
}
|
|
1293
767
|
|
|
1294
768
|
//#endregion
|
|
1295
769
|
//#region useImageryLayer/index.ts
|
|
1296
|
-
function useImageryLayer(data, options = {}) {
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
}
|
|
1321
|
-
}
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
}
|
|
770
|
+
function useImageryLayer(data, options = {}) {
|
|
771
|
+
const { destroyOnRemove, collection, isActive = true, evaluating } = options;
|
|
772
|
+
const result = (0, __vueuse_core.computedAsync)(() => toPromiseValue(data), [], { evaluating });
|
|
773
|
+
const viewer = useViewer();
|
|
774
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
775
|
+
if ((0, vue.toValue)(isActive)) {
|
|
776
|
+
const list = Array.isArray(result.value) ? [...result.value] : [result.value];
|
|
777
|
+
const _collection = collection ?? viewer.value?.imageryLayers;
|
|
778
|
+
if (collection?.isDestroyed()) return;
|
|
779
|
+
list.forEach((item) => {
|
|
780
|
+
if (!item) {
|
|
781
|
+
console.warn("ImageryLayer is undefined");
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
if (item?.isDestroyed()) {
|
|
785
|
+
console.warn("ImageryLayer is destroyed");
|
|
786
|
+
return;
|
|
787
|
+
}
|
|
788
|
+
_collection?.add(item);
|
|
789
|
+
});
|
|
790
|
+
onCleanup(() => {
|
|
791
|
+
const destroy = (0, vue.toValue)(destroyOnRemove);
|
|
792
|
+
list.forEach((item) => item && _collection?.remove(item, destroy));
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
return result;
|
|
797
|
+
}
|
|
1325
798
|
|
|
1326
799
|
//#endregion
|
|
1327
800
|
//#region useImageryLayerScope/index.ts
|
|
1328
801
|
/**
|
|
1329
|
-
* Make `add` and `remove` operations of `ImageryLayerCollection` scoped,
|
|
1330
|
-
* automatically remove `ImageryLayer` instance when component is unmounted.
|
|
1331
|
-
*/
|
|
1332
|
-
function useImageryLayerScope(options = {}) {
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
}
|
|
802
|
+
* Make `add` and `remove` operations of `ImageryLayerCollection` scoped,
|
|
803
|
+
* automatically remove `ImageryLayer` instance when component is unmounted.
|
|
804
|
+
*/
|
|
805
|
+
function useImageryLayerScope(options = {}) {
|
|
806
|
+
const { collection: _collection, destroyOnRemove } = options;
|
|
807
|
+
const viewer = useViewer();
|
|
808
|
+
const collection = (0, vue.computed)(() => {
|
|
809
|
+
return (0, vue.toValue)(_collection) ?? viewer.value?.imageryLayers;
|
|
810
|
+
});
|
|
811
|
+
return useCollectionScope({
|
|
812
|
+
addEffect(instance, index) {
|
|
813
|
+
if (!collection.value) throw new Error("collection is not defined");
|
|
814
|
+
if ((0, __vesium_shared.isPromise)(instance)) return new Promise((resolve, reject) => {
|
|
815
|
+
instance.then((i) => {
|
|
816
|
+
collection.value.add(i, index);
|
|
817
|
+
resolve(i);
|
|
818
|
+
}).catch((error) => reject(error));
|
|
819
|
+
});
|
|
820
|
+
else {
|
|
821
|
+
collection.value.add(instance, index);
|
|
822
|
+
return instance;
|
|
823
|
+
}
|
|
824
|
+
},
|
|
825
|
+
removeEffect(instance, destroy) {
|
|
826
|
+
return !!collection.value?.remove(instance, destroy);
|
|
827
|
+
},
|
|
828
|
+
removeScopeArgs: [destroyOnRemove]
|
|
829
|
+
});
|
|
830
|
+
}
|
|
1355
831
|
|
|
1356
832
|
//#endregion
|
|
1357
833
|
//#region usePostProcessStage/index.ts
|
|
1358
|
-
function usePostProcessStage(data, options = {}) {
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
}
|
|
1372
|
-
}
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
}
|
|
834
|
+
function usePostProcessStage(data, options = {}) {
|
|
835
|
+
const { collection, isActive = true, evaluating } = options;
|
|
836
|
+
const result = (0, __vueuse_core.computedAsync)(() => toPromiseValue(data), void 0, { evaluating });
|
|
837
|
+
const viewer = useViewer();
|
|
838
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
839
|
+
if (!viewer.value) return;
|
|
840
|
+
if ((0, vue.toValue)(isActive)) {
|
|
841
|
+
const list = Array.isArray(result.value) ? [...result.value] : [result.value];
|
|
842
|
+
const _collection = collection ?? viewer.value.scene.postProcessStages;
|
|
843
|
+
list.forEach((item) => item && _collection.add(item));
|
|
844
|
+
onCleanup(() => {
|
|
845
|
+
list.forEach((item) => item && _collection.remove(item));
|
|
846
|
+
});
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
return result;
|
|
850
|
+
}
|
|
1376
851
|
|
|
1377
852
|
//#endregion
|
|
1378
853
|
//#region usePostProcessStageScope/index.ts
|
|
1379
854
|
/**
|
|
1380
|
-
* Make `add` and `remove` operations of `PostProcessStageCollection` scoped,
|
|
1381
|
-
* automatically remove `PostProcessStage` instance when component is unmounted.
|
|
1382
|
-
*/
|
|
1383
|
-
function usePostProcessStageScope(options = {}) {
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
}
|
|
855
|
+
* Make `add` and `remove` operations of `PostProcessStageCollection` scoped,
|
|
856
|
+
* automatically remove `PostProcessStage` instance when component is unmounted.
|
|
857
|
+
*/
|
|
858
|
+
function usePostProcessStageScope(options = {}) {
|
|
859
|
+
const { collection: _collection } = options;
|
|
860
|
+
const viewer = useViewer();
|
|
861
|
+
const collection = (0, vue.computed)(() => {
|
|
862
|
+
return (0, vue.toValue)(_collection) ?? viewer.value?.postProcessStages;
|
|
863
|
+
});
|
|
864
|
+
return useCollectionScope({
|
|
865
|
+
addEffect(instance) {
|
|
866
|
+
if (!collection.value) throw new Error("collection is not defined");
|
|
867
|
+
if ((0, __vesium_shared.isPromise)(instance)) return new Promise((resolve, reject) => {
|
|
868
|
+
instance.then((instance$1) => {
|
|
869
|
+
collection.value.add(instance$1);
|
|
870
|
+
resolve(instance$1);
|
|
871
|
+
}).catch((error) => reject(error));
|
|
872
|
+
});
|
|
873
|
+
else return collection.value.add(instance);
|
|
874
|
+
},
|
|
875
|
+
removeEffect(instance, ...args) {
|
|
876
|
+
return !!collection.value?.remove(instance, ...args);
|
|
877
|
+
},
|
|
878
|
+
removeScopeArgs: []
|
|
879
|
+
});
|
|
880
|
+
}
|
|
1405
881
|
|
|
1406
882
|
//#endregion
|
|
1407
883
|
//#region usePrimitive/index.ts
|
|
1408
|
-
function usePrimitive(data, options = {}) {
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
}
|
|
1421
|
-
}
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
}
|
|
884
|
+
function usePrimitive(data, options = {}) {
|
|
885
|
+
const { collection, isActive = true, evaluating } = options;
|
|
886
|
+
const result = (0, __vueuse_core.computedAsync)(() => toPromiseValue(data), void 0, { evaluating });
|
|
887
|
+
const viewer = useViewer();
|
|
888
|
+
(0, vue.watchEffect)((onCleanup) => {
|
|
889
|
+
if ((0, vue.toValue)(isActive)) {
|
|
890
|
+
const list = Array.isArray(result.value) ? [...result.value] : [result.value];
|
|
891
|
+
const _collection = collection === "ground" ? viewer.value?.scene.groundPrimitives : collection ?? viewer.value?.scene.primitives;
|
|
892
|
+
list.forEach((item) => item && _collection?.add(item));
|
|
893
|
+
onCleanup(() => {
|
|
894
|
+
!_collection?.isDestroyed() && list.forEach((item) => item && _collection?.remove(item));
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
});
|
|
898
|
+
return result;
|
|
899
|
+
}
|
|
1425
900
|
|
|
1426
901
|
//#endregion
|
|
1427
902
|
//#region usePrimitiveScope/index.ts
|
|
1428
903
|
/**
|
|
1429
|
-
* Make `add` and `remove` operations of `PrimitiveCollection` scoped,
|
|
1430
|
-
* automatically remove `Primitive` instance when component is unmounted.
|
|
1431
|
-
*/
|
|
1432
|
-
function usePrimitiveScope(options = {}) {
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
904
|
+
* Make `add` and `remove` operations of `PrimitiveCollection` scoped,
|
|
905
|
+
* automatically remove `Primitive` instance when component is unmounted.
|
|
906
|
+
*/
|
|
907
|
+
function usePrimitiveScope(options = {}) {
|
|
908
|
+
const { collection: _collection } = options;
|
|
909
|
+
const viewer = useViewer();
|
|
910
|
+
const collection = (0, vue.computed)(() => {
|
|
911
|
+
const value = (0, vue.toValue)(_collection);
|
|
912
|
+
return value === "ground" ? viewer.value?.scene?.groundPrimitives : value || viewer.value?.scene.primitives;
|
|
913
|
+
});
|
|
914
|
+
const { scope, add, remove, removeWhere, removeScope } = useCollectionScope({
|
|
915
|
+
addEffect(instance, ...args) {
|
|
916
|
+
if (!collection.value) throw new Error("collection is not defined");
|
|
917
|
+
if ((0, __vesium_shared.isPromise)(instance)) return new Promise((resolve, reject) => {
|
|
918
|
+
instance.then((instance$1) => resolve(collection.value.add(instance$1, ...args))).catch((error) => reject(error));
|
|
919
|
+
});
|
|
920
|
+
else return collection.value.add(instance, ...args);
|
|
921
|
+
},
|
|
922
|
+
removeEffect(instance) {
|
|
923
|
+
return !!collection.value?.remove(instance);
|
|
924
|
+
},
|
|
925
|
+
removeScopeArgs: []
|
|
926
|
+
});
|
|
927
|
+
return {
|
|
928
|
+
scope,
|
|
929
|
+
add,
|
|
930
|
+
remove,
|
|
931
|
+
removeWhere,
|
|
932
|
+
removeScope
|
|
933
|
+
};
|
|
934
|
+
}
|
|
1454
935
|
|
|
1455
936
|
//#endregion
|
|
1456
937
|
//#region useScaleBar/index.ts
|
|
1457
|
-
const distances = [
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
].reverse();
|
|
1495
|
-
/**
|
|
1496
|
-
* Reactive generation of scale bars
|
|
1497
|
-
*/
|
|
1498
|
-
function useScaleBar(options = {}) {
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
pixelDistance: (0, vue.readonly)(pixelDistance),
|
|
1536
|
-
width,
|
|
1537
|
-
distance,
|
|
1538
|
-
distanceText
|
|
1539
|
-
};
|
|
1540
|
-
}
|
|
938
|
+
const distances = [
|
|
939
|
+
.01,
|
|
940
|
+
.05,
|
|
941
|
+
.1,
|
|
942
|
+
.5,
|
|
943
|
+
1,
|
|
944
|
+
2,
|
|
945
|
+
3,
|
|
946
|
+
5,
|
|
947
|
+
10,
|
|
948
|
+
20,
|
|
949
|
+
30,
|
|
950
|
+
50,
|
|
951
|
+
100,
|
|
952
|
+
200,
|
|
953
|
+
300,
|
|
954
|
+
500,
|
|
955
|
+
1e3,
|
|
956
|
+
2e3,
|
|
957
|
+
3e3,
|
|
958
|
+
5e3,
|
|
959
|
+
1e4,
|
|
960
|
+
2e4,
|
|
961
|
+
3e4,
|
|
962
|
+
5e4,
|
|
963
|
+
1e5,
|
|
964
|
+
2e5,
|
|
965
|
+
3e5,
|
|
966
|
+
5e5,
|
|
967
|
+
1e6,
|
|
968
|
+
2e6,
|
|
969
|
+
3e6,
|
|
970
|
+
5e6,
|
|
971
|
+
1e7,
|
|
972
|
+
2e7,
|
|
973
|
+
3e7,
|
|
974
|
+
5e7
|
|
975
|
+
].reverse();
|
|
976
|
+
/**
|
|
977
|
+
* Reactive generation of scale bars
|
|
978
|
+
*/
|
|
979
|
+
function useScaleBar(options = {}) {
|
|
980
|
+
const { maxPixel = 80, delay = 8 } = options;
|
|
981
|
+
const maxPixelRef = (0, vue.computed)(() => (0, vue.toValue)(maxPixel));
|
|
982
|
+
const viewer = useViewer();
|
|
983
|
+
const canvasSize = (0, __vueuse_core.useElementSize)(() => viewer.value?.canvas);
|
|
984
|
+
const pixelDistance = (0, vue.ref)();
|
|
985
|
+
const setPixelDistance = async () => {
|
|
986
|
+
await (0, vue.nextTick)();
|
|
987
|
+
const scene = viewer.value?.scene;
|
|
988
|
+
if (!scene) return;
|
|
989
|
+
const left = scene.camera.getPickRay(new cesium.Cartesian2(Math.floor(canvasSize.width.value / 2), canvasSize.height.value - 1));
|
|
990
|
+
const right = scene.camera.getPickRay(new cesium.Cartesian2(Math.floor(1 + canvasSize.width.value / 2), canvasSize.height.value - 1));
|
|
991
|
+
if (!left || !right) return;
|
|
992
|
+
const leftPosition = scene.globe.pick(left, scene);
|
|
993
|
+
const rightPosition = scene.globe.pick(right, scene);
|
|
994
|
+
if (!leftPosition || !rightPosition) return;
|
|
995
|
+
pixelDistance.value = new cesium.EllipsoidGeodesic(scene.globe.ellipsoid.cartesianToCartographic(leftPosition), scene.globe.ellipsoid.cartesianToCartographic(rightPosition)).surfaceDistance;
|
|
996
|
+
};
|
|
997
|
+
(0, __vueuse_core.watchImmediate)(viewer, () => setPixelDistance());
|
|
998
|
+
useCesiumEventListener(() => viewer.value?.camera.changed, (0, __vesium_shared.throttle)(setPixelDistance, delay));
|
|
999
|
+
const distance = (0, vue.computed)(() => {
|
|
1000
|
+
if (pixelDistance.value) return distances.find((item) => pixelDistance.value * maxPixelRef.value > item);
|
|
1001
|
+
});
|
|
1002
|
+
const width = (0, vue.computed)(() => {
|
|
1003
|
+
if (distance.value && pixelDistance.value) return distance.value / pixelDistance.value;
|
|
1004
|
+
return 0;
|
|
1005
|
+
});
|
|
1006
|
+
const distanceText = (0, vue.computed)(() => {
|
|
1007
|
+
if (distance.value) return distance.value > 1e3 ? `${distance.value / 1e3 || 0}km` : `${distance.value || 0}m`;
|
|
1008
|
+
});
|
|
1009
|
+
return {
|
|
1010
|
+
pixelDistance: (0, vue.readonly)(pixelDistance),
|
|
1011
|
+
width,
|
|
1012
|
+
distance,
|
|
1013
|
+
distanceText
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1541
1016
|
|
|
1542
1017
|
//#endregion
|
|
1543
1018
|
//#region useSceneDrillPick/index.ts
|
|
1544
1019
|
/**
|
|
1545
|
-
* Uses the `scene.drillPick` function to perform screen point picking,
|
|
1546
|
-
* return a computed property containing the pick result, or undefined if no object is picked.
|
|
1547
|
-
*
|
|
1548
|
-
* @param windowPosition The screen coordinates of the pick point.
|
|
1549
|
-
*/
|
|
1550
|
-
function useSceneDrillPick(windowPosition, options = {}) {
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
}
|
|
1020
|
+
* Uses the `scene.drillPick` function to perform screen point picking,
|
|
1021
|
+
* return a computed property containing the pick result, or undefined if no object is picked.
|
|
1022
|
+
*
|
|
1023
|
+
* @param windowPosition The screen coordinates of the pick point.
|
|
1024
|
+
*/
|
|
1025
|
+
function useSceneDrillPick(windowPosition, options = {}) {
|
|
1026
|
+
const { width = 3, height = 3, limit, throttled = 8, isActive = true } = options;
|
|
1027
|
+
const viewer = useViewer();
|
|
1028
|
+
const position = (0, __vueuse_core.refThrottled)((0, vue.computed)(() => (0, vue.toValue)(windowPosition)), throttled, false, true);
|
|
1029
|
+
return (0, vue.computed)(() => {
|
|
1030
|
+
if (position.value && (0, vue.toValue)(isActive)) return viewer.value?.scene.drillPick(position.value, (0, vue.toValue)(limit), (0, vue.toValue)(width), (0, vue.toValue)(height));
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1559
1033
|
|
|
1560
1034
|
//#endregion
|
|
1561
1035
|
exports.CREATE_VIEWER_COLLECTION = CREATE_VIEWER_COLLECTION;
|
|
1562
1036
|
exports.CREATE_VIEWER_INJECTION_KEY = CREATE_VIEWER_INJECTION_KEY;
|
|
1563
|
-
exports.CesiumMaterial = CesiumMaterial;
|
|
1564
|
-
exports.addMaterialCache = addMaterialCache;
|
|
1565
|
-
exports.arrayDiff = arrayDiff;
|
|
1566
|
-
exports.assertError = assertError;
|
|
1567
|
-
exports.canvasCoordToCartesian = canvasCoordToCartesian;
|
|
1568
|
-
exports.cartesianToCanvasCoord = cartesianToCanvasCoord;
|
|
1569
|
-
exports.cesiumEquals = cesiumEquals;
|
|
1570
|
-
exports.createCesiumAttribute = createCesiumAttribute;
|
|
1571
|
-
exports.createCesiumProperty = createCesiumProperty;
|
|
1572
|
-
exports.createPropertyField = createPropertyField;
|
|
1573
1037
|
exports.createViewer = createViewer;
|
|
1574
|
-
exports.degreesToDms = degreesToDms;
|
|
1575
|
-
exports.dmsDecode = dmsDecode;
|
|
1576
|
-
exports.dmsEncode = dmsEncode;
|
|
1577
|
-
exports.dmsToDegrees = dmsToDegrees;
|
|
1578
|
-
exports.getMaterialCache = getMaterialCache;
|
|
1579
|
-
exports.isArray = isArray;
|
|
1580
|
-
exports.isBase64 = isBase64;
|
|
1581
|
-
exports.isBoolean = isBoolean;
|
|
1582
|
-
exports.isCesiumConstant = isCesiumConstant;
|
|
1583
|
-
exports.isDef = isDef;
|
|
1584
|
-
exports.isElement = isElement;
|
|
1585
|
-
exports.isFunction = isFunction;
|
|
1586
|
-
exports.isNumber = isNumber;
|
|
1587
|
-
exports.isObject = isObject;
|
|
1588
|
-
exports.isPromise = isPromise;
|
|
1589
|
-
exports.isProperty = isProperty;
|
|
1590
|
-
exports.isString = isString;
|
|
1591
|
-
exports.isWindow = isWindow;
|
|
1592
|
-
exports.pickHitGraphic = pickHitGraphic;
|
|
1593
|
-
exports.resolvePick = resolvePick;
|
|
1594
|
-
exports.throttle = throttle;
|
|
1595
|
-
exports.toCartesian3 = toCartesian3;
|
|
1596
|
-
exports.toCartographic = toCartographic;
|
|
1597
|
-
exports.toCoord = toCoord;
|
|
1598
1038
|
exports.toPromiseValue = toPromiseValue;
|
|
1599
|
-
exports.toProperty = toProperty;
|
|
1600
|
-
exports.toPropertyValue = toPropertyValue;
|
|
1601
|
-
exports.tryRun = tryRun;
|
|
1602
1039
|
exports.useCameraState = useCameraState;
|
|
1603
1040
|
exports.useCesiumEventListener = useCesiumEventListener;
|
|
1604
1041
|
exports.useCesiumFps = useCesiumFps;
|
|
@@ -1620,5 +1057,12 @@ exports.useSceneDrillPick = useSceneDrillPick;
|
|
|
1620
1057
|
exports.useScenePick = useScenePick;
|
|
1621
1058
|
exports.useScreenSpaceEventHandler = useScreenSpaceEventHandler;
|
|
1622
1059
|
exports.useViewer = useViewer;
|
|
1623
|
-
|
|
1060
|
+
Object.keys(__vesium_shared).forEach(function (k) {
|
|
1061
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
1062
|
+
enumerable: true,
|
|
1063
|
+
get: function () { return __vesium_shared[k]; }
|
|
1064
|
+
});
|
|
1065
|
+
});
|
|
1066
|
+
|
|
1067
|
+
})(this.Vesium = this.Vesium || {}, VueUse, Cesium, Vue, Vesium);
|
|
1624
1068
|
//# sourceMappingURL=index.iife.js.map
|