bruce-cesium 2.4.7 → 2.4.9

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.
@@ -1,6 +1,6 @@
1
1
  import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera, AbstractApi, EntityAttachment, EntityAttachmentType, EntityAttribute } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, Entity, Primitive, Cesium3DTileFeature, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, CesiumInspector, defined, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, PolygonPipeline, Cesium3DTileset, Matrix4, Matrix3, IonResource, ColorMaterialProperty, EasingFunction, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, EllipsoidGeodesic, sampleTerrainMostDetailed, Model, Ion, BoundingSphere } from 'cesium';
3
+ import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, HeightReference, DistanceDisplayCondition, NearFarScalar, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, SceneMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumInspector, OrthographicFrustum, defined, Cesium3DTileset, Matrix4, Matrix3, IonResource, JulianDate, EllipsoidGeodesic, sampleTerrainMostDetailed, Model, PolygonPipeline, ColorMaterialProperty, EasingFunction, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, Ion, BoundingSphere } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -4086,7 +4086,8 @@ var EntitiesRenderManager;
4086
4086
  accountId: this.apiGetter.accountId,
4087
4087
  tagIds: tagIds ? [].concat(tagIds) : [],
4088
4088
  suppressShow: wasClustered,
4089
- name: cEntity.name
4089
+ name: cEntity.name,
4090
+ cdn: this.item.cdnEnabled
4090
4091
  };
4091
4092
  this.visualsManager.AddRego({
4092
4093
  rego: rego,
@@ -9660,6 +9661,26 @@ var MenuItemCreator;
9660
9661
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9661
9662
  })(MenuItemCreator || (MenuItemCreator = {}));
9662
9663
 
