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.
@@ -4078,7 +4078,8 @@
4078
4078
  accountId: this.apiGetter.accountId,
4079
4079
  tagIds: tagIds ? [].concat(tagIds) : [],
4080
4080
  suppressShow: wasClustered,
4081
- name: cEntity.name
4081
+ name: cEntity.name,
4082
+ cdn: this.item.cdnEnabled
4082
4083
  };
4083
4084
  this.visualsManager.AddRego({
4084
4085
  rego: rego,
@@ -9610,6 +9611,26 @@
9610
9611
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9611
9612
  })(exports.MenuItemCreator || (exports.MenuItemCreator = {}));
9612
9613
 
9614
+ // Used to track if a current in-progress render is the latest.
9615
+ // If we're midway through an async function that is rendering 10 imageries and this changes, then we stop the function.
9616
+ var ITERATION_KEY = "nextspace-tile-render-engine-iteration";
9617
+ function newIteration(viewer, tile) {
9618
+ // Create key specific to the kind of tile we're rendering.
9619
+ var key = ITERATION_KEY + tile;
9620
+ // Generate a new iteration ID, include the tile type in it so we can identify it easier.
9621
+ var value = bruceModels.ObjectUtils.UId() + tile;
9622
+ viewer[key] = value;
9623
+ return value;
9624
+ }
9625
+ /**
9626
+ * Checks if a given iteration is still the active one for a given viewer.
9627
+ * @param viewer
9628
+ * @param iteration
9629
+ */
9630
+ function assertIteration(viewer, iteration) {
9631
+ var suffix = iteration.includes("imagery") ? "imagery" : "terrain";
9632
+ return viewer[ITERATION_KEY + suffix] === iteration;
9633
+ }
9613
9634
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9614
9635
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9615
9636
  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;
@@ -10148,13 +10169,14 @@
10148
10169
  function RenderView(params) {
10149
10170
  var _a;
10150
10171
  return __awaiter(this, void 0, void 0, function () {
10151
- 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;
10172
+ 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;
10152
10173
  return __generator(this, function (_b) {
10153
10174
  switch (_b.label) {
10154
10175
  case 0:
10155
10176
  if (!params.apiGetter) {
10156
10177
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10157
10178
  }
10179
+ iteration = newIteration(params.viewer, "imagery");
10158
10180
  api = params.apiGetter.getApi();
10159
10181
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10160
10182
  api: api,
@@ -10162,6 +10184,9 @@
10162
10184
  })];
10163
10185
  case 1:
10164
10186
  view = (_b.sent()).view;
10187
+ if (!assertIteration(params.viewer, iteration)) {
10188
+ return [2 /*return*/];
10189
+ }
10165
10190
  bookmark = null;
10166
10191
  if (!params.bookmarkId) return [3 /*break*/, 3];
10167
10192
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
@@ -10171,6 +10196,9 @@
10171
10196
  })];
10172
10197
  case 2:
10173
10198
  bookmark = (_b.sent()).bookmark;
10199
+ if (!assertIteration(params.viewer, iteration)) {
10200
+ return [2 /*return*/];
10201
+ }
10174
10202
  _b.label = 3;
10175
10203
  case 3:
10176
10204
  vSettings = view.Settings;
@@ -10194,6 +10222,9 @@
10194
10222
  })];
10195
10223
  case 4:
10196
10224
  _b.sent();
