bruce-cesium 2.4.8 → 2.5.0

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.
@@ -2583,11 +2583,29 @@
2583
2583
  });
2584
2584
  cEntity._siblingGraphics = [];
2585
2585
  if (width > 0 && cLineColor) {
2586
- var borderPosses = posses;
2586
+ var borderHeight = undefined;
2587
+ if (heightRef != Cesium.HeightReference.CLAMP_TO_GROUND) {
2588
+ if (flattenPoints) {
2589
+ borderHeight = 0;
2590
+ }
2591
+ // Set height to smallest height value from points.
2592
+ else {
2593
+ for (var i = 0; i < points.length; i++) {
2594
+ var point = points[i];
2595
+ if (!borderHeight || point.altitude < borderHeight) {
2596
+ borderHeight = point.altitude;
2597
+ }
2598
+ }
2599
+ }
2600
+ }
2601
+ var borderPosses = [];
2587
2602
  if (flattenPoints) {
2588
2603
  borderPosses = points.map(function (x) { return Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(0)); });
2589
2604
  bruceModels.Cartes.CloseRing3(borderPosses);
2590
2605
  }
2606
+ else {
2607
+ borderPosses = posses.map(function (x) { return x.clone ? x.clone() : __assign({}, x); });
2608
+ }
2591
2609
  var cEntityBorder = new Cesium.Entity({
2592
2610
  // polyline: new Cesium.PolylineGraphics({
2593
2611
  // positions: borderPosses,
@@ -2603,11 +2621,12 @@
2603
2621
  positions: borderPosses,
2604
2622
  material: cLineColor,
2605
2623
  heightReference: heightRef,
2624
+ height: borderHeight,
2606
2625
  width: width,
2607
2626
  fill: true,
2608
2627
  zIndex: zIndex + 1,
2609
2628
  cornerType: Cesium.CornerType.MITERED,
2610
- classificationType: Cesium.ClassificationType.TERRAIN,
2629
+ classificationType: Cesium.ClassificationType.BOTH,
2611
2630
  distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance, width),
2612
2631
  shadows: Cesium.ShadowMode.ENABLED
2613
2632
  },
@@ -2634,11 +2653,12 @@
2634
2653
  positions: borderPosses,
2635
2654
  material: cLineColor,
2636
2655
  heightReference: heightRef,
2656
+ height: borderHeight,
2637
2657
  width: width,
2638
2658
  fill: true,
2639
2659
  zIndex: zIndex + 1,
2640
2660
  cornerType: Cesium.CornerType.MITERED,
2641
- classificationType: Cesium.ClassificationType.TERRAIN,
2661
+ classificationType: Cesium.ClassificationType.BOTH,
2642
2662
  distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance, width),
2643
2663
  shadows: Cesium.ShadowMode.ENABLED,
2644
2664
  },
@@ -9611,6 +9631,26 @@
9611
9631
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9612
9632
  })(exports.MenuItemCreator || (exports.MenuItemCreator = {}));
9613
9633
 
9634
+ // Used to track if a current in-progress render is the latest.
9635
+ // If we're midway through an async function that is rendering 10 imageries and this changes, then we stop the function.
9636
+ var ITERATION_KEY = "nextspace-tile-render-engine-iteration";
9637
+ function newIteration(viewer, tile) {
9638
+ // Create key specific to the kind of tile we're rendering.
9639
+ var key = ITERATION_KEY + tile;
9640
+ // Generate a new iteration ID, include the tile type in it so we can identify it easier.
9641
+ var value = bruceModels.ObjectUtils.UId() + tile;
9642
+ viewer[key] = value;
9643
+ return value;
9644
+ }
9645
+ /**
9646
+ * Checks if a given iteration is still the active one for a given viewer.
9647
+ * @param viewer
9648
+ * @param iteration
9649
+ */
9650
+ function assertIteration(viewer, iteration) {
9651
+ var suffix = iteration.includes("imagery") ? "imagery" : "terrain";
9652
+ return viewer[ITERATION_KEY + suffix] === iteration;
9653
+ }
9614
9654
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9615
9655
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9616
9656
  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 +10189,14 @@
