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.
@@ -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, SceneMode, Primitive, Cesium3DTileFeature, createOsmBuildings, Cesium3DTileStyle, Cesium3DTileColorBlendMode, HeadingPitchRange, KmlDataSource, OrthographicFrustum, JulianDate, EllipsoidTerrainProvider, CesiumInspector, defined, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, Model, PolygonPipeline, Matrix4, Matrix3, IonResource, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, EasingFunction, GeometryInstance, Ion, BoundingSphere } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -2586,11 +2586,29 @@ var EntityRenderEngine;
2586
2586
  });
2587
2587
  cEntity._siblingGraphics = [];
2588
2588
  if (width > 0 && cLineColor) {
2589
- var borderPosses = posses;
2589
+ var borderHeight = undefined;
2590
+ if (heightRef != HeightReference.CLAMP_TO_GROUND) {
2591
+ if (flattenPoints) {
2592
+ borderHeight = 0;
2593
+ }
2594
+ // Set height to smallest height value from points.
2595
+ else {
2596
+ for (var i = 0; i < points.length; i++) {
2597
+ var point = points[i];
2598
+ if (!borderHeight || point.altitude < borderHeight) {
2599
+ borderHeight = point.altitude;
2600
+ }
2601
+ }
2602
+ }
2603
+ }
2604
+ var borderPosses = [];
2590
2605
  if (flattenPoints) {
2591
2606
  borderPosses = points.map(function (x) { return Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(0)); });
2592
2607
  Cartes.CloseRing3(borderPosses);
2593
2608
  }
2609
+ else {
2610
+ borderPosses = posses.map(function (x) { return x.clone ? x.clone() : __assign({}, x); });
2611
+ }
2594
2612
  var cEntityBorder = new Entity({
2595
2613
  // polyline: new Cesium.PolylineGraphics({
2596
2614
  // positions: borderPosses,
@@ -2606,11 +2624,12 @@ var EntityRenderEngine;
2606
2624
  positions: borderPosses,
2607
2625
  material: cLineColor,
2608
2626
  heightReference: heightRef,
2627
+ height: borderHeight,
2609
2628
  width: width,
2610
2629
  fill: true,
2611
2630
  zIndex: zIndex + 1,
2612
2631
  cornerType: CornerType.MITERED,
2613
- classificationType: ClassificationType.TERRAIN,
2632
+ classificationType: ClassificationType.BOTH,
2614
2633
  distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance, width),
2615
2634
  shadows: ShadowMode.ENABLED
2616
2635
  },
@@ -2637,11 +2656,12 @@ var EntityRenderEngine;
2637
2656
  positions: borderPosses,
2638
2657
  material: cLineColor,
2639
2658
  heightReference: heightRef,
2659
+ height: borderHeight,
2640
2660
  width: width,
2641
2661
  fill: true,
2642
2662
  zIndex: zIndex + 1,
2643
2663
  cornerType: CornerType.MITERED,
2644
- classificationType: ClassificationType.TERRAIN,
2664
+ classificationType: ClassificationType.BOTH,
2645
2665
  distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance, width),
2646
2666
  shadows: ShadowMode.ENABLED,
2647
2667
  },
@@ -9661,6 +9681,26 @@ var MenuItemCreator;
9661
9681
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
9662
9682
  })(MenuItemCreator || (MenuItemCreator = {}));
9663
9683
 
9684
+ // Used to track if a current in-progress render is the latest.
9685
+ // If we're midway through an async function that is rendering 10 imageries and this changes, then we stop the function.
9686
+ var ITERATION_KEY = "nextspace-tile-render-engine-iteration";
9687
+ function newIteration(viewer, tile) {
9688
+ // Create key specific to the kind of tile we're rendering.
9689
+ var key = ITERATION_KEY + tile;
9690
+ // Generate a new iteration ID, include the tile type in it so we can identify it easier.
9691
+ var value = ObjectUtils.UId() + tile;
9692
+ viewer[key] = value;
9693
+ return value;
9694
+ }
9695
+ /**
9696
+ * Checks if a given iteration is still the active one for a given viewer.
9697
+ * @param viewer
9698
+ * @param iteration
9699
+ */
9700
+ function assertIteration(viewer, iteration) {
9701
+ var suffix = iteration.includes("imagery") ? "imagery" : "terrain";
9702
+ return viewer[ITERATION_KEY + suffix] === iteration;
9703
+ }
9664
9704
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
9665
9705
  var DEFAULT_MAPBOX_KEY = "pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA";
