bruce-cesium 6.8.1 → 6.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/bruce-cesium.es5.js +618 -248
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +616 -246
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +1 -1
  6. package/dist/lib/rendering/menu-item-manager.js +15 -0
  7. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  8. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +60 -1
  9. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -1
  10. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +126 -42
  11. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
  12. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +10 -9
  13. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  14. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +9 -8
  15. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -1
  16. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +39 -23
  17. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -1
  18. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +149 -73
  19. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -1
  20. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +30 -0
  21. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -1
  22. package/dist/lib/rendering/visual-register-culler.js +1 -1
  23. package/dist/lib/rendering/visual-register-culler.js.map +1 -1
  24. package/dist/lib/rendering/visuals-register.js +176 -88
  25. package/dist/lib/rendering/visuals-register.js.map +1 -1
  26. package/dist/types/bruce-cesium.d.ts +1 -1
  27. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +6 -1
  28. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +6 -1
  29. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +1 -1
  30. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +6 -1
  31. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +6 -1
  32. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +5 -1
  33. package/dist/types/rendering/visuals-register.d.ts +17 -12
  34. package/package.json +8 -11
@@ -6132,7 +6132,7 @@
6132
6132
  terrChangeRemoval = null;
6133
6133
  clearTimeout(terrChangeTimeout);
6134
6134
  terrChangeTimeout = null;
6135
- checkInterval === null || checkInterval === void 0 ? void 0 : checkInterval();
6135
+ clearInterval(checkInterval);
6136
6136
  checkInterval = null;
6137
6137
  checkWaiting = false;
6138
6138
  checkQueue === null || checkQueue === void 0 ? void 0 : checkQueue.Dispose();
@@ -6528,6 +6528,7 @@
6528
6528
  // skipped by the applier so a live user action always wins.
6529
6529
  this.lazyOverrideExclusions = new Set();
6530
6530
  this.lazyOverrideInterval = null;
6531
+ this.activeChunkedIntervals = new Set();
6531
6532
  this.onUpdate = null;
6532
6533
  // Entity ID -> Menu Item ID -> State.
6533
6534
  // When no Menu Item ID is set, then the second key is a blank string.
@@ -7124,6 +7125,31 @@
7124
7125
  }
7125
7126
  this.viewer.scene.requestRender();
7126
7127
  }
7128
+ runChunked(items, perItem, onComplete) {
7129
+ const BATCH_SIZE = 5000;
7130
+ let index = 0;
7131
+ const interval = setInterval(() => {
7132
+ if (this.Disposed) {
7133
+ clearInterval(interval);
7134
+ this.activeChunkedIntervals.delete(interval);
7135
+ return;
7136
+ }
7137
+ const end = Math.min(index + BATCH_SIZE, items.length);
7138
+ for (; index < end; index++) {
7139
+ perItem(items[index]);
7140
+ }
7141
+ this.viewer.scene.requestRender();
7142
+ if (index >= items.length) {
7143
+ clearInterval(interval);
7144
+ this.activeChunkedIntervals.delete(interval);
7145
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete();
7146
+ }
7147
+ }, 10);
7148
+ this.activeChunkedIntervals.add(interval);
7149
+ }
7150
+ startLazyRemoval(entityIds, removeOne, onComplete) {
7151
+ this.runChunked(entityIds, removeOne, onComplete);
7152
+ }
7127
7153
  /**
7128
7154
  * Cancels any in-flight lazy OverrideStates() apply.
7129
7155
  */
@@ -7196,9 +7222,7 @@
7196
7222
  }, 10);
7197
7223
  }
7198
7224
  /**
7199
- * Returns all states with the first detected Menu Item ID settings included.
7200
- * This is a utility function for returning settings for apps that don't support the newer state settings.
7201
- * @deprecated Use GetStates() or GetState().
7225
+ * Returns all states keyed by entity id, without regard to menu item id.
7202
7226
  * @returns
7203
7227
  */
7204
7228
  GetStatesLegacy() {
@@ -7224,7 +7248,7 @@
7224
7248
  const entityId = entityIds[i];
7225
7249
  const state = this.GetState({
7226
7250
  entityId: entityId,
7227
- // First known Menu Item.
7251
+ // Most-recently-set Menu Item for this entity, if any.
7228
7252
  menuItemId: entityIdsMenuItem[entityId]
7229
7253
  });
7230
7254
  states[entityId] = state;
@@ -7280,6 +7304,10 @@
7280
7304
  clearInterval(this.lazyOverrideInterval);
7281
7305
  this.lazyOverrideInterval = null;
7282
7306
  this.lazyOverrideActive = false;
7307
+ for (const interval of this.activeChunkedIntervals) {
7308
+ clearInterval(interval);
7309
+ }
7310
+ this.activeChunkedIntervals.clear();
7283
7311
  this.disposed = true;
7284
7312
  }
7285
7313
  ForceUpdate(params) {
@@ -7370,8 +7398,7 @@
7370
7398
  }
7371
7399
  }
7372
7400
  /**
7373
- * Returns all labelled entity ids.
7374
- * @deprecated Use GetStates() or GetState().
7401
+ * Returns all labelled entity ids, without regard to menu item id.
7375
7402
  */
7376
7403
  GetLabelled() {
7377
7404
  const labelledIds = [];
@@ -7522,7 +7549,7 @@
7522
7549
  }
7523
7550
  }
7524
7551
  /**
7525
- * @deprecated Use GetStates() or GetState().
7552
+ * Returns all selected entity ids, without regard to menu item id.
7526
7553
  * @returns
7527
7554
  */
7528
7555
  GetSelected() {
@@ -7657,7 +7684,7 @@
7657
7684
  }
7658
7685
  }
7659
7686
  /**
7660
- * @deprecated Use GetStates() or GetState().
7687
+ * Returns all highlighted entity ids, without regard to menu item id.
7661
7688
  * @returns
7662
7689
  */
7663
7690
  GetHighlighted() {
@@ -7718,7 +7745,7 @@
7718
7745
  return this.isolatedAnyCache;
7719
7746
  }
7720
7747
  /**
7721
- * @deprecated Use GetStates() or GetState().
7748
+ * Returns all isolated entity ids, without regard to menu item id.
7722
7749
  * @returns
7723
7750
  */
7724
7751
  GetIsolated() {
@@ -7776,7 +7803,7 @@
7776
7803
  return state.hidden === true;
7777
7804
  }
7778
7805
  /**
7779
- * @deprecated Use GetStates() or GetState().
7806
+ * Returns all hidden entity ids, without regard to menu item id.
7780
7807
  * @returns
7781
7808
  */
