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.
@@ -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, HeightReference, DistanceDisplayCondition, NearFarScalar, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, Cesium3DTileStyle, createOsmBuildings, KmlDataSource, Cesium3DTileset, Matrix4, Matrix3, IonResource, EllipsoidGeodesic, EllipsoidTerrainProvider, sampleTerrainMostDetailed, defined, Model, CesiumInspector, OrthographicFrustum, PolygonPipeline, JulianDate, ColorMaterialProperty, EasingFunction, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, 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;
@@ -9661,6 +9661,26 @@ var MenuItemCreator;
9661
9661
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9662
9662
  })(MenuItemCreator || (MenuItemCreator = {}));
9663
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
+ }
9664
9684
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9665
9685
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9666
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;
@@ -10200,13 +10220,14 @@ var TileRenderEngine;
10200
10220
  function RenderView(params) {
10201
10221
  var _a;
10202
10222
  return __awaiter(this, void 0, void 0, function () {
10203
- 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;
10204
10224
  return __generator(this, function (_b) {
10205
10225
  switch (_b.label) {
10206
10226
  case 0:
10207
10227
  if (!params.apiGetter) {
10208
10228
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10209
10229
  }
10230
+ iteration = newIteration(params.viewer, "imagery");
10210
10231
  api = params.apiGetter.getApi();
10211
10232
  return [4 /*yield*/, ProjectView.Get({
10212
10233
  api: api,
@@ -10214,6 +10235,9 @@ var TileRenderEngine;
10214
10235
  })];
10215
10236
  case 1:
10216
10237
  view = (_b.sent()).view;
10238
+ if (!assertIteration(params.viewer, iteration)) {
10239
+ return [2 /*return*/];
10240
+ }
10217
10241
  bookmark = null;
10218
10242
  if (!params.bookmarkId) return [3 /*break*/, 3];
10219
10243
  return [4 /*yield*/, ProjectViewBookmark.Get({
@@ -10223,6 +10247,9 @@ var TileRenderEngine;
10223
10247
  })];
10224
10248
  case 2:
10225
10249
  bookmark = (_b.sent()).bookmark;
10250
+ if (!assertIteration(params.viewer, iteration)) {
10251
+ return [2 /*return*/];
10252
+ }
10226
10253
  _b.label = 3;
10227
10254
  case 3:
10228
10255
  vSettings = view.Settings;
@@ -10246,6 +10273,9 @@ var TileRenderEngine;
10246
10273
  })];
10247
10274
  case 4:
10248
10275
  _b.sent();
10276
+ if (!assertIteration(params.viewer, iteration)) {
10277
+ return [2 /*return*/];
10278
+ }
10249
10279
  for (i = 0; i < dataNames.length; i++) {
10250
10280
  name_1 = dataNames[i];
10251
10281
  for (j = 0; j < tiles.length; j++) {
@@ -10292,6 +10322,9 @@ var TileRenderEngine;
10292
10322
  if (layer) {
10293
10323
  layers.push(layer);
10294
10324
  }
10325
+ if (!assertIteration(params.viewer, iteration)) {
10326
+ return [2 /*return*/];
10327
+ }
10295
10328
  _b.label = 7;
10296
10329
  case 7:
10297
10330
  i++;
@@ -10503,13 +10536,66 @@ var TileRenderEngine;
10503
10536
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10504
10537
  function Render(params) {
10505
10538
  return __awaiter(this, void 0, void 0, function () {
10506
- 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;
10507
10540
  return __generator(this, function (_a) {
10508
10541
  switch (_a.label) {
10509
10542
  case 0:
10510
10543
  if (!params.apiGetter) {
10511
10544
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10512
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;
10513
10599
  i = 0;
10514
10600
  _a.label = 1;
10515
10601
  case 1:
@@ -10525,48 +10611,21 @@ var TileRenderEngine;
10525
10611
  })];
10526
10612
  case 2:
10527
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;
10528
10621
  _a.label = 3;
10529
10622
  case 3:
10530
10623
  i++;
10531
10624
  return [3 /*break*/, 1];
10532
10625
  case 4:
10533
- curEnabled = params.viewer.imageryLayers;
10534
- toDisable = [];
10535
- curEnabledArr = [];
10536
- _loop_2 = function (i) {
10537
- var layer = curEnabled.get(i);
10538
- var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10539
- 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); });
10540
- if (disable) {
10541
- toDisable.push(layer);
10542
- }
10543
- else {
10544
- curEnabledArr.push(layer);
10545
- }
10546
- };
10547
- for (i = 0; i < curEnabled.length; i++) {
10548
- _loop_2(i);
10549
- }
10550
- for (i = 0; i < toDisable.length; i++) {
10551
- params.viewer.imageryLayers.remove(toDisable[i]);
10626
+ if (!organized) {
10627
+ organize();
10552
10628
  }
10553
- _loop_3 = function (i) {
10554
- var enabled = params.tiles[i];
10555
- 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; });
10556
- if (layer) {
10557
- params.viewer.imageryLayers.raiseToTop(layer);
10558
- layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10559
- layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10560
- layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10561
- layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10562
- layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10563
- layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10564
- }
10565
- };
10566
- for (i = 0; i < params.tiles.length; i++) {
10567
- _loop_3(i);
10568
- }
10569
- params.viewer.scene.requestRender();
10570
10629
  return [2 /*return*/];
10571
10630
  }
10572
10631
  });
@@ -10623,13 +10682,14 @@ var TileRenderEngine;
10623
10682
  function RenderView(params) {
10624
10683
  var _a, _b;
10625
10684
  return __awaiter(this, void 0, void 0, function () {
10626
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10685
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10627
10686
  return __generator(this, function (_c) {
10628
10687
  switch (_c.label) {
10629
10688
  case 0:
10630
10689
  if (!params.apiGetter) {
10631
10690
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10632
10691
  }
10692
+ iteration = newIteration(params.viewer, "terrain");
10633
10693
  api = params.apiGetter.getApi();
10634
10694
  return [4 /*yield*/, ProjectView.Get({
10635
10695
  api: api,
@@ -10638,6 +10698,9 @@ var TileRenderEngine;
10638
10698
  case 1:
10639
10699
  view = (_c.sent()).view;
10640
10700
  bookmark = null;
10701
+ if (!assertIteration(params.viewer, iteration)) {
10702
+ return [2 /*return*/];
10703
+ }
10641
10704
  if (!params.bookmarkId) return [3 /*break*/, 3];
10642
10705
  return [4 /*yield*/, ProjectViewBookmark.Get({
10643
10706
  api: api,
@@ -10646,6 +10709,9 @@ var TileRenderEngine;
10646
10709
  })];
10647
10710
  case 2:
10648
10711
  bookmark = (_c.sent()).bookmark;
10712
+ if (!assertIteration(params.viewer, iteration)) {
10713
+ return [2 /*return*/];
10714
+ }
10649
10715
  _c.label = 3;
10650
10716
  case 3:
10651
10717
  vSettings = view.Settings;
@@ -10666,6 +10732,9 @@ var TileRenderEngine;
10666
10732
  })];
10667
10733
  case 4:
10668
10734
  _c.sent();
10735
+ if (!assertIteration(params.viewer, iteration)) {
10736
+ return [2 /*return*/];
10737
+ }
10669
10738
  for (i = 0; i < terrainTiles.length; i++) {
10670
10739
  tile = terrainTiles[i];
10671
10740
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10680,6 +10749,9 @@ var TileRenderEngine;
10680
10749
  })];
10681
10750
  case 5:
10682
10751
  _c.sent();
10752
+ if (!assertIteration(params.viewer, iteration)) {
10753
+ return [2 /*return*/];
10754
+ }
10683
10755
  _c.label = 6;
10684
10756
  case 6:
10685
10757
  params.viewer.scene.requestRender();
@@ -10695,13 +10767,14 @@ var TileRenderEngine;
10695
10767
  function Render(params) {
10696
10768
  var _a;
10697
10769
  return __awaiter(this, void 0, void 0, function () {
10698
- 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;
10699
10771
  return __generator(this, function (_b) {
10700
10772
  switch (_b.label) {
10701
10773
  case 0:
10702
10774
  if (!params.apiGetter) {
10703
10775
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10704
10776
  }
10777
+ iteration = newIteration(params.viewer, "terrain");
10705
10778
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10706
10779
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10707
10780
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10715,8 +10788,9 @@ var TileRenderEngine;
10715
10788
  provider_1 instanceof EllipsoidTerrainProvider) {
10716
10789
  leave = true;
10717
10790
  }
10718
- // 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.
10719
10792
  if (leave) {
10793
+ // Mark it so we don't have to do this magic logic again.
10720
10794
  provider_1._bMeta = {
10721
10795
  tilesetId: params.tile.tilesetId,
10722
10796
  accountId: params.tile.accountId
@@ -10742,12 +10816,18 @@ var TileRenderEngine;
10742
10816
  // When loading stuff in the same account as the default it's likely already loaded,
10743
10817
  // but if we just made an API instance for some external account then it won't be loaded yet.
10744
10818
  _b.sent();
10819
+ if (!assertIteration(params.viewer, iteration)) {
10820
+ return [2 /*return*/];
10821
+ }
10745
10822
  return [4 /*yield*/, Tileset.Get({
10746
10823
  api: api,
10747
10824
  tilesetId: params.tile.tilesetId
10748
10825
  })];
10749
10826
  case 4:
10750
10827
  tileset = (_b.sent()).tileset;
10828
+ if (!assertIteration(params.viewer, iteration)) {
10829
+ return [2 /*return*/];
10830
+ }
10751
10831
  url = void 0;
10752
10832
  vertexes = true;
10753
10833
  if (tileset.type === Tileset.EType.Terrain) {
@@ -10873,6 +10953,14 @@ var ViewUtils;
10873
10953
  }
10874
10954
  };
10875
10955
  }
10956
+ else if (provider instanceof EllipsoidTerrainProvider) {
10957
+ return {
10958
+ terrain: {
10959
+ tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain,
10960
+ accountId: null
10961
+ }
10962
+ };
10963
+ }
10876
10964
  return null;
10877
10965
  }
10878
10966
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11288,13 +11376,34 @@ var WidgetBookmarks = /** @class */ (function (_super) {
11288
11376
  var MIN_SHADOW_SIZE = 2048;
11289
11377
  var MAX_SHADOW_SIZE = 32768;
11290
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
+ }
11291
11400
  /**
11292
11401
  * Renders DATA_VERSION = 1 navigator.
11293
11402
  * @param params
11294
11403
  * @param bookmark
11295
11404
  * @param view
11296
11405
  */
11297
- function renderLegacyNavigator(params, bookmark, view) {
11406
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11298
11407
  var _a, _b, _c, _d, _e;
11299
11408
  return __awaiter(this, void 0, void 0, function () {
11300
11409
  var vSettings, bSettings, manager, VR, scene, baseColor, frustum, curFrustum, camera, pos, go, fxaa, pointer, clock, timeStr, enabledItems, newItemIds, _i, enabledItems_1, id, menuItem;
@@ -11314,15 +11423,17 @@ function renderLegacyNavigator(params, bookmark, view) {
11314
11423
  })];
11315
11424
  case 1:
11316
11425
  _f.sent();
11317
- return [4 /*yield*/, TileRenderEngine.Map.LegacyNavigator.RenderView({
11318
- apiGetter: params.apiGetter,
11319
- bookmarkId: params.bookmarkId,
11320
- viewer: manager.Viewer,
11321
- viewId: params.viewId,
11322
- ignoreIds: []
11323
- })];
11324
- case 2:
11325
- _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
+ });
11326
11437
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11327
11438
  if (baseColor == null) {
11328
11439
  // TODO: Need global default.
@@ -11396,7 +11507,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11396
11507
  });
11397
11508
  }
11398
11509
  }
11399
- if (!bookmark) return [3 /*break*/, 4];
11510
+ if (!bookmark) return [3 /*break*/, 3];
11400
11511
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11401
11512
  apiGetter: params.apiGetter,
11402
11513
  getters: params.getters,
@@ -11404,11 +11515,14 @@ function renderLegacyNavigator(params, bookmark, view) {
11404
11515
  view: view,
11405
11516
  bookmark: bookmark
11406
11517
  })];
11407
- case 3:
11518
+ case 2:
11408
11519
  _f.sent();
11409
- _f.label = 4;
11410
- case 4:
11411
- 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];
11412
11526
  menuItem = {
11413
11527
  id: RELATION_MENU_ITEM_ID,
11414
11528
  Caption: "Entity relations",
@@ -11422,10 +11536,13 @@ function renderLegacyNavigator(params, bookmark, view) {
11422
11536
  getters: params.getters,
11423
11537
  item: menuItem
11424
11538
  })];
11425
- case 5:
11539
+ case 4:
11426
11540
  _f.sent();
11427
- _f.label = 6;
11428
- 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*/];
11429
11546
  }
11430
11547
  });