10149
10189
  function RenderView(params) {
10150
10190
  var _a;
10151
10191
  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;
10192
+ 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
10193
  return __generator(this, function (_b) {
10154
10194
  switch (_b.label) {
10155
10195
  case 0:
10156
10196
  if (!params.apiGetter) {
10157
10197
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10158
10198
  }
10199
+ iteration = newIteration(params.viewer, "imagery");
10159
10200
  api = params.apiGetter.getApi();
10160
10201
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10161
10202
  api: api,
@@ -10163,6 +10204,9 @@
10163
10204
  })];
10164
10205
  case 1:
10165
10206
  view = (_b.sent()).view;
10207
+ if (!assertIteration(params.viewer, iteration)) {
10208
+ return [2 /*return*/];
10209
+ }
10166
10210
  bookmark = null;
10167
10211
  if (!params.bookmarkId) return [3 /*break*/, 3];
10168
10212
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
@@ -10172,6 +10216,9 @@
10172
10216
  })];
10173
10217
  case 2:
10174
10218
  bookmark = (_b.sent()).bookmark;
10219
+ if (!assertIteration(params.viewer, iteration)) {
10220
+ return [2 /*return*/];
10221
+ }
10175
10222
  _b.label = 3;
10176
10223
  case 3:
10177
10224
  vSettings = view.Settings;
@@ -10195,6 +10242,9 @@
10195
10242
  })];
10196
10243
  case 4:
10197
10244
  _b.sent();
10245
+ if (!assertIteration(params.viewer, iteration)) {
10246
+ return [2 /*return*/];
10247
+ }
10198
10248
  for (i = 0; i < dataNames.length; i++) {
10199
10249
  name_1 = dataNames[i];
10200
10250
  for (j = 0; j < tiles.length; j++) {
@@ -10241,6 +10291,9 @@
10241
10291
  if (layer) {
10242
10292
  layers.push(layer);
10243
10293
  }
10294
+ if (!assertIteration(params.viewer, iteration)) {
10295
+ return [2 /*return*/];
10296
+ }
10244
10297
  _b.label = 7;
10245
10298
  case 7:
10246
10299
  i++;
@@ -10452,13 +10505,66 @@
10452
10505
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10453
10506
  function Render(params) {
10454
10507
  return __awaiter(this, void 0, void 0, function () {
10455
- var i, enabled, curEnabled, toDisable, curEnabledArr, _loop_2, i, i, _loop_3, i;
10508
+ var tmpTiles, _loop_2, i, organize, iteration, curEnabled, toDisable, _loop_3, i, i, organized, i, enabled;
10456
10509
  return __generator(this, function (_a) {
10457
10510
  switch (_a.label) {
10458
10511
  case 0:
10459
10512
  if (!params.apiGetter) {
10460
10513
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10461
10514
  }
10515
+ tmpTiles = [];
10516
+ _loop_2 = function (i) {
10517
+ var tile = params.tiles[i];
10518
+ if (!tmpTiles.find(function (x) { return (x.accountId == tile.accountId) && (x.tilesetId == tile.tilesetId); })) {
10519
+ tmpTiles.push(tile);
10520
+ }
10521
+ };
10522
+ for (i = 0; i < params.tiles.length; i++) {
10523
+ _loop_2(i);
10524
+ }
10525
+ params.tiles = tmpTiles;
10526
+ organize = function () {
10527
+ var curEnabledArr = [];
10528
+ for (var i = 0; i < curEnabled.length; i++) {
10529
+ var layer = curEnabled.get(i);
10530
+ curEnabledArr.push(layer);
10531
+ }
10532
+ var _loop_4 = function (i) {
10533
+ var enabled = params.tiles[i];
10534
+ 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; });
10535
+ if (layer) {
10536
+ params.viewer.imageryLayers.raiseToTop(layer);
10537
+ layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10538
+ layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10539
+ layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10540
+ layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10541
+ layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10542
+ layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10543
+ }
10544
+ };
10545
+ for (var i = 0; i < params.tiles.length; i++) {
10546
+ _loop_4(i);
10547
+ }
10548
+ params.viewer.scene.requestRender();
10549
+ };
10550
+ iteration = newIteration(params.viewer, "imagery");
10551
+ curEnabled = params.viewer.imageryLayers;
10552
+ toDisable = [];
10553
+ _loop_3 = function (i) {
10554
+ var layer = curEnabled.get(i);
10555
+ var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10556
+ 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); });
10557
+ if (disable) {
10558
+ toDisable.push(layer);
10559
+ }
10560
+ };
10561
+ for (i = 0; i < curEnabled.length; i++) {
10562
+ _loop_3(i);
10563
+ }
10564
+ for (i = 0; i < toDisable.length; i++) {
10565
+ params.viewer.imageryLayers.remove(toDisable[i]);
10566
+ }
10567
+ organized = false;
10462
10568
  i = 0;
10463
10569
  _a.label = 1;
10464
10570
  case 1:
@@ -10474,48 +10580,21 @@
10474
10580
  })];
