bruce-cesium 6.8.1 → 6.8.3

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 +628 -248
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +626 -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 +61 -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 +127 -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 +157 -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,86 @@
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.doEntityCheck(Object.keys(this.renderedEntities));
10679
+ this.viewer.scene.requestRender();
10680
+ }
10508
10681
  }
10509
10682
  EntitiesRenderManager.Manager = Manager;
10510
10683
  })(exports.EntitiesRenderManager || (exports.EntitiesRenderManager = {}));
@@ -14385,14 +14558,6 @@
14385
14558
  if (this.renderPriority == null) {
14386
14559
  this.renderPriority = 0;
14387
14560
  }
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
14561
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
14397
14562
  try {
14398
14563
  this.queueTile(tile, true);
@@ -14409,6 +14574,14 @@
14409
14574
  console.error(e);
14410
14575
  }
14411
14576
  });
14577
+ // Same visuals, same registrations so just re-keyed onto this menu item.
14578
+ this.visualsManager.ReassignMenuItem({
14579
+ fromMenuItemId: payload.sourceMenuItemId,
14580
+ toMenuItemId: this.item.id,
14581
+ toMenuItemType: this.item.Type,
14582
+ toPriority: this.renderPriority,
14583
+ requestRender: false
14584
+ });
14412
14585
  this.onCTilesetLoad();
14413
14586
  this.styler.Init({
14414
14587
  viewer: this.viewer,
@@ -15016,7 +15189,8 @@
15016
15189
  this.visualsManager.RemoveRegos({
15017
15190
  menuItemId: this.item.id,
15018
15191
  doRemove: false,
15019
- source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE
15192
+ source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE,
15193
+ lazy: true
15020
15194
  });
15021
15195
  this.viewerDateTimeDispose();
15022
15196
  }
@@ -16509,7 +16683,7 @@
16509
16683
  }
16510
16684
  setGetter(queryItems) {
16511
16685
  this.unsetGetter();
16512
- this.getter = new EntityFilterGetter.Getter({
16686
+ const getter = new EntityFilterGetter.Getter({
16513
16687
  api: this.apiGetter.getApi(),
16514
16688
  attrFilter: {},
16515
16689
  batchSize: BATCH_SIZE$3,
@@ -16520,6 +16694,10 @@
16520
16694
  queryItems: queryItems !== null && queryItems !== void 0 ? queryItems : []
16521
16695
  }
16522
16696
  });
16697
+ this.attachGetter(getter);
16698
+ }
16699
+ attachGetter(getter) {
16700
+ this.getter = getter;
16523
16701
  const minMax = exports.RenderManager.GetZoomMinMax({
16524
16702
  zoomControl: this.zoomControl
16525
16703
  });
@@ -16860,6 +17038,62 @@
16860
17038
  console.error("Failed to render DataLab entities:", e);
16861
17039
  }
16862
17040
  }