9666
9706
  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 +10240,14 @@ var TileRenderEngine;
10200
10240
  function RenderView(params) {
10201
10241
  var _a;
10202
10242
  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;
10243
+ 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
10244
  return __generator(this, function (_b) {
10205
10245
  switch (_b.label) {
10206
10246
  case 0:
10207
10247
  if (!params.apiGetter) {
10208
10248
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10209
10249
  }
10250
+ iteration = newIteration(params.viewer, "imagery");
10210
10251
  api = params.apiGetter.getApi();
10211
10252
  return [4 /*yield*/, ProjectView.Get({
10212
10253
  api: api,
@@ -10214,6 +10255,9 @@ var TileRenderEngine;
10214
10255
  })];
10215
10256
  case 1:
10216
10257
  view = (_b.sent()).view;
10258
+ if (!assertIteration(params.viewer, iteration)) {
10259
+ return [2 /*return*/];
10260
+ }
10217
10261
  bookmark = null;
10218
10262
  if (!params.bookmarkId) return [3 /*break*/, 3];
10219
10263
  return [4 /*yield*/, ProjectViewBookmark.Get({
@@ -10223,6 +10267,9 @@ var TileRenderEngine;
10223
10267
  })];
10224
10268
  case 2:
10225
10269
  bookmark = (_b.sent()).bookmark;
10270
+ if (!assertIteration(params.viewer, iteration)) {
10271
+ return [2 /*return*/];
10272
+ }
10226
10273
  _b.label = 3;
10227
10274
  case 3:
10228
10275
  vSettings = view.Settings;
@@ -10246,6 +10293,9 @@ var TileRenderEngine;
10246
10293
  })];
10247
10294
  case 4:
10248
10295
  _b.sent();
10296
+ if (!assertIteration(params.viewer, iteration)) {
10297
+ return [2 /*return*/];
10298
+ }
10249
10299
  for (i = 0; i < dataNames.length; i++) {
10250
10300
  name_1 = dataNames[i];
10251
10301
  for (j = 0; j < tiles.length; j++) {
@@ -10292,6 +10342,9 @@ var TileRenderEngine;
10292
10342
  if (layer) {
10293
10343
  layers.push(layer);
10294
10344
  }
10345
+ if (!assertIteration(params.viewer, iteration)) {
10346
+ return [2 /*return*/];
10347
+ }
10295
10348
  _b.label = 7;
10296
10349
  case 7:
10297
10350
  i++;
@@ -10503,13 +10556,66 @@ var TileRenderEngine;
10503
10556
  Navigator.GetOrCreateLayer = GetOrCreateLayer;
10504
10557
  function Render(params) {
10505
10558
  return __awaiter(this, void 0, void 0, function () {
10506
- var i, enabled, curEnabled, toDisable, curEnabledArr, _loop_2, i, i, _loop_3, i;
10559
+ var tmpTiles, _loop_2, i, organize, iteration, curEnabled, toDisable, _loop_3, i, i, organized, i, enabled;
10507
10560
  return __generator(this, function (_a) {
10508
10561
  switch (_a.label) {
10509
10562
  case 0:
10510
10563
  if (!params.apiGetter) {
10511
10564
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10512
10565
  }
10566
+ tmpTiles = [];
10567
+ _loop_2 = function (i) {
10568
+ var tile = params.tiles[i];
10569
+ if (!tmpTiles.find(function (x) { return (x.accountId == tile.accountId) && (x.tilesetId == tile.tilesetId); })) {
10570
+ tmpTiles.push(tile);
10571
+ }
10572
+ };
10573
+ for (i = 0; i < params.tiles.length; i++) {
10574
+ _loop_2(i);
10575
+ }
10576
+ params.tiles = tmpTiles;
10577
+ organize = function () {
10578
+ var curEnabledArr = [];
10579
+ for (var i = 0; i < curEnabled.length; i++) {
10580
+ var layer = curEnabled.get(i);
10581
+ curEnabledArr.push(layer);
10582
+ }
10583
+ var _loop_4 = function (i) {
10584
+ var enabled = params.tiles[i];
10585
+ 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; });
10586
+ if (layer) {
10587
+ params.viewer.imageryLayers.raiseToTop(layer);
10588
+ layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
10589
+ layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
10590
+ layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
10591
+ layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
10592
+ layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
10593
+ layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
10594
+ }
10595
+ };
10596
+ for (var i = 0; i < params.tiles.length; i++) {
10597
+ _loop_4(i);
10598
+ }
10599
+ params.viewer.scene.requestRender();
10600
+ };
10601
+ iteration = newIteration(params.viewer, "imagery");
10602
+ curEnabled = params.viewer.imageryLayers;
10603
+ toDisable = [];
10604
+ _loop_3 = function (i) {
10605
+ var layer = curEnabled.get(i);
10606
+ var meta = layer === null || layer === void 0 ? void 0 : layer._bMeta;
10607
+ 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); });
10608
+ if (disable) {
10609
+ toDisable.push(layer);
10610
+ }
10611
+ };
10612
+ for (i = 0; i < curEnabled.length; i++) {
10613
+ _loop_3(i);
10614
+ }
10615
+ for (i = 0; i < toDisable.length; i++) {
10616
+ params.viewer.imageryLayers.remove(toDisable[i]);
10617
+ }
10618
+ organized = false;
10513
10619
  i = 0;
10514
10620
  _a.label = 1;
10515
10621
  case 1:
@@ -10525,48 +10631,21 @@ var TileRenderEngine;
10525
10631
  })];
10526
10632
  case 2:
10527
10633
  _a.sent();
10634
+ if (!assertIteration(params.viewer, iteration)) {
10635
+ return [2 /*return*/];
10636
+ }
10637
+ // Organize as we load in case there are lots of imageries.
10638
+ // We want to ensure what the user sees is as close to correct as we can get.
10639
+ organize();
10640
+ organized = true;
10528
10641
  _a.label = 3;
10529
10642
  case 3:
10530
10643
  i++;
10531
10644
  return [3 /*break*/, 1];
10532
10645
  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);
