bruce-cesium 6.8.0 → 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 (35) hide show
  1. package/dist/bruce-cesium.es5.js +631 -257
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +629 -255
  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 +20 -5
  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 +18 -13
  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-cad-render-manager.d.ts +1 -1
  30. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +1 -1
  31. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +6 -1
  32. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +6 -1
  33. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +5 -1
  34. package/dist/types/rendering/visuals-register.d.ts +17 -12
  35. 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 = {}));
@@ -14315,17 +14487,21 @@
14315
14487
  }
14316
14488
  }
14317
14489
  // Two items resolving to the same key are eligible to hand off, regardless of styling.
14490
+ // Model-space vs. geospatial, and historic vs. live, position the tileset via entirely
14491
+ // different code paths (baked in once at Init() time), so either changing must never
14492
+ // match an existing key and must instead force a real reload.
14318
14493
  get HandoffKey() {
14319
- return Manager.GetHandoffKey(this.item);
14494
+ return Manager.GetHandoffKey(this.item, this.modelSpace);
14320
14495
  }
14321
- static GetHandoffKey(item) {
14322
- var _a, _b;
14496
+ static GetHandoffKey(item, modelSpace) {
14497
+ var _a, _b, _c;
14323
14498
  const tilesetId = (_a = item === null || item === void 0 ? void 0 : item.tileset) === null || _a === void 0 ? void 0 : _a.TilesetID;
14324
14499
  if (!tilesetId) {
14325
14500
  return null;
14326
14501
  }
14327
14502
  const accountId = ((_b = item.tileset) === null || _b === void 0 ? void 0 : _b.ClientAccountID) || "";
14328
- return `${accountId}:${tilesetId}`;
14503
+ const historic = Boolean((_c = item.BruceEntity) === null || _c === void 0 ? void 0 : _c.historic);
14504
+ return `${accountId}:${tilesetId}:${Boolean(modelSpace)}:${historic}`;
14329
14505
  }
14330
14506
  // Returns null (fall back to a normal Dispose()) if the tileset hasn't finished loading yet.
14331
14507
  PrepareHandoff() {
@@ -14381,14 +14557,6 @@
14381
14557
  if (this.renderPriority == null) {
14382
14558
  this.renderPriority = 0;
14383
14559
  }
14384
- // Same visuals, same registrations - just re-keyed onto this menu item.
14385
- this.visualsManager.ReassignMenuItem({
14386
- fromMenuItemId: payload.sourceMenuItemId,
14387
- toMenuItemId: this.item.id,
14388
- toMenuItemType: this.item.Type,
14389
- toPriority: this.renderPriority,
14390
- requestRender: false
14391
- });
14392
14560
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
14393
14561
  try {
14394
14562
  this.queueTile(tile, true);
@@ -14405,6 +14573,14 @@
14405
14573
  console.error(e);
14406
14574
  }
14407
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
+ });
14408
14584
  this.onCTilesetLoad();
14409
14585
  this.styler.Init({
14410
14586
  viewer: this.viewer,
@@ -15012,7 +15188,8 @@
15012
15188
  this.visualsManager.RemoveRegos({
15013
15189
  menuItemId: this.item.id,
15014
15190
  doRemove: false,
15015
- source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE
15191
+ source: exports.VisualsRegister.EUpdateSource.TILESET_DISPOSE,
15192
+ lazy: true
15016
15193
  });
15017
15194
  this.viewerDateTimeDispose();
15018
15195
  }
@@ -16505,7 +16682,7 @@
16505
16682
  }