17041
+ get HandoffKey() {
17042
+ return Manager.GetHandoffKey(this.item);
17043
+ }
17044
+ static GetHandoffKey(item) {
17045
+ const queryId = item === null || item === void 0 ? void 0 : item.DataLabQueryID;
17046
+ if (!queryId) {
17047
+ return null;
17048
+ }
17049
+ return `datalab:${queryId}`;
17050
+ }
17051
+ PrepareHandoff() {
17052
+ var _a, _b, _c;
17053
+ if (this.disposed || !this.getter) {
17054
+ return null;
17055
+ }
17056
+ this.getter.ExcludeMenuItem(this.item.id);
17057
+ (_a = this.getterSub) === null || _a === void 0 ? void 0 : _a.call(this);
17058
+ this.getterSub = null;
17059
+ const getter = this.getter;
17060
+ this.getter = null;
17061
+ (_b = this.viewMonitorRemoval) === null || _b === void 0 ? void 0 : _b.call(this);
17062
+ this.viewMonitorRemoval = null;
17063
+ (_c = this.entityCheckQueue) === null || _c === void 0 ? void 0 : _c.Dispose();
17064
+ this.entityCheckQueue = null;
17065
+ clearInterval(this.renderQueueInterval);
17066
+ this.renderQueueInterval = null;
17067
+ const payload = {
17068
+ getter,
17069
+ renderedEntities: this.renderedEntities,
17070
+ renderQueue: [...this.renderQueue],
17071
+ sourceMenuItemId: this.item.id
17072
+ };
17073
+ this.renderQueue = [];
17074
+ this.queryLoadId += 1;
17075
+ this.disposed = true;
17076
+ return payload;
17077
+ }
17078
+ AdoptHandoff(payload) {
17079
+ var _a;
17080
+ this.ensureSettings();
17081
+ this.renderedEntities = payload.renderedEntities;
17082
+ this.visualsManager.ReassignMenuItem({
17083
+ fromMenuItemId: payload.sourceMenuItemId,
17084
+ toMenuItemId: this.item.id,
17085
+ toMenuItemType: this.item.Type,
17086
+ toPriority: this.renderPriority,
17087
+ requestRender: false
17088
+ });
17089
+ this.attachGetter(payload.getter);
17090
+ this.setEntityCheckQueue();
17091
+ if ((_a = payload.renderQueue) === null || _a === void 0 ? void 0 : _a.length) {
17092
+ this.distributeForRender(payload.renderQueue);
17093
+ }
17094
+ this.doEntityCheck(Object.keys(this.renderedEntities));
17095
+ this.viewer.scene.requestRender();
17096
+ }
16863
17097
  }
16864
17098
  DataLabRenderManager.Manager = Manager;
16865
17099
  })(exports.DataLabRenderManager || (exports.DataLabRenderManager = {}));
@@ -17279,6 +17513,7 @@
17279
17513
  this.queueCheckInterval = null;
17280
17514
  this.processingQueue = 0;
17281
17515
  this._osmIdToBruceId = {};
17516
+ this.tileLoadRemoval = null;
17282
17517
  const { viewer, register: visualsManager, getters: apiGetter, monitor, item } = params;
17283
17518
  this.viewer = viewer;
17284
17519
  this.getters = apiGetter;
@@ -17287,11 +17522,14 @@
17287
17522
  this.monitor = monitor;
17288
17523
  }
17289
17524
  Dispose() {
17525
+ var _a;
17290
17526
  if (this.disposed) {
17291
17527
  return;
17292
17528
  }
17293
17529
  this.disposed = true;
17294
17530
  clearInterval(this.queueCheckInterval);
17531
+ (_a = this.tileLoadRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
17532
+ this.tileLoadRemoval = null;
17295
17533
  if (this.cTileset) {
17296
17534
  const viewer = this.viewer;
17297
17535
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
@@ -17305,7 +17543,8 @@
17305
17543
  this.cTileset = null;
17306
17544
  }
17307
17545
  this.visualsManager.RemoveRegos({
17308
- menuItemId: this.item.id
17546
+ menuItemId: this.item.id,
17547
+ lazy: true
17309
17548
  });
17310
17549
  this.featureQueue = [];
17311
17550
  }
@@ -17318,84 +17557,89 @@
17318
17557
  this.sourceId = EnsureNumber((_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17319
17558
  this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
17320
17559
  (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;
17560
+ try {
17561
+ if (this.disposed) {
17562
+ return;
17367
17563
  }
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
- });
17564
+ else if (this.cTileset) {
17565
+ // Already exists, no need to re-initialize.
17566
+ return;
17375
17567
  }
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);
17568
+ let validToken;
17569
+ if (Cesium.Ion.defaultServer) {
17570
+ // Proxy server was set after verifying Ion availability upstream
17571
+ // (including template account fallback) — trust that check.
17572
+ validToken = true;
17573
+ }
17574
+ else {
17575
+ // No proxy; validate the legacy access token directly.
17576
+ validToken = await exports.ViewerUtils.AssertIonToken(Cesium.Ion.defaultAccessToken);
17577
+ }
17578
+ if (!validToken) {
17579
+ console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
17580
+ return;
17581
+ }
17582
+ const CESIUM = Cesium;
17583
+ let cTileset;
17584
+ // Newer versions of Cesium have this function be async.
17585
+ if (CESIUM["createOsmBuildingsAsync"]) {
17586
+ cTileset = await CESIUM.createOsmBuildingsAsync({});
17587
+ }
17588
+ // Older versions of Cesium have this function be sync.
17589
+ else if (CESIUM["createOsmBuildings"]) {
17590
+ cTileset = CESIUM.createOsmBuildings();
17591
+ }
17592
+ else {
17593
+ console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
17594
+ return;
17595
+ }
17596
+ // See if we already have a cTileset set.
17597
+ // Happens if we re-initialized in quick succession.
17598
+ if (this.cTileset) {
17599
+ cTileset.destroy();
17600
+ return;
17601
+ }
17602
+ this.cTileset = cTileset;
17603
+ if (this.disposed) {
17604
+ if (this.cTileset && !this.cTileset.isDestroyed()) {
17605
+ this.cTileset.destroy();
17606
+ this.cTileset = null;
17386
17607
  }
17387
- });
17388
- this.queueCheckInterval = setInterval(() => {
17389
- if (this.featureQueue.length > 0) {
17390
- this.processQueue();
17608
+ return;
17609
+ }
17610
+ if (this.sourceId) {
17611
+ if (menuItem.ghostLoading == true) {
17612
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
17613
+ color: "rgba(255, 255, 250, 0.98)"
17614
+ });
17391
17615
  }
17392
- }, 5000);
17616
+ this.viewer.scene.primitives.add(this.cTileset);
17617
+ this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
17618
+ if (this.disposed) {
17619
+ return;
17620
+ }
17621
+ try {
17622
+ this.mapCTile(tile);
17623
+ }
17624
+ catch (e) {
17625
+ console.error(e);
17626
+ }
17627
+ });
17628
+ this.queueCheckInterval = setInterval(() => {
17629
+ if (this.featureQueue.length > 0) {
17630
+ this.processQueue();
17631
+ }
17632
+ }, 5000);
17633
+ }
17634
+ else {
17635
+ this.viewer.scene.primitives.add(this.cTileset);
17636
+ }
17637
+ this.cTileset.show = true;
17638
+ this.viewer.scene.requestRender();
17393
17639
  }