10225
+ if (!assertIteration(params.viewer, iteration)) {
10226
+ return [2 /*return*/];
10227
+ }
10197
10228
  for (i = 0; i < dataNames.length; i++) {
10198
10229
  name_1 = dataNames[i];
10199
10230
  for (j = 0; j < tiles.length; j++) {
@@ -10240,6 +10271,9 @@
10240
10271
  if (layer) {
10241
10272
  layers.push(layer);
10242
10273
  }
10274
+ if (!assertIteration(params.viewer, iteration)) {
10275
+ return [2 /*return*/];
10276
+ }
10243
10277
  _b.label = 7;
10244
10278
  case 7:
10245
10279
  i++;
@@ -10451,13 +10485,66 @@
10451
10485
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10452
10486
  function Render(params) {
10453
10487
  return __awaiter(this, void 0, void 0, function () {
10454
- var i, enabled, curEnabled, toDisable, curEnabledArr, _loop_2, i, i, _loop_3, i;
10488
+ var tmpTiles, _loop_2, i, organize, iteration, curEnabled, toDisable, _loop_3, i, i, organized, i, enabled;
10455
10489
  return __generator(this, function (_a) {
10456
10490
  switch (_a.label) {
10457
10491
  case 0:
10458
10492
  if (!params.apiGetter) {
10459
10493
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10460
10494
  }
10495
+ tmpTiles = [];
10496
+ _loop_2 = function (i) {
10497
+ var tile = params.tiles[i];
10498
+ if (!tmpTiles.find(function (x) { return (x.accountId == tile.accountId) && (x.tilesetId == tile.tilesetId); })) {
10499
+ tmpTiles.push(tile);
10500
+ }
10501
+ };
10502
+ for (i = 0; i < params.tiles.length; i++) {
10503
+ _loop_2(i);
10504
+ }
10505
+ params.tiles = tmpTiles;
10506
+ organize = function () {
10507
+ var curEnabledArr = [];
10508
+ for (var i = 0; i < curEnabled.length; i++) {
10509
+ var layer = curEnabled.get(i);
10510
+ curEnabledArr.push(layer);
10511
+ }
10512
+ var _loop_4 = function (i) {
10513
+ var enabled = params.tiles[i];
10514
+ 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; });
10515
+ if (layer) {
10516
+ params.viewer.imageryLayers.raiseToTop(layer);
10517
+ layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10518
+ layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10519
+ layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10520
+ layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10521
+ layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10522
+ layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10523
+ }
10524
+ };
10525
+ for (var i = 0; i < params.tiles.length; i++) {
10526
+ _loop_4(i);
10527
+ }
10528
+ params.viewer.scene.requestRender();
10529
+ };
10530
+ iteration = newIteration(params.viewer, "imagery");
10531
+ curEnabled = params.viewer.imageryLayers;
10532
+ toDisable = [];
10533
+ _loop_3 = function (i) {
10534
+ var layer = curEnabled.get(i);
10535
+ var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10536
+ 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); });
10537
+ if (disable) {
10538
+ toDisable.push(layer);
10539
+ }
10540
+ };
10541
+ for (i = 0; i < curEnabled.length; i++) {
10542
+ _loop_3(i);
10543
+ }
10544
+ for (i = 0; i < toDisable.length; i++) {
10545
+ params.viewer.imageryLayers.remove(toDisable[i]);
10546
+ }
10547
+ organized = false;
10461
10548
  i = 0;
10462
10549
  _a.label = 1;
10463
10550
  case 1:
@@ -10473,48 +10560,21 @@
10473
10560
  })];
10474
10561
  case 2:
10475
10562
  _a.sent();
10563
+ if (!assertIteration(params.viewer, iteration)) {
10564
+ return [2 /*return*/];
10565
+ }
10566
+ // Organize as we load in case there are lots of imageries.
10567
+ // We want to ensure what the user sees is as close to correct as we can get.
10568
+ organize();
10569
+ organized = true;
10476
10570
  _a.label = 3;
10477
10571
  case 3:
10478
10572
  i++;
10479
10573
  return [3 /*break*/, 1];
10480
10574
  case 4:
10481
- curEnabled = params.viewer.imageryLayers;
10482
- toDisable = [];
10483
- curEnabledArr = [];
10484
- _loop_2 = function (i) {
10485
- var layer = curEnabled.get(i);
10486
- var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10487
- 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); });
10488
- if (disable) {
10489
- toDisable.push(layer);
10490
- }
10491
- else {
10492
- curEnabledArr.push(layer);
10493
- }
10494
- };
10495
- for (i = 0; i < curEnabled.length; i++) {
10496
- _loop_2(i);
10497
- }
10498
- for (i = 0; i < toDisable.length; i++) {
10499
- params.viewer.imageryLayers.remove(toDisable[i]);
10575
+ if (!organized) {
10576
+ organize();
10500
10577
  }
10501
- _loop_3 = function (i) {
10502
- var enabled = params.tiles[i];
10503
- 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; });
10504
- if (layer) {
10505
- params.viewer.imageryLayers.raiseToTop(layer);
10506
- layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10507
- layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10508
- layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10509
- layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10510
- layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10511
- layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10512
- }
10513
- };
10514
- for (i = 0; i < params.tiles.length; i++) {
10515
- _loop_3(i);
10516
- }
10517
- params.viewer.scene.requestRender();
10518
10578
  return [2 /*return*/];
10519
10579
  }
10520
10580
  });
@@ -10571,13 +10631,14 @@
10571
10631
  function RenderView(params) {
10572
10632
  var _a, _b;
10573
10633
  return __awaiter(this, void 0, void 0, function () {
10574
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10634
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10575
10635
  return __generator(this, function (_c) {
10576
10636
  switch (_c.label) {
10577
10637
  case 0:
10578
10638
  if (!params.apiGetter) {
10579
10639
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10580
10640
  }
10641
+ iteration = newIteration(params.viewer, "terrain");
10581
10642
  api = params.apiGetter.getApi();
10582
10643
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10583
10644
  api: api,
@@ -10586,6 +10647,9 @@
10586
10647
  case 1:
10587
10648
  view = (_c.sent()).view;
10588
10649
  bookmark = null;
10650
+ if (!assertIteration(params.viewer, iteration)) {
10651
+ return [2 /*return*/];
10652
+ }
10589
10653
  if (!params.bookmarkId) return [3 /*break*/, 3];
10590
10654
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
10591
10655
  api: api,
@@ -10594,6 +10658,9 @@
10594
10658
  })];
10595
10659
  case 2:
10596
10660
  bookmark = (_c.sent()).bookmark;
10661
+ if (!assertIteration(params.viewer, iteration)) {
10662
+ return [2 /*return*/];
10663
+ }
10597
10664
  _c.label = 3;
10598
10665
  case 3:
10599
10666
  vSettings = view.Settings;
@@ -10614,6 +10681,9 @@
10614
10681
  })];
10615
10682
  case 4:
10616
10683
  _c.sent();
10684
+ if (!assertIteration(params.viewer, iteration)) {
10685
+ return [2 /*return*/];
10686
+ }
10617
10687
  for (i = 0; i < terrainTiles.length; i++) {
10618
10688
  tile = terrainTiles[i];
10619
10689
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10628,6 +10698,9 @@
10628
10698
  })];
10629
10699
  case 5:
10630
10700
  _c.sent();
10701
+ if (!assertIteration(params.viewer, iteration)) {
10702
+ return [2 /*return*/];
10703
+ }
10631
10704
  _c.label = 6;
10632
10705
  case 6:
10633
10706
  params.viewer.scene.requestRender();