10475
10581
  case 2:
10476
10582
  _a.sent();
10583
+ if (!assertIteration(params.viewer, iteration)) {
10584
+ return [2 /*return*/];
10585
+ }
10586
+ // Organize as we load in case there are lots of imageries.
10587
+ // We want to ensure what the user sees is as close to correct as we can get.
10588
+ organize();
10589
+ organized = true;
10477
10590
  _a.label = 3;
10478
10591
  case 3:
10479
10592
  i++;
10480
10593
  return [3 /*break*/, 1];
10481
10594
  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);
10595
+ if (!organized) {
10596
+ organize();
10498
10597
  }
10499
- for (i = 0; i < toDisable.length; i++) {
10500
- params.viewer.imageryLayers.remove(toDisable[i]);
10501
- }
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
10598
  return [2 /*return*/];
10520
10599
  }
10521
10600
  });
@@ -10572,13 +10651,14 @@
10572
10651
  function RenderView(params) {
10573
10652
  var _a, _b;
10574
10653
  return __awaiter(this, void 0, void 0, function () {
10575
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10654
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10576
10655
  return __generator(this, function (_c) {
10577
10656
  switch (_c.label) {
10578
10657
  case 0:
10579
10658
  if (!params.apiGetter) {
10580
10659
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10581
10660
  }
10661
+ iteration = newIteration(params.viewer, "terrain");
10582
10662
  api = params.apiGetter.getApi();
10583
10663
  return [4 /*yield*/, bruceModels.ProjectView.Get({
10584
10664
  api: api,
@@ -10587,6 +10667,9 @@
10587
10667
  case 1:
10588
10668
  view = (_c.sent()).view;
10589
10669
  bookmark = null;
10670
+ if (!assertIteration(params.viewer, iteration)) {
10671
+ return [2 /*return*/];
10672
+ }
10590
10673
  if (!params.bookmarkId) return [3 /*break*/, 3];
10591
10674
  return [4 /*yield*/, bruceModels.ProjectViewBookmark.Get({
10592
10675
  api: api,
@@ -10595,6 +10678,9 @@
10595
10678
  })];
10596
10679
  case 2:
10597
10680
  bookmark = (_c.sent()).bookmark;
10681
+ if (!assertIteration(params.viewer, iteration)) {
10682
+ return [2 /*return*/];
10683
+ }
10598
10684
  _c.label = 3;
10599
10685
  case 3:
10600
10686
  vSettings = view.Settings;
@@ -10615,6 +10701,9 @@
10615
10701
  })];
10616
10702
  case 4:
10617
10703
  _c.sent();
10704
+ if (!assertIteration(params.viewer, iteration)) {
10705
+ return [2 /*return*/];
10706
+ }
10618
10707
  for (i = 0; i < terrainTiles.length; i++) {
10619
10708
  tile = terrainTiles[i];
10620
10709
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10629,6 +10718,9 @@
10629
10718
  })];
10630
10719
  case 5:
10631
10720
  _c.sent();
10721
+ if (!assertIteration(params.viewer, iteration)) {
10722
+ return [2 /*return*/];
10723
+ }
10632
10724
  _c.label = 6;
10633
10725
  case 6:
10634
10726
  params.viewer.scene.requestRender();
@@ -10644,13 +10736,14 @@
10644
10736
  function Render(params) {
10645
10737
  var _a;
10646
10738
  return __awaiter(this, void 0, void 0, function () {
10647
- var enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10739
+ var iteration, enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10648
10740
  return __generator(this, function (_b) {
10649
10741
  switch (_b.label) {
10650
10742
  case 0:
10651
10743
  if (!params.apiGetter) {
10652
10744
  params.apiGetter = bruceModels.ENVIRONMENT.Api().GetBruceGetter();
10653
10745
  }
10746
+ iteration = newIteration(params.viewer, "terrain");
10654
10747
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10655
10748
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10656
10749
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10664,8 +10757,9 @@
10664
10757
  provider_1 instanceof Cesium.EllipsoidTerrainProvider) {
10665
10758
  leave = true;
10666
10759
  }
10667
- // TODO: Check for cesium world terrain if we can easily determine that it's enabled.
10760
+ // TODO: Also check for "cesium world terrain" if we can easily determine that it's enabled.
10668
10761
  if (leave) {
10762
+ // Mark it so we don't have to do this magic logic again.
10669
10763
  provider_1._bMeta = {
10670
10764
  tilesetId: params.tile.tilesetId,
10671
10765
  accountId: params.tile.accountId
@@ -10691,12 +10785,18 @@
10691
10785
  // When loading stuff in the same account as the default it's likely already loaded,
10692
10786
  // but if we just made an API instance for some external account then it won't be loaded yet.
10693
10787
  _b.sent();
10788
+ if (!assertIteration(params.viewer, iteration)) {
10789
+ return [2 /*return*/];
10790
+ }
10694
10791
  return [4 /*yield*/, bruceModels.Tileset.Get({
10695
10792
  api: api,
10696
10793
  tilesetId: params.tile.tilesetId
10697
10794
  })];
10698
10795
  case 4:
10699
10796
  tileset = (_b.sent()).tileset;
10797
+ if (!assertIteration(params.viewer, iteration)) {
10798
+ return [2 /*return*/];
10799
+ }
10700
10800
  url = void 0;
10701
10801
  vertexes = true;
10702
10802
  if (tileset.type === bruceModels.Tileset.EType.Terrain) {
@@ -10821,6 +10921,14 @@
10821
10921
  }
10822
10922
  };
10823
10923
  }
10924
+ else if (provider instanceof Cesium.EllipsoidTerrainProvider) {
10925
+ return {
10926
+ terrain: {
10927
+ tilesetId: bruceModels.ProjectViewTile.EDefaultTerrain.FlatTerrain,
10928
+ accountId: null
10929
+ }
10930
+ };
10931
+ }
10824
10932
  return null;
10825
10933
  }
10826
10934
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11236,13 +11344,34 @@
11236
11344
  var MIN_SHADOW_SIZE = 2048;
11237
11345
  var MAX_SHADOW_SIZE = 32768;
11238
11346
  var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
11347
+ // Used to track if a current in-progress render is the latest.
11348
+ // If we're midway through an async function that is rendering a bookmark and this changes, then we stop the function.
11349
+ var ITERATION_KEY$1 = "nextspace-view-render-engine-iteration";
11350
+ /**
11351
+ * Creates a new iteration state.
11352
+ * This will stop any existing renders from processing to their end.
11353
+ * @param viewer
11354
+ * @returns
11355
+ */
11356
+ function newIteration$1(viewer) {
11357
+ viewer[ITERATION_KEY$1] = bruceModels.ObjectUtils.UId();
11358
+ return viewer[ITERATION_KEY$1];
11359
+ }
11360
+ /**
11361
+ * Checks if a given iteration is still the active one for a given viewer.
11362
+ * @param viewer
11363
+ * @param iteration
11364
+ */
11365
+ function assertIteration$1(viewer, iteration) {
11366
+ return viewer[ITERATION_KEY$1] == iteration;
11367
+ }
11239
11368
  /**
11240
11369
  * Renders DATA_VERSION = 1 navigator.
11241
11370
  * @param params
11242
11371
  * @param bookmark
11243
11372
  * @param view
11244
11373
  */
11245
- function renderLegacyNavigator(params, bookmark, view) {
11374
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11246
11375
  var _a, _b, _c, _d, _e;
11247
11376
  return __awaiter(this, void 0, void 0, function () {
11248
11377
  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 +11391,17 @@
11262
11391
  })];
11263
11392
  case 1:
11264
11393
  _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();
11394
+ if (!assertIteration$1(params.viewer, iteration)) {
11395
+ return [2 /*return*/];
11396
+ }
11397
+ // We don't wait for imageries to load, this does not affect rendering other things.
11398
+ exports.TileRenderEngine.Map.LegacyNavigator.RenderView({
11399
+ apiGetter: params.apiGetter,
11400
+ bookmarkId: params.bookmarkId,
11401
+ viewer: manager.Viewer,
11402
+ viewId: params.viewId,
11403
+ ignoreIds: []
11404
+ });
11274
11405
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11275
11406
  if (baseColor == null) {
11276
11407
  // TODO: Need global default.
@@ -11344,7 +11475,7 @@
11344
11475
  });
11345
11476
  }
11346
11477
  }
11347
- if (!bookmark) return [3 /*break*/, 4];
11478
+ if (!bookmark) return [3 /*break*/, 3];
11348
11479
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11349
11480
  apiGetter: params.apiGetter,
11350
11481
  getters: params.getters,
@@ -11352,11 +11483,14 @@
11352
11483
  view: view,
11353
11484
  bookmark: bookmark
11354
11485
  })];
11355
- case 3:
11486
+ case 2:
11356
11487
  _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];
11488
+ if (!assertIteration$1(params.viewer, iteration)) {
11489
+ return [2 /*return*/];
11490
+ }
11491
+ _f.label = 3;
11492
+ case 3:
11493
+ if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 5];
11360
11494
  menuItem = {
11361
11495
  id: RELATION_MENU_ITEM_ID,
11362
11496
  Caption: "Entity relations",
@@ -11370,10 +11504,13 @@
11370
11504
  getters: params.getters,
11371
11505
  item: menuItem
11372
11506
  })];