9664
+ // Used to track if a current in-progress render is the latest.
9665
+ // If we're midway through an async function that is rendering 10 imageries and this changes, then we stop the function.
9666
+ var ITERATION_KEY = "nextspace-tile-render-engine-iteration";
9667
+ function newIteration(viewer, tile) {
9668
+ // Create key specific to the kind of tile we're rendering.
9669
+ var key = ITERATION_KEY + tile;
9670
+ // Generate a new iteration ID, include the tile type in it so we can identify it easier.
9671
+ var value = ObjectUtils.UId() + tile;
9672
+ viewer[key] = value;
9673
+ return value;
9674
+ }
9675
+ /**
9676
+ * Checks if a given iteration is still the active one for a given viewer.
9677
+ * @param viewer
9678
+ * @param iteration
9679
+ */
9680
+ function assertIteration(viewer, iteration) {
9681
+ var suffix = iteration.includes("imagery") ? "imagery" : "terrain";
9682
+ return viewer[ITERATION_KEY + suffix] === iteration;
9683
+ }
9663
9684
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9664
9685
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9665
9686
  var re = /[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g;
@@ -10199,13 +10220,14 @@ var TileRenderEngine;
10199
10220
  function RenderView(params) {
10200
10221
  var _a;
10201
10222
  return __awaiter(this, void 0, void 0, function () {
10202
- var api, view, bookmark, vSettings, bSettings, data, dataNames, i, source, tiles, i, name_1, j, tile, enabled, layers, _loop_1, i, i, tile, layer, i, layer;
10223
+ var iteration, api, view, bookmark, vSettings, bSettings, data, dataNames, i, source, tiles, i, name_1, j, tile, enabled, layers, _loop_1, i, i, tile, layer, i, layer;
10203
10224
  return __generator(this, function (_b) {
10204
10225
  switch (_b.label) {
10205
10226
  case 0:
10206
10227
  if (!params.apiGetter) {
10207
10228
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10208
10229
  }
10230
+ iteration = newIteration(params.viewer, "imagery");
10209
10231
  api = params.apiGetter.getApi();
10210
10232
  return [4 /*yield*/, ProjectView.Get({
10211
10233
  api: api,
@@ -10213,6 +10235,9 @@ var TileRenderEngine;
10213
10235
  })];
10214
10236
  case 1:
10215
10237
  view = (_b.sent()).view;
10238
+ if (!assertIteration(params.viewer, iteration)) {
10239
+ return [2 /*return*/];
10240
+ }
10216
10241
  bookmark = null;
10217
10242
  if (!params.bookmarkId) return [3 /*break*/, 3];
10218
10243
  return [4 /*yield*/, ProjectViewBookmark.Get({
@@ -10222,6 +10247,9 @@ var TileRenderEngine;
10222
10247
  })];
10223
10248
  case 2:
10224
10249
  bookmark = (_b.sent()).bookmark;
10250
+ if (!assertIteration(params.viewer, iteration)) {
10251
+ return [2 /*return*/];
10252
+ }
10225
10253
  _b.label = 3;
10226
10254
  case 3:
10227
10255
  vSettings = view.Settings;
@@ -10245,6 +10273,9 @@ var TileRenderEngine;
10245
10273
  })];
10246
10274
  case 4:
10247
10275
  _b.sent();
10276
+ if (!assertIteration(params.viewer, iteration)) {
10277
+ return [2 /*return*/];
10278
+ }
10248
10279
  for (i = 0; i < dataNames.length; i++) {
10249
10280
  name_1 = dataNames[i];
10250
10281
  for (j = 0; j < tiles.length; j++) {
@@ -10291,6 +10322,9 @@ var TileRenderEngine;
10291
10322
  if (layer) {
10292
10323
  layers.push(layer);
10293
10324
  }
10325
+ if (!assertIteration(params.viewer, iteration)) {
10326
+ return [2 /*return*/];
10327
+ }
10294
10328
  _b.label = 7;
10295
10329
  case 7:
10296
10330
  i++;
@@ -10502,13 +10536,66 @@ var TileRenderEngine;
10502
10536
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10503
10537
  function Render(params) {
10504
10538
  return __awaiter(this, void 0, void 0, function () {
10505
- var i, enabled, curEnabled, toDisable, curEnabledArr, _loop_2, i, i, _loop_3, i;
10539
+ var tmpTiles, _loop_2, i, organize, iteration, curEnabled, toDisable, _loop_3, i, i, organized, i, enabled;
10506
10540
  return __generator(this, function (_a) {
10507
10541
  switch (_a.label) {
10508
10542
  case 0:
10509
10543
  if (!params.apiGetter) {
10510
10544
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10511
10545
  }
10546
+ tmpTiles = [];
10547
+ _loop_2 = function (i) {
10548
+ var tile = params.tiles[i];
10549
+ if (!tmpTiles.find(function (x) { return (x.accountId == tile.accountId) && (x.tilesetId == tile.tilesetId); })) {
10550
+ tmpTiles.push(tile);
10551
+ }
10552
+ };
10553
+ for (i = 0; i < params.tiles.length; i++) {
10554
+ _loop_2(i);
10555
+ }
10556
+ params.tiles = tmpTiles;
10557
+ organize = function () {
10558
+ var curEnabledArr = [];
10559
+ for (var i = 0; i < curEnabled.length; i++) {
10560
+ var layer = curEnabled.get(i);
10561
+ curEnabledArr.push(layer);
10562
+ }
10563
+ var _loop_4 = function (i) {
10564
+ var enabled = params.tiles[i];
10565
+ var layer = curEnabledArr.find(function (x) { var _a, _b; return ((_a = x._bMeta) === null || _a === void 0 ? void 0 : _a.accountId) === enabled.accountId && ((_b = x._bMeta) === null || _b === void 0 ? void 0 : _b.tilesetId) === enabled.tilesetId; });
10566
+ if (layer) {
10567
+ params.viewer.imageryLayers.raiseToTop(layer);
10568
+ layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10569
+ layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10570
+ layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10571
+ layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10572
+ layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10573
+ layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10574
+ }
10575
+ };
10576
+ for (var i = 0; i < params.tiles.length; i++) {
10577
+ _loop_4(i);
10578
+ }
10579
+ params.viewer.scene.requestRender();
10580
+ };
10581
+ iteration = newIteration(params.viewer, "imagery");
10582
+ curEnabled = params.viewer.imageryLayers;
10583
+ toDisable = [];
10584
+ _loop_3 = function (i) {
10585
+ var layer = curEnabled.get(i);
10586
+ var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10587
+ var disable = !params.tiles.find(function (x) { return x.accountId === (meta === null || meta === void 0 ? void 0 : meta.accountId) && x.tilesetId === (meta === null || meta === void 0 ? void 0 : meta.tilesetId); });
10588
+ if (disable) {
10589
+ toDisable.push(layer);
10590
+ }
10591
+ };
10592
+ for (i = 0; i < curEnabled.length; i++) {
10593
+ _loop_3(i);
10594
+ }
10595
+ for (i = 0; i < toDisable.length; i++) {
10596
+ params.viewer.imageryLayers.remove(toDisable[i]);
10597
+ }
10598
+ organized = false;
10512
10599
  i = 0;
10513
10600
  _a.label = 1;
10514
10601
  case 1:
@@ -10524,48 +10611,21 @@ var TileRenderEngine;
10524
10611
  })];
10525
10612
  case 2:
10526
10613
  _a.sent();
10614
+ if (!assertIteration(params.viewer, iteration)) {
10615
+ return [2 /*return*/];
10616
+ }
10617
+ // Organize as we load in case there are lots of imageries.
10618
+ // We want to ensure what the user sees is as close to correct as we can get.
10619
+ organize();
10620
+ organized = true;
10527
10621
  _a.label = 3;
10528
10622
  case 3:
10529
10623
  i++;
10530
10624
  return [3 /*break*/, 1];
10531
10625
  case 4:
10532
- curEnabled = params.viewer.imageryLayers;
10533
- toDisable = [];
10534
- curEnabledArr = [];
10535
- _loop_2 = function (i) {
10536
- var layer = curEnabled.get(i);
10537
- var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10538
- var disable = !params.tiles.find(function (x) { return x.accountId === (meta === null || meta === void 0 ? void 0 : meta.accountId) && x.tilesetId === (meta === null || meta === void 0 ? void 0 : meta.tilesetId); });
10539
- if (disable) {
10540
- toDisable.push(layer);
10541
- }
10542
- else {
10543
- curEnabledArr.push(layer);
10544
- }
10545
- };
10546
- for (i = 0; i < curEnabled.length; i++) {
10547
- _loop_2(i);
10548
- }
10549
- for (i = 0; i < toDisable.length; i++) {
10550
- params.viewer.imageryLayers.remove(toDisable[i]);
10626
+ if (!organized) {
10627
+ organize();
10551
10628
  }
10552
- _loop_3 = function (i) {
10553
- var enabled = params.tiles[i];
10554
- var layer = curEnabledArr.find(function (x) { var _a, _b; return ((_a = x._bMeta) === null || _a === void 0 ? void 0 : _a.accountId) === enabled.accountId && ((_b = x._bMeta) === null || _b === void 0 ? void 0 : _b.tilesetId) === enabled.tilesetId; });
10555
- if (layer) {
10556
- params.viewer.imageryLayers.raiseToTop(layer);
10557
- layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10558
- layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10559
- layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10560
- layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10561
- layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10562
- layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10563
- }
10564
- };
10565
- for (i = 0; i < params.tiles.length; i++) {
10566
- _loop_3(i);
10567
- }
10568
- params.viewer.scene.requestRender();
10569
10629
  return [2 /*return*/];
10570
10630
  }
10571
10631
  });
@@ -10622,13 +10682,14 @@ var TileRenderEngine;
10622
10682
  function RenderView(params) {
10623
10683
  var _a, _b;
10624
10684
  return __awaiter(this, void 0, void 0, function () {
10625
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10685
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10626
10686
  return __generator(this, function (_c) {
10627
10687
  switch (_c.label) {
10628
10688
  case 0:
10629
10689
  if (!params.apiGetter) {
10630
10690
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10631
10691
  }
10692
+ iteration = newIteration(params.viewer, "terrain");
10632
10693
  api = params.apiGetter.getApi();
10633
10694
  return [4 /*yield*/, ProjectView.Get({
10634
10695
  api: api,
@@ -10637,6 +10698,9 @@ var TileRenderEngine;
10637
10698
  case 1:
10638
10699
  view = (_c.sent()).view;
10639
10700
  bookmark = null;
10701
+ if (!assertIteration(params.viewer, iteration)) {
10702
+ return [2 /*return*/];
10703
+ }
10640
10704
  if (!params.bookmarkId) return [3 /*break*/, 3];
10641
10705
  return [4 /*yield*/, ProjectViewBookmark.Get({
10642
10706
  api: api,
@@ -10645,6 +10709,9 @@ var TileRenderEngine;
10645
10709
  })];
10646
10710
  case 2:
10647
10711
  bookmark = (_c.sent()).bookmark;
10712
+ if (!assertIteration(params.viewer, iteration)) {
10713
+ return [2 /*return*/];
10714
+ }
10648
10715
  _c.label = 3;
10649
10716
  case 3:
10650
10717
  vSettings = view.Settings;
@@ -10665,6 +10732,9 @@ var TileRenderEngine;
10665
10732
  })];
10666
10733
  case 4:
10667
10734
  _c.sent();
10735
+ if (!assertIteration(params.viewer, iteration)) {
10736
+ return [2 /*return*/];
10737
+ }
10668
10738
  for (i = 0; i < terrainTiles.length; i++) {
10669
10739
  tile = terrainTiles[i];
10670
10740
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10679,6 +10749,9 @@ var TileRenderEngine;
10679
10749
  })];
10680
10750
  case 5:
10681
10751
  _c.sent();
10752
+ if (!assertIteration(params.viewer, iteration)) {
10753
+ return [2 /*return*/];
10754
+ }
10682
10755
  _c.label = 6;
10683
10756
  case 6:
10684
10757
  params.viewer.scene.requestRender();
@@ -10694,13 +10767,14 @@ var TileRenderEngine;
10694
10767
  function Render(params) {
10695
10768
  var _a;
10696
10769
  return __awaiter(this, void 0, void 0, function () {
10697
- var enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10770
+ var iteration, enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10698
10771
  return __generator(this, function (_b) {
10699
10772
  switch (_b.label) {
10700
10773
  case 0:
10701
10774
  if (!params.apiGetter) {
10702
10775
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10703
10776
  }
10777
+ iteration = newIteration(params.viewer, "terrain");
10704
10778
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10705
10779
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10706
10780
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10714,8 +10788,9 @@ var TileRenderEngine;
10714
10788
  provider_1 instanceof EllipsoidTerrainProvider) {
10715
10789
  leave = true;
10716
10790
  }
10717
- // TODO: Check for cesium world terrain if we can easily determine that it's enabled.
10791
+ // TODO: Also check for "cesium world terrain" if we can easily determine that it's enabled.
10718
10792
  if (leave) {
10793
+ // Mark it so we don't have to do this magic logic again.
10719
10794
  provider_1._bMeta = {
10720
10795
  tilesetId: params.tile.tilesetId,
10721
10796
  accountId: params.tile.accountId
@@ -10741,12 +10816,18 @@ var TileRenderEngine;
10741
10816
  // When loading stuff in the same account as the default it's likely already loaded,
10742
10817
  // but if we just made an API instance for some external account then it won't be loaded yet.
10743
10818
  _b.sent();
10819
+ if (!assertIteration(params.viewer, iteration)) {
10820
+ return [2 /*return*/];
10821
+ }
10744
10822
  return [4 /*yield*/, Tileset.Get({
10745
10823
  api: api,
10746
10824
  tilesetId: params.tile.tilesetId
10747
10825
  })];
10748
10826
  case 4:
10749
10827
  tileset = (_b.sent()).tileset;
10828
+ if (!assertIteration(params.viewer, iteration)) {
10829
+ return [2 /*return*/];
10830
+ }
10750
10831
  url = void 0;
10751
10832
  vertexes = true;
10752
10833
  if (tileset.type === Tileset.EType.Terrain) {
@@ -10872,6 +10953,14 @@ var ViewUtils;
10872
10953
  }
10873
10954
  };
10874
10955
  }
10956
+ else if (provider instanceof EllipsoidTerrainProvider) {
10957
+ return {
10958
+ terrain: {
10959
+ tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain,
10960
+ accountId: null
10961
+ }
10962
+ };
10963
+ }
10875
10964
  return null;
10876
10965
  }
10877
10966
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11287,13 +11376,34 @@ var WidgetBookmarks = /** @class */ (function (_super) {
11287
11376
  var MIN_SHADOW_SIZE = 2048;
11288
11377
  var MAX_SHADOW_SIZE = 32768;
11289
11378
  var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
11379
+ // Used to track if a current in-progress render is the latest.
11380
+ // If we're midway through an async function that is rendering a bookmark and this changes, then we stop the function.
11381
+ var ITERATION_KEY$1 = "nextspace-view-render-engine-iteration";
11382
+ /**
11383
+ * Creates a new iteration state.
11384
+ * This will stop any existing renders from processing to their end.
11385
+ * @param viewer
11386
+ * @returns
11387
+ */
11388
+ function newIteration$1(viewer) {
11389
+ viewer[ITERATION_KEY$1] = ObjectUtils.UId();
11390
+ return viewer[ITERATION_KEY$1];
11391
+ }
11392
+ /**
11393
+ * Checks if a given iteration is still the active one for a given viewer.
11394
+ * @param viewer
11395
+ * @param iteration
11396
+ */
11397
+ function assertIteration$1(viewer, iteration) {
11398
+ return viewer[ITERATION_KEY$1] == iteration;
11399
+ }
11290
11400
  /**
11291
11401
  * Renders DATA_VERSION = 1 navigator.
11292
11402
  * @param params
11293
11403
  * @param bookmark
11294
11404
  * @param view
11295
11405
  */
11296
- function renderLegacyNavigator(params, bookmark, view) {
11406
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11297
11407
  var _a, _b, _c, _d, _e;
11298
11408
  return __awaiter(this, void 0, void 0, function () {
11299
11409
  var vSettings, bSettings, manager, VR, scene, baseColor, frustum, curFrustum, camera, pos, go, fxaa, pointer, clock, timeStr, enabledItems, newItemIds, _i, enabledItems_1, id, menuItem;
@@ -11313,15 +11423,17 @@ function renderLegacyNavigator(params, bookmark, view) {
11313
11423
  })];
11314
11424
  case 1:
11315
11425
  _f.sent();
11316
- return [4 /*yield*/, TileRenderEngine.Map.LegacyNavigator.RenderView({
11317
- apiGetter: params.apiGetter,
11318
- bookmarkId: params.bookmarkId,
11319
- viewer: manager.Viewer,
11320
- viewId: params.viewId,
11321
- ignoreIds: []
11322
- })];
11323
- case 2:
11324
- _f.sent();
11426
+ if (!assertIteration$1(params.viewer, iteration)) {
11427
+ return [2 /*return*/];
11428
+ }
11429
+ // We don't wait for imageries to load, this does not affect rendering other things.
11430
+ TileRenderEngine.Map.LegacyNavigator.RenderView({
11431
+ apiGetter: params.apiGetter,
11432
+ bookmarkId: params.bookmarkId,
11433
+ viewer: manager.Viewer,
11434
+ viewId: params.viewId,
11435
+ ignoreIds: []
11436
+ });
11325
11437
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11326
11438
  if (baseColor == null) {
11327
11439
  // TODO: Need global default.
@@ -11395,7 +11507,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11395
11507
  });
11396
11508
  }
11397
11509
  }
11398
- if (!bookmark) return [3 /*break*/, 4];
11510
+ if (!bookmark) return [3 /*break*/, 3];
11399
11511
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11400
11512
  apiGetter: params.apiGetter,
11401
11513
  getters: params.getters,
@@ -11403,11 +11515,14 @@ function renderLegacyNavigator(params, bookmark, view) {
11403
11515
  view: view,
11404
11516
  bookmark: bookmark
11405
11517
  })];
11406
- case 3:
11518
+ case 2:
11407
11519
  _f.sent();
11408
- _f.label = 4;
11409
- case 4:
11410
- if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 6];
11520
+ if (!assertIteration$1(params.viewer, iteration)) {
11521
+ return [2 /*return*/];
11522
+ }
11523
+ _f.label = 3;
11524
+ case 3:
11525
+ if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 5];
11411
11526
  menuItem = {
11412
11527
  id: RELATION_MENU_ITEM_ID,
11413
11528
  Caption: "Entity relations",
@@ -11421,10 +11536,13 @@ function renderLegacyNavigator(params, bookmark, view) {
11421
11536
  getters: params.getters,
11422
11537
  item: menuItem
11423
11538
  })];
11424
- case 5:
11539
+ case 4:
11425
11540
  _f.sent();
11426
- _f.label = 6;
11427
- case 6: return [2 /*return*/];
11541
+ if (!assertIteration$1(params.viewer, iteration)) {
11542
+ return [2 /*return*/];
11543
+ }
11544
+ _f.label = 5;
11545
+ case 5: return [2 /*return*/];
11428
11546
  }
11429
11547
  });
11430
11548
  });
@@ -11435,7 +11553,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11435
11553
  * @param bookmark
11436
11554
  * @param view
11437
11555
  */
11438
- function renderNavigator(params, bookmark, view) {
11556
+ function renderNavigator(iteration, params, bookmark, view) {
11439
11557
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
11440
11558
  return __awaiter(this, void 0, void 0, function () {
11441
11559
  var viewer, scene, vSettings, bSettings, defaults, camera, newLens, shouldBe2d, curIs2d, transition, pos, terrain, hillShades, baseColor, globeHidden, terrainWireframe, globeAlpha, shadows, size, ambientOcclusion, AO, lighting, light, quality, fxaa, dateTime, clock, selectedIds, hiddenIds, isolatedIds, entityOpacityMap, entityId, opacity, imagery, renderedRelationEntityIds, curEnabled, newItemIds, _i, curEnabled_1, id, menuItem, gOcclusion;
@@ -11501,6 +11619,9 @@ function renderNavigator(params, bookmark, view) {
11501
11619
  })];
11502
11620
  case 1:
11503
11621
  _6.sent();
11622
+ if (!assertIteration$1(params.viewer, iteration)) {
11623
+ return [2 /*return*/];
11624
+ }
11504
11625
  _6.label = 2;
11505
11626
  case 2:
11506
11627
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11699,13 +11820,12 @@ function renderNavigator(params, bookmark, view) {
11699
11820
  }
11700
11821
  ];
11701
11822
  }
11702
- return [4 /*yield*/, TileRenderEngine.Map.Navigator.Render({
11703
- apiGetter: params.apiGetter,
11704
- tiles: imagery,
11705
- viewer: params.manager.Viewer,
11706
- })];
11707
- case 3:
11708
- _6.sent();
11823
+ // We don't wait for imageries to load, this does not affect rendering other things.
11824
+ TileRenderEngine.Map.Navigator.Render({
11825
+ apiGetter: params.apiGetter,
11826
+ tiles: imagery,
11827
+ viewer: params.manager.Viewer,
11828
+ });
11709
11829
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11710
11830
  if (!renderedRelationEntityIds) {
11711
11831
  renderedRelationEntityIds = [];
@@ -11721,18 +11841,21 @@ function renderNavigator(params, bookmark, view) {
11721
11841
  });
11722
11842
  }
11723
11843
  }
11724
- if (!bookmark) return [3 /*break*/, 5];
11844
+ if (!bookmark) return [3 /*break*/, 4];
11725
11845
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11726
11846
  getters: params.getters,
11727
11847
  manager: params.manager,
11728
11848
  view: view,
11729
11849
  bookmark: bookmark
11730
11850
  })];
