bruce-cesium 2.4.8 → 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.
@@ -9611,6 +9611,26 @@
9611
9611
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9612
9612
  })(exports.MenuItemCreator || (exports.MenuItemCreator = {}));
9613
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
+ }
9614
9634
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9615
9635
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9616
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;
@@ -10149,13 +10169,14 @@
10149
10169
  function RenderView(params) {
10150
10170
  var _a;
10151
10171
  return __awaiter(this, void 0, void 0, function () {
10152
- 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;
10153
10173
  return __generator(this, function (_b) {
10154
10174
  switch (_b.label) {
10155
10175
  case 0:
10156
10176
  if (!params.apiGetter) {
10157
10177
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10158
10178
  }
10179
+ iteration = newIteration(params.viewer, "imagery");
10159
10180
  api = params.apiGetter.getApi();
10160
10181
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10161
10182
  api: api,
@@ -10163,6 +10184,9 @@
10163
10184
  })];
10164
10185
  case 1:
10165
10186
  view = (_b.sent()).view;
10187
+ if (!assertIteration(params.viewer, iteration)) {
10188
+ return [2 /*return*/];
10189
+ }
10166
10190
  bookmark = null;
10167
10191
  if (!params.bookmarkId) return [3 /*break*/, 3];
10168
10192
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
@@ -10172,6 +10196,9 @@
10172
10196
  })];
10173
10197
  case 2:
10174
10198
  bookmark = (_b.sent()).bookmark;
10199
+ if (!assertIteration(params.viewer, iteration)) {
10200
+ return [2 /*return*/];
10201
+ }
10175
10202
  _b.label = 3;
10176
10203
  case 3:
10177
10204
  vSettings = view.Settings;
@@ -10195,6 +10222,9 @@
10195
10222
  })];
10196
10223
  case 4:
10197
10224
  _b.sent();
10225
+ if (!assertIteration(params.viewer, iteration)) {
10226
+ return [2 /*return*/];
10227
+ }
10198
10228
  for (i = 0; i < dataNames.length; i++) {
10199
10229
  name_1 = dataNames[i];
10200
10230
  for (j = 0; j < tiles.length; j++) {
@@ -10241,6 +10271,9 @@
10241
10271
  if (layer) {
10242
10272
  layers.push(layer);
10243
10273
  }
10274
+ if (!assertIteration(params.viewer, iteration)) {
10275
+ return [2 /*return*/];
10276
+ }
10244
10277
  _b.label = 7;
10245
10278
  case 7:
10246
10279
  i++;
@@ -10452,13 +10485,66 @@
10452
10485
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10453
10486
  function Render(params) {
10454
10487
  return __awaiter(this, void 0, void 0, function () {
10455
- 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;
10456
10489
  return __generator(this, function (_a) {
10457
10490
  switch (_a.label) {
10458
10491
  case 0:
10459
10492
  if (!params.apiGetter) {
10460
10493
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10461
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;
10462
10548
  i = 0;
10463
10549
  _a.label = 1;
10464
10550
  case 1:
@@ -10474,48 +10560,21 @@
10474
10560
  })];
10475
10561
  case 2:
10476
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;
10477
10570
  _a.label = 3;
10478
10571
  case 3:
10479
10572
  i++;
10480
10573
  return [3 /*break*/, 1];
10481
10574
  case 4:
10482
- curEnabled = params.viewer.imageryLayers;
10483
- toDisable = [];
10484
- curEnabledArr = [];
10485
- _loop_2 = function (i) {
10486
- var layer = curEnabled.get(i);
10487
- var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10488
- 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); });
10489
- if (disable) {
10490
- toDisable.push(layer);
10491
- }
10492
- else {
10493
- curEnabledArr.push(layer);
10494
- }
10495
- };
10496
- for (i = 0; i < curEnabled.length; i++) {
10497
- _loop_2(i);
10498
- }
10499
- for (i = 0; i < toDisable.length; i++) {
10500
- params.viewer.imageryLayers.remove(toDisable[i]);
10575
+ if (!organized) {
10576
+ organize();
10501
10577
  }
10502
- _loop_3 = function (i) {
10503
- var enabled = params.tiles[i];
10504
- 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; });
10505
- if (layer) {
10506
- params.viewer.imageryLayers.raiseToTop(layer);
10507
- layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10508
- layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10509
- layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10510
- layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10511
- layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10512
- layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10513
- }
10514
- };
10515
- for (i = 0; i < params.tiles.length; i++) {
10516
- _loop_3(i);
10517
- }
10518
- params.viewer.scene.requestRender();
10519
10578
  return [2 /*return*/];
10520
10579
  }
10521
10580
  });