17394
- else {
17395
- this.viewer.scene.primitives.add(this.cTileset);
17640
+ catch (e) {
17641
+ console.error("Failed to load OSM Buildings tileset:", e);
17396
17642
  }
17397
- this.cTileset.show = true;
17398
- this.viewer.scene.requestRender();
17399
17643
  })();
17400
17644
  }
17401
17645
  async mapCTile(tile) {
@@ -17630,6 +17874,80 @@
17630
17874
  }
17631
17875
  async ReRender(params) {
17632
17876
  }
17877
+ get HandoffKey() {
17878
+ return Manager.GetHandoffKey(this.item);
17879
+ }
17880
+ static GetHandoffKey(item) {
17881
+ var _a, _b;
17882
+ const sourceId = EnsureNumber((_a = item.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17883
+ const entityTypeId = ((_b = item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"]) || "";
17884
+ return `osm:${sourceId}:${entityTypeId}`;
17885
+ }
17886
+ PrepareHandoff() {
17887
+ var _a;
17888
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
17889
+ return null;
17890
+ }
17891
+ clearInterval(this.queueCheckInterval);
17892
+ this.queueCheckInterval = null;
17893
+ (_a = this.tileLoadRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
17894
+ this.tileLoadRemoval = null;
17895
+ const payload = {
17896
+ cTileset: this.cTileset,
17897
+ loadedCesiumEntities: this._loadedCesiumEntities,
17898
+ featureQueue: this.featureQueue,
17899
+ osmIdToBruceId: this._osmIdToBruceId,
17900
+ totalLoaded: this.totalLoaded,
17901
+ sourceMenuItemId: this.item.id
17902
+ };
17903
+ this.cTileset = null;
17904
+ this.disposed = true;
17905
+ return payload;
17906
+ }
17907
+ AdoptHandoff(payload) {
17908
+ var _a, _b;
17909
+ this.sourceId = EnsureNumber((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17910
+ this.entityTypeId = (_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
17911
+ this.cTileset = payload.cTileset;
17912
+ this._loadedCesiumEntities = payload.loadedCesiumEntities;
17913
+ this.featureQueue = payload.featureQueue;
17914
+ this._osmIdToBruceId = payload.osmIdToBruceId;
17915
+ this.totalLoaded = payload.totalLoaded;
17916
+ if (this.sourceId) {
17917
+ if (this.item.ghostLoading == true) {
17918
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
17919
+ color: "rgba(255, 255, 250, 0.98)"
17920
+ });
17921
+ }
17922
+ else {
17923
+ this.cTileset.style = undefined;
17924
+ }
17925
+ this.visualsManager.ReassignMenuItem({
17926
+ fromMenuItemId: payload.sourceMenuItemId,
17927
+ toMenuItemId: this.item.id,
17928
+ toMenuItemType: this.item.Type,
17929
+ requestRender: false
17930
+ });
17931
+ this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
17932
+ if (this.disposed) {
17933
+ return;
17934
+ }
17935
+ try {
17936
+ this.mapCTile(tile);
17937
+ }
17938
+ catch (e) {
17939
+ console.error(e);
17940
+ }
17941
+ });
17942
+ this.queueCheckInterval = setInterval(() => {
17943
+ if (this.featureQueue.length > 0) {
17944
+ this.processQueue();
17945
+ }
17946
+ }, 5000);
17947
+ }
17948
+ this.cTileset.show = true;
17949
+ this.viewer.scene.requestRender();
17950
+ }
17633
17951
  }
17634
17952
  TilesetOsmRenderManager.Manager = Manager;
17635
17953
  })(exports.TilesetOsmRenderManager || (exports.TilesetOsmRenderManager = {}));