7782
7809
  GetHidden() {
@@ -7863,8 +7890,8 @@
7863
7890
  * Re-parents every rego registered under one menu item id to a different menu item id.
7864
7891
  */
7865
7892
  ReassignMenuItem(params) {
7866
- var _a, _b;
7867
- const { fromMenuItemId, toMenuItemId, toMenuItemType, toPriority, requestRender, source } = params;
7893
+ var _a;
7894
+ const { fromMenuItemId, toMenuItemId, toMenuItemType, toPriority, requestRender, source, lazy, onBatch, onComplete } = params;
7868
7895
  if (!fromMenuItemId || !toMenuItemId || fromMenuItemId === toMenuItemId) {
7869
7896
  return;
7870
7897
  }
@@ -7872,37 +7899,44 @@
7872
7899
  if (!entityIds) {
7873
7900
  return;
7874
7901
  }
7875
- // Snapshot: unindexMenuItemEntityIfAbsent() below mutates this same set.
7876
- for (const entityId of Array.from(entityIds)) {
7902
+ const idsSnapshot = Array.from(entityIds);
7903
+ const regoSnapshot = new Map();
7904
+ for (const entityId of idsSnapshot) {
7905
+ const snapRego = (_a = this.rego[entityId]) === null || _a === void 0 ? void 0 : _a.find(r => r.menuItemId === fromMenuItemId);
7906
+ if (snapRego) {
7907
+ regoSnapshot.set(entityId, snapRego);
7908
+ }
7909
+ }
7910
+ const reassignOne = (entityId) => {
7911
+ var _a, _b;
7877
7912
  const regos = this.rego[entityId];
7878
7913
  if (!regos) {
7879
- continue;
7914
+ return null;
7880
7915
  }
7881
- for (const rego of regos) {
7882
- if (rego.menuItemId !== fromMenuItemId) {
7883
- continue;
7884
- }
7885
- if (source !== EUpdateSource.TREE_CASCADE) {
7886
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
7887
- type: EVisualUpdateType.Remove,
7888
- entityId,
7889
- rego: { ...rego, menuItemId: fromMenuItemId },
7890
- source
7891
- });
7892
- }
7893
- rego.menuItemId = toMenuItemId;
7894
- rego.menuItemType = toMenuItemType;
7895
- if (toPriority != null) {
7896
- rego.priority = toPriority;
7897
- }
7898
- if (source !== EUpdateSource.TREE_CASCADE) {
7899
- (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({
7900
- type: EVisualUpdateType.Add,
7901
- entityId,
7902
- rego,
7903
- source
7904
- });
7905
- }
7916
+ const rego = regos.find(r => r.menuItemId === fromMenuItemId);
7917
+ if (!rego || rego !== regoSnapshot.get(entityId)) {
7918
+ return null;
7919
+ }
7920
+ if (source !== EUpdateSource.TREE_CASCADE) {
7921
+ (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
7922
+ type: EVisualUpdateType.Remove,
7923
+ entityId,
7924
+ rego: { ...rego, menuItemId: fromMenuItemId },
7925
+ source
7926
+ });
7927
+ }
7928
+ rego.menuItemId = toMenuItemId;
7929
+ rego.menuItemType = toMenuItemType;
7930
+ if (toPriority != null) {
7931
+ rego.priority = toPriority;
7932
+ }
7933
+ if (source !== EUpdateSource.TREE_CASCADE) {
7934
+ (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({
7935
+ type: EVisualUpdateType.Add,
7936
+ entityId,
7937
+ rego,
7938
+ source
7939
+ });
7906
7940
  }
7907
7941
  const eStates = this.states[entityId];
7908
7942
  const movingState = eStates === null || eStates === void 0 ? void 0 : eStates[fromMenuItemId];
@@ -7922,11 +7956,50 @@
7922
7956
  entityId,
7923
7957
  refresh: true
7924
7958
  });
7959
+ return rego;
7960
+ };
7961
+ if (lazy) {
7962
+ this.startLazyReassign(idsSnapshot, reassignOne, requestRender, onBatch, onComplete);
7963
+ return;
7964
+ }
7965
+ for (const entityId of idsSnapshot) {
7966
+ reassignOne(entityId);
7925
7967
  }
7926
7968
  if (requestRender != false) {
7927
7969
  this.viewer.scene.requestRender();
7928
7970
  }
7929
7971
  }
7972
+ startLazyReassign(entityIds, reassignOne, requestRender, onBatch, onComplete) {
7973
+ const BATCH_SIZE = 5000;
7974
+ let index = 0;
7975
+ const interval = setInterval(() => {
7976
+ if (this.Disposed) {
7977
+ clearInterval(interval);
7978
+ this.activeChunkedIntervals.delete(interval);
7979
+ return;
7980
+ }
7981
+ const end = Math.min(index + BATCH_SIZE, entityIds.length);
7982
+ const batch = [];
7983
+ for (; index < end; index++) {
7984
+ const rego = reassignOne(entityIds[index]);
7985
+ if (rego) {
7986
+ batch.push(rego);
7987
+ }
7988
+ }
7989
+ if (batch.length) {
7990
+ onBatch === null || onBatch === void 0 ? void 0 : onBatch(batch);
7991
+ }
7992
+ if (requestRender != false) {
7993
+ this.viewer.scene.requestRender();
7994
+ }
7995
+ if (index >= entityIds.length) {
7996
+ clearInterval(interval);
7997
+ this.activeChunkedIntervals.delete(interval);
7998
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete();
7999
+ }
8000
+ }, 10);
8001
+ this.activeChunkedIntervals.add(interval);
8002
+ }
7930
8003
  /**
7931
8004
  * Locates a visual corresponding to a given entity id.
7932
8005
  * If no menu item id is provided, then it will pick the "best" one.
@@ -7969,6 +8042,7 @@
7969
8042
  GetRegos(params) {
7970
8043
  // TODO: refactor.
7971
8044
  // Currently this was made by merging two functions.
8045
+ var _a;
7972
8046
  const { entityId, menuItemId, styleId, styleEffectiveFilter } = params;
7973
8047
  const matchesStyleFilters = (rego) => {
7974
8048
  if (styleId != null && rego.styleId !== styleId) {
@@ -7992,10 +8066,10 @@
7992
8066
  }
7993
8067
  else if (menuItemId) {
7994
8068
  const visuals = [];
7995
- for (const eId in this.rego) {
7996
- const entityRegos = this.rego[eId];
7997
- if (entityRegos) {
7998
- const rego = entityRegos.find(r => r.menuItemId === menuItemId);
8069
+ const eIds = this.entityIdsByMenuItem[menuItemId];
8070
+ if (eIds) {
8071
+ for (const eId of eIds) {
8072
+ const rego = (_a = this.rego[eId]) === null || _a === void 0 ? void 0 : _a.find(r => r.menuItemId === menuItemId);
7999
8073
  if (rego && matchesStyleFilters(rego)) {
8000
8074
  visuals.push(rego);
8001
8075
  }
@@ -8027,7 +8101,7 @@
8027
8101
  */