11731
- case 4:
11851
+ case 3:
11732
11852
  _6.sent();
11733
- _6.label = 5;
11734
- case 5:
11735
- if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 7];
11853
+ if (!assertIteration$1(params.viewer, iteration)) {
11854
+ return [2 /*return*/];
11855
+ }
11856
+ _6.label = 4;
11857
+ case 4:
11858
+ if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 6];
11736
11859
  menuItem = {
11737
11860
  id: RELATION_MENU_ITEM_ID,
11738
11861
  Caption: "Entity relations",
@@ -11745,10 +11868,13 @@ function renderNavigator(params, bookmark, view) {
11745
11868
  getters: params.getters,
11746
11869
  item: menuItem
11747
11870
  })];
11748
- case 6:
11871
+ case 5:
11749
11872
  _6.sent();
11750
- _6.label = 7;
11751
- case 7:
11873
+ if (!assertIteration$1(params.viewer, iteration)) {
11874
+ return [2 /*return*/];
11875
+ }
11876
+ _6.label = 6;
11877
+ case 6:
11752
11878
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11753
11879
  if (gOcclusion == null) {
11754
11880
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11768,7 +11894,7 @@ var ViewRenderEngine;
11768
11894
  function Render(params) {
11769
11895
  var _a;
11770
11896
  return __awaiter(this, void 0, void 0, function () {
11771
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11897
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11772
11898
  return __generator(this, function (_d) {
11773
11899
  switch (_d.label) {
11774
11900
  case 0:
@@ -11781,6 +11907,7 @@ var ViewRenderEngine;
11781
11907
  else if (!params.viewer && params.manager) {
11782
11908
  params.viewer = params.manager.Viewer;
11783
11909
  }
11910
+ iteration = newIteration$1(params.viewer);
11784
11911
  if (!params.getters) {
11785
11912
  params.getters = ENVIRONMENT.Api();
11786
11913
  }
@@ -11825,17 +11952,23 @@ var ViewRenderEngine;
11825
11952
  bookmark = _c;
11826
11953
  _d.label = 7;
11827
11954
  case 7:
11955
+ if (!assertIteration$1(params.viewer, iteration)) {
11956
+ return [2 /*return*/];
11957
+ }
11828
11958
  version = view.DataVersion;
11829
11959
  if (!(version == 1)) return [3 /*break*/, 9];
11830
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11960
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11831
11961
  case 8:
11832
11962
  _d.sent();
11833
11963
  return [3 /*break*/, 11];
11834
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11964
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11835
11965
  case 10:
11836
11966
  _d.sent();
11837
11967
  _d.label = 11;
11838
11968
  case 11:
11969
+ if (!assertIteration$1(params.viewer, iteration)) {
11970
+ return [2 /*return*/];
11971
+ }
11839
11972
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11840
11973
  if (bWidget) {
11841
11974
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14658,7 +14791,7 @@ var ViewerUtils;
14658
14791
  ViewerUtils.CreateWidgets = CreateWidgets;
14659
14792
  })(ViewerUtils || (ViewerUtils = {}));
14660
14793
 
14661
- var VERSION$1 = "2.4.7";
14794
+ var VERSION$1 = "2.4.9";
14662
14795
 
14663
14796
  export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
14664
14797
  //# sourceMappingURL=bruce-cesium.es5.js.map