@@ -10643,13 +10716,14 @@
10643
10716
  function Render(params) {
10644
10717
  var _a;
10645
10718
  return __awaiter(this, void 0, void 0, function () {
10646
- var enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10719
+ var iteration, enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10647
10720
  return __generator(this, function (_b) {
10648
10721
  switch (_b.label) {
10649
10722
  case 0:
10650
10723
  if (!params.apiGetter) {
10651
10724
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10652
10725
  }
10726
+ iteration = newIteration(params.viewer, "terrain");
10653
10727
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10654
10728
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10655
10729
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10663,8 +10737,9 @@
10663
10737
  provider_1 instanceof Cesium.EllipsoidTerrainProvider) {
10664
10738
  leave = true;
10665
10739
  }
10666
- // TODO: Check for cesium world terrain if we can easily determine that it's enabled.
10740
+ // TODO: Also check for "cesium world terrain" if we can easily determine that it's enabled.
10667
10741
  if (leave) {
10742
+ // Mark it so we don't have to do this magic logic again.
10668
10743
  provider_1._bMeta = {
10669
10744
  tilesetId: params.tile.tilesetId,
10670
10745
  accountId: params.tile.accountId
@@ -10690,12 +10765,18 @@
10690
10765
  // When loading stuff in the same account as the default it's likely already loaded,
10691
10766
  // but if we just made an API instance for some external account then it won't be loaded yet.
10692
10767
  _b.sent();
10768
+ if (!assertIteration(params.viewer, iteration)) {
10769
+ return [2 /*return*/];
10770
+ }
10693
10771
  return [4 /*yield*/, bruceModels.Tileset.Get({
10694
10772
  api: api,
10695
10773
  tilesetId: params.tile.tilesetId
10696
10774
  })];
10697
10775
  case 4:
10698
10776
  tileset = (_b.sent()).tileset;
10777
+ if (!assertIteration(params.viewer, iteration)) {
10778
+ return [2 /*return*/];
10779
+ }
10699
10780
  url = void 0;
10700
10781
  vertexes = true;
10701
10782
  if (tileset.type === bruceModels.Tileset.EType.Terrain) {
@@ -10820,6 +10901,14 @@
10820
10901
  }
10821
10902
  };
10822
10903
  }
10904
+ else if (provider instanceof Cesium.EllipsoidTerrainProvider) {
10905
+ return {
10906
+ terrain: {
10907
+ tilesetId: bruceModels.ProjectViewTile.EDefaultTerrain.FlatTerrain,
10908
+ accountId: null
10909
+ }
10910
+ };
10911
+ }
10823
10912
  return null;
10824
10913
  }
10825
10914
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11235,13 +11324,34 @@
11235
11324
  var MIN_SHADOW_SIZE = 2048;
11236
11325
  var MAX_SHADOW_SIZE = 32768;
11237
11326
  var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
11327
+ // Used to track if a current in-progress render is the latest.
11328
+ // If we're midway through an async function that is rendering a bookmark and this changes, then we stop the function.
11329
+ var ITERATION_KEY$1 = "nextspace-view-render-engine-iteration";
11330
+ /**
11331
+ * Creates a new iteration state.
11332
+ * This will stop any existing renders from processing to their end.
11333
+ * @param viewer
11334
+ * @returns
11335
+ */
11336
+ function newIteration$1(viewer) {
11337
+ viewer[ITERATION_KEY$1] = bruceModels.ObjectUtils.UId();
11338
+ return viewer[ITERATION_KEY$1];
11339
+ }
11340
+ /**
11341
+ * Checks if a given iteration is still the active one for a given viewer.
11342
+ * @param viewer
11343
+ * @param iteration
11344
+ */
11345
+ function assertIteration$1(viewer, iteration) {
11346
+ return viewer[ITERATION_KEY$1] == iteration;
11347
+ }
11238
11348
  /**
11239
11349
  * Renders DATA_VERSION = 1 navigator.
11240
11350
  * @param params
11241
11351
  * @param bookmark
11242
11352
  * @param view
11243
11353
  */
11244
- function renderLegacyNavigator(params, bookmark, view) {
11354
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11245
11355
  var _a, _b, _c, _d, _e;
11246
11356
  return __awaiter(this, void 0, void 0, function () {
11247
11357
  var vSettings, bSettings, manager, VR, scene, baseColor, frustum, curFrustum, camera, pos, go, fxaa, pointer, clock, timeStr, enabledItems, newItemIds, _i, enabledItems_1, id, menuItem;
@@ -11261,15 +11371,17 @@
11261
11371
  })];
11262
11372
  case 1:
11263
11373
  _f.sent();
11264
- return [4 /*yield*/, exports.TileRenderEngine.Map.LegacyNavigator.RenderView({
11265
- apiGetter: params.apiGetter,
11266
- bookmarkId: params.bookmarkId,
11267
- viewer: manager.Viewer,
11268
- viewId: params.viewId,
11269
- ignoreIds: []
11270
- })];
11271
- case 2:
11272
- _f.sent();
11374
+ if (!assertIteration$1(params.viewer, iteration)) {
11375
+ return [2 /*return*/];
11376
+ }
11377
+ // We don't wait for imageries to load, this does not affect rendering other things.
11378
+ exports.TileRenderEngine.Map.LegacyNavigator.RenderView({
11379
+ apiGetter: params.apiGetter,
11380
+ bookmarkId: params.bookmarkId,
11381
+ viewer: manager.Viewer,
11382
+ viewId: params.viewId,
11383
+ ignoreIds: []
11384
+ });
11273
11385
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11274
11386
  if (baseColor == null) {
11275
11387
  // TODO: Need global default.
@@ -11343,7 +11455,7 @@
11343
11455
  });
11344
11456
  }
11345
11457
  }
11346
- if (!bookmark) return [3 /*break*/, 4];
11458
+ if (!bookmark) return [3 /*break*/, 3];
11347
11459
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11348
11460
  apiGetter: params.apiGetter,
11349
11461
  getters: params.getters,
@@ -11351,11 +11463,14 @@
11351
11463
  view: view,
11352
11464
  bookmark: bookmark
11353
11465
  })];