@@ -10572,13 +10631,14 @@
10572
10631
  function RenderView(params) {
10573
10632
  var _a, _b;
10574
10633
  return __awaiter(this, void 0, void 0, function () {
10575
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10634
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10576
10635
  return __generator(this, function (_c) {
10577
10636
  switch (_c.label) {
10578
10637
  case 0:
10579
10638
  if (!params.apiGetter) {
10580
10639
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10581
10640
  }
10641
+ iteration = newIteration(params.viewer, "terrain");
10582
10642
  api = params.apiGetter.getApi();
10583
10643
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10584
10644
  api: api,
@@ -10587,6 +10647,9 @@
10587
10647
  case 1:
10588
10648
  view = (_c.sent()).view;
10589
10649
  bookmark = null;
10650
+ if (!assertIteration(params.viewer, iteration)) {
10651
+ return [2 /*return*/];
10652
+ }
10590
10653
  if (!params.bookmarkId) return [3 /*break*/, 3];
10591
10654
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
10592
10655
  api: api,
@@ -10595,6 +10658,9 @@
10595
10658
  })];
10596
10659
  case 2:
10597
10660
  bookmark = (_c.sent()).bookmark;
10661
+ if (!assertIteration(params.viewer, iteration)) {
10662
+ return [2 /*return*/];
10663
+ }
10598
10664
  _c.label = 3;
10599
10665
  case 3:
10600
10666
  vSettings = view.Settings;
@@ -10615,6 +10681,9 @@
10615
10681
  })];
10616
10682
  case 4:
10617
10683
  _c.sent();
10684
+ if (!assertIteration(params.viewer, iteration)) {
10685
+ return [2 /*return*/];
10686
+ }
10618
10687
  for (i = 0; i < terrainTiles.length; i++) {
10619
10688
  tile = terrainTiles[i];
10620
10689
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10629,6 +10698,9 @@
10629
10698
  })];
10630
10699
  case 5:
10631
10700
  _c.sent();
10701
+ if (!assertIteration(params.viewer, iteration)) {
10702
+ return [2 /*return*/];
10703
+ }
10632
10704
  _c.label = 6;
10633
10705
  case 6:
10634
10706
  params.viewer.scene.requestRender();