16506
16683
  setGetter(queryItems) {
16507
16684
  this.unsetGetter();
16508
- this.getter = new EntityFilterGetter.Getter({
16685
+ const getter = new EntityFilterGetter.Getter({
16509
16686
  api: this.apiGetter.getApi(),
16510
16687
  attrFilter: {},
16511
16688
  batchSize: BATCH_SIZE$3,
@@ -16516,6 +16693,10 @@
16516
16693
  queryItems: queryItems !== null && queryItems !== void 0 ? queryItems : []
16517
16694
  }
16518
16695
  });
16696
+ this.attachGetter(getter);
16697
+ }
16698
+ attachGetter(getter) {
16699
+ this.getter = getter;
16519
16700
  const minMax = exports.RenderManager.GetZoomMinMax({
16520
16701
  zoomControl: this.zoomControl
16521
16702
  });
@@ -16856,6 +17037,61 @@
16856
17037
  console.error("Failed to render DataLab entities:", e);
16857
17038
  }
16858
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
+ }
16859
17095
  }
16860
17096
  DataLabRenderManager.Manager = Manager;
16861
17097
  })(exports.DataLabRenderManager || (exports.DataLabRenderManager = {}));
@@ -17275,6 +17511,7 @@
17275
17511
  this.queueCheckInterval = null;
17276
17512
  this.processingQueue = 0;
17277
17513
  this._osmIdToBruceId = {};
17514
+ this.tileLoadRemoval = null;
17278
17515
  const { viewer, register: visualsManager, getters: apiGetter, monitor, item } = params;
17279
17516
  this.viewer = viewer;
17280
17517
  this.getters = apiGetter;
@@ -17283,11 +17520,14 @@
17283
17520
  this.monitor = monitor;
17284
17521
  }
17285
17522
  Dispose() {
17523
+ var _a;
17286
17524
  if (this.disposed) {
17287
17525
  return;
17288
17526
  }
17289
17527
  this.disposed = true;
17290
17528
  clearInterval(this.queueCheckInterval);
17529
+ (_a = this.tileLoadRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
17530
+ this.tileLoadRemoval = null;
17291
17531
  if (this.cTileset) {
17292
17532
  const viewer = this.viewer;
17293
17533
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
@@ -17301,7 +17541,8 @@
17301
17541
  this.cTileset = null;
17302
17542
  }
17303
17543
  this.visualsManager.RemoveRegos({
17304
- menuItemId: this.item.id
17544
+ menuItemId: this.item.id,
17545
+ lazy: true
17305
17546
  });
17306
17547
  this.featureQueue = [];
17307
17548
  }
@@ -17314,84 +17555,89 @@
17314
17555
  this.sourceId = EnsureNumber((_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
17315
17556
  this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
17316
17557
  (async () => {
17317
- if (this.disposed) {
17318
- return;
17319
- }
17320
- else if (this.cTileset) {
17321
- // Already exists, no need to re-initialize.
17322
- return;
17323
- }
17324
- let validToken;
17325
- if (Cesium.Ion.defaultServer) {
17326
- // Proxy server was set after verifying Ion availability upstream
17327
- // (including template account fallback) — trust that check.
17328
- validToken = true;
17329
- }
17330
- else {
17331
- // No proxy; validate the legacy access token directly.
17332
- validToken = await exports.ViewerUtils.AssertIonToken(Cesium.Ion.defaultAccessToken);
17333
- }
17334
- if (!validToken) {
17335
- console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
17336
- return;
17337
- }
17338
- const CESIUM = Cesium;
17339
- let cTileset;
17340
- // Newer versions of Cesium have this function be async.
17341
- if (CESIUM["createOsmBuildingsAsync"]) {
17342
- cTileset = await CESIUM.createOsmBuildingsAsync({});
17343
- }
17344
- // Older versions of Cesium have this function be sync.
17345
- else if (CESIUM["createOsmBuildings"]) {
17346
- cTileset = CESIUM.createOsmBuildings();
17347
- }
17348
- else {
17349
- console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
17350
- return;
17351
- }
17352
- // See if we already have a cTileset set.
17353
- // Happens if we re-initialized in quick succession.
17354
- if (this.cTileset) {
17355
- cTileset.destroy();
17356
- return;
17357
- }
17358
- this.cTileset = cTileset;
17359
- if (this.disposed) {
17360
- if (this.cTileset && !this.cTileset.isDestroyed()) {
17361
- this.cTileset.destroy();
17362
- this.cTileset = null;
17558
+ try {
17559
+ if (this.disposed) {
17560
+ return;
17363
17561
  }
17364
- return;
17365
- }
17366
- if (this.sourceId) {
17367
- if (menuItem.ghostLoading == true) {
17368
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
17369
- color: "rgba(255, 255, 250, 0.98)"
17370
- });
17562
+ else if (this.cTileset) {
17563
+ // Already exists, no need to re-initialize.
17564
+ return;
17371
17565
  }
17372
- this.viewer.scene.primitives.add(this.cTileset);
17373
- this.cTileset.tileLoad.addEventListener((tile) => {
17374
- if (this.disposed) {
17375
- return;
17376
- }
17377
- try {
17378
- this.mapCTile(tile);
17379
- }
17380
- catch (e) {
17381
- 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;
17382
17605
  }
17383
- });
17384
- this.queueCheckInterval = setInterval(() => {
17385
- if (this.featureQueue.length > 0) {
17386
- 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
+ });
17387
17613
  }
17388
- }, 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();
17389
17637
  }
17390
- else {
17391
- this.viewer.scene.primitives.add(this.cTileset);
17638
+ catch (e) {
17639
+ console.error("Failed to load OSM Buildings tileset:", e);
17392
17640
  }
17393
- this.cTileset.show = true;
17394
- this.viewer.scene.requestRender();
17395
17641
  })();
17396
17642
  }
17397
17643
  async mapCTile(tile) {
@@ -17626,6 +17872,72 @@
17626
17872
  }
17627
17873
  async ReRender(params) {
17628
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
+ }
17629
17941
  }
17630
17942
  TilesetOsmRenderManager.Manager = Manager;
17631
17943
  })(exports.TilesetOsmRenderManager || (exports.TilesetOsmRenderManager = {}));