11373
- case 5:
11507
+ case 4:
11374
11508
  _f.sent();
11375
- _f.label = 6;
11376
- case 6: return [2 /*return*/];
11509
+ if (!assertIteration$1(params.viewer, iteration)) {
11510
+ return [2 /*return*/];
11511
+ }
11512
+ _f.label = 5;
11513
+ case 5: return [2 /*return*/];
11377
11514
  }
11378
11515
  });
11379
11516
  });
@@ -11384,7 +11521,7 @@
11384
11521
  * @param bookmark
11385
11522
  * @param view
11386
11523
  */
11387
- function renderNavigator(params, bookmark, view) {
11524
+ function renderNavigator(iteration, params, bookmark, view) {
11388
11525
  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
11526
  return __awaiter(this, void 0, void 0, function () {
11390
11527
  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 +11587,9 @@
11450
11587
  })];
11451
11588
  case 1:
11452
11589
  _6.sent();
11590
+ if (!assertIteration$1(params.viewer, iteration)) {
11591
+ return [2 /*return*/];
11592
+ }
11453
11593
  _6.label = 2;
11454
11594
  case 2:
11455
11595
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11648,13 +11788,12 @@
11648
11788
  }
11649
11789
  ];
11650
11790
  }
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();
11791
+ // We don't wait for imageries to load, this does not affect rendering other things.
11792
+ exports.TileRenderEngine.Map.Navigator.Render({
11793
+ apiGetter: params.apiGetter,
11794
+ tiles: imagery,
11795
+ viewer: params.manager.Viewer,
11796
+ });
11658
11797
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11659
11798
  if (!renderedRelationEntityIds) {
11660
11799
  renderedRelationEntityIds = [];
@@ -11670,18 +11809,21 @@
11670
11809
  });