11354
- case 3:
11466
+ case 2:
11355
11467
  _f.sent();
11356
- _f.label = 4;
11357
- case 4:
11358
- if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 6];
11468
+ if (!assertIteration$1(params.viewer, iteration)) {
11469
+ return [2 /*return*/];
11470
+ }
11471
+ _f.label = 3;
11472
+ case 3:
11473
+ if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 5];
11359
11474
  menuItem = {
11360
11475
  id: RELATION_MENU_ITEM_ID,
11361
11476
  Caption: "Entity relations",
@@ -11369,10 +11484,13 @@
11369
11484
  getters: params.getters,
11370
11485
  item: menuItem
11371
11486
  })];
11372
- case 5:
11487
+ case 4:
11373
11488
  _f.sent();
11374
- _f.label = 6;
11375
- case 6: return [2 /*return*/];
11489
+ if (!assertIteration$1(params.viewer, iteration)) {
11490
+ return [2 /*return*/];
11491
+ }
11492
+ _f.label = 5;
11493
+ case 5: return [2 /*return*/];
11376
11494
  }
11377
11495
  });
11378
11496
  });
@@ -11383,7 +11501,7 @@
11383
11501
  * @param bookmark
11384
11502
  * @param view
11385
11503
  */
11386
- function renderNavigator(params, bookmark, view) {
11504
+ function renderNavigator(iteration, params, bookmark, view) {
11387
11505
  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;
11388
11506
  return __awaiter(this, void 0, void 0, function () {
11389
11507
  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;
@@ -11449,6 +11567,9 @@
11449
11567
  })];
11450
11568
  case 1:
11451
11569
  _6.sent();
11570
+ if (!assertIteration$1(params.viewer, iteration)) {
11571
+ return [2 /*return*/];
11572
+ }
11452
11573
  _6.label = 2;
11453
11574
  case 2:
11454
11575
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11647,13 +11768,12 @@
11647
11768
  }
11648
11769
  ];
11649
11770
  }
11650
- return [4 /*yield*/, exports.TileRenderEngine.Map.Navigator.Render({
11651
- apiGetter: params.apiGetter,
11652
- tiles: imagery,
11653
- viewer: params.manager.Viewer,
11654
- })];
11655
- case 3:
11656
- _6.sent();
11771
+ // We don't wait for imageries to load, this does not affect rendering other things.
11772
+ exports.TileRenderEngine.Map.Navigator.Render({
11773
+ apiGetter: params.apiGetter,
11774
+ tiles: imagery,
11775
+ viewer: params.manager.Viewer,
11776
+ });
11657
11777
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11658
11778
  if (!renderedRelationEntityIds) {
11659
11779
  renderedRelationEntityIds = [];
@@ -11669,18 +11789,21 @@
11669
11789
  });