@@ -17977,7 +18295,8 @@
17977
18295
  }
17978
18296
  (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
17979
18297
  this.visualsManager.RemoveRegos({
17980
- menuItemId: this.item.id
18298
+ menuItemId: this.item.id,
18299
+ lazy: true
17981
18300
  });
17982
18301
  }
17983
18302
  onCTilesetLoad() {
@@ -18044,13 +18363,6 @@
18044
18363
  if (this.renderPriority == null) {
18045
18364
  this.renderPriority = 0;
18046
18365
  }
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
18366
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
18055
18367
  try {
18056
18368
  this.queueTile(tile, true);
@@ -18067,6 +18379,13 @@
18067
18379
  console.error(e);
18068
18380
  }
18069
18381
  });
18382
+ this.visualsManager.ReassignMenuItem({
18383
+ fromMenuItemId: payload.sourceMenuItemId,
18384
+ toMenuItemId: this.item.id,
18385
+ toMenuItemType: this.item.Type,
18386
+ toPriority: this.renderPriority,
18387
+ requestRender: false
18388
+ });
18070
18389
  if (this.item.ApplyStyles) {
18071
18390
  this.styler.Init({
18072
18391
  viewer: this.viewer,
@@ -18351,6 +18670,36 @@
18351
18670
  }
18352
18671
  async ReRender(params) {
18353
18672
  }
18673
+ get HandoffKey() {
18674
+ return Manager.GetHandoffKey(this.item);
18675
+ }
18676
+ static GetHandoffKey(item) {
18677
+ var _a, _b;
18678
+ const tilesetId = (_a = item === null || item === void 0 ? void 0 : item.tileset) === null || _a === void 0 ? void 0 : _a.TilesetID;
18679
+ if (!tilesetId) {
18680
+ return null;
18681
+ }
18682
+ const accountId = ((_b = item.tileset) === null || _b === void 0 ? void 0 : _b.ClientAccountID) || "";
18683
+ return `${accountId}:${tilesetId}`;
18684
+ }
18685
+ PrepareHandoff() {
18686
+ var _a;
18687
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
18688
+ return null;
18689
+ }
18690
+ const payload = {
18691
+ cTileset: this.cTileset
18692
+ };
18693
+ (_a = this.initQueue) === null || _a === void 0 ? void 0 : _a.Remove(this);
18694
+ this.cTileset = null;
18695
+ this.disposed = true;
18696
+ return payload;
18697
+ }
18698
+ AdoptHandoff(payload) {
18699
+ this.cTileset = payload.cTileset;
18700
+ this.onCTilesetLoad();
18701
+ this.viewer.scene.requestRender();
18702
+ }
18354
18703
  }
