bruce-cesium 3.2.1 → 3.2.3

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
- import { Cartes, ProjectViewTile, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, DelayQueue, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, BruceEvent, EntityCoords, Api, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, AbstractApi, ProjectViewBookmark, EntityAttachment, EntityAttachmentType, EntityAttribute, ProjectView, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
1
+ import { Cartes, ProjectViewTile, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, DelayQueue, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, BruceEvent, EntityCoords, Api, EntitySource, MenuItem, EntityRelation, ProgramKey, ENVIRONMENT, AbstractApi, ProjectViewBookmark, EntityAttachment, EntityAttachmentType, EntityAttribute, ProjectView, ProjectViewLegacyTile, Camera } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, JulianDate, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, Entity, Primitive, Cesium3DTileFeature, DistanceDisplayCondition, NearFarScalar, Model, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, Cesium3DTileColorBlendMode, HeadingPitchRange, Cesium3DTileStyle, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, EllipsoidTerrainProvider, CesiumInspector, defined, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, Matrix4, Matrix3, IonResource, Ion, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, BoundingSphere, GeometryInstance, Intersect } from 'cesium';
3
+ import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, Entity, Primitive, Cesium3DTileFeature, JulianDate, SceneMode, DistanceDisplayCondition, NearFarScalar, Model, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, Ion, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, EasingFunction, SceneTransforms, EllipsoidTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, PolygonPipeline, Cesium3DTileset, Matrix4, Matrix3, IonResource, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, BoundingSphere, GeometryInstance, CesiumInspector, Intersect } from 'cesium';
4
4
 
5
5
  /*! *****************************************************************************
6
6
  Copyright (c) Microsoft Corporation. All rights reserved.
@@ -3006,24 +3006,27 @@ function getModelEntity(url, scale) {
3006
3006
  return __awaiter(this, void 0, void 0, function () {
3007
3007
  var CESIUM;
3008
3008
  return __generator(this, function (_a) {
3009
- CESIUM = Cesium;
3010
- // Newer versions of Cesium have a fromGltfAsync method.
3011
- if (CESIUM.Model.hasOwnProperty("fromGltfAsync")) {
3012
- return [2 /*return*/, CESIUM.Model.fromGltfAsync({
3013
- url: url,
3014
- asynchronous: true,
3015
- scale: scale
3016
- })];
3017
- }
3018
- // Older versions of Cesium have a fromGltf method.
3019
- else if (Model.hasOwnProperty("fromGltf")) {
3020
- return [2 /*return*/, CESIUM.Model.fromGltf({
3021
- url: url,
3022
- asynchronous: true,
3023
- scale: scale
3024
- })];
3025
- }
3026
- return [2 /*return*/, null];
3009
+ switch (_a.label) {
3010
+ case 0:
3011
+ CESIUM = Cesium;
3012
+ if (!CESIUM.Model.hasOwnProperty("fromGltfAsync")) return [3 /*break*/, 2];
3013
+ return [4 /*yield*/, CESIUM.Model.fromGltfAsync({
3014
+ url: url,
3015
+ asynchronous: true,
3016
+ scale: scale
3017
+ })];
3018
+ case 1: return [2 /*return*/, _a.sent()];
3019
+ case 2:
3020
+ if (Model.hasOwnProperty("fromGltf")) {
3021
+ return [2 /*return*/, CESIUM.Model.fromGltf({
3022
+ url: url,
3023
+ asynchronous: true,
3024
+ scale: scale
3025
+ })];
3026
+ }
3027
+ _a.label = 3;
3028
+ case 3: return [2 /*return*/, null];
3029
+ }
3027
3030
  });
3028
3031
  });
3029
3032
  }
@@ -4082,7 +4085,7 @@ var EntityRenderEngine;
4082
4085
  var heightProm = _fileRadiusCache.Get(fileRadiusKey);