@@ -17973,7 +18285,8 @@
17973
18285
  }
17974
18286
  (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
17975
18287
  this.visualsManager.RemoveRegos({
17976
- menuItemId: this.item.id
18288
+ menuItemId: this.item.id,
18289
+ lazy: true
17977
18290
  });
17978
18291
  }
17979
18292
  onCTilesetLoad() {
@@ -18040,13 +18353,6 @@
18040
18353
  if (this.renderPriority == null) {
18041
18354
  this.renderPriority = 0;
18042
18355
  }
18043
- this.visualsManager.ReassignMenuItem({
18044
- fromMenuItemId: payload.sourceMenuItemId,
18045
- toMenuItemId: this.item.id,
18046
- toMenuItemType: this.item.Type,
18047
- toPriority: this.renderPriority,
18048
- requestRender: false
18049
- });
18050
18356
  this.tileLoadRemoval = this.cTileset.tileLoad.addEventListener((tile) => {
18051
18357
  try {
18052
18358
  this.queueTile(tile, true);
@@ -18063,6 +18369,13 @@
18063
18369
  console.error(e);
18064
18370
  }
18065
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
+ });
18066
18379
  if (this.item.ApplyStyles) {
18067
18380
  this.styler.Init({
18068
18381
  viewer: this.viewer,
@@ -18347,6 +18660,36 @@
18347
18660
  }
18348
18661
  async ReRender(params) {
18349
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
+ }
18350
18693
  }
18351
18694
  TilesetPointcloudRenderManager.Manager = Manager;
18352
18695
  })(exports.TilesetPointcloudRenderManager || (exports.TilesetPointcloudRenderManager = {}));
@@ -19641,19 +19984,7 @@
19641
19984
  var _a, _b, _c;
19642
19985
  // If the tileset already exists then we just need to update the style.