11431
11548
  });
@@ -11436,7 +11553,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11436
11553
  * @param bookmark
11437
11554
  * @param view
11438
11555
  */
11439
- function renderNavigator(params, bookmark, view) {
11556
+ function renderNavigator(iteration, params, bookmark, view) {
11440
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;
11441
11558
  return __awaiter(this, void 0, void 0, function () {
11442
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;
@@ -11502,6 +11619,9 @@ function renderNavigator(params, bookmark, view) {
11502
11619
  })];
11503
11620
  case 1:
11504
11621
  _6.sent();
11622
+ if (!assertIteration$1(params.viewer, iteration)) {
11623
+ return [2 /*return*/];
11624
+ }
11505
11625
  _6.label = 2;
11506
11626
  case 2:
11507
11627
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11700,13 +11820,12 @@ function renderNavigator(params, bookmark, view) {
11700
11820
  }
11701
11821
  ];
11702
11822
  }
11703
- return [4 /*yield*/, TileRenderEngine.Map.Navigator.Render({
11704
- apiGetter: params.apiGetter,
11705
- tiles: imagery,
11706
- viewer: params.manager.Viewer,
11707
- })];
11708
- case 3:
11709
- _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
+ });
11710
11829
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11711
11830
  if (!renderedRelationEntityIds) {
11712
11831
  renderedRelationEntityIds = [];
@@ -11722,18 +11841,21 @@ function renderNavigator(params, bookmark, view) {
11722
11841
  });
