bruce-cesium 7.3.9 → 7.4.0
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/dist/bruce-cesium.es5.js +2599 -603
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +2598 -600
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/bruce-cesium.js +8 -2
- package/dist/lib/bruce-cesium.js.map +1 -1
- package/dist/lib/rendering/render-managers/common/entity-label-group.js +482 -0
- package/dist/lib/rendering/render-managers/common/entity-label-group.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/entity-label.js +1213 -155
- package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
- package/dist/lib/rendering/render-managers/common/point-clustering-core.js +85 -0
- package/dist/lib/rendering/render-managers/common/point-clustering-core.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/point-clustering.js +566 -419
- package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +2 -2
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
- package/dist/lib/rendering/visuals-register.js +273 -24
- package/dist/lib/rendering/visuals-register.js.map +1 -1
- package/dist/types/bruce-cesium.d.ts +4 -1
- package/dist/types/rendering/render-managers/common/entity-label-group.d.ts +104 -0
- package/dist/types/rendering/render-managers/common/entity-label.d.ts +138 -1
- package/dist/types/rendering/render-managers/common/point-clustering-core.d.ts +17 -0
- package/dist/types/rendering/render-managers/common/point-clustering.d.ts +37 -72
- package/dist/types/rendering/visuals-register.d.ts +43 -2
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ const js_utils_1 = require("../internal/js-utils");
|
|
|
7
7
|
const cesium_show_gate_1 = require("../internal/cesium-show-gate");
|
|
8
8
|
const cesium_utils_1 = require("../internal/cesium-utils");
|
|
9
9
|
const entity_label_1 = require("../rendering/render-managers/common/entity-label");
|
|
10
|
+
const entity_label_group_1 = require("./render-managers/common/entity-label-group");
|
|
10
11
|
const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
|
|
11
12
|
const entity_render_engine_1 = require("./entity-render-engine");
|
|
12
13
|
const entity_utils_1 = require("../utils/entity-utils");
|
|
@@ -170,7 +171,7 @@ function updateEntityShow(viewer, rego, show) {
|
|
|
170
171
|
}
|
|
171
172
|
}
|
|
172
173
|
function updateEntity(viewer, entityId, register, refresh, cache = {}) {
|
|
173
|
-
var _a;
|
|
174
|
+
var _a, _b, _c;
|
|
174
175
|
if (!entityId) {
|
|
175
176
|
// What are we doing?
|
|
176
177
|
return;
|
|
@@ -283,20 +284,25 @@ function updateEntity(viewer, entityId, register, refresh, cache = {}) {
|
|
|
283
284
|
}
|
|
284
285
|
}
|
|
285
286
|
}
|
|
286
|
-
|
|
287
|
+
const labelGroup = register.GetLabelGroupFor(rego.entityId, rego.menuItemId);
|
|
288
|
+
if ((state.labelled || labelGroup) && visible) {
|
|
287
289
|
entity_label_1.EntityLabel.Attach({
|
|
288
290
|
rego,
|
|
289
291
|
viewer,
|
|
290
|
-
api: register.ApiGetters.GetBruceApi(),
|
|
291
|
-
visualRegister: register
|
|
292
|
+
api: (_b = register.ApiGetters) === null || _b === void 0 ? void 0 : _b.GetBruceApi(),
|
|
293
|
+
visualRegister: register,
|
|
294
|
+
options: labelGroup === null || labelGroup === void 0 ? void 0 : labelGroup.options,
|
|
295
|
+
groupId: labelGroup === null || labelGroup === void 0 ? void 0 : labelGroup.groupId,
|
|
296
|
+
persistent: true
|
|
292
297
|
});
|
|
293
298
|
}
|
|
294
|
-
else {
|
|
299
|
+
else if (!visible || ((_c = entity_label_1.EntityLabel.GetLabel({ rego })) === null || _c === void 0 ? void 0 : _c.Persistent)) {
|
|
295
300
|
entity_label_1.EntityLabel.Detatch({
|
|
296
|
-
rego
|
|
301
|
+
rego, force: true
|
|
297
302
|
});
|
|
298
303
|
}
|
|
299
304
|
}
|
|
305
|
+
register.RefreshLabelGroupEntity(entityId);
|
|
300
306
|
}
|
|
301
307
|
function markEntity(register, rego, visual, ignoreParent) {
|
|
302
308
|
const vis = visual;
|
|
@@ -411,6 +417,7 @@ var VisualsRegister;
|
|
|
411
417
|
}
|
|
412
418
|
return this.onUpdate;
|
|
413
419
|
}
|
|
420
|
+
get OnLabelGroupsChanged() { return this.labelGroupsChanged; }
|
|
414
421
|
constructor(params) {
|
|
415
422
|
this.id = bruce_models_1.ObjectUtils.UId();
|
|
416
423
|
this.disposed = false;
|
|
@@ -449,10 +456,35 @@ var VisualsRegister;
|
|
|
449
456
|
this.menuItemSources = new Map();
|
|
450
457
|
// Set when the data source order no longer matches the zIndexes seen, so it is re-applied once.
|
|
451
458
|
this.sourceOrderDirty = false;
|
|
459
|
+
this.labelGroupsChanged = new bruce_models_1.BruceEvent();
|
|
460
|
+
this.hoverRingState = {};
|
|
461
|
+
this.retiringHoverLabels = new Map();
|
|
452
462
|
/*
|
|
453
463
|
* Tilesets in the scene, keyed by the tileset itself.
|
|
454
464
|
*/
|
|
455
465
|
this.tilesets = new Map();
|
|
466
|
+
this.ClearLabelHover = () => {
|
|
467
|
+
if (!this.labelHover && !this.hoverLabel) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
this.ReleaseHoverLabel();
|
|
471
|
+
this.labelHover = undefined;
|
|
472
|
+
clearTimeout(this.hoverRingReset);
|
|
473
|
+
this.hoverRingReset = setTimeout(() => { this.hoverRingState = {}; }, 400);
|
|
474
|
+
const doc = this.viewer.container.ownerDocument;
|
|
475
|
+
doc.removeEventListener("pointermove", this.CheckLabelHoverBounds, true);
|
|
476
|
+
this.viewer.container.removeEventListener("pointerleave", this.CheckLabelHoverBounds);
|
|
477
|
+
doc.defaultView.removeEventListener("blur", this.ClearLabelHover);
|
|
478
|
+
if (!this.viewer.isDestroyed()) {
|
|
479
|
+
this.viewer.scene.requestRender();
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
this.CheckLabelHoverBounds = (event) => {
|
|
483
|
+
const bounds = this.viewer.canvas.getBoundingClientRect();
|
|
484
|
+
if (event.clientX < bounds.left || event.clientX >= bounds.right || event.clientY < bounds.top || event.clientY >= bounds.bottom) {
|
|
485
|
+
this.ClearLabelHover();
|
|
486
|
+
}
|
|
487
|
+
};
|
|
456
488
|
this.viewer = params.viewer;
|
|
457
489
|
this.apiGetters = params.apiGetters;
|
|
458
490
|
this.cameraCullerDispose = visual_register_culler_1.VisualRegisterCuller.Monitor({
|
|
@@ -648,6 +680,7 @@ var VisualsRegister;
|
|
|
648
680
|
const BATCH_SIZE = 300;
|
|
649
681
|
if (this.updateQueue.length) {
|
|
650
682
|
this.updateQueueInterval = setInterval(() => {
|
|
683
|
+
var _a;
|
|
651
684
|
if (this.Disposed || (!this.viewer || !this.viewer.scene || this.viewer.isDestroyed())) {
|
|
652
685
|
clearInterval(this.updateQueueInterval);
|
|
653
686
|
this.updateQueueInterval = null;
|
|
@@ -660,6 +693,8 @@ var VisualsRegister;
|
|
|
660
693
|
this.updateQueueIds.delete(entityId);
|
|
661
694
|
// Check if still registered.
|
|
662
695
|
if (entityId && (!this.rego[entityId] || !this.rego[entityId].length)) {
|
|
696
|
+
(_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.RefreshEntity(entityId);
|
|
697
|
+
delete this.updateQueueSettings[entityId];
|
|
663
698
|
continue;
|
|
664
699
|
}
|
|
665
700
|
updateEntity(this.viewer, entityId, this, this.updateQueueSettings[entityId] == null ? false : this.updateQueueSettings[entityId], cache);
|
|
@@ -1317,8 +1352,23 @@ var VisualsRegister;
|
|
|
1317
1352
|
markEntity(this, rego, rego.visual, false);
|
|
1318
1353
|
}
|
|
1319
1354
|
Dispose() {
|
|
1320
|
-
var _a, _b, _c, _d;
|
|
1321
|
-
|
|
1355
|
+
var _a, _b, _c, _d, _e;
|
|
1356
|
+
this.ClearLabelHover();
|
|
1357
|
+
clearTimeout(this.hoverRingReset);
|
|
1358
|
+
this.hoverRingState = {};
|
|
1359
|
+
for (const { label, timer } of this.retiringHoverLabels.values()) {
|
|
1360
|
+
clearTimeout(timer);
|
|
1361
|
+
entity_label_1.EntityLabel.Detatch({ label });
|
|
1362
|
+
}
|
|
1363
|
+
this.retiringHoverLabels.clear();
|
|
1364
|
+
(_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Dispose();
|
|
1365
|
+
this.labelGroupsChanged.Clear();
|
|
1366
|
+
for (const regos of Object.values(this.rego)) {
|
|
1367
|
+
for (const rego of regos)
|
|
1368
|
+
entity_label_1.EntityLabel.Detatch({ rego, force: true });
|
|
1369
|
+
}
|
|
1370
|
+
entity_label_1.EntityLabel.SetContainer(this.viewer);
|
|
1371
|
+
(_b = this.cameraCullerDispose) === null || _b === void 0 ? void 0 : _b.call(this, {
|
|
1322
1372
|
uncull: false
|
|
1323
1373
|
});
|
|
1324
1374
|
this.cameraCullerDispose = null;
|
|
@@ -1334,7 +1384,7 @@ var VisualsRegister;
|
|
|
1334
1384
|
this.disposed = true;
|
|
1335
1385
|
for (const record of Array.from(this.menuItemSources.values())) {
|
|
1336
1386
|
try {
|
|
1337
|
-
(
|
|
1387
|
+
(_d = (_c = this.viewer) === null || _c === void 0 ? void 0 : _c.dataSources) === null || _d === void 0 ? void 0 : _d.remove(record.source, true);
|
|
1338
1388
|
}
|
|
1339
1389
|
catch (e) {
|
|
1340
1390
|
console.error(e);
|
|
@@ -1343,7 +1393,7 @@ var VisualsRegister;
|
|
|
1343
1393
|
this.menuItemSources.clear();
|
|
1344
1394
|
// Hand every tileset's show flag back to its owner, holding whatever the owner last asked for.
|
|
1345
1395
|
for (const rego of Array.from(this.tilesets.values())) {
|
|
1346
|
-
(
|
|
1396
|
+
(_e = rego.gate) === null || _e === void 0 ? void 0 : _e.Release();
|
|
1347
1397
|
}
|
|
1348
1398
|
this.tilesets.clear();
|
|
1349
1399
|
}
|
|
@@ -2297,7 +2347,7 @@ var VisualsRegister;
|
|
|
2297
2347
|
* @returns
|
|
2298
2348
|
*/
|
|
2299
2349
|
RemoveRegos(params) {
|
|
2300
|
-
var _a, _b, _c;
|
|
2350
|
+
var _a, _b, _c, _d, _e;
|
|
2301
2351
|
let { entityId, menuItemId, doUpdate, relation, retainTagIds, requestRender, doRemove, source, lazy, onComplete } = params;
|
|
2302
2352
|
if (doUpdate == null || doUpdate === undefined) {
|
|
2303
2353
|
doUpdate = true;
|
|
@@ -2318,7 +2368,7 @@ var VisualsRegister;
|
|
|
2318
2368
|
}
|
|
2319
2369
|
}
|
|
2320
2370
|
const removeOne = (entityId) => {
|
|
2321
|
-
var _a, _b;
|
|
2371
|
+
var _a, _b, _c;
|
|
2322
2372
|
const entityRegos = this.rego[entityId];
|
|
2323
2373
|
if (!entityRegos) {
|
|
2324
2374
|
return;
|
|
@@ -2333,7 +2383,7 @@ var VisualsRegister;
|
|
|
2333
2383
|
return;
|
|
2334
2384
|
}
|
|
2335
2385
|
entity_label_1.EntityLabel.Detatch({
|
|
2336
|
-
rego
|
|
2386
|
+
rego, force: true
|
|
2337
2387
|
});
|
|
2338
2388
|
// Never tear down the graphic the caller is registering: the renderers hand back
|
|
2339
2389
|
// the same object when they reuse it, so removing it here destroys what replaces it.
|
|
@@ -2358,15 +2408,14 @@ var VisualsRegister;
|
|
|
2358
2408
|
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger(update);
|
|
2359
2409
|
}
|
|
2360
2410
|
// Only worth refreshing while the Entity is still drawn by something else, since
|
|
2361
|
-
// losing this rego can change which of the survivors wins.
|
|
2362
|
-
// nothing to restyle, and queueing one per removed Entity is what turns disabling a
|
|
2363
|
-
// large menu item into minutes of scheduled work.
|
|
2411
|
+
// losing this rego can change which of the survivors wins.
|
|
2364
2412
|
if (doesInclude && ((_b = this.rego[entityId]) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
2365
2413
|
this.queueUpdate({
|
|
2366
2414
|
entityId: entityId,
|
|
2367
2415
|
refresh: false
|
|
2368
2416
|
});
|
|
2369
2417
|
}
|
|
2418
|
+
(_c = this.labelGroups) === null || _c === void 0 ? void 0 : _c.RefreshEntity(entityId);
|
|
2370
2419
|
};
|
|
2371
2420
|
const finish = () => {
|
|
2372
2421
|
this.releaseMenuItemCollection(menuItemId);
|
|
@@ -2397,7 +2446,7 @@ var VisualsRegister;
|
|
|
2397
2446
|
return;
|
|
2398
2447
|
}
|
|
2399
2448
|
entity_label_1.EntityLabel.Detatch({
|
|
2400
|
-
rego
|
|
2449
|
+
rego, force: true
|
|
2401
2450
|
});
|
|
2402
2451
|
// Never tear down the graphic the caller is registering: the renderers hand back
|
|
2403
2452
|
// the same object when they reuse it, so removing it here destroys what replaces it.
|
|
@@ -2416,7 +2465,7 @@ var VisualsRegister;
|
|
|
2416
2465
|
if (source !== EUpdateSource.TREE_CASCADE) {
|
|
2417
2466
|
(_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger(update);
|
|
2418
2467
|
}
|
|
2419
|
-
this.rego[entityId] =
|
|
2468
|
+
this.rego[entityId] = this.rego[entityId].filter(r => r.menuItemId !== menuItemId);
|
|
2420
2469
|
this.unindexMenuItemEntityIfAbsent(menuItemId, entityId);
|
|
2421
2470
|
if (doUpdate && menuItemId) {
|
|
2422
2471
|
this.queueUpdate({
|
|
@@ -2425,6 +2474,7 @@ var VisualsRegister;
|
|
|
2425
2474
|
});
|
|
2426
2475
|
}
|
|
2427
2476
|
}
|
|
2477
|
+
(_c = this.labelGroups) === null || _c === void 0 ? void 0 : _c.RefreshEntity(entityId);
|
|
2428
2478
|
}
|
|
2429
2479
|
else if (relation) {
|
|
2430
2480
|
const relationKey = relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(relation);
|
|
@@ -2436,7 +2486,7 @@ var VisualsRegister;
|
|
|
2436
2486
|
continue;
|
|
2437
2487
|
}
|
|
2438
2488
|
entity_label_1.EntityLabel.Detatch({
|
|
2439
|
-
rego
|
|
2489
|
+
rego, force: true
|
|
2440
2490
|
});
|
|
2441
2491
|
removeEntity(this.viewer, rego.visual);
|
|
2442
2492
|
rego.visual = null;
|
|
@@ -2445,6 +2495,7 @@ var VisualsRegister;
|
|
|
2445
2495
|
delete this.rego[entityId];
|
|
2446
2496
|
}
|
|
2447
2497
|
this.unindexMenuItemEntityIfAbsent(rego.menuItemId, entityId);
|
|
2498
|
+
(_d = this.labelGroups) === null || _d === void 0 ? void 0 : _d.RefreshEntity(entityId);
|
|
2448
2499
|
const update = {
|
|
2449
2500
|
type: EVisualUpdateType.Remove,
|
|
2450
2501
|
entityId: rego.entityId,
|
|
@@ -2454,7 +2505,7 @@ var VisualsRegister;
|
|
|
2454
2505
|
update.source = source;
|
|
2455
2506
|
}
|
|
2456
2507
|
if (source !== EUpdateSource.TREE_CASCADE) {
|
|
2457
|
-
(
|
|
2508
|
+
(_e = this.onUpdate) === null || _e === void 0 ? void 0 : _e.Trigger(update);
|
|
2458
2509
|
}
|
|
2459
2510
|
if (doUpdate) {
|
|
2460
2511
|
this.queueUpdate({
|
|
@@ -2473,7 +2524,7 @@ var VisualsRegister;
|
|
|
2473
2524
|
* @param params
|
|
2474
2525
|
*/
|
|
2475
2526
|
RemoveRegosByVisuals(params) {
|
|
2476
|
-
var _a, _b;
|
|
2527
|
+
var _a, _b, _c;
|
|
2477
2528
|
const { doRemove = true, requestRender = true, source, doUpdate, menuItemId } = params;
|
|
2478
2529
|
const removedEntityIds = new Set();
|
|
2479
2530
|
for (const visual of params.visuals) {
|
|
@@ -2488,9 +2539,8 @@ var VisualsRegister;
|
|
|
2488
2539
|
continue;
|
|
2489
2540
|
}
|
|
2490
2541
|
if (rego.visual === visual) {
|
|
2491
|
-
// The primary graphic for this rego - remove the rego entirely.
|
|
2492
2542
|
entity_label_1.EntityLabel.Detatch({
|
|
2493
|
-
rego
|
|
2543
|
+
rego, force: true
|
|
2494
2544
|
});
|
|
2495
2545
|
if (doRemove != false) {
|
|
2496
2546
|
removeEntity(this.viewer, rego.visual);
|
|
@@ -2519,9 +2569,10 @@ var VisualsRegister;
|
|
|
2519
2569
|
});
|
|
2520
2570
|
}
|
|
2521
2571
|
removedEntityIds.add(entityId);
|
|
2572
|
+
(_b = this.labelGroups) === null || _b === void 0 ? void 0 : _b.RefreshEntity(entityId);
|
|
2522
2573
|
}
|
|
2523
2574
|
else {
|
|
2524
|
-
const siblings = (
|
|
2575
|
+
const siblings = (_c = rego.visual) === null || _c === void 0 ? void 0 : _c["_siblingGraphics"];
|
|
2525
2576
|
if (siblings === null || siblings === void 0 ? void 0 : siblings.length) {
|
|
2526
2577
|
if (doRemove != false && siblings.includes(visual)) {
|
|
2527
2578
|
removeEntity(this.viewer, visual);
|
|
@@ -2788,6 +2839,204 @@ var VisualsRegister;
|
|
|
2788
2839
|
}
|
|
2789
2840
|
return map;
|
|
2790
2841
|
}
|
|
2842
|
+
ReleaseHoverLabel(immediate = false) {
|
|
2843
|
+
const label = this.hoverLabel;
|
|
2844
|
+
this.hoverLabel = undefined;
|
|
2845
|
+
if (!label || label.Disposed || label.Persistent) {
|
|
2846
|
+
return;
|
|
2847
|
+
}
|
|
2848
|
+
if (immediate) {
|
|
2849
|
+
entity_label_1.EntityLabel.Detatch({ label });
|
|
2850
|
+
return;
|
|
2851
|
+
}
|
|
2852
|
+
label.SetHoverVisible(false);
|
|
2853
|
+
const key = JSON.stringify([label.Rego.entityId, label.Rego.menuItemId || ""]);
|
|
2854
|
+
const previous = this.retiringHoverLabels.get(key);
|
|
2855
|
+
if (previous) {
|
|
2856
|
+
clearTimeout(previous.timer);
|
|
2857
|
+
entity_label_1.EntityLabel.Detatch({ label: previous.label });
|
|
2858
|
+
}
|
|
2859
|
+
// Retain briefly beyond the fade to bridge debounced same-target hover updates.
|
|
2860
|
+
const timer = setTimeout(() => {
|
|
2861
|
+
this.retiringHoverLabels.delete(key);
|
|
2862
|
+
entity_label_1.EntityLabel.Detatch({ label });
|
|
2863
|
+
}, 240);
|
|
2864
|
+
this.retiringHoverLabels.set(key, { label, timer });
|
|
2865
|
+
}
|
|
2866
|
+
/*
|
|
2867
|
+
* Owns temporary positioning separately from persistent label membership and world anchors.
|
|
2868
|
+
*/
|
|
2869
|
+
SetLabelHover(params) {
|
|
2870
|
+
var _a, _b;
|
|
2871
|
+
if (this.disposed) {
|
|
2872
|
+
return;
|
|
2873
|
+
}
|
|
2874
|
+
if (!(params === null || params === void 0 ? void 0 : params.entityId)) {
|
|
2875
|
+
this.ClearLabelHover();
|
|
2876
|
+
return;
|
|
2877
|
+
}
|
|
2878
|
+
if (params.position && (!Number.isFinite(params.position.x) || !Number.isFinite(params.position.y) ||
|
|
2879
|
+
params.position.x < 0 || params.position.y < 0 ||
|
|
2880
|
+
params.position.x >= this.viewer.canvas.clientWidth || params.position.y >= this.viewer.canvas.clientHeight)) {
|
|
2881
|
+
this.ClearLabelHover();
|
|
2882
|
+
return;
|
|
2883
|
+
}
|
|
2884
|
+
const changed = ((_a = this.labelHover) === null || _a === void 0 ? void 0 : _a.entityId) !== params.entityId || ((_b = this.labelHover) === null || _b === void 0 ? void 0 : _b.menuItemId) !== params.menuItemId;
|
|
2885
|
+
if (changed) {
|
|
2886
|
+
this.ClearLabelHover();
|
|
2887
|
+
}
|
|
2888
|
+
clearTimeout(this.hoverRingReset);
|
|
2889
|
+
this.labelHover = {
|
|
2890
|
+
entityId: params.entityId,
|
|
2891
|
+
menuItemId: params.menuItemId,
|
|
2892
|
+
position: params.position ? { ...params.position } : undefined,
|
|
2893
|
+
createIfMissing: params.createIfMissing !== false
|
|
2894
|
+
};
|
|
2895
|
+
const doc = this.viewer.container.ownerDocument;
|
|
2896
|
+
doc.addEventListener("pointermove", this.CheckLabelHoverBounds, true);
|
|
2897
|
+
this.viewer.container.addEventListener("pointerleave", this.CheckLabelHoverBounds);
|
|
2898
|
+
doc.defaultView.addEventListener("blur", this.ClearLabelHover);
|
|
2899
|
+
this.SyncLabelHover();
|
|
2900
|
+
this.viewer.scene.requestRender();
|
|
2901
|
+
}
|
|
2902
|
+
GetLabelHoverPosition(entityId, menuItemId) {
|
|
2903
|
+
const hover = this.labelHover;
|
|
2904
|
+
return (hover === null || hover === void 0 ? void 0 : hover.entityId) === entityId && (hover.menuItemId == null || hover.menuItemId === menuItemId) ? hover.position : undefined;
|
|
2905
|
+
}
|
|
2906
|
+
SyncLabelHover() {
|
|
2907
|
+
var _a, _b, _c, _d;
|
|
2908
|
+
const hover = this.labelHover;
|
|
2909
|
+
if (!hover || this.disposed) {
|
|
2910
|
+
return;
|
|
2911
|
+
}
|
|
2912
|
+
if ((_a = this.hoverLabel) === null || _a === void 0 ? void 0 : _a.Disposed) {
|
|
2913
|
+
this.hoverLabel = undefined;
|
|
2914
|
+
}
|
|
2915
|
+
if (!hover.createIfMissing) {
|
|
2916
|
+
this.ReleaseHoverLabel(true);
|
|
2917
|
+
return;
|
|
2918
|
+
}
|
|
2919
|
+
const group = this.GetLabelGroupFor(hover.entityId, hover.menuItemId);
|
|
2920
|
+
let rego = this.GetRego(hover);
|
|
2921
|
+
const key = JSON.stringify([hover.entityId, hover.menuItemId || ""]);
|
|
2922
|
+
const retiring = this.retiringHoverLabels.get(key);
|
|
2923
|
+
if (retiring) {
|
|
2924
|
+
clearTimeout(retiring.timer);
|
|
2925
|
+
this.retiringHoverLabels.delete(key);
|
|
2926
|
+
if (!retiring.label.Disposed) {
|
|
2927
|
+
this.hoverLabel = retiring.label;
|
|
2928
|
+
}
|
|
2929
|
+
}
|
|
2930
|
+
const existing = rego && entity_label_1.EntityLabel.GetLabel({ rego });
|
|
2931
|
+
const state = this.GetState(hover);
|
|
2932
|
+
if ((!rego && !group) || state.hidden || ((_b = rego === null || rego === void 0 ? void 0 : rego.visual) === null || _b === void 0 ? void 0 : _b.show) === false ||
|
|
2933
|
+
(this.GetIsIsolatedAny() && !state.isolated && this.GetIsolationOpacity() == null) ||
|
|
2934
|
+
(existing && existing !== this.hoverLabel && existing.HasText) ||
|
|
2935
|
+
(group && group.options.presentation !== "icon")) {
|
|
2936
|
+
this.ReleaseHoverLabel(true);
|
|
2937
|
+
return;
|
|
2938
|
+
}
|
|
2939
|
+
if (this.hoverLabel && !this.hoverLabel.Disposed) {
|
|
2940
|
+
this.hoverLabel.SetHoverVisible(true);
|
|
2941
|
+
return;
|
|
2942
|
+
}
|
|
2943
|
+
// Query-only icon groups have coordinates but no registered scene visual to attach to.
|
|
2944
|
+
if (!rego && group && [group.item.longitude, group.item.latitude, (_c = group.item.altitude) !== null && _c !== void 0 ? _c : 0].every(Number.isFinite)) {
|
|
2945
|
+
rego = {
|
|
2946
|
+
entityId: hover.entityId,
|
|
2947
|
+
menuItemId: hover.menuItemId,
|
|
2948
|
+
name: group.options.text,
|
|
2949
|
+
priority: 0,
|
|
2950
|
+
visual: new Cesium.Entity({
|
|
2951
|
+
position: Cesium.Cartesian3.fromDegrees(group.item.longitude, group.item.latitude, group.item.altitude || 0),
|
|
2952
|
+
point: {
|
|
2953
|
+
pixelSize: 0,
|
|
2954
|
+
heightReference: Cesium.HeightReference.NONE
|
|
2955
|
+
}
|
|
2956
|
+
})
|
|
2957
|
+
};
|
|
2958
|
+
}
|
|
2959
|
+
if (!rego) {
|
|
2960
|
+
return;
|
|
2961
|
+
}
|
|
2962
|
+
const params = {
|
|
2963
|
+
rego,
|
|
2964
|
+
viewer: this.viewer,
|
|
2965
|
+
visualRegister: this,
|
|
2966
|
+
api: (_d = this.ApiGetters) === null || _d === void 0 ? void 0 : _d.GetBruceApi(),
|
|
2967
|
+
persistent: false,
|
|
2968
|
+
transient: true,
|
|
2969
|
+
hoverRingState: this.hoverRingState,
|
|
2970
|
+
options: {
|
|
2971
|
+
presentation: "text",
|
|
2972
|
+
text: group === null || group === void 0 ? void 0 : group.options.text,
|
|
2973
|
+
selectOnClick: false
|
|
2974
|
+
},
|
|
2975
|
+
visible: () => {
|
|
2976
|
+
var _a, _b;
|
|
2977
|
+
const current = this.GetState(hover);
|
|
2978
|
+
return (!this.disposed && !current.hidden && ((_a = rego.visual) === null || _a === void 0 ? void 0 : _a.show) !== false &&
|
|
2979
|
+
Boolean(this.GetRego(hover) || ((_b = this.labelGroups) === null || _b === void 0 ? void 0 : _b.Has(hover.entityId, hover.menuItemId))) &&
|
|
2980
|
+
(!this.GetIsIsolatedAny() || current.isolated || this.GetIsolationOpacity() != null));
|
|
2981
|
+
}
|
|
2982
|
+
};
|
|
2983
|
+
this.hoverLabel = existing || group ? new entity_label_1.EntityLabel.Label(params) : entity_label_1.EntityLabel.Attach(params);
|
|
2984
|
+
}
|
|
2985
|
+
SetLabelContainer(container) {
|
|
2986
|
+
if (this.disposed) {
|
|
2987
|
+
return;
|
|
2988
|
+
}
|
|
2989
|
+
entity_label_1.EntityLabel.SetContainer(this.viewer, container);
|
|
2990
|
+
}
|
|
2991
|
+
ClearLabelContainer() {
|
|
2992
|
+
this.SetLabelContainer();
|
|
2993
|
+
}
|
|
2994
|
+
/*
|
|
2995
|
+
* Adds source-driven membership without changing manual labelled state or legacy bookmark snapshots.
|
|
2996
|
+
*/
|
|
2997
|
+
SetLabelGroup(group) {
|
|
2998
|
+
if (this.disposed) {
|
|
2999
|
+
return Promise.reject(new Error("Visual register is disposed"));
|
|
3000
|
+
}
|
|
3001
|
+
if (!this.labelGroups) {
|
|
3002
|
+
this.labelGroups = new entity_label_group_1.EntityLabelGroup.Manager(this, () => this.labelGroupsChanged.Trigger(undefined));
|
|
3003
|
+
}
|
|
3004
|
+
return this.labelGroups.Set(group);
|
|
3005
|
+
}
|
|
3006
|
+
RemoveLabelGroup(id) {
|
|
3007
|
+
var _a;
|
|
3008
|
+
(_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Remove(id);
|
|
3009
|
+
}
|
|
3010
|
+
RefreshLabelGroup(id) {
|
|
3011
|
+
var _a, _b;
|
|
3012
|
+
if (this.disposed) {
|
|
3013
|
+
return Promise.reject(new Error("Visual register is disposed"));
|
|
3014
|
+
}
|
|
3015
|
+
return (_b = (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Refresh(id)) !== null && _b !== void 0 ? _b : Promise.reject(new Error(`Unknown label group: ${id}`));
|
|
3016
|
+
}
|
|
3017
|
+
SetLabelGroupVisible(id, visible) {
|
|
3018
|
+
var _a, _b;
|
|
3019
|
+
return (_b = (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.SetVisible(id, visible)) !== null && _b !== void 0 ? _b : false;
|
|
3020
|
+
}
|
|
3021
|
+
ClearLabelGroups() {
|
|
3022
|
+
var _a;
|
|
3023
|
+
(_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Clear();
|
|
3024
|
+
}
|
|
3025
|
+
GetLabelGroups() {
|
|
3026
|
+
var _a;
|
|
3027
|
+
return ((_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Get()) || [];
|
|
3028
|
+
}
|
|
3029
|
+
GetLabelGroupFor(entityId, menuItemId) {
|
|
3030
|
+
var _a;
|
|
3031
|
+
return (_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.Resolve(entityId, menuItemId);
|
|
3032
|
+
}
|
|
3033
|
+
RefreshLabelGroupEntity(entityId) {
|
|
3034
|
+
var _a, _b;
|
|
3035
|
+
(_a = this.labelGroups) === null || _a === void 0 ? void 0 : _a.RefreshEntity(entityId);
|
|
3036
|
+
if (((_b = this.labelHover) === null || _b === void 0 ? void 0 : _b.entityId) === entityId) {
|
|
3037
|
+
this.SyncLabelHover();
|
|
3038
|
+
}
|
|
3039
|
+
}
|
|
2791
3040
|
}
|
|
2792
3041
|
VisualsRegister.Register = Register;
|
|
2793
3042
|
})(VisualsRegister = exports.VisualsRegister || (exports.VisualsRegister = {}));
|