19643
19986
  if (this.cTileset) {
19644
- const colorCss = this.item.colorMask;
19645
- if (colorCss) {
19646
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
19647
- color: {
19648
- conditions: [
19649
- ["true", `color("${colorCss}")`]
19650
- ]
19651
- }
19652
- });
19653
- }
19654
- else {
19655
- this.cTileset.style = undefined;
19656
- }
19987
+ this.applyColorMask();
19657
19988
  this.viewer.scene.requestRender();
19658
19989
  return;
19659
19990
  }
@@ -19742,21 +20073,49 @@
19742
20073
  return;
19743
20074
  }
19744
20075
  this.viewer.scene.primitives.add(this.cTileset);
19745
- const colorCss = this.item.colorMask;
19746
- if (colorCss) {
19747
- this.cTileset.style = new Cesium.Cesium3DTileStyle({
19748
- color: {
19749
- conditions: [
19750
- ["true", `color("${colorCss}")`]
19751
- ]
19752
- }
19753
- });
19754
- }
20076
+ this.applyColorMask();
19755
20077
  this.viewer.scene.requestRender();
19756
20078
  })();
19757
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
+ }
19758
20095
  async ReRender(params) {
19759
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
+ }
19760
20119
  }
19761
20120
  TilesetGooglePhotosRenderManager.Manager = Manager;
19762
20121
  })(exports.TilesetGooglePhotosRenderManager || (exports.TilesetGooglePhotosRenderManager = {}));
@@ -22051,7 +22410,7 @@
22051
22410
  console.error("Menu item type is not implemented.", params.item.Type);
22052
22411
  }
22053
22412
  if (rItem.renderManager && !rItem.renderManager.Disposed) {
22054
- const handoffPayload = this.tryClaimHandoffPayload(params.item, rItem.renderManager);
22413
+ const handoffPayload = this.tryClaimHandoffPayload(params.item, rItem.renderManager, params.modelSpace);
22055
22414
  try {
22056
22415
  if (handoffPayload) {
22057
22416
  rItem.renderManager.AdoptHandoff(handoffPayload);
@@ -22128,22 +22487,37 @@
22128
22487
  return Boolean(renderManager) && typeof renderManager.PrepareHandoff === "function";
22129
22488
  }
22130
22489
  // Resolves the hand-off key a menu item's data would have.
22131
- computeHandoffKey(item) {
22490
+ computeHandoffKey(item, modelSpace) {
22132
22491
  if (item.Type === BModels.MenuItem.EType.CadTileset) {
22133
- return exports.TilesetCadRenderManager.Manager.GetHandoffKey(item);
22492
+ return exports.TilesetCadRenderManager.Manager.GetHandoffKey(item, modelSpace);
22134
22493
  }
22135
22494
  if (item.Type === BModels.MenuItem.EType.EntityTileset) {
22136
22495
  return exports.TilesetEntitiesRenderManager.Manager.GetHandoffKey(item);
22137
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
+ }
22138
22512
  return null;
22139
22513
  }
22140
22514
  // Claims a pooled manager for the same resource, if one exists and both sides opt in.
22141
22515
  // Returns null (meaning: construct normally via Init()) otherwise.
22142
- tryClaimHandoffPayload(item, newManager) {
22516
+ tryClaimHandoffPayload(item, newManager, modelSpace) {
22143
22517
  if (typeof newManager.AdoptHandoff !== "function") {
22144
22518
  return null;
22145
22519
  }
22146
- const key = this.computeHandoffKey(item);
22520
+ const key = this.computeHandoffKey(item, modelSpace);
22147
22521
  if (!key) {
22148
22522
  return null;
22149
22523
  }
@@ -37060,7 +37434,7 @@
37060
37434
  StyleUtils.ApplyTypeStyle = ApplyTypeStyle;
37061
37435
  })(exports.StyleUtils || (exports.StyleUtils = {}));
37062
37436
 
37063
- const VERSION = "6.8.0";
37437
+ const VERSION = "6.8.2";
37064
37438
  /**
37065
37439
  * Updates the environment instance used by bruce-cesium to one specified.
37066
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.