11723
11842
  }
11724
11843
  }
11725
- if (!bookmark) return [3 /*break*/, 5];
11844
+ if (!bookmark) return [3 /*break*/, 4];
11726
11845
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11727
11846
  getters: params.getters,
11728
11847
  manager: params.manager,
11729
11848
  view: view,
11730
11849
  bookmark: bookmark
11731
11850
  })];
11732
- case 4:
11851
+ case 3:
11733
11852
  _6.sent();
11734
- _6.label = 5;
11735
- case 5:
11736
- 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];
11737
11859
  menuItem = {
11738
11860
  id: RELATION_MENU_ITEM_ID,
11739
11861
  Caption: "Entity relations",
@@ -11746,10 +11868,13 @@ function renderNavigator(params, bookmark, view) {
11746
11868
  getters: params.getters,
11747
11869
  item: menuItem
11748
11870
  })];
11749
- case 6:
11871
+ case 5:
11750
11872
  _6.sent();
11751
- _6.label = 7;
11752
- case 7:
11873
+ if (!assertIteration$1(params.viewer, iteration)) {
11874
+ return [2 /*return*/];
11875
+ }
11876
+ _6.label = 6;
11877
+ case 6:
11753
11878
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11754
11879
  if (gOcclusion == null) {
11755
11880
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11769,7 +11894,7 @@ var ViewRenderEngine;
11769
11894
  function Render(params) {
11770
11895
  var _a;
11771
11896
  return __awaiter(this, void 0, void 0, function () {
11772
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11897
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11773
11898
  return __generator(this, function (_d) {
11774
11899
  switch (_d.label) {
11775
11900
  case 0:
@@ -11782,6 +11907,7 @@ var ViewRenderEngine;
11782
11907
  else if (!params.viewer && params.manager) {
11783
11908
  params.viewer = params.manager.Viewer;
11784
11909
  }
11910
+ iteration = newIteration$1(params.viewer);
11785
11911
  if (!params.getters) {
11786
11912
  params.getters = ENVIRONMENT.Api();
11787
11913
  }
@@ -11826,17 +11952,23 @@ var ViewRenderEngine;
11826
11952
  bookmark = _c;
11827
11953
  _d.label = 7;
11828
11954
  case 7:
11955
+ if (!assertIteration$1(params.viewer, iteration)) {
11956
+ return [2 /*return*/];
11957
+ }
11829
11958
  version = view.DataVersion;
11830
11959
  if (!(version == 1)) return [3 /*break*/, 9];
11831
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11960
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11832
11961
  case 8:
11833
11962
  _d.sent();
11834
11963
  return [3 /*break*/, 11];
11835
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11964
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11836
11965
  case 10:
11837
11966
  _d.sent();
11838
11967
  _d.label = 11;
11839
11968
  case 11:
11969
+ if (!assertIteration$1(params.viewer, iteration)) {
11970
+ return [2 /*return*/];
11971
+ }
11840
11972
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11841
11973
  if (bWidget) {
11842
11974
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14659,7 +14791,7 @@ var ViewerUtils;
14659
14791
  ViewerUtils.CreateWidgets = CreateWidgets;
14660
14792
  })(ViewerUtils || (ViewerUtils = {}));
14661
14793
 
14662
- var VERSION$1 = "2.4.8";
14794
+ var VERSION$1 = "2.4.9";
14663
14795
 
14664
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 };
14665
14797
  //# sourceMappingURL=bruce-cesium.es5.js.map