18355
18704
  TilesetPointcloudRenderManager.Manager = Manager;
18356
18705
  })(exports.TilesetPointcloudRenderManager || (exports.TilesetPointcloudRenderManager = {}));
@@ -19645,19 +19994,7 @@
19645
19994
  var _a, _b, _c;
19646
19995
  // If the tileset already exists then we just need to update the style.
19647
19996
  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
- }
19997
+ this.applyColorMask();
19661
19998
  this.viewer.scene.requestRender();
19662
19999
  return;
19663
20000
  }
@@ -19746,21 +20083,49 @@
19746
20083
  return;
19747
20084
  }
19748
20085
  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
- }
20086
+ this.applyColorMask();
19759
20087
  this.viewer.scene.requestRender();
19760
20088
  })();
19761
20089
  }
20090
+ applyColorMask() {
20091
+ const colorCss = this.item.colorMask;
20092
+ if (colorCss) {
20093
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
20094
+ color: {
20095
+ conditions: [
20096
+ ["true", `color("${colorCss}")`]
20097
+ ]
20098
+ }
20099
+ });
20100
+ }
20101
+ else {
20102
+ this.cTileset.style = undefined;
20103
+ }
20104
+ }
19762
20105
  async ReRender(params) {
19763
20106
  }
20107
+ get HandoffKey() {
20108
+ return Manager.GetHandoffKey();
20109
+ }
20110
+ static GetHandoffKey() {
20111
+ return "google-photorealistic-3d";
20112
+ }
20113
+ PrepareHandoff() {
20114
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
20115
+ return null;
20116
+ }
20117
+ const payload = {
20118
+ cTileset: this.cTileset
20119
+ };
20120
+ this.cTileset = null;
20121
+ this.disposed = true;
20122
+ return payload;
20123
+ }
20124
+ AdoptHandoff(payload) {
20125
+ this.cTileset = payload.cTileset;
20126
+ this.applyColorMask();
20127
+ this.viewer.scene.requestRender();
20128
+ }
19764
20129
  }
19765
20130
  TilesetGooglePhotosRenderManager.Manager = Manager;
19766
20131
  })(exports.TilesetGooglePhotosRenderManager || (exports.TilesetGooglePhotosRenderManager = {}));
@@ -22139,6 +22504,21 @@
22139
22504
  if (item.Type === BModels.MenuItem.EType.EntityTileset) {
22140
22505
  return exports.TilesetEntitiesRenderManager.Manager.GetHandoffKey(item);
22141
22506
  }
22507
+ if (item.Type === BModels.MenuItem.EType.PointCloud) {
22508
+ return exports.TilesetPointcloudRenderManager.Manager.GetHandoffKey(item);
22509
+ }
22510
+ if (item.Type === BModels.MenuItem.EType.GooglePhotoTileset) {
22511
+ return exports.TilesetGooglePhotosRenderManager.Manager.GetHandoffKey();
22512
+ }
22513
+ if (item.Type === BModels.MenuItem.EType.Osm) {
22514
+ return exports.TilesetOsmRenderManager.Manager.GetHandoffKey(item);
22515
+ }
22516
+ if (item.Type === BModels.MenuItem.EType.Entities) {
22517
+ return exports.EntitiesRenderManager.Manager.GetHandoffKey(item);
22518
+ }
22519
+ if (item.Type === BModels.MenuItem.EType.DataLab) {
22520
+ return exports.DataLabRenderManager.Manager.GetHandoffKey(item);
22521
+ }
22142
22522
  return null;
22143
22523
  }
22144
22524
  // Claims a pooled manager for the same resource, if one exists and both sides opt in.
@@ -37064,7 +37444,7 @@
37064
37444
  StyleUtils.ApplyTypeStyle = ApplyTypeStyle;
37065
37445
  })(exports.StyleUtils || (exports.StyleUtils = {}));
37066
37446
 
37067
- const VERSION = "6.8.1";
37447
+ const VERSION = "6.8.3";
37068
37448
  /**
37069
37449
  * Updates the environment instance used by bruce-cesium to one specified.
37070
37450
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.