11670
11790
  }
11671
11791
  }
11672
- if (!bookmark) return [3 /*break*/, 5];
11792
+ if (!bookmark) return [3 /*break*/, 4];
11673
11793
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11674
11794
  getters: params.getters,
11675
11795
  manager: params.manager,
11676
11796
  view: view,
11677
11797
  bookmark: bookmark
11678
11798
  })];
11679
- case 4:
11799
+ case 3:
11680
11800
  _6.sent();
11681
- _6.label = 5;
11682
- case 5:
11683
- if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 7];
11801
+ if (!assertIteration$1(params.viewer, iteration)) {
11802
+ return [2 /*return*/];
11803
+ }
11804
+ _6.label = 4;
11805
+ case 4:
11806
+ if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 6];
11684
11807
  menuItem = {
11685
11808
  id: RELATION_MENU_ITEM_ID,
11686
11809
  Caption: "Entity relations",
@@ -11693,10 +11816,13 @@
11693
11816
  getters: params.getters,
11694
11817
  item: menuItem
11695
11818
  })];
11696
- case 6:
11819
+ case 5:
11697
11820
  _6.sent();
11698
- _6.label = 7;
11699
- case 7:
11821
+ if (!assertIteration$1(params.viewer, iteration)) {
11822
+ return [2 /*return*/];
11823
+ }
11824
+ _6.label = 6;
11825
+ case 6:
11700
11826
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11701
11827
  if (gOcclusion == null) {
11702
11828
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11715,7 +11841,7 @@
11715
11841
  function Render(params) {
11716
11842
  var _a;
11717
11843
  return __awaiter(this, void 0, void 0, function () {
11718
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11844
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11719
11845
  return __generator(this, function (_d) {
11720
11846
  switch (_d.label) {
11721
11847
  case 0:
@@ -11728,6 +11854,7 @@
11728
11854
  else if (!params.viewer && params.manager) {
11729
11855
  params.viewer = params.manager.Viewer;
11730
11856
  }
11857
+ iteration = newIteration$1(params.viewer);
11731
11858
  if (!params.getters) {
11732
11859
  params.getters = bruceModels.ENVIRONMENT.Api();
11733
11860
  }
@@ -11772,17 +11899,23 @@
11772
11899
  bookmark = _c;
11773
11900
  _d.label = 7;
11774
11901
  case 7:
11902
+ if (!assertIteration$1(params.viewer, iteration)) {
11903
+ return [2 /*return*/];
11904
+ }
11775
11905
  version = view.DataVersion;
11776
11906
  if (!(version == 1)) return [3 /*break*/, 9];
11777
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11907
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11778
11908
  case 8:
11779
11909
  _d.sent();
11780
11910
  return [3 /*break*/, 11];
11781
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11911
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11782
11912
  case 10:
11783
11913
  _d.sent();
11784
11914
  _d.label = 11;
11785
11915
  case 11:
11916
+ if (!assertIteration$1(params.viewer, iteration)) {
11917
+ return [2 /*return*/];
11918
+ }
11786
11919
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11787
11920
  if (bWidget) {
11788
11921
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14604,7 +14737,7 @@
14604
14737
  ViewerUtils.CreateWidgets = CreateWidgets;
14605
14738
  })(exports.ViewerUtils || (exports.ViewerUtils = {}));
14606
14739
 
14607
- var VERSION$1 = "2.4.7";
14740
+ var VERSION$1 = "2.4.9";
14608
14741
 
14609
14742
  exports.VERSION = VERSION$1;
14610
14743
  exports.CesiumViewMonitor = CesiumViewMonitor;