@@ -10644,13 +10716,14 @@
10644
10716
  function Render(params) {
10645
10717
  var _a;
10646
10718
  return __awaiter(this, void 0, void 0, function () {
10647
- 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;
10648
10720
  return __generator(this, function (_b) {
10649
10721
  switch (_b.label) {
10650
10722
  case 0:
10651
10723
  if (!params.apiGetter) {
10652
10724
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10653
10725
  }
10726
+ iteration = newIteration(params.viewer, "terrain");
10654
10727
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10655
10728
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10656
10729
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10664,8 +10737,9 @@
10664
10737
  provider_1 instanceof Cesium.EllipsoidTerrainProvider) {
10665
10738
  leave = true;
10666
10739
  }
10667
- // 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.
10668
10741
  if (leave) {
10742
+ // Mark it so we don't have to do this magic logic again.
10669
10743
  provider_1._bMeta = {
10670
10744
  tilesetId: params.tile.tilesetId,
10671
10745
  accountId: params.tile.accountId
@@ -10691,12 +10765,18 @@
10691
10765
  // When loading stuff in the same account as the default it's likely already loaded,
10692
10766
  // but if we just made an API instance for some external account then it won't be loaded yet.
10693
10767
  _b.sent();
10768
+ if (!assertIteration(params.viewer, iteration)) {
10769
+ return [2 /*return*/];
10770
+ }
10694
10771
  return [4 /*yield*/, bruceModels.Tileset.Get({
10695
10772
  api: api,
10696
10773
  tilesetId: params.tile.tilesetId
10697
10774
  })];
10698
10775
  case 4:
10699
10776
  tileset = (_b.sent()).tileset;
10777
+ if (!assertIteration(params.viewer, iteration)) {
10778
+ return [2 /*return*/];
10779
+ }
10700
10780
  url = void 0;
10701
10781
  vertexes = true;
10702
10782
  if (tileset.type === bruceModels.Tileset.EType.Terrain) {
@@ -10821,6 +10901,14 @@
10821
10901
  }
10822
10902
  };
10823
10903
  }
10904
+ else if (provider instanceof Cesium.EllipsoidTerrainProvider) {
10905
+ return {
10906
+ terrain: {
10907
+ tilesetId: bruceModels.ProjectViewTile.EDefaultTerrain.FlatTerrain,
10908
+ accountId: null
10909
+ }
10910
+ };
10911
+ }
10824
10912
  return null;
10825
10913
  }
10826
10914
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11236,13 +11324,34 @@
11236
11324
  var MIN_SHADOW_SIZE = 2048;
11237
11325
  var MAX_SHADOW_SIZE = 32768;
11238
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
+ }
11239
11348
  /**
11240
11349
  * Renders DATA_VERSION = 1 navigator.
11241
11350
  * @param params
11242
11351
  * @param bookmark
11243
11352
  * @param view
11244
11353
  */
11245
- function renderLegacyNavigator(params, bookmark, view) {
11354
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11246
11355
  var _a, _b, _c, _d, _e;
11247
11356
  return __awaiter(this, void 0, void 0, function () {
11248
11357
  var vSettings, bSettings, manager, VR, scene, baseColor, frustum, curFrustum, camera, pos, go, fxaa, pointer, clock, timeStr, enabledItems, newItemIds, _i, enabledItems_1, id, menuItem;
@@ -11262,15 +11371,17 @@
11262
11371
  })];
11263
11372
  case 1:
11264
11373
  _f.sent();
11265
- return [4 /*yield*/, exports.TileRenderEngine.Map.LegacyNavigator.RenderView({
11266
- apiGetter: params.apiGetter,
11267
- bookmarkId: params.bookmarkId,
11268
- viewer: manager.Viewer,
11269
- viewId: params.viewId,
11270
- ignoreIds: []
11271
- })];
11272
- case 2:
11273
- _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
+ });
11274
11385
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11275
11386
  if (baseColor == null) {
11276
11387
  // TODO: Need global default.
@@ -11344,7 +11455,7 @@
11344
11455
  });
11345
11456
  }
11346
11457
  }
11347
- if (!bookmark) return [3 /*break*/, 4];
11458
+ if (!bookmark) return [3 /*break*/, 3];
11348
11459
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11349
11460
  apiGetter: params.apiGetter,
11350
11461
  getters: params.getters,
@@ -11352,11 +11463,14 @@
11352
11463
  view: view,
11353
11464
  bookmark: bookmark
11354
11465
  })];
11355
- case 3:
11466
+ case 2:
11356
11467
  _f.sent();
11357
- _f.label = 4;
11358
- case 4:
11359
- 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];
11360
11474
  menuItem = {
11361
11475
  id: RELATION_MENU_ITEM_ID,
11362
11476
  Caption: "Entity relations",
@@ -11370,10 +11484,13 @@
11370
11484
  getters: params.getters,
11371
11485
  item: menuItem
11372
11486
  })];
11373
- case 5:
11487
+ case 4:
11374
11488
  _f.sent();
11375
- _f.label = 6;
11376
- 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*/];
11377
11494
  }
11378
11495
  });
11379
11496
  });
@@ -11384,7 +11501,7 @@
11384
11501
  * @param bookmark
11385
11502
  * @param view
11386
11503
  */
11387
- function renderNavigator(params, bookmark, view) {
11504
+ function renderNavigator(iteration, params, bookmark, view) {
11388
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;
11389
11506
  return __awaiter(this, void 0, void 0, function () {
11390
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;
@@ -11450,6 +11567,9 @@
11450
11567
  })];
11451
11568
  case 1:
11452
11569
  _6.sent();
11570
+ if (!assertIteration$1(params.viewer, iteration)) {
11571
+ return [2 /*return*/];
11572
+ }
11453
11573
  _6.label = 2;
11454
11574
  case 2:
11455
11575
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11648,13 +11768,12 @@
11648
11768
  }