11671
11810
  }
11672
11811
  }
11673
- if (!bookmark) return [3 /*break*/, 5];
11812
+ if (!bookmark) return [3 /*break*/, 4];
11674
11813
  return [4 /*yield*/, exports.MenuItemCreator.RenderBookmarkItems({
11675
11814
  getters: params.getters,
11676
11815
  manager: params.manager,
11677
11816
  view: view,
11678
11817
  bookmark: bookmark
11679
11818
  })];
11680
- case 4:
11819
+ case 3:
11681
11820
  _6.sent();
11682
- _6.label = 5;
11683
- case 5:
11684
- if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 7];
11821
+ if (!assertIteration$1(params.viewer, iteration)) {
11822
+ return [2 /*return*/];
11823
+ }
11824
+ _6.label = 4;
11825
+ case 4:
11826
+ if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 6];
11685
11827
  menuItem = {
11686
11828
  id: RELATION_MENU_ITEM_ID,
11687
11829
  Caption: "Entity relations",
@@ -11694,10 +11836,13 @@
11694
11836
  getters: params.getters,
11695
11837
  item: menuItem
11696
11838
  })];
11697
- case 6:
11839
+ case 5:
11698
11840
  _6.sent();
11699
- _6.label = 7;
11700
- case 7:
11841
+ if (!assertIteration$1(params.viewer, iteration)) {
11842
+ return [2 /*return*/];
11843
+ }
11844
+ _6.label = 6;
11845
+ case 6:
11701
11846
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11702
11847
  if (gOcclusion == null) {
11703
11848
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11716,7 +11861,7 @@
11716
11861
  function Render(params) {
11717
11862
  var _a;
11718
11863
  return __awaiter(this, void 0, void 0, function () {
11719
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11864
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11720
11865
  return __generator(this, function (_d) {
11721
11866
  switch (_d.label) {
11722
11867
  case 0:
@@ -11729,6 +11874,7 @@
11729
11874
  else if (!params.viewer && params.manager) {
11730
11875
  params.viewer = params.manager.Viewer;
11731
11876
  }
11877
+ iteration = newIteration$1(params.viewer);
11732
11878
  if (!params.getters) {
11733
11879
  params.getters = bruceModels.ENVIRONMENT.Api();
11734
11880
  }
@@ -11773,17 +11919,23 @@
11773
11919
  bookmark = _c;
11774
11920
  _d.label = 7;
11775
11921
  case 7:
11922
+ if (!assertIteration$1(params.viewer, iteration)) {
11923
+ return [2 /*return*/];
11924
+ }
11776
11925
  version = view.DataVersion;
11777
11926
  if (!(version == 1)) return [3 /*break*/, 9];
11778
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11927
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11779
11928
  case 8:
11780
11929
  _d.sent();
11781
11930
  return [3 /*break*/, 11];
11782
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11931
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11783
11932
  case 10:
11784
11933
  _d.sent();
11785
11934
  _d.label = 11;
11786
11935
  case 11:
11936
+ if (!assertIteration$1(params.viewer, iteration)) {
11937
+ return [2 /*return*/];
11938
+ }
11787
11939
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11788
11940
  if (bWidget) {
11789
11941
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14605,7 +14757,7 @@
14605
14757
  ViewerUtils.CreateWidgets = CreateWidgets;
14606
14758
  })(exports.ViewerUtils || (exports.ViewerUtils = {}));
14607
14759
 
14608
- var VERSION$1 = "2.4.8";
14760
+ var VERSION$1 = "2.5.0";
14609
14761
 
14610
14762
  exports.VERSION = VERSION$1;
14611
14763
  exports.CesiumViewMonitor = CesiumViewMonitor;