10646
+ if (!organized) {
10647
+ organize();
10549
10648
  }
10550
- for (i = 0; i < toDisable.length; i++) {
10551
- params.viewer.imageryLayers.remove(toDisable[i]);
10552
- }
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
10649
  return [2 /*return*/];
10571
10650
  }
10572
10651
  });
@@ -10623,13 +10702,14 @@ var TileRenderEngine;
10623
10702
  function RenderView(params) {
10624
10703
  var _a, _b;
10625
10704
  return __awaiter(this, void 0, void 0, function () {
10626
- var api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10705
+ var iteration, api, view, bookmark, vSettings, bSettings, terrainTiles, terrainTile, terrainTileName, i, tile;
10627
10706
  return __generator(this, function (_c) {
10628
10707
  switch (_c.label) {
10629
10708
  case 0:
10630
10709
  if (!params.apiGetter) {
10631
10710
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10632
10711
  }
10712
+ iteration = newIteration(params.viewer, "terrain");
10633
10713
  api = params.apiGetter.getApi();
10634
10714
  return [4 /*yield*/, ProjectView.Get({
10635
10715
  api: api,
@@ -10638,6 +10718,9 @@ var TileRenderEngine;
10638
10718
  case 1:
10639
10719
  view = (_c.sent()).view;
10640
10720
  bookmark = null;
10721
+ if (!assertIteration(params.viewer, iteration)) {
10722
+ return [2 /*return*/];
10723
+ }
10641
10724
  if (!params.bookmarkId) return [3 /*break*/, 3];
10642
10725
  return [4 /*yield*/, ProjectViewBookmark.Get({
10643
10726
  api: api,
@@ -10646,6 +10729,9 @@ var TileRenderEngine;
10646
10729
  })];
10647
10730
  case 2:
10648
10731
  bookmark = (_c.sent()).bookmark;
10732
+ if (!assertIteration(params.viewer, iteration)) {
10733
+ return [2 /*return*/];
10734
+ }
10649
10735
  _c.label = 3;
10650
10736
  case 3:
10651
10737
  vSettings = view.Settings;
@@ -10666,6 +10752,9 @@ var TileRenderEngine;
10666
10752
  })];
10667
10753
  case 4:
10668
10754
  _c.sent();
10755
+ if (!assertIteration(params.viewer, iteration)) {
10756
+ return [2 /*return*/];
10757
+ }
10669
10758
  for (i = 0; i < terrainTiles.length; i++) {
10670
10759
  tile = terrainTiles[i];
10671
10760
  if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {
@@ -10680,6 +10769,9 @@ var TileRenderEngine;
10680
10769
  })];
10681
10770
  case 5:
10682
10771
  _c.sent();
10772
+ if (!assertIteration(params.viewer, iteration)) {
10773
+ return [2 /*return*/];
10774
+ }
10683
10775
  _c.label = 6;
10684
10776
  case 6:
10685
10777
  params.viewer.scene.requestRender();
@@ -10695,13 +10787,14 @@ var TileRenderEngine;
10695
10787
  function Render(params) {
10696
10788
  var _a;
10697
10789
  return __awaiter(this, void 0, void 0, function () {
10698
- var enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10790
+ var iteration, enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
10699
10791
  return __generator(this, function (_b) {
10700
10792
  switch (_b.label) {
10701
10793
  case 0:
10702
10794
  if (!params.apiGetter) {
10703
10795
  params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();
10704
10796
  }
10797
+ iteration = newIteration(params.viewer, "terrain");
10705
10798
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
10706
10799
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
10707
10800
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
@@ -10715,8 +10808,9 @@ var TileRenderEngine;
10715
10808
  provider_1 instanceof EllipsoidTerrainProvider) {
10716
10809
  leave = true;
10717
10810
  }
10718
- // TODO: Check for cesium world terrain if we can easily determine that it's enabled.
10811
+ // TODO: Also check for "cesium world terrain" if we can easily determine that it's enabled.
10719
10812
  if (leave) {
10813
+ // Mark it so we don't have to do this magic logic again.
10720
10814
  provider_1._bMeta = {
10721
10815
  tilesetId: params.tile.tilesetId,
10722
10816
  accountId: params.tile.accountId
@@ -10742,12 +10836,18 @@ var TileRenderEngine;
10742
10836
  // When loading stuff in the same account as the default it's likely already loaded,
10743
10837
  // but if we just made an API instance for some external account then it won't be loaded yet.
10744
10838
  _b.sent();
10839
+ if (!assertIteration(params.viewer, iteration)) {
10840
+ return [2 /*return*/];
10841
+ }
10745
10842
  return [4 /*yield*/, Tileset.Get({
10746
10843
  api: api,
10747
10844
  tilesetId: params.tile.tilesetId
10748
10845
  })];
10749
10846
  case 4:
10750
10847
  tileset = (_b.sent()).tileset;
10848
+ if (!assertIteration(params.viewer, iteration)) {
10849
+ return [2 /*return*/];
10850
+ }
10751
10851
  url = void 0;
10752
10852
  vertexes = true;
10753
10853
  if (tileset.type === Tileset.EType.Terrain) {
@@ -10873,6 +10973,14 @@ var ViewUtils;
10873
10973
  }
10874
10974
  };
10875
10975
  }
10976
+ else if (provider instanceof EllipsoidTerrainProvider) {
10977
+ return {
10978
+ terrain: {
10979
+ tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain,
10980
+ accountId: null
10981
+ }
10982
+ };
10983
+ }
10876
10984
  return null;
10877
10985
  }
10878
10986
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
@@ -11288,13 +11396,34 @@ var WidgetBookmarks = /** @class */ (function (_super) {
11288
11396
  var MIN_SHADOW_SIZE = 2048;
11289
11397
  var MAX_SHADOW_SIZE = 32768;
11290
11398
  var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
11399
+ // Used to track if a current in-progress render is the latest.
11400
+ // If we're midway through an async function that is rendering a bookmark and this changes, then we stop the function.
11401
+ var ITERATION_KEY$1 = "nextspace-view-render-engine-iteration";
11402
+ /**
11403
+ * Creates a new iteration state.
11404
+ * This will stop any existing renders from processing to their end.
11405
+ * @param viewer
11406
+ * @returns
11407
+ */
11408
+ function newIteration$1(viewer) {
11409
+ viewer[ITERATION_KEY$1] = ObjectUtils.UId();
11410
+ return viewer[ITERATION_KEY$1];
11411
+ }
11412
+ /**
11413
+ * Checks if a given iteration is still the active one for a given viewer.
11414
+ * @param viewer
11415
+ * @param iteration
11416
+ */
11417
+ function assertIteration$1(viewer, iteration) {
11418
+ return viewer[ITERATION_KEY$1] == iteration;
11419
+ }
11291
11420
  /**
11292
11421
  * Renders DATA_VERSION = 1 navigator.
11293
11422
  * @param params
11294
11423
  * @param bookmark
11295
11424
  * @param view
11296
11425
  */
11297
- function renderLegacyNavigator(params, bookmark, view) {
11426
+ function renderLegacyNavigator(iteration, params, bookmark, view) {
11298
11427
  var _a, _b, _c, _d, _e;
11299
11428
  return __awaiter(this, void 0, void 0, function () {
11300
11429
  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 +11443,17 @@ function renderLegacyNavigator(params, bookmark, view) {
11314
11443
  })];
11315
11444
  case 1:
11316
11445
  _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();
11446
+ if (!assertIteration$1(params.viewer, iteration)) {
11447
+ return [2 /*return*/];
11448
+ }
11449
+ // We don't wait for imageries to load, this does not affect rendering other things.
11450
+ TileRenderEngine.Map.LegacyNavigator.RenderView({
11451
+ apiGetter: params.apiGetter,
11452
+ bookmarkId: params.bookmarkId,
11453
+ viewer: manager.Viewer,
11454
+ viewId: params.viewId,
11455
+ ignoreIds: []
11456
+ });
11326
11457
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
11327
11458
  if (baseColor == null) {
11328
11459
  // TODO: Need global default.
@@ -11396,7 +11527,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11396
11527
  });
11397
11528
  }
11398
11529
  }
11399
- if (!bookmark) return [3 /*break*/, 4];
11530
+ if (!bookmark) return [3 /*break*/, 3];
11400
11531
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11401
11532
  apiGetter: params.apiGetter,
11402
11533
  getters: params.getters,
@@ -11404,11 +11535,14 @@ function renderLegacyNavigator(params, bookmark, view) {
11404
11535
  view: view,
11405
11536
  bookmark: bookmark
11406
11537
  })];
11407
- case 3:
11538
+ case 2:
11408
11539
  _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];
11540
+ if (!assertIteration$1(params.viewer, iteration)) {
11541
+ return [2 /*return*/];
11542
+ }
11543
+ _f.label = 3;
11544
+ case 3:
11545
+ if (!((_e = bSettings === null || bSettings === void 0 ? void 0 : bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 5];
11412
11546
  menuItem = {
11413
11547
  id: RELATION_MENU_ITEM_ID,
11414
11548
  Caption: "Entity relations",
@@ -11422,10 +11556,13 @@ function renderLegacyNavigator(params, bookmark, view) {
11422
11556
  getters: params.getters,
11423
11557
  item: menuItem
11424
11558
  })];
11425
- case 5:
11559
+ case 4:
11426
11560
  _f.sent();
11427
- _f.label = 6;
11428
- case 6: return [2 /*return*/];
11561
+ if (!assertIteration$1(params.viewer, iteration)) {
11562
+ return [2 /*return*/];
11563
+ }
11564
+ _f.label = 5;
11565
+ case 5: return [2 /*return*/];
11429
11566
  }
11430
11567
  });
11431
11568
  });
@@ -11436,7 +11573,7 @@ function renderLegacyNavigator(params, bookmark, view) {
11436
11573
  * @param bookmark
11437
11574
  * @param view
11438
11575
  */
11439
- function renderNavigator(params, bookmark, view) {
11576
+ function renderNavigator(iteration, params, bookmark, view) {
11440
11577
  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
11578
  return __awaiter(this, void 0, void 0, function () {
11442
11579
  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 +11639,9 @@ function renderNavigator(params, bookmark, view) {
11502
11639
  })];
11503
11640
  case 1:
11504
11641
  _6.sent();
11642
+ if (!assertIteration$1(params.viewer, iteration)) {
11643
+ return [2 /*return*/];
11644
+ }
11505
11645
  _6.label = 2;
11506
11646
  case 2:
11507
11647
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
@@ -11700,13 +11840,12 @@ function renderNavigator(params, bookmark, view) {
11700
11840
  }
11701
11841
  ];
11702
11842
  }
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();
11843
+ // We don't wait for imageries to load, this does not affect rendering other things.
11844
+ TileRenderEngine.Map.Navigator.Render({
11845
+ apiGetter: params.apiGetter,
11846
+ tiles: imagery,
11847
+ viewer: params.manager.Viewer,
11848
+ });
11710
11849
  renderedRelationEntityIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.renderedEntityRelations;
11711
11850
  if (!renderedRelationEntityIds) {
11712
11851
  renderedRelationEntityIds = [];
@@ -11722,18 +11861,21 @@ function renderNavigator(params, bookmark, view) {
11722
11861
  });
11723
11862
  }
11724
11863
  }
11725
- if (!bookmark) return [3 /*break*/, 5];
11864
+ if (!bookmark) return [3 /*break*/, 4];
11726
11865
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
11727
11866
  getters: params.getters,
11728
11867
  manager: params.manager,
11729
11868
  view: view,
11730
11869
  bookmark: bookmark
11731
11870
  })];