11649
11769
  ];
11650
11770
  }
11651
- return [4 /*yield*/, exports.TileRenderEngine.Map.Navigator.Render({
11652
- apiGetter: params.apiGetter,
11653
- tiles: imagery,
11654
- viewer: params.manager.Viewer,
11655
- })];
11656
- case 3:
11657
- _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
+ });
11658
11777
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11659
11778
  if (!renderedRelationEntityIds) {
11660
11779
  renderedRelationEntityIds = [];
@@ -11670,18 +11789,21 @@
11670
11789
  });
11671
11790
  }
11672
11791
  }
11673
- if (!bookmark) return [3 /*break*/, 5];
11792
+ if (!bookmark) return [3 /*break*/, 4];
11674
11793
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11675
11794
  getters: params.getters,
11676
11795
  manager: params.manager,
11677
11796
  view: view,
11678
11797
  bookmark: bookmark
11679
11798
  })];
11680
- case 4:
11799
+ case 3:
11681
11800
  _6.sent();
11682
- _6.label = 5;
11683
- case 5:
11684
- 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];
11685
11807
  menuItem = {
11686
11808
  id: RELATION_MENU_ITEM_ID,
11687
11809
  Caption: "Entity relations",
@@ -11694,10 +11816,13 @@
11694
11816
  getters: params.getters,
11695
11817
  item: menuItem
11696
11818
  })];
11697
- case 6:
11819
+ case 5:
11698
11820
  _6.sent();
11699
- _6.label = 7;
11700
- case 7:
11821
+ if (!assertIteration$1(params.viewer, iteration)) {
11822
+ return [2 /*return*/];
11823
+ }
11824
+ _6.label = 6;
11825
+ case 6:
11701
11826
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11702
11827
  if (gOcclusion == null) {
11703
11828
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11716,7 +11841,7 @@
11716
11841
  function Render(params) {
11717
11842
  var _a;
11718
11843
  return __awaiter(this, void 0, void 0, function () {
11719
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11844
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11720
11845
  return __generator(this, function (_d) {
11721
11846
  switch (_d.label) {
11722
11847
  case 0:
@@ -11729,6 +11854,7 @@
11729
11854
  else if (!params.viewer && params.manager) {
11730
11855
  params.viewer = params.manager.Viewer;
11731
11856
  }
11857
+ iteration = newIteration$1(params.viewer);
11732
11858
  if (!params.getters) {
11733
11859
  params.getters = bruceModels.ENVIRONMENT.Api();
11734
11860
  }
@@ -11773,17 +11899,23 @@
11773
11899
  bookmark = _c;
11774
11900
  _d.label = 7;
11775
11901
  case 7:
11902
+ if (!assertIteration$1(params.viewer, iteration)) {
11903
+ return [2 /*return*/];
11904
+ }
11776
11905
  version = view.DataVersion;
11777
11906
  if (!(version == 1)) return [3 /*break*/, 9];
11778
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11907
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11779
11908
  case 8:
11780
11909
  _d.sent();
11781
11910
  return [3 /*break*/, 11];
11782
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11911
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11783
11912
  case 10:
11784
11913
  _d.sent();
11785
11914
  _d.label = 11;
11786
11915
  case 11:
11916
+ if (!assertIteration$1(params.viewer, iteration)) {
11917
+ return [2 /*return*/];
11918
+ }
11787
11919
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11788
11920
  if (bWidget) {
11789
11921
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14605,7 +14737,7 @@
14605
14737
  ViewerUtils.CreateWidgets = CreateWidgets;
14606
14738
  })(exports.ViewerUtils || (exports.ViewerUtils = {}));
14607
14739
 
14608
- var VERSION$1 = "2.4.8";
14740
+ var VERSION$1 = "2.4.9";
14609
14741
 
14610
14742
  exports.VERSION = VERSION$1;
14611
14743
  exports.CesiumViewMonitor = CesiumViewMonitor;