8028
8102
  RemoveRegos(params) {
8029
8103
  var _a, _b, _c;
8030
- let { entityId, menuItemId, doUpdate, relation, retainTagIds, requestRender, doRemove, source } = params;
8104
+ let { entityId, menuItemId, doUpdate, relation, retainTagIds, requestRender, doRemove, source, lazy, onComplete } = params;
8031
8105
  if (doUpdate == null || doUpdate === undefined) {
8032
8106
  doUpdate = true;
8033
8107
  }
@@ -8038,50 +8112,65 @@
8038
8112
  // Currently this was made by merging two functions.
8039
8113
  if (menuItemId && !entityId) {
8040
8114
  // Entities registered under this menu item, keyed via entityIdsByMenuItem.
8041
- // Snapshot to an array since removals below mutate the backing set.
8042
8115
  const entityIds = this.entityIdsByMenuItem[menuItemId] ? Array.from(this.entityIdsByMenuItem[menuItemId]) : [];
8043
- for (const entityId of entityIds) {
8116
+ const regoSnapshot = new Map();
8117
+ for (const snapEntityId of entityIds) {
8118
+ const snapRego = (_a = this.rego[snapEntityId]) === null || _a === void 0 ? void 0 : _a.find(r => r.menuItemId === menuItemId);
8119
+ if (snapRego) {
8120
+ regoSnapshot.set(snapEntityId, snapRego);
8121
+ }
8122
+ }
8123
+ const removeOne = (entityId) => {
8124
+ var _a;
8044
8125
  const entityRegos = this.rego[entityId];
8045
- if (entityRegos) {
8046
- const rego = entityRegos.find(r => r.menuItemId === menuItemId);
8047
- if (!rego) {
8048
- continue;
8049
- }
8050
- const regoTagIds = rego.tagIds ? rego.tagIds : [];
8051
- const shouldRetain = regoTagIds.some(tagId => retainTagIds.includes(tagId));
8052
- if (shouldRetain) {
8053
- continue;
8054
- }
8055
- exports.EntityLabel.Detatch({
8056
- rego
8126
+ if (!entityRegos) {
8127
+ return;
8128
+ }
8129
+ const rego = entityRegos.find(r => r.menuItemId === menuItemId);
8130
+ if (!rego || rego !== regoSnapshot.get(entityId)) {
8131
+ return;
8132
+ }
8133
+ const regoTagIds = rego.tagIds ? rego.tagIds : [];
8134
+ const shouldRetain = regoTagIds.some(tagId => retainTagIds.includes(tagId));
8135
+ if (shouldRetain) {
8136
+ return;
8137
+ }
8138
+ exports.EntityLabel.Detatch({
8139
+ rego
8140
+ });
8141
+ if (doRemove != false) {
8142
+ removeEntity(this.viewer, rego.visual);
8143
+ }
8144
+ rego.visual = null;
8145
+ const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);
8146
+ if (doesInclude) {
8147
+ this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
8148
+ this.unindexMenuItemEntityIfAbsent(menuItemId, entityId);
8149
+ }
8150
+ const update = {
8151
+ type: EVisualUpdateType.Remove,
8152
+ entityId: rego.entityId,
8153
+ rego: rego
8154
+ };
8155
+ if (source) {
8156
+ update.source = source;
8157
+ }
8158
+ if (source !== EUpdateSource.TREE_CASCADE) {
8159
+ (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger(update);
8160
+ }
8161
+ if (doesInclude) {
8162
+ this.queueUpdate({
8163
+ entityId: entityId,
8164
+ refresh: false
8057
8165
  });
8058
- if (doRemove != false) {
8059
- removeEntity(this.viewer, rego.visual);
8060
- }
8061
- rego.visual = null;
8062
- const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);
8063
- if (doesInclude) {
8064
- this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
8065
- this.unindexMenuItemEntityIfAbsent(menuItemId, entityId);
8066
- }
8067
- const update = {
8068
- type: EVisualUpdateType.Remove,
8069
- entityId: rego.entityId,
8070
- rego: rego
8071
- };
8072
- if (source) {
8073
- update.source = source;
8074
- }
8075
- if (source !== EUpdateSource.TREE_CASCADE) {
8076
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger(update);
8077
- }
8078
- if (doesInclude) {
8079
- this.queueUpdate({
8080
- entityId: entityId,
8081
- refresh: false
8082
- });
8083
- }
8084
8166
  }
8167
+ };
8168
+ if (lazy) {
8169
+ this.startLazyRemoval(entityIds, removeOne, onComplete);
8170
+ return;
8171
+ }
8172
+ for (const entityId of entityIds) {
8173
+ removeOne(entityId);
8085
8174
  }
8086
8175
  }
8087
8176
  else if (entityId) {
@@ -8404,10 +8493,9 @@
8404
8493
  });
8405
8494
  }
8406
8495
  /**
8407
- * Returns a dictionary containing entityId -> opacity values.
8408
- * Opacity 1 = 100%.
8496
+ * Returns a dictionary containing entityId -> opacity values, without regard to
8497
+ * menu item id. Opacity 1 = 100%.
8409
8498
  * @returns
8410
- * @deprecated Use GetStates() or GetState().
8411
8499
  */
8412
8500
  GetOpacityMap() {
8413
8501
  const map = {};
@@ -9369,7 +9457,7 @@
9369
9457
  return new Cesium.Color(color.red ? color.red / 255 : 0, color.green ? color.green / 255 : 0, color.blue ? color.blue / 255 : 0, color.alpha);
9370
9458
  }
9371
9459
  function getShowDebugBounds() {
9372
- if (!window) {
9460
+ if (typeof window === "undefined") {
9373
9461
  return false;
9374
9462
  }
9375
9463
  let showBounds = window === null || window === void 0 ? void 0 : window.ENTITIES_RENDER_MANAGER_SHOW_BOUNDS;
@@ -9441,52 +9529,17 @@
9441
9529
  this.item = params.item;
9442
9530
  }
9443
9531
  (async () => {
9444
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
9532
+ var _a, _b, _c, _d;
9445
9533
  if (this.disposed) {
9446
9534
  return;
9447
9535
  }
9448
9536
  try {
9449
- // Reset allowed list if there's change.
9450
- if (((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a["EntityType.ID"]) && !this.allowedTypeIDs.includes((_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"])) {
9451
- this.allowedTypeIDs = [];
9452
- if ((_c = this.item.BruceEntity) === null || _c === void 0 ? void 0 : _c["EntityType.ID"]) {
9453
- this.allowedTypeIDs.push((_d = this.item.BruceEntity) === null || _d === void 0 ? void 0 : _d["EntityType.ID"]);
9454
- }
9455
- }
9537
+ const { tagsToRender, shouldRender } = this.applyItemSettings();
9456
9538
  if (this.disposed) {
9457
9539
  return;
9458
9540
  }
9459
- this.zoomControl = this.item.CameraZoomSettings;
9460
- if (!((_e = this.zoomControl) === null || _e === void 0 ? void 0 : _e.length)) {
9461
- this.zoomControl = [
9462
- {
9463
- MinZoom: 0,
9464
- MaxZoom: 200000,
9465
- DisplayType: BModels.ZoomControl.EDisplayType.Model3D,
9466
- LODCategoryID: "glb",
9467
- LODLevel: 0,
9468
- StyleID: 0
9469
- }
9470
- ];
9471
- }
9472
- this.renderPriority = this.item.renderPriority;
9473
- if (this.renderPriority == null) {
9474
- this.renderPriority = 1;
9475
- }
9476
- if (this.useGeojson && this.zoomControl.length > 1) {
9477
- console.warn("Geojson rendering does not support multiple zoom controls. Only the first one will be used.");
9478
- this.zoomControl = [this.zoomControl[0]];
9479
- }
9480
- this.scenario = (_f = this.item.BruceEntity) === null || _f === void 0 ? void 0 : _f.Scenario;
9481
- const isTagItem = Boolean(this.item.BruceEntity.ExpandLayers);
9482
- let tagsToRender = isTagItem ? this.item.BruceEntity.SelectedExpandLayers : null;
9483
- if (!tagsToRender) {
9484
- tagsToRender = [];
9485
- }
9486
- tagsToRender = [].concat(tagsToRender);
9487
- const shouldRender = !isTagItem || tagsToRender.length > 0;
9488
9541
  this.unsetGetter();
9489
- (_g = this.viewMonitorRemoval) === null || _g === void 0 ? void 0 : _g.call(this);
9542
+ (_a = this.viewMonitorRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
9490
9543
  this.viewMonitorRemoval = null;
9491
9544
  clearInterval(this.renderQueueInterval);
9492
9545
  this.renderQueueInterval = null;
@@ -9498,17 +9551,17 @@
9498
9551
  menuItemId: this.item.id,
9499
9552
  retainTagIds: tagsToRender
9500
9553
  });
9501
- (_h = this.clustering) === null || _h === void 0 ? void 0 : _h.Dispose();
9554
+ (_b = this.clustering) === null || _b === void 0 ? void 0 : _b.Dispose();
9502
9555
  }
9503
9556
  else {
9504
9557
  this.visualsManager.RemoveRegos({
9505
9558
  menuItemId: this.item.id
9506
9559
  });
9507
- (_j = this.clustering) === null || _j === void 0 ? void 0 : _j.Dispose();
9560
+ (_c = this.clustering) === null || _c === void 0 ? void 0 : _c.Dispose();
9508
9561
  return;
9509
9562
  }
9510
9563
  if (this.item.enableClustering) {
9511
- this.clustering = new PointClustering(this.visualsManager, this.item.id, (_k = this.item) === null || _k === void 0 ? void 0 : _k.clustering);
9564
+ this.clustering = new PointClustering(this.visualsManager, this.item.id, (_d = this.item) === null || _d === void 0 ? void 0 : _d.clustering);
9512
9565
  }
9513
9566
  this.setGetter();
9514
9567
  this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {
@@ -9521,6 +9574,46 @@
9521
9574
  }
9522
9575
  })();
9523
9576
  }
9577
+ applyItemSettings() {
9578
+ var _a, _b, _c, _d, _e, _f;
9579
+ // Reset allowed list if there's change.
9580
+ if (((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a["EntityType.ID"]) && !this.allowedTypeIDs.includes((_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"])) {
9581
+ this.allowedTypeIDs = [];
9582
+ if ((_c = this.item.BruceEntity) === null || _c === void 0 ? void 0 : _c["EntityType.ID"]) {
9583
+ this.allowedTypeIDs.push((_d = this.item.BruceEntity) === null || _d === void 0 ? void 0 : _d["EntityType.ID"]);
9584
+ }
9585
+ }
9586
+ this.zoomControl = this.item.CameraZoomSettings;
9587
+ if (!((_e = this.zoomControl) === null || _e === void 0 ? void 0 : _e.length)) {
9588
+ this.zoomControl = [
9589
+ {
9590
+ MinZoom: 0,
9591
+ MaxZoom: 200000,
9592
+ DisplayType: BModels.ZoomControl.EDisplayType.Model3D,
9593
+ LODCategoryID: "glb",
9594
+ LODLevel: 0,
9595
+ StyleID: 0
9596
+ }
9597
+ ];
9598
+ }
9599
+ this.renderPriority = this.item.renderPriority;
9600
+ if (this.renderPriority == null) {
9601
+ this.renderPriority = 1;
9602
+ }
9603
+ if (this.useGeojson && this.zoomControl.length > 1) {
9604
+ console.warn("Geojson rendering does not support multiple zoom controls. Only the first one will be used.");
9605
+ this.zoomControl = [this.zoomControl[0]];
9606
+ }
9607
+ this.scenario = (_f = this.item.BruceEntity) === null || _f === void 0 ? void 0 : _f.Scenario;
9608
+ const isTagItem = Boolean(this.item.BruceEntity.ExpandLayers);
9609
+ let tagsToRender = isTagItem ? this.item.BruceEntity.SelectedExpandLayers : null;
9610
+ if (!tagsToRender) {
9611
+ tagsToRender = [];
9612
+ }
9613
+ tagsToRender = [].concat(tagsToRender);
9614
+ const shouldRender = !isTagItem || tagsToRender.length > 0;
9615
+ return { isTagItem, tagsToRender, shouldRender };
9616
+ }
9524
9617
  /**
9525
9618
  * Updates allowedTypeIDs values based in incoming data.
9526
9619
  * We might request 'x' Entity Type, but get 'y' Entities due to local Data Sources.
@@ -10505,6 +10598,85 @@
10505
10598
  this.clustering.Update();
10506
10599
  }
10507
10600
  }
10601
+ get HandoffKey() {
10602
+ return Manager.GetHandoffKey(this.item);
10603
+ }
10604
+ static GetHandoffKey(item) {
10605
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
10606
+ if (item.renderAsGeojson || item.enableClustering) {
10607
+ return null;
10608
+ }
10609
+ const isTagItem = Boolean((_a = item.BruceEntity) === null || _a === void 0 ? void 0 : _a.ExpandLayers);
10610
+ const tags = isTagItem ? [].concat((_c = (_b = item.BruceEntity) === null || _b === void 0 ? void 0 : _b.SelectedExpandLayers) !== null && _c !== void 0 ? _c : []).sort() : [];
10611
+ return JSON.stringify({
10612
+ typeId: ((_d = item.BruceEntity) === null || _d === void 0 ? void 0 : _d["EntityType.ID"]) || "",
10613
+ filter: (_f = (_e = item.BruceEntity) === null || _e === void 0 ? void 0 : _e.Filter) !== null && _f !== void 0 ? _f : {},
10614
+ isTagItem,
10615
+ tags,
10616
+ scenario: (_h = (_g = item.BruceEntity) === null || _g === void 0 ? void 0 : _g.Scenario) !== null && _h !== void 0 ? _h : "",
10617
+ historic: Boolean((_j = item.BruceEntity) === null || _j === void 0 ? void 0 : _j.historic),
10618
+ historicAttrKey: ((_k = item.BruceEntity) === null || _k === void 0 ? void 0 : _k.historicAttrKey) || "",
10619
+ historicInterpolation: Boolean(item.historicInterpolation),
10620
+ schemaId: ((_l = item.BruceEntity) === null || _l === void 0 ? void 0 : _l.schemaId) || "",
10621
+ cdnEnabled: Boolean(item.cdnEnabled),
10622
+ optimizeGeometry: Boolean(item.optimizeGeometry),
10623
+ optimizeMinPoints: (_m = item.optimizeMinPoints) !== null && _m !== void 0 ? _m : "",
10624
+ optimizeTolerance: (_o = item.optimizeTolerance) !== null && _o !== void 0 ? _o : ""
10625
+ });
10626
+ }
10627
+ PrepareHandoff() {
10628
+ var _a;
10629
+ if (this.disposed || this.useGeojson || this.item.enableClustering) {
10630
+ return null;
10631
+ }
10632
+ const payload = {
10633
+ renderedEntities: this.renderedEntities,
10634
+ renderedByInternalId: new Map(this.renderedByInternalId),
10635
+ internalByEntityId: new Map(this.internalByEntityId),
10636
+ allowedTypeIDs: [...this.allowedTypeIDs],
10637
+ renderQueue: [...this.renderQueue],
10638
+ sourceMenuItemId: this.item.id
10639
+ };
10640
+ this.unsetGetter();
10641
+ (_a = this.viewMonitorRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
10642
+ this.viewMonitorRemoval = null;
10643
+ clearInterval(this.renderQueueInterval);
10644
+ this.renderQueueInterval = null;
10645
+ this.renderQueue = [];
10646
+ this.disposed = true;
10647
+ return payload;
10648
+ }
10649
+ AdoptHandoff(payload) {
10650
+ var _a;
10651
+ const { shouldRender } = this.applyItemSettings();
10652
+ this.visualsManager.ReassignMenuItem({
10653
+ fromMenuItemId: payload.sourceMenuItemId,
10654
+ toMenuItemId: this.item.id,
10655
+ toMenuItemType: this.item.Type,
10656
+ toPriority: this.renderPriority,
10657
+ requestRender: false
10658
+ });
10659
+ if (!shouldRender) {
10660
+ this.renderedEntities = payload.renderedEntities;
10661
+ this.renderedByInternalId = payload.renderedByInternalId;
10662
+ this.internalByEntityId = payload.internalByEntityId;
10663
+ this.allowedTypeIDs = payload.allowedTypeIDs;
10664
+ return;
10665
+ }
10666
+ this.setGetter();
10667
+ this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {
10668
+ var _a;
10669
+ (_a = this.entityCheckQueue) === null || _a === void 0 ? void 0 : _a.Call();
10670
+ });
10671
+ this.renderedEntities = payload.renderedEntities;
10672
+ this.renderedByInternalId = payload.renderedByInternalId;
10673
+ this.internalByEntityId = payload.internalByEntityId;
10674
+ this.allowedTypeIDs = payload.allowedTypeIDs;
10675
+ if ((_a = payload.renderQueue) === null || _a === void 0 ? void 0 : _a.length) {
10676
+ this.distributeForRender(payload.renderQueue);
10677
+ }
10678
+ this.viewer.scene.requestRender();
10679
+ }
10508
10680
  }
10509
10681
  EntitiesRenderManager.Manager = Manager;
10510
10682
  })(exports.EntitiesRenderManager || (exports.EntitiesRenderManager = {}));
@@ -14385,14 +14557,6 @@
14385
14557
  if (this.renderPriority == null) {
14386
14558
  this.renderPriority = 0;
14387
14559
  }
14388
- // Same visuals, same registrations - just re-keyed onto this menu item.
14389
- this.visualsManager.ReassignMenuItem({
14390
- fromMenuItemId: payload.sourceMenuItemId,
14391
- toMenuItemId: this.item.id,
14392
- toMenuItemType: this.item.Type,
14393
- toPriority: this.renderPriority,
14394
- requestRender: false
14395
- });
14396
14560
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
14397
14561
  try {
14398
14562
  this.queueTile(tile, true);
@@ -14409,6 +14573,14 @@
14409
14573
  console.error(e);
14410
14574
  }
14411
14575
  });
14576
+ // Same visuals, same registrations so just re-keyed onto this menu item.
14577
+ this.visualsManager.ReassignMenuItem({
14578
+ fromMenuItemId: payload.sourceMenuItemId,
14579
+ toMenuItemId: this.item.id,
14580
+ toMenuItemType: this.item.Type,
14581
+ toPriority: this.renderPriority,
14582
+ requestRender: false
14583
+ });
14412
14584
  this.onCTilesetLoad();
14413
14585
  this.styler.Init({
14414
14586
  viewer: this.viewer,
@@ -15016,7 +15188,8 @@
15016
15188
  this.visualsManager.RemoveRegos({
15017
15189
  menuItemId: this.item.id,
15018
15190
  doRemove: false,
15019
- source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE
15191
+ source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE,
15192
+ lazy: true
15020
15193
  });
15021
15194
  this.viewerDateTimeDispose();
15022
15195
  }
@@ -16509,7 +16682,7 @@
16509
16682
  }
16510
16683
  setGetter(queryItems) {
16511
16684
  this.unsetGetter();
16512
- this.getter = new EntityFilterGetter.Getter({
16685
+ const getter = new EntityFilterGetter.Getter({
16513
16686
  api: this.apiGetter.getApi(),
16514
16687
  attrFilter: {},
16515
16688
  batchSize: BATCH_SIZE$3,
@@ -16520,6 +16693,10 @@
16520
16693
  queryItems: queryItems !== null && queryItems !== void 0 ? queryItems : []
16521
16694
  }
16522
16695
  });
16696
+ this.attachGetter(getter);
16697
+ }
16698
+ attachGetter(getter) {
16699
+ this.getter = getter;
16523
16700
  const minMax = exports.RenderManager.GetZoomMinMax({
16524
16701
  zoomControl: this.zoomControl
16525
16702
  });
@@ -16860,6 +17037,61 @@
16860
17037
  console.error("Failed to render DataLab entities:", e);
16861
17038
  }
16862
17039
  }
17040
+ get HandoffKey() {
17041
+ return Manager.GetHandoffKey(this.item);
17042
+ }
17043
+ static GetHandoffKey(item) {
17044
+ const queryId = item === null || item === void 0 ? void 0 : item.DataLabQueryID;
17045
+ if (!queryId) {
17046
+ return null;
17047
+ }
17048
+ return `datalab:${queryId}`;
17049
+ }
17050
+ PrepareHandoff() {
17051
+ var _a, _b, _c;
17052
+ if (this.disposed || !this.getter) {
17053
+ return null;
17054
+ }
17055
+ this.getter.ExcludeMenuItem(this.item.id);
17056
+ (_a = this.getterSub) === null || _a === void 0 ? void 0 : _a.call(this);
17057
+ this.getterSub = null;
17058
+ const getter = this.getter;
17059
+ this.getter = null;
17060
+ (_b = this.viewMonitorRemoval) === null || _b === void 0 ? void 0 : _b.call(this);
17061
+ this.viewMonitorRemoval = null;
17062
+ (_c = this.entityCheckQueue) === null || _c === void 0 ? void 0 : _c.Dispose();
17063
+ this.entityCheckQueue = null;
17064
+ clearInterval(this.renderQueueInterval);
17065
+ this.renderQueueInterval = null;
17066
+ const payload = {
17067
+ getter,
17068
+ renderedEntities: this.renderedEntities,
17069
+ renderQueue: [...this.renderQueue],
17070
+ sourceMenuItemId: this.item.id
17071
+ };
17072
+ this.renderQueue = [];
17073
+ this.queryLoadId += 1;
17074
+ this.disposed = true;
17075
+ return payload;
17076
+ }
17077
+ AdoptHandoff(payload) {
17078
+ var _a;
17079
+ this.ensureSettings();
17080
+ this.renderedEntities = payload.renderedEntities;
17081
+ this.visualsManager.ReassignMenuItem({
17082
+ fromMenuItemId: payload.sourceMenuItemId,
17083
+ toMenuItemId: this.item.id,
17084
+ toMenuItemType: this.item.Type,
17085
+ toPriority: this.renderPriority,
17086
+ requestRender: false
17087
+ });
17088
+ this.attachGetter(payload.getter);
17089
+ this.setEntityCheckQueue();
17090
+ if ((_a = payload.renderQueue) === null || _a === void 0 ? void 0 : _a.length) {
17091
+ this.distributeForRender(payload.renderQueue);
17092
+ }
17093
+ this.viewer.scene.requestRender();
17094
+ }
16863
17095
  }
16864
17096
  DataLabRenderManager.Manager = Manager;
16865
17097
  })(exports.DataLabRenderManager || (exports.DataLabRenderManager = {}));
@@ -17279,6 +17511,7 @@
17279
17511
  this.queueCheckInterval = null;
17280
17512
  this.processingQueue = 0;
17281
17513
  this._osmIdToBruceId = {};
17514
+ this.tileLoadRemoval = null;
17282
17515
  const { viewer, register: visualsManager, getters: apiGetter, monitor, item } = params;
17283
17516
  this.viewer = viewer;
17284
17517
  this.getters = apiGetter;
@@ -17287,11 +17520,14 @@
17287
17520
  this.monitor = monitor;
17288
17521
  }
17289
17522
  Dispose() {
17523
+ var _a;
17290
17524
  if (this.disposed) {
17291
17525
  return;
17292
17526
  }
17293
17527
  this.disposed = true;
17294
17528
  clearInterval(this.queueCheckInterval);
17529
+ (_a = this.tileLoadRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
17530
+ this.tileLoadRemoval = null;
17295
17531
  if (this.cTileset) {
17296
17532
  const viewer = this.viewer;
17297
17533
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
@@ -17305,7 +17541,8 @@
17305
17541
  this.cTileset = null;
17306
17542
  }
17307
17543
  this.visualsManager.RemoveRegos({
17308
- menuItemId: this.item.id
17544
+ menuItemId: this.item.id,
17545
+ lazy: true
17309
17546
  });
17310
17547
  this.featureQueue = [];
17311
17548
  }
@@ -17318,84 +17555,89 @@
17318
17555
  this.sourceId = EnsureNumber((_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17319
17556
  this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
17320
17557
  (async () => {
17321
- if (this.disposed) {
17322
- return;
17323
- }
17324
- else if (this.cTileset) {
17325
- // Already exists, no need to re-initialize.
17326
- return;
17327
- }
17328
- let validToken;
17329
- if (Cesium.Ion.defaultServer) {
17330
- // Proxy server was set after verifying Ion availability upstream
17331
- // (including template account fallback) — trust that check.
17332
- validToken = true;
17333
- }
17334
- else {
17335
- // No proxy; validate the legacy access token directly.
17336
- validToken = await exports.ViewerUtils.AssertIonToken(Cesium.Ion.defaultAccessToken);
17337
- }
17338
- if (!validToken) {
17339
- console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
17340
- return;
17341
- }
17342
- const CESIUM = Cesium;
17343
- let cTileset;
17344
- // Newer versions of Cesium have this function be async.
17345
- if (CESIUM["createOsmBuildingsAsync"]) {
17346
- cTileset = await CESIUM.createOsmBuildingsAsync({});
17347
- }
17348
- // Older versions of Cesium have this function be sync.
17349
- else if (CESIUM["createOsmBuildings"]) {
17350
- cTileset = CESIUM.createOsmBuildings();
17351
- }
17352
- else {
17353
- console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
17354
- return;
17355
- }
17356
- // See if we already have a cTileset set.
17357
- // Happens if we re-initialized in quick succession.
17358
- if (this.cTileset) {
17359
- cTileset.destroy();
17360
- return;
17361
- }
17362
- this.cTileset = cTileset;
17363
- if (this.disposed) {
17364
- if (this.cTileset && !this.cTileset.isDestroyed()) {
17365
- this.cTileset.destroy();
17366
- this.cTileset = null;
17558
+ try {
17559
+ if (this.disposed) {
17560
+ return;
17367
17561
  }
17368
- return;
17369
- }
17370
- if (this.sourceId) {
17371
- if (menuItem.ghostLoading == true) {
17372
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
17373
- color: "rgba(255, 255, 250, 0.98)"
17374
- });
17562
+ else if (this.cTileset) {
17563
+ // Already exists, no need to re-initialize.
17564
+ return;
17375
17565
  }
17376
- this.viewer.scene.primitives.add(this.cTileset);
17377
- this.cTileset.tileLoad.addEventListener((tile) => {
17378
- if (this.disposed) {
17379
- return;
17380
- }
17381
- try {
17382
- this.mapCTile(tile);
17383
- }
17384
- catch (e) {
17385
- console.error(e);
17566
+ let validToken;
17567
+ if (Cesium.Ion.defaultServer) {
17568
+ // Proxy server was set after verifying Ion availability upstream
17569
+ // (including template account fallback) — trust that check.
17570
+ validToken = true;
17571
+ }
17572
+ else {
17573
+ // No proxy; validate the legacy access token directly.
17574
+ validToken = await exports.ViewerUtils.AssertIonToken(Cesium.Ion.defaultAccessToken);
17575
+ }
17576
+ if (!validToken) {
17577
+ console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
17578
+ return;
17579
+ }
17580
+ const CESIUM = Cesium;
17581
+ let cTileset;
17582
+ // Newer versions of Cesium have this function be async.
17583
+ if (CESIUM["createOsmBuildingsAsync"]) {
17584
+ cTileset = await CESIUM.createOsmBuildingsAsync({});
17585
+ }
17586
+ // Older versions of Cesium have this function be sync.
17587
+ else if (CESIUM["createOsmBuildings"]) {
17588
+ cTileset = CESIUM.createOsmBuildings();
17589
+ }
17590
+ else {
17591
+ console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
17592
+ return;
17593
+ }
17594
+ // See if we already have a cTileset set.
17595
+ // Happens if we re-initialized in quick succession.
17596
+ if (this.cTileset) {
17597
+ cTileset.destroy();
17598
+ return;
17599
+ }
17600
+ this.cTileset = cTileset;
17601
+ if (this.disposed) {
17602
+ if (this.cTileset && !this.cTileset.isDestroyed()) {
17603
+ this.cTileset.destroy();
17604
+ this.cTileset = null;
17386
17605
  }
17387
- });
17388
- this.queueCheckInterval = setInterval(() => {
17389
- if (this.featureQueue.length > 0) {
17390
- this.processQueue();
17606
+ return;
17607
+ }
17608
+ if (this.sourceId) {
17609
+ if (menuItem.ghostLoading == true) {
17610
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
17611
+ color: "rgba(255, 255, 250, 0.98)"
17612
+ });
17391
17613
  }
17392
- }, 5000);
17614
+ this.viewer.scene.primitives.add(this.cTileset);
17615
+ this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
17616
+ if (this.disposed) {
17617
+ return;
17618
+ }
17619
+ try {
17620
+ this.mapCTile(tile);
17621
+ }
17622
+ catch (e) {
17623
+ console.error(e);
17624
+ }
17625
+ });
17626
+ this.queueCheckInterval = setInterval(() => {
17627
+ if (this.featureQueue.length > 0) {
17628
+ this.processQueue();
17629
+ }
17630
+ }, 5000);
17631
+ }
17632
+ else {
17633
+ this.viewer.scene.primitives.add(this.cTileset);
17634
+ }
17635
+ this.cTileset.show = true;
17636
+ this.viewer.scene.requestRender();
17393
17637
  }
17394
- else {
17395
- this.viewer.scene.primitives.add(this.cTileset);
17638
+ catch (e) {
17639
+ console.error("Failed to load OSM Buildings tileset:", e);
17396
17640
  }
17397
- this.cTileset.show = true;
17398
- this.viewer.scene.requestRender();
17399
17641
  })();
17400
17642
  }
17401
17643
  async mapCTile(tile) {
@@ -17630,6 +17872,72 @@
17630
17872
  }
17631
17873
  async ReRender(params) {
17632
17874
  }
17875
+ get HandoffKey() {
17876
+ return Manager.GetHandoffKey(this.item);
17877
+ }
17878
+ static GetHandoffKey(item) {
17879
+ var _a, _b;
17880
+ const sourceId = EnsureNumber((_a = item.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17881
+ const entityTypeId = ((_b = item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"]) || "";
17882
+ return `osm:${sourceId}:${entityTypeId}`;
17883
+ }
17884
+ PrepareHandoff() {
17885
+ var _a;
17886
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
17887
+ return null;
17888
+ }
17889
+ clearInterval(this.queueCheckInterval);
17890
+ this.queueCheckInterval = null;
17891
+ (_a = this.tileLoadRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
17892
+ this.tileLoadRemoval = null;
17893
+ const payload = {
17894
+ cTileset: this.cTileset,
17895
+ loadedCesiumEntities: this._loadedCesiumEntities,
17896
+ featureQueue: this.featureQueue,
17897
+ osmIdToBruceId: this._osmIdToBruceId,
17898
+ totalLoaded: this.totalLoaded,
17899
+ sourceMenuItemId: this.item.id
17900
+ };
17901
+ this.cTileset = null;
17902
+ this.disposed = true;
17903
+ return payload;
17904
+ }
17905
+ AdoptHandoff(payload) {
17906
+ var _a, _b;
17907
+ this.sourceId = EnsureNumber((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17908
+ this.entityTypeId = (_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
17909
+ this.cTileset = payload.cTileset;
17910
+ this._loadedCesiumEntities = payload.loadedCesiumEntities;
17911
+ this.featureQueue = payload.featureQueue;
17912
+ this._osmIdToBruceId = payload.osmIdToBruceId;
17913
+ this.totalLoaded = payload.totalLoaded;
17914
+ if (this.sourceId) {
17915
+ this.visualsManager.ReassignMenuItem({
17916
+ fromMenuItemId: payload.sourceMenuItemId,
17917
+ toMenuItemId: this.item.id,
17918
+ toMenuItemType: this.item.Type,
17919
+ requestRender: false
17920
+ });
17921
+ this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
17922
+ if (this.disposed) {
17923
+ return;
17924
+ }
17925
+ try {
17926
+ this.mapCTile(tile);
17927
+ }
17928
+ catch (e) {
17929
+ console.error(e);
17930
+ }
17931
+ });
17932
+ this.queueCheckInterval = setInterval(() => {
17933
+ if (this.featureQueue.length > 0) {
17934
+ this.processQueue();
17935
+ }
17936
+ }, 5000);
17937
+ }
17938
+ this.cTileset.show = true;
17939
+ this.viewer.scene.requestRender();
17940
+ }
17633
17941
  }
17634
17942
  TilesetOsmRenderManager.Manager = Manager;
17635
17943
  })(exports.TilesetOsmRenderManager || (exports.TilesetOsmRenderManager = {}));
@@ -17977,7 +18285,8 @@
17977
18285
  }
17978
18286
  (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
17979
18287
  this.visualsManager.RemoveRegos({
17980
- menuItemId: this.item.id
18288
+ menuItemId: this.item.id,
18289
+ lazy: true
17981
18290
  });
17982
18291
  }
17983
18292
  onCTilesetLoad() {
@@ -18044,13 +18353,6 @@
18044
18353
  if (this.renderPriority == null) {
18045
18354
  this.renderPriority = 0;
18046
18355
  }
18047
- this.visualsManager.ReassignMenuItem({
18048
- fromMenuItemId: payload.sourceMenuItemId,
18049
- toMenuItemId: this.item.id,
18050
- toMenuItemType: this.item.Type,
18051
- toPriority: this.renderPriority,
18052
- requestRender: false
18053
- });
18054
18356
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
18055
18357
  try {
18056
18358
  this.queueTile(tile, true);
@@ -18067,6 +18369,13 @@
18067
18369
  console.error(e);
18068
18370
  }
18069
18371
  });
18372
+ this.visualsManager.ReassignMenuItem({
18373
+ fromMenuItemId: payload.sourceMenuItemId,
18374
+ toMenuItemId: this.item.id,
18375
+ toMenuItemType: this.item.Type,
18376
+ toPriority: this.renderPriority,
18377
+ requestRender: false
18378
+ });
18070
18379
  if (this.item.ApplyStyles) {
18071
18380
  this.styler.Init({
18072
18381
  viewer: this.viewer,
@@ -18351,6 +18660,36 @@
18351
18660
  }
18352
18661
  async ReRender(params) {
18353
18662
  }
18663
+ get HandoffKey() {
18664
+ return Manager.GetHandoffKey(this.item);
18665
+ }
18666
+ static GetHandoffKey(item) {
18667
+ var _a, _b;
18668
+ const tilesetId = (_a = item === null || item === void 0 ? void 0 : item.tileset) === null || _a === void 0 ? void 0 : _a.TilesetID;
18669
+ if (!tilesetId) {
18670
+ return null;
18671
+ }
18672
+ const accountId = ((_b = item.tileset) === null || _b === void 0 ? void 0 : _b.ClientAccountID) || "";
18673
+ return `${accountId}:${tilesetId}`;
18674
+ }
18675
+ PrepareHandoff() {
18676
+ var _a;
18677
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
18678
+ return null;
18679
+ }
18680
+ const payload = {
18681
+ cTileset: this.cTileset
18682
+ };
18683
+ (_a = this.initQueue) === null || _a === void 0 ? void 0 : _a.Remove(this);
18684
+ this.cTileset = null;
18685
+ this.disposed = true;
18686
+ return payload;
18687
+ }
18688
+ AdoptHandoff(payload) {
18689
+ this.cTileset = payload.cTileset;
18690
+ this.onCTilesetLoad();
18691
+ this.viewer.scene.requestRender();
18692
+ }
18354
18693
  }
18355
18694
  TilesetPointcloudRenderManager.Manager = Manager;
18356
18695
  })(exports.TilesetPointcloudRenderManager || (exports.TilesetPointcloudRenderManager = {}));
@@ -19645,19 +19984,7 @@
19645
19984
  var _a, _b, _c;
19646
19985
  // If the tileset already exists then we just need to update the style.
19647
19986
  if (this.cTileset) {
19648
- const colorCss = this.item.colorMask;
19649
- if (colorCss) {
19650
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
19651
- color: {
19652
- conditions: [
19653
- ["true", `color("${colorCss}")`]
19654
- ]
19655
- }
19656
- });
19657
- }
19658
- else {
19659
- this.cTileset.style = undefined;
19660
- }
19987
+ this.applyColorMask();
19661
19988
  this.viewer.scene.requestRender();
19662
19989
  return;
19663
19990
  }
@@ -19746,21 +20073,49 @@
19746
20073
  return;
19747
20074
  }
19748
20075
  this.viewer.scene.primitives.add(this.cTileset);
19749
- const colorCss = this.item.colorMask;
19750
- if (colorCss) {
19751
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
19752
- color: {
19753
- conditions: [
19754
- ["true", `color("${colorCss}")`]
19755
- ]
19756
- }
19757
- });
19758
- }
20076
+ this.applyColorMask();
19759
20077
  this.viewer.scene.requestRender();
19760
20078
  })();
19761
20079
  }
20080
+ applyColorMask() {
20081
+ const colorCss = this.item.colorMask;
20082
+ if (colorCss) {
20083
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
20084
+ color: {
20085
+ conditions: [
20086
+ ["true", `color("${colorCss}")`]
20087
+ ]
20088
+ }
20089
+ });
20090
+ }
20091
+ else {
20092
+ this.cTileset.style = undefined;
20093
+ }
20094
+ }
19762
20095
  async ReRender(params) {
19763
20096
  }
20097
+ get HandoffKey() {
20098
+ return Manager.GetHandoffKey();
20099
+ }
20100
+ static GetHandoffKey() {
20101
+ return "google-photorealistic-3d";
20102
+ }
20103
+ PrepareHandoff() {
20104
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
20105
+ return null;
20106
+ }
20107
+ const payload = {
20108
+ cTileset: this.cTileset
20109
+ };
20110
+ this.cTileset = null;
20111
+ this.disposed = true;
20112
+ return payload;
20113
+ }
20114
+ AdoptHandoff(payload) {
20115
+ this.cTileset = payload.cTileset;
20116
+ this.applyColorMask();
20117
+ this.viewer.scene.requestRender();
20118
+ }
19764
20119
  }
19765
20120
  TilesetGooglePhotosRenderManager.Manager = Manager;
19766
20121
  })(exports.TilesetGooglePhotosRenderManager || (exports.TilesetGooglePhotosRenderManager = {}));
@@ -22139,6 +22494,21 @@
22139
22494
  if (item.Type === BModels.MenuItem.EType.EntityTileset) {
22140
22495
  return exports.TilesetEntitiesRenderManager.Manager.GetHandoffKey(item);
22141
22496
  }
22497
+ if (item.Type === BModels.MenuItem.EType.PointCloud) {
22498
+ return exports.TilesetPointcloudRenderManager.Manager.GetHandoffKey(item);
22499
+ }
22500
+ if (item.Type === BModels.MenuItem.EType.GooglePhotoTileset) {
22501
+ return exports.TilesetGooglePhotosRenderManager.Manager.GetHandoffKey();
22502
+ }
22503
+ if (item.Type === BModels.MenuItem.EType.Osm) {
22504
+ return exports.TilesetOsmRenderManager.Manager.GetHandoffKey(item);
22505
+ }
22506
+ if (item.Type === BModels.MenuItem.EType.Entities) {
22507
+ return exports.EntitiesRenderManager.Manager.GetHandoffKey(item);
22508
+ }
22509
+ if (item.Type === BModels.MenuItem.EType.DataLab) {
22510
+ return exports.DataLabRenderManager.Manager.GetHandoffKey(item);
22511
+ }
22142
22512
  return null;
22143
22513
  }
22144
22514
  // Claims a pooled manager for the same resource, if one exists and both sides opt in.
@@ -37064,7 +37434,7 @@
37064
37434
  StyleUtils.ApplyTypeStyle = ApplyTypeStyle;
37065
37435
  })(exports.StyleUtils || (exports.StyleUtils = {}));
37066
37436
 
37067
- const VERSION = "6.8.1";
37437
+ const VERSION = "6.8.2";
37068
37438
  /**
37069
37439
  * Updates the environment instance used by bruce-cesium to one specified.
37070
37440
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.