11732
- case 4:
11871
+ case 3:
11733
11872
  _6.sent();
11734
- _6.label = 5;
11735
- case 5:
11736
- if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 7];
11873
+ if (!assertIteration$1(params.viewer, iteration)) {
11874
+ return [2 /*return*/];
11875
+ }
11876
+ _6.label = 4;
11877
+ case 4:
11878
+ if (!(renderedRelationEntityIds.length > 0)) return [3 /*break*/, 6];
11737
11879
  menuItem = {
11738
11880
  id: RELATION_MENU_ITEM_ID,
11739
11881
  Caption: "Entity relations",
@@ -11746,10 +11888,13 @@ function renderNavigator(params, bookmark, view) {
11746
11888
  getters: params.getters,
11747
11889
  item: menuItem
11748
11890
  })];
11749
- case 6:
11891
+ case 5:
11750
11892
  _6.sent();
11751
- _6.label = 7;
11752
- case 7:
11893
+ if (!assertIteration$1(params.viewer, iteration)) {
11894
+ return [2 /*return*/];
11895
+ }
11896
+ _6.label = 6;
11897
+ case 6:
11753
11898
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
11754
11899
  if (gOcclusion == null) {
11755
11900
  gOcclusion = (_5 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _5 === void 0 ? void 0 : _5.groundOcclusion;
@@ -11769,7 +11914,7 @@ var ViewRenderEngine;
11769
11914
  function Render(params) {
11770
11915
  var _a;
11771
11916
  return __awaiter(this, void 0, void 0, function () {
11772
- var api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11917
+ var iteration, api, view, _b, bookmark, bookmarkId, _c, version, bWidget;
11773
11918
  return __generator(this, function (_d) {
11774
11919
  switch (_d.label) {
11775
11920
  case 0:
@@ -11782,6 +11927,7 @@ var ViewRenderEngine;
11782
11927
  else if (!params.viewer && params.manager) {
11783
11928
  params.viewer = params.manager.Viewer;
11784
11929
  }
11930
+ iteration = newIteration$1(params.viewer);
11785
11931
  if (!params.getters) {
11786
11932
  params.getters = ENVIRONMENT.Api();
11787
11933
  }
@@ -11826,17 +11972,23 @@ var ViewRenderEngine;
11826
11972
  bookmark = _c;
11827
11973
  _d.label = 7;
11828
11974
  case 7:
11975
+ if (!assertIteration$1(params.viewer, iteration)) {
11976
+ return [2 /*return*/];
11977
+ }
11829
11978
  version = view.DataVersion;
11830
11979
  if (!(version == 1)) return [3 /*break*/, 9];
11831
- return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
11980
+ return [4 /*yield*/, renderLegacyNavigator(iteration, params, bookmark, view)];
11832
11981
  case 8:
11833
11982
  _d.sent();
11834
11983
  return [3 /*break*/, 11];
11835
- case 9: return [4 /*yield*/, renderNavigator(params, bookmark, view)];
11984
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
11836
11985
  case 10:
11837
11986
  _d.sent();
11838
11987
  _d.label = 11;
11839
11988
  case 11:
11989
+ if (!assertIteration$1(params.viewer, iteration)) {
11990
+ return [2 /*return*/];
11991
+ }
11840
11992
  bWidget = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a[VIEWER_BOOKMARKS_WIDGET_KEY];
11841
11993
  if (bWidget) {
11842
11994
  bWidget.ViewId = params.viewId ? params.viewId : view === null || view === void 0 ? void 0 : view.ID;
@@ -14659,7 +14811,7 @@ var ViewerUtils;
14659
14811
  ViewerUtils.CreateWidgets = CreateWidgets;
14660
14812
  })(ViewerUtils || (ViewerUtils = {}));
14661
14813
 
14662
- var VERSION$1 = "2.4.8";
14814
+ var VERSION$1 = "2.5.0";
14663
14815
 
14664
14816
  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
14817
  //# sourceMappingURL=bruce-cesium.es5.js.map