4083
4086
  if (!heightProm) {
4084
4087
  heightProm = new Promise(function (res) { return __awaiter(_this, void 0, void 0, function () {
4085
- var modelPrim_1, e_6;
4088
+ var modelPrim_1, onReady_1, readyEventRemoval_1, e_6;
4086
4089
  return __generator(this, function (_a) {
4087
4090
  switch (_a.label) {
4088
4091
  case 0:
@@ -4090,7 +4093,9 @@ var EntityRenderEngine;
4090
4093
  return [4 /*yield*/, getModelEntity(params.lodUrl, scale * styleScale)];
4091
4094
  case 1:
4092
4095
  modelPrim_1 = _a.sent();
4093
- modelPrim_1.readyPromise.then(function (loaded) {
4096
+ onReady_1 = function () {
4097
+ readyEventRemoval_1 === null || readyEventRemoval_1 === void 0 ? void 0 : readyEventRemoval_1();
4098
+ readyEventRemoval_1 = null;
4094
4099
  var kill = function () {
4095
4100
  if (params.viewer && !params.viewer.isDestroyed() && params.viewer.scene.primitives.contains(modelPrim_1)) {
4096
4101
  params.viewer.scene.primitives.remove(modelPrim_1);
@@ -4099,13 +4104,13 @@ var EntityRenderEngine;
4099
4104
  modelPrim_1.destroy();
4100
4105
  }
4101
4106
  };
4102
- if (!cEntity || !(loaded === null || loaded === void 0 ? void 0 : loaded.boundingSphere)) {
4107
+ if (!cEntity || !(modelPrim_1 === null || modelPrim_1 === void 0 ? void 0 : modelPrim_1.boundingSphere)) {
4103
4108
  kill();
4104
4109
  res(null);
4105
4110
  return;
4106
4111
  }
4107
- var radius = loaded.boundingSphere.radius;
4108
- var centerOffset = loaded.boundingSphere.center;
4112
+ var radius = modelPrim_1.boundingSphere.radius;
4113
+ var centerOffset = modelPrim_1.boundingSphere.center;
4109
4114
  if (centerOffset) {
4110
4115
  // Add the center offset to the radius because I am not good at math.
4111
4116
  var magnitude = Cartesian3.magnitude(centerOffset);
@@ -4118,10 +4123,21 @@ var EntityRenderEngine;
4118
4123
  }
4119
4124
  kill();
4120
4125
  res(radius);
4121
- }).catch(function (e) {
4122
- console.error(e);
4123
- res(null);
4124
- });
4126
+ };
4127
+ readyEventRemoval_1 = null;
4128
+ // Newer Cesium versions have readyEvent. They don't use readyPromise.
4129
+ if (modelPrim_1["readyEvent"]) {
4130
+ modelPrim_1["readyEvent"].addEventListener(onReady_1);
4131
+ }
4132
+ // Older Cesium versions don't have readyEvent, they use readyPromise.
4133
+ else if (modelPrim_1["readyPromise"]) {
4134
+ modelPrim_1["readyPromise"].then(function () {
4135
+ onReady_1();
4136
+ }).catch(function (e) {
4137
+ console.error(e);
4138
+ res(null);
4139
+ });
4140
+ }
4125
4141
  params.viewer.scene.primitives.add(modelPrim_1);
4126
4142
  return [3 /*break*/, 3];
4127
4143
  case 2:
@@ -10593,18 +10609,24 @@ var TilesetOsmRenderManager;
10593
10609
  this.sourceId = (_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId;
10594
10610
  this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
10595
10611
  (function () { return __awaiter(_this, void 0, void 0, function () {
10596
- var CESIUM, cTileset;
10612
+ var validToken, CESIUM, cTileset;
10597
10613
  var _this = this;
10598
10614
  return __generator(this, function (_a) {
10599
10615
  switch (_a.label) {
10600
- case 0:
10616
+ case 0: return [4 /*yield*/, ViewerUtils.AssertIonToken(Ion.defaultAccessToken)];
10617
+ case 1:
10618
+ validToken = _a.sent();
10619
+ if (!validToken) {
10620
+ console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
10621
+ return [2 /*return*/];
10622
+ }
10601
10623
  CESIUM = Cesium;
10602
- if (!CESIUM["createOsmBuildingsAsync"]) return [3 /*break*/, 2];
10624
+ if (!CESIUM["createOsmBuildingsAsync"]) return [3 /*break*/, 3];
10603
10625
  return [4 /*yield*/, CESIUM.createOsmBuildingsAsync({})];
10604
- case 1:
10605
- cTileset = _a.sent();
10606
- return [3 /*break*/, 3];
10607
10626
  case 2:
10627
+ cTileset = _a.sent();
10628
+ return [3 /*break*/, 4];
10629
+ case 3:
10608
10630
  if (CESIUM["createOsmBuildings"]) {
10609
10631
  cTileset = CESIUM.createOsmBuildings();
10610
10632
  }
@@ -10612,8 +10634,8 @@ var TilesetOsmRenderManager;
10612
10634
  console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
10613
10635
  return [2 /*return*/];
10614
10636
  }
10615
- _a.label = 3;
10616
- case 3:
10637
+ _a.label = 4;
10638
+ case 4:
10617
10639
  if (this.disposed) {
10618
10640
  if (this.cTileset && !this.cTileset.isDestroyed()) {
10619
10641
  this.cTileset.destroy();
@@ -12162,9 +12184,10 @@ var TilesetGooglePhotosRenderManager;
12162
12184
  function Manager(params) {
12163
12185
  this.disposed = false;
12164
12186
  this.cTileset = null;
12165
- var viewer = params.viewer, item = params.item;
12187
+ var viewer = params.viewer, item = params.item, getters = params.getters;
12166
12188
  this.viewer = viewer;
12167
12189
  this.item = item;
12190
+ this.getters = getters;
12168
12191
  }
12169
12192
  Object.defineProperty(Manager.prototype, "Disposed", {
12170
12193
  get: function () {
@@ -12201,17 +12224,43 @@ var TilesetGooglePhotosRenderManager;
12201
12224
  Manager.prototype.Init = function () {
12202
12225
  var _this = this;
12203
12226
  (function () { return __awaiter(_this, void 0, void 0, function () {
12204
- var _a, colorCss;
12205
- var _b, _c;
12206
- return __generator(this, function (_d) {
12207
- switch (_d.label) {
12227
+ var CESIUM, programKey, e_1, _a, colorCss;
12228
+ var _b;
12229
+ return __generator(this, function (_c) {
12230
+ switch (_c.label) {
12208
12231
  case 0:
12209
- // Using as any to be OK with older versions.
12210
- _a = this;
12211
- return [4 /*yield*/, ((_c = (_b = Cesium).createGooglePhotorealistic3DTileset) === null || _c === void 0 ? void 0 : _c.call(_b))];
12232
+ CESIUM = Cesium;
12233
+ if (!CESIUM.createGooglePhotorealistic3DTileset) {
12234
+ console.warn("Cesium version does not support 'createGooglePhotorealistic3DTileset' so Google Photos tileset will not be rendered.");
12235
+ return [2 /*return*/];
12236
+ }
12237
+ if (!!CESIUM.GoogleMaps.defaultApiKey) return [3 /*break*/, 4];
12238
+ _c.label = 1;
12212
12239
  case 1:
12213
- // Using as any to be OK with older versions.
12214
- _a.cTileset = _d.sent();
12240
+ _c.trys.push([1, 3, , 4]);
12241
+ return [4 /*yield*/, ProgramKey.Get({
12242
+ programId: ProgramKey.EProgramId.Google,
12243
+ api: this.getters.GetBruceApi()
12244
+ })];
12245
+ case 2:
12246
+ programKey = (_c.sent()).programKey;
12247
+ if (programKey === null || programKey === void 0 ? void 0 : programKey.Key) {
12248
+ CESIUM.GoogleMaps.defaultApiKey = programKey.Key;
12249
+ }
12250
+ return [3 /*break*/, 4];
12251
+ case 3:
12252
+ e_1 = _c.sent();
12253
+ console.error(e_1);
12254
+ return [3 /*break*/, 4];
12255
+ case 4:
12256
+ if (this.disposed) {
12257
+ this.doDispose();
12258
+ return [2 /*return*/];
12259
+ }
12260
+ _a = this;
12261
+ return [4 /*yield*/, ((_b = CESIUM.createGooglePhotorealistic3DTileset) === null || _b === void 0 ? void 0 : _b.call(CESIUM))];
12262
+ case 5:
12263
+ _a.cTileset = _c.sent();
12215
12264
  if (this.disposed) {
12216
12265
  this.doDispose();
12217
12266
  return [2 /*return*/];
@@ -12827,6 +12876,7 @@ var MenuItemManager;
12827
12876
  break;
12828
12877
  case MenuItem.EType.GooglePhotoTileset:
12829
12878
  rItem.renderManager = new TilesetGooglePhotosRenderManager.Manager({
12879
+ getters: params.getters,
12830
12880
  item: params.item,
12831
12881
  viewer: this.viewer,
12832
12882
  });
@@ -16149,6 +16199,8 @@ function backgroundRendering(viewer) {
16149
16199
  }
16150
16200
  }, 1500);
16151
16201
  }
16202
+ // Cache of Cesium Token -> Validity.
16203
+ var _cToken_check_cache = {};
16152
16204
  var ViewerUtils;
16153
16205
  (function (ViewerUtils) {
16154
16206
  /**
@@ -16302,6 +16354,47 @@ var ViewerUtils;
16302
16354
  return widgets;
16303
16355
  }
16304
16356
  ViewerUtils.CreateWidgets = CreateWidgets;
16357
+ /**
16358
+ * Returns if the given token is valid or not.
16359
+ * This will perform a test request to Cesium API.
16360
+ * @param token
16361
+ * @returns
16362
+ */
16363
+ function AssertIonToken(token) {
16364
+ return __awaiter(this, void 0, void 0, function () {
16365
+ var url, response, json, e_1;
16366
+ return __generator(this, function (_a) {
16367
+ switch (_a.label) {
16368
+ case 0:
16369
+ if (!token) {
16370
+ return [2 /*return*/, false];
16371
+ }
16372
+ if (_cToken_check_cache[token] != null) {
16373
+ return [2 /*return*/, _cToken_check_cache[token]];
16374
+ }
16375
+ _a.label = 1;
16376
+ case 1:
16377
+ _a.trys.push([1, 4, , 5]);
16378
+ url = "https://api.cesium.com/v1/assets/1/endpoint?access_token=".concat(token);
16379
+ return [4 /*yield*/, fetch(url)];
16380
+ case 2:
16381
+ response = _a.sent();
16382
+ return [4 /*yield*/, response.json()];
16383
+ case 3:
16384
+ json = _a.sent();
16385
+ _cToken_check_cache[token] = Boolean(json === null || json === void 0 ? void 0 : json.url);
16386
+ return [2 /*return*/, _cToken_check_cache[token]];
16387
+ case 4:
16388
+ e_1 = _a.sent();
16389
+ console.error(e_1);
16390
+ _cToken_check_cache[token] = false;
16391
+ return [3 /*break*/, 5];
16392
+ case 5: return [2 /*return*/];
16393
+ }
16394
+ });
16395
+ });
16396
+ }
16397
+ ViewerUtils.AssertIonToken = AssertIonToken;
16305
16398
  })(ViewerUtils || (ViewerUtils = {}));
16306
16399
 
16307
16400
  /**
@@ -17564,7 +17657,7 @@ var TileRenderEngine;
17564
17657
  (function (Navigator) {
17565
17658
  function GetOrCreateLayer(params) {
17566
17659
  return __awaiter(this, void 0, void 0, function () {
17567
- var viewer, apiGetter, meta, CESIUM, enabled, i, layer, layerMeta, defaultImg, provider, api, tileset, boundaries, settings, minLat, maxLat, minLon, maxLon, minLevel, maxLevel, hasLevels, url, settings_1, _a, cesiumIonKey, _b, mapboxKey, _c, layer;
17660
+ var viewer, apiGetter, meta, CESIUM, enabled, i, layer, layerMeta, defaultImg, provider, NEEDS_CESIUM_TOKEN, shouldCreate, api, tileset, boundaries, settings, minLat, maxLat, minLon, maxLon, minLevel, maxLevel, hasLevels, url, settings_1, _a, cesiumIonKey, _b, mapboxKey, _c, layer;
17568
17661
  return __generator(this, function (_d) {
17569
17662
  switch (_d.label) {
17570
17663
  case 0:
@@ -17583,18 +17676,32 @@ var TileRenderEngine;
17583
17676
  }
17584
17677
  defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(function (x) { return x.id === meta.tilesetId; });
17585
17678
  provider = null;
17586
- if (!defaultImg) return [3 /*break*/, 2];
17587
- return [4 /*yield*/, renderDefaultMapTile(apiGetter, defaultImg.id)];
17679
+ if (!defaultImg) return [3 /*break*/, 5];
17680
+ NEEDS_CESIUM_TOKEN = [
17681
+ ProjectViewTile.EDefaultImagery.BingMapsAerial,
17682
+ ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels,
17683
+ ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels,
17684
+ ];
17685
+ shouldCreate = true;
17686
+ if (!NEEDS_CESIUM_TOKEN.includes(defaultImg.id)) return [3 /*break*/, 2];
17687
+ return [4 /*yield*/, ViewerUtils.AssertIonToken(Ion.defaultAccessToken)];
17588
17688
  case 1:
17589
- provider = _d.sent();
17590
- return [3 /*break*/, 28];
17689
+ shouldCreate = _d.sent();
17690
+ _d.label = 2;
17591
17691
  case 2:
17692
+ if (!shouldCreate) return [3 /*break*/, 4];
17693
+ return [4 /*yield*/, renderDefaultMapTile(apiGetter, defaultImg.id)];
17694
+ case 3:
17695
+ provider = _d.sent();
17696
+ _d.label = 4;
17697
+ case 4: return [3 /*break*/, 31];
17698
+ case 5:
17592
17699
  api = apiGetter.getApi(meta.accountId);
17593
17700
  // Ensure regional url is loaded.
17594
17701
  // When loading stuff in the same account as the default it's likely already loaded,
17595
17702
  // but if we just made an API instance for some external account then it won't be loaded yet.
17596
17703
  return [4 /*yield*/, api.Loading];
17597
- case 3:
17704
+ case 6:
17598
17705
  // Ensure regional url is loaded.
17599
17706
  // When loading stuff in the same account as the default it's likely already loaded,
17600
17707
  // but if we just made an API instance for some external account then it won't be loaded yet.
@@ -17603,7 +17710,7 @@ var TileRenderEngine;
17603
17710
  api: api,
17604
17711
  tilesetId: meta.tilesetId
17605
17712
  })];
17606
- case 4:
17713
+ case 7:
17607
17714
  tileset = (_d.sent()).tileset;
17608
17715
  boundaries = undefined;
17609
17716
  settings = tileset === null || tileset === void 0 ? void 0 : tileset.settings;
@@ -17617,8 +17724,8 @@ var TileRenderEngine;
17617
17724
  minLevel = settings === null || settings === void 0 ? void 0 : settings.levelMin;
17618
17725
  maxLevel = settings === null || settings === void 0 ? void 0 : settings.levelMax;
17619
17726
  hasLevels = !isNaN(minLevel) && !isNaN(maxLevel);
17620
- if (!(tileset.type === Tileset.EType.GeoMap)) return [3 /*break*/, 8];
17621
- if (!TileMapServiceImageryProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 6];
17727
+ if (!(tileset.type === Tileset.EType.GeoMap)) return [3 /*break*/, 11];
17728
+ if (!TileMapServiceImageryProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 9];
17622
17729
  url = Tileset.GetPublicFileUrl({
17623
17730
  api: api,
17624
17731
  tilesetId: meta.tilesetId,
@@ -17633,10 +17740,10 @@ var TileRenderEngine;
17633
17740
  maximumLevel: hasLevels ? maxLevel : undefined,
17634
17741
  minimumLevel: hasLevels ? minLevel : undefined,
17635
17742
  })];
17636
- case 5:
17743
+ case 8:
17637
17744
  provider = _d.sent();
17638
- return [3 /*break*/, 7];
17639
- case 6:
17745
+ return [3 /*break*/, 10];
17746
+ case 9:
17640
17747
  provider = new CESIUM.TileMapServiceImageryProvider({
17641
17748
  url: Tileset.GetPublicFileUrl({
17642
17749
  api: api,
@@ -17651,53 +17758,53 @@ var TileRenderEngine;
17651
17758
  maximumLevel: hasLevels ? maxLevel : undefined,
17652
17759
  minimumLevel: hasLevels ? minLevel : undefined,
17653
17760
  });
17654
- _d.label = 7;
17655
- case 7: return [3 /*break*/, 28];
17656
- case 8:
17657
- if (!(tileset.type === Tileset.EType.ExternalGeoMap)) return [3 /*break*/, 27];
17761
+ _d.label = 10;
17762
+ case 10: return [3 /*break*/, 31];
17763
+ case 11:
17764
+ if (!(tileset.type === Tileset.EType.ExternalGeoMap)) return [3 /*break*/, 30];
17658
17765
  settings_1 = tileset.settings;
17659
17766
  _a = settings_1.mapType;
17660
17767
  switch (_a) {
17661
- case Tileset.Settings.EExternalMapType.CesiumIon: return [3 /*break*/, 9];
17662
- case Tileset.Settings.EExternalMapType.MapBoxImagery: return [3 /*break*/, 16];
17663
- case Tileset.Settings.EExternalMapType.OpenStreetMapImagery: return [3 /*break*/, 20];
17664
- case Tileset.Settings.EExternalMapType.TileMapImagery: return [3 /*break*/, 21];
17665
- case Tileset.Settings.EExternalMapType.CustomTemplate: return [3 /*break*/, 25];
17768
+ case Tileset.Settings.EExternalMapType.CesiumIon: return [3 /*break*/, 12];
17769
+ case Tileset.Settings.EExternalMapType.MapBoxImagery: return [3 /*break*/, 19];
17770
+ case Tileset.Settings.EExternalMapType.OpenStreetMapImagery: return [3 /*break*/, 23];
17771
+ case Tileset.Settings.EExternalMapType.TileMapImagery: return [3 /*break*/, 24];
17772
+ case Tileset.Settings.EExternalMapType.CustomTemplate: return [3 /*break*/, 28];
17666
17773
  }
17667
- return [3 /*break*/, 26];
17668
- case 9:
17669
- if (!settings_1.key) return [3 /*break*/, 10];
17774
+ return [3 /*break*/, 29];
17775
+ case 12:
17776
+ if (!settings_1.key) return [3 /*break*/, 13];
17670
17777
  _b = settings_1.key;
17671
- return [3 /*break*/, 12];
17672
- case 10: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)];
17673
- case 11:
17778
+ return [3 /*break*/, 15];
17779
+ case 13: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)];
17780
+ case 14:
17674
17781
  _b = _d.sent();
17675
- _d.label = 12;
17676
- case 12:
17782
+ _d.label = 15;
17783
+ case 15:
17677
17784
  cesiumIonKey = _b;
17678
- if (!IonImageryProvider.hasOwnProperty("fromAssetId")) return [3 /*break*/, 14];
17785
+ if (!IonImageryProvider.hasOwnProperty("fromAssetId")) return [3 /*break*/, 17];
17679
17786
  return [4 /*yield*/, CESIUM.IonImageryProvider.fromAssetId(Number(settings_1.externalId), {
17680
17787
  accessToken: cesiumIonKey
17681
17788
  })];
17682
- case 13:
17789
+ case 16:
17683
17790
  provider = _d.sent();
17684
- return [3 /*break*/, 15];
17685
- case 14:
17791
+ return [3 /*break*/, 18];
17792
+ case 17:
17686
17793
  provider = new CESIUM.IonImageryProvider({
17687
17794
  assetId: Number(settings_1.externalId),
17688
17795
  accessToken: cesiumIonKey
17689
17796
  });
17690
- _d.label = 15;
17691
- case 15: return [3 /*break*/, 26];
17692
- case 16:
17693
- if (!settings_1.key) return [3 /*break*/, 17];
17797
+ _d.label = 18;
17798
+ case 18: return [3 /*break*/, 29];
17799
+ case 19:
17800
+ if (!settings_1.key) return [3 /*break*/, 20];
17694
17801
  _c = settings_1.key;
17695
- return [3 /*break*/, 19];
17696
- case 17: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null)];
17697
- case 18:
17802
+ return [3 /*break*/, 22];
17803
+ case 20: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null)];
17804
+ case 21:
17698
17805
  _c = _d.sent();
17699
- _d.label = 19;
17700
- case 19:
17806
+ _d.label = 22;
17807
+ case 22:
17701
17808
  mapboxKey = _c;
17702
17809
  provider = new UrlTemplateImageryProvider({
17703
17810
  url: "https://api.mapbox.com/styles/v1/"
@@ -17705,8 +17812,8 @@ var TileRenderEngine;
17705
17812
  "/tiles/256/{z}/{x}/{y}?access_token="
17706
17813
  + mapboxKey
17707
17814
  });
17708
- return [3 /*break*/, 26];
17709
- case 20:
17815
+ return [3 /*break*/, 29];
17816
+ case 23:
17710
17817
  provider = new OpenStreetMapImageryProvider({
17711
17818
  url: settings_1.url,
17712
17819
  fileExtension: prepareFileExt(settings_1.fileExtension),
@@ -17715,9 +17822,9 @@ var TileRenderEngine;
17715
17822
  // maximumLevel: hasLevels ? maxLevel : undefined,
17716
17823
  // minimumLevel: hasLevels ? minLevel : undefined,
17717
17824
  });
17718
- return [3 /*break*/, 26];
17719
- case 21:
17720
- if (!TileMapServiceImageryProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 23];
17825
+ return [3 /*break*/, 29];
17826
+ case 24:
17827
+ if (!TileMapServiceImageryProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 26];
17721
17828
  return [4 /*yield*/, CESIUM.TileMapServiceImageryProvider.fromUrl(settings_1.url, {
17722
17829
  fileExtension: prepareFileExt(settings_1.fileExtension),
17723
17830
  // Unused until tested properly. In the past these settings caused large lag.
@@ -17725,10 +17832,10 @@ var TileRenderEngine;
17725
17832
  // maximumLevel: hasLevels ? maxLevel : undefined,
17726
17833
  // minimumLevel: hasLevels ? minLevel : undefined,
17727
17834
  })];
17728
- case 22:
17835
+ case 25:
17729
17836
  provider = _d.sent();
17730
- return [3 /*break*/, 24];
17731
- case 23:
17837
+ return [3 /*break*/, 27];
17838
+ case 26:
17732
17839
  provider = new CESIUM.TileMapServiceImageryProvider({
17733
17840
  url: settings_1.url,
17734
17841
  fileExtension: prepareFileExt(settings_1.fileExtension),
@@ -17737,15 +17844,15 @@ var TileRenderEngine;
17737
17844
  // maximumLevel: hasLevels ? maxLevel : undefined,
17738
17845
  // minimumLevel: hasLevels ? minLevel : undefined,
17739
17846
  });
17740
- _d.label = 24;
17741
- case 24: return [3 /*break*/, 26];
17742
- case 25:
17847
+ _d.label = 27;
17848
+ case 27: return [3 /*break*/, 29];
17849
+ case 28:
17743
17850
  provider = new UrlTemplateImageryProvider({
17744
17851
  url: settings_1.url
17745
17852
  });
17746
- return [3 /*break*/, 26];
17747
- case 26: return [3 /*break*/, 28];
17748
- case 27:
17853
+ return [3 /*break*/, 29];
17854
+ case 29: return [3 /*break*/, 31];
17855
+ case 30:
17749
17856
  if (tileset.type === Tileset.EType.EntitiesMap) {
17750
17857
  provider = new UrlTemplateImageryProvider({
17751
17858
  url: Tileset.GetPublicFileUrl({
@@ -17763,8 +17870,8 @@ var TileRenderEngine;
17763
17870
  // maximumLevel: hasLevels ? maxLevel : undefined,
17764
17871
  });
17765
17872
  }
17766
- _d.label = 28;
17767
- case 28:
17873
+ _d.label = 31;
17874
+ case 31:
17768
17875
  if (provider) {
17769
17876
  layer = viewer.imageryLayers.addImageryProvider(provider);
17770
17877
  layer._bMeta = meta;
@@ -18020,7 +18127,7 @@ var TileRenderEngine;
18020
18127
  function Render(params) {
18021
18128
  var _a;
18022
18129
  return __awaiter(this, void 0, void 0, function () {
18023
- var iteration, CESIUM, enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
18130
+ var iteration, CESIUM, enabledMeta, provider_1, leave, defaultTerr, provider, shouldCreate, api, tileset, url, vertexes, settings;
18024
18131
  return __generator(this, function (_b) {
18025
18132
  switch (_b.label) {
18026
18133
  case 0:
@@ -18054,18 +18161,27 @@ var TileRenderEngine;
18054
18161
  }
18055
18162
  defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(function (x) { return x.id === params.tile.tilesetId; });
18056
18163
  provider = null;
18057
- if (!defaultTerr) return [3 /*break*/, 2];
18058
- return [4 /*yield*/, renderDefaultTerrTile(defaultTerr.id)];
18164
+ if (!defaultTerr) return [3 /*break*/, 5];
18165
+ shouldCreate = true;
18166
+ if (!(defaultTerr.id == ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain)) return [3 /*break*/, 2];
18167
+ return [4 /*yield*/, ViewerUtils.AssertIonToken(Ion.defaultAccessToken)];
18059
18168
  case 1:
18060
- provider = (_b.sent());
18061
- return [3 /*break*/, 7];
18169
+ shouldCreate = _b.sent();
18170
+ _b.label = 2;
18062
18171
  case 2:
18172
+ if (!shouldCreate) return [3 /*break*/, 4];
18173
+ return [4 /*yield*/, renderDefaultTerrTile(defaultTerr.id)];
18174
+ case 3:
18175
+ provider = (_b.sent());
18176
+ _b.label = 4;
18177
+ case 4: return [3 /*break*/, 10];
18178
+ case 5:
18063
18179
  api = params.apiGetter.getApi(params.tile.accountId);
18064
18180
  // Ensure regional url is loaded.
18065
18181
  // When loading stuff in the same account as the default it's likely already loaded,
18066
18182
  // but if we just made an API instance for some external account then it won't be loaded yet.
18067
18183
  return [4 /*yield*/, api.Loading];
18068
- case 3:
18184
+ case 6:
18069
18185
  // Ensure regional url is loaded.
18070
18186
  // When loading stuff in the same account as the default it's likely already loaded,
18071
18187
  // but if we just made an API instance for some external account then it won't be loaded yet.
@@ -18077,7 +18193,7 @@ var TileRenderEngine;
18077
18193
  api: api,
18078
18194
  tilesetId: params.tile.tilesetId
18079
18195
  })];
18080
- case 4:
18196
+ case 7:
18081
18197
  tileset = (_b.sent()).tileset;
18082
18198
  if (!assertIteration(params.viewer, iteration)) {
18083
18199
  return [2 /*return*/];
@@ -18101,21 +18217,21 @@ var TileRenderEngine;
18101
18217
  else {
18102
18218
  console.error("Invalid tileset type.", tileset);
18103
18219
  }
18104
- if (!url) return [3 /*break*/, 7];
18105
- if (!CESIUM.CesiumTerrainProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 6];
18220
+ if (!url) return [3 /*break*/, 10];
18221
+ if (!CESIUM.CesiumTerrainProvider.hasOwnProperty("fromUrl")) return [3 /*break*/, 9];
18106
18222
  return [4 /*yield*/, CESIUM.CesiumTerrainProvider.fromUrl(url, {
18107
18223
  requestVertexNormals: vertexes
18108
18224
  })];
18109
- case 5:
18225
+ case 8:
18110
18226
  provider = (_b.sent());
18111
- return [3 /*break*/, 7];
18112
- case 6:
18227
+ return [3 /*break*/, 10];
18228
+ case 9:
18113
18229
  provider = new CESIUM.CesiumTerrainProvider({
18114
18230
  url: url,
18115
18231
  requestVertexNormals: vertexes
18116
18232
  });
18117
- _b.label = 7;
18118
- case 7:
18233
+ _b.label = 10;
18234
+ case 10:
18119
18235
  if (provider) {
18120
18236
  provider._bMeta = {
18121
18237
  accountId: params.tile.accountId,
@@ -18141,6 +18257,12 @@ var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
18141
18257
  // Used to track if a current in-progress render is the latest.
18142
18258
  // If we're midway through an async function that is rendering a bookmark and this changes, then we stop the function.
18143
18259
  var ITERATION_KEY$1 = "nextspace-view-render-engine-iteration";
18260
+ // Will be set when the account doesn't have its own key.
18261
+ // This can be safely nulled as the code will avoid using things it cannot do without it.
18262
+ // We should do either:
18263
+ // 1- new accounts get our token set.
18264
+ // 2- we reference to the template account's token.
18265
+ var CESIUM_DEFAULT_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiODI1OWQyZC0wYzdlLTRlOTctODFlOC1kYjIwOGYzOWE0NGIiLCJpZCI6MTE3NDg0LCJpYXQiOjE2NzAzODczOTR9.sx0EZdD-Y33FQ7gB_R3CkTsk3KhNpODoQGrnpvSH4UQ";
18144
18266
  /**
18145
18267
  * Creates a new iteration state.
18146
18268
  * This will stop any existing renders from processing to their end.
@@ -18315,15 +18437,60 @@ function renderLegacyNavigator(iteration, params, bookmark, view) {
18315
18437
  * @param bookmark
18316
18438
  * @param view
18317
18439
  */
18318
- function renderNavigator(iteration, params, bookmark, view) {
18440
+ function renderNavigator(iteration, params, bookmark, view, getters) {
18319
18441
  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, _6;
18320
18442
  return __awaiter(this, void 0, void 0, function () {
18321
- 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, labelledIds, curLabelledIds, toUnLabel, entityOpacityMap, entityId, opacity, imagery, legacyRelationIds, relations, curEnabled, newItemIds, _i, curEnabled_1, id, shouldRemove, rendered, menuItem, menuItem, gOcclusion;
18322
- return __generator(this, function (_7) {
18323
- switch (_7.label) {
18443
+ var viewer, scene, cTokenSet, _7, programKey, valid, e_1, valid, 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, labelledIds, curLabelledIds, toUnLabel, entityOpacityMap, entityId, opacity, imagery, i, layer, legacyRelationIds, relations, curEnabled, newItemIds, _i, curEnabled_1, id, shouldRemove, rendered, menuItem, menuItem, gOcclusion;
18444
+ return __generator(this, function (_8) {
18445
+ switch (_8.label) {
18324
18446
  case 0:
18325
18447
  viewer = params.manager.Viewer;
18326
18448
  scene = viewer.scene;
18449
+ if (!Ion.defaultAccessToken) return [3 /*break*/, 2];
18450
+ return [4 /*yield*/, ViewerUtils.AssertIonToken(Ion.defaultAccessToken)];
18451
+ case 1:
18452
+ _7 = _8.sent();
18453
+ return [3 /*break*/, 3];
18454
+ case 2:
18455
+ _7 = false;
18456
+ _8.label = 3;
18457
+ case 3:
18458
+ cTokenSet = _7;
18459
+ if (!!cTokenSet) return [3 /*break*/, 9];
18460
+ _8.label = 4;
18461
+ case 4:
18462
+ _8.trys.push([4, 8, , 9]);
18463
+ return [4 /*yield*/, ProgramKey.Get({
18464
+ programId: ProgramKey.EProgramId.CesiumIon,
18465
+ api: getters.GetBruceApi()
18466
+ })];
18467
+ case 5:
18468
+ programKey = (_8.sent()).programKey;
18469
+ if (!(programKey === null || programKey === void 0 ? void 0 : programKey.Key)) return [3 /*break*/, 7];
18470
+ return [4 /*yield*/, ViewerUtils.AssertIonToken(programKey.Key)];
18471
+ case 6:
18472
+ valid = _8.sent();
18473
+ if (valid) {
18474
+ Ion.defaultAccessToken = programKey.Key;
18475
+ cTokenSet = true;
18476
+ }
18477
+ _8.label = 7;
18478
+ case 7: return [3 /*break*/, 9];
18479
+ case 8:
18480
+ e_1 = _8.sent();
18481
+ console.error(e_1);
18482
+ return [3 /*break*/, 9];
18483
+ case 9:
18484
+ if (!!cTokenSet) return [3 /*break*/, 11];
18485
+ return [4 /*yield*/, ViewerUtils.AssertIonToken(CESIUM_DEFAULT_TOKEN)];
18486
+ case 10:
18487
+ valid = _8.sent();
18488
+ if (valid) {
18489
+ Ion.defaultAccessToken = CESIUM_DEFAULT_TOKEN;
18490
+ cTokenSet = true;
18491
+ }
18492
+ _8.label = 11;
18493
+ case 11:
18327
18494
  vSettings = view.Settings;
18328
18495
  bSettings = ((_a = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) !== null && _a !== void 0 ? _a : {});
18329
18496
  defaults = (_b = vSettings.defaults) !== null && _b !== void 0 ? _b : {};
@@ -18375,19 +18542,27 @@ function renderNavigator(iteration, params, bookmark, view) {
18375
18542
  }
18376
18543
  }
18377
18544
  terrain = (bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain) != null ? bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain : (_m = defaults.settings) === null || _m === void 0 ? void 0 : _m.terrain;
18378
- if (!terrain) return [3 /*break*/, 2];
18545
+ if (!terrain) return [3 /*break*/, 13];
18546
+ // If there is no Cesium token set then we'll swap cesium terrain to flat terrain.
18547
+ // This allows a scene to render even if it's not the correct one.
18548
+ if (terrain.tilesetId == ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain && !cTokenSet) {
18549
+ terrain = {
18550
+ tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain
18551
+ };
18552
+ console.warn("Cesium Ion token not set, using flat terrain instead of cesium world terrain.");
18553
+ }
18379
18554
  return [4 /*yield*/, TileRenderEngine.Terrain.Navigator.Render({
18380
18555
  apiGetter: params.apiGetter,
18381
18556
  tile: terrain,
18382
18557
  viewer: params.manager.Viewer,
18383
18558
  })];
18384
- case 1:
18385
- _7.sent();
18559
+ case 12:
18560
+ _8.sent();
18386
18561
  if (!assertIteration$1(params.viewer, iteration)) {
18387
18562
  return [2 /*return*/];
18388
18563
  }
18389
- _7.label = 2;
18390
- case 2:
18564
+ _8.label = 13;
18565
+ case 13:
18391
18566
  hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
18392
18567
  if (hillShades == null) {
18393
18568
  hillShades = (_p = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _p === void 0 ? void 0 : _p.hillShades;
@@ -18605,6 +18780,29 @@ function renderNavigator(iteration, params, bookmark, view) {
18605
18780
  }
18606
18781
  ];
18607
18782
  }
18783
+ else if (imagery === null || imagery === void 0 ? void 0 : imagery.length) {
18784
+ // If the Cesium token is not set then we'll avoid rendering Bing Maps since they won't work.
18785
+ // We'll swap them out to good enough alternatives.
18786
+ if (!cTokenSet) {
18787
+ // Deference the array so we don't modify the original.
18788
+ imagery = JSON.parse(JSON.stringify(imagery));
18789
+ for (i = 0; i < imagery.length; i++) {
18790
+ layer = imagery[i];
18791
+ if (layer.tilesetId == ProjectViewTile.EDefaultImagery.BingMapsAerial) {
18792
+ layer.tilesetId = ProjectViewTile.EDefaultImagery.MapboxSatellite;
18793
+ console.warn("Cesium Ion token not set, using mapbox satellite instead of bing maps aerial.");
18794
+ }
18795
+ else if (layer.tilesetId == ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels) {
18796
+ layer.tilesetId = ProjectViewTile.EDefaultImagery.MapboxSatellite;
18797
+ console.warn("Cesium Ion token not set, using mapbox satellite instead of bing maps aerial with labels.");
18798
+ }
18799
+ else if (layer.tilesetId == ProjectViewTile.EDefaultImagery.BingMapsRoads) {
18800
+ layer.tilesetId = ProjectViewTile.EDefaultImagery.MapBoxStreets;
18801
+ console.warn("Cesium Ion token not set, using mapbox streets instead of bing maps roads.");
18802
+ }
18803
+ }
18804
+ }
18805
+ }
18608
18806
  // We don't wait for imageries to load, this does not affect rendering other things.
18609
18807
  TileRenderEngine.Map.Navigator.Render({
18610
18808
  apiGetter: params.apiGetter,
@@ -18649,20 +18847,20 @@ function renderNavigator(iteration, params, bookmark, view) {
18649
18847
  });
18650
18848
  }
18651
18849
  }
18652
- if (!bookmark) return [3 /*break*/, 4];
18850
+ if (!bookmark) return [3 /*break*/, 15];
18653
18851
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
18654
18852
  getters: params.getters,
18655
18853
  manager: params.manager,
18656
18854
  view: view,
18657
18855
  bookmark: bookmark
18658
18856
  })];
18659
- case 3:
18660
- _7.sent();
18857
+ case 14:
18858
+ _8.sent();
18661
18859
  if (!assertIteration$1(params.viewer, iteration)) {
18662
18860
  return [2 /*return*/];
18663
18861
  }
18664
- _7.label = 4;
18665
- case 4:
18862
+ _8.label = 15;
18863
+ case 15:
18666
18864
  if (legacyRelationIds.length || relations.length) {
18667
18865
  if (relations.length) {
18668
18866
  menuItem = {
@@ -18780,7 +18978,7 @@ var ViewRenderEngine;
18780
18978
  case 8:
18781
18979
  _d.sent();
18782
18980
  return [3 /*break*/, 11];
18783
- case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view)];
18981
+ case 9: return [4 /*yield*/, renderNavigator(iteration, params, bookmark, view, params.getters)];
18784
18982
  case 10:
18785
18983
  _d.sent();
18786
18984
  _d.label = 11;
@@ -19217,7 +19415,7 @@ var CesiumViewMonitor;
19217
19415
  CesiumViewMonitor$$1.Monitor = Monitor;
19218
19416
  })(CesiumViewMonitor || (CesiumViewMonitor = {}));
19219
19417
 
19220
- var VERSION$1 = "3.2.1";
19418
+ var VERSION$1 = "3.2.3";
19221
19419
 
19222
19420
  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, EntityLabel, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
19223
19421
  //# sourceMappingURL=bruce-cesium.es5.js.map