bruce-cesium 3.0.8 → 3.1.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.
Files changed (32) hide show
  1. package/dist/bruce-cesium.es5.js +192 -111
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +191 -110
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +1 -1
  6. package/dist/lib/rendering/entity-render-engine.js +9 -0
  7. package/dist/lib/rendering/entity-render-engine.js.map +1 -1
  8. package/dist/lib/rendering/relation-render-engine.js +18 -2
  9. package/dist/lib/rendering/relation-render-engine.js.map +1 -1
  10. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +30 -4
  11. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -1
  12. package/dist/lib/rendering/render-managers/common/shared-getters.js +4 -0
  13. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -1
  14. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +4 -0
  15. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -1
  16. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +4 -0
  17. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -1
  18. package/dist/lib/rendering/view-render-engine.js +14 -6
  19. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  20. package/dist/lib/rendering/visuals-register.js.map +1 -1
  21. package/dist/lib/utils/drawing-utils.js +25 -12
  22. package/dist/lib/utils/drawing-utils.js.map +1 -1
  23. package/dist/lib/utils/entity-utils.js +81 -84
  24. package/dist/lib/utils/entity-utils.js.map +1 -1
  25. package/dist/lib/utils/view-utils.js +1 -1
  26. package/dist/lib/utils/view-utils.js.map +1 -1
  27. package/dist/types/bruce-cesium.d.ts +1 -1
  28. package/dist/types/rendering/entity-render-engine.d.ts +12 -0
  29. package/dist/types/rendering/relation-render-engine.d.ts +1 -0
  30. package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +3 -0
  31. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +1 -1
  32. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { BruceEvent, Cartes, ProjectViewTile, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, DelayQueue, EntityCoords, Api, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, 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, JulianDate, SceneMode, Entity, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Model, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, EllipsoidTerrainProvider, CesiumInspector, defined, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, ScreenSpaceEventHandler, ScreenSpaceEventType, PolygonPipeline, Matrix4, Matrix3, IonResource, Ion, ColorMaterialProperty, GeometryInstance, BoundingSphere, Intersect } 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, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Model, JulianDate, SceneMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Cesium3DTileset, Matrix4, Matrix3, IonResource, Ion, CesiumInspector, defined, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, ColorMaterialProperty, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, BoundingSphere, Intersect } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -507,15 +507,23 @@ var DrawingUtils;
507
507
  * @returns
508
508
  */
509
509
  function GetTerrainHeight(params) {
510
+ var _a;
510
511
  return __awaiter(this, void 0, void 0, function () {
511
- var pos3d, viewer, sample, height, e_1;
512
- return __generator(this, function (_a) {
513
- switch (_a.label) {
512
+ var pos3d, viewer, terrainProviderReady, sample, height, e_1;
513
+ return __generator(this, function (_b) {
514
+ switch (_b.label) {
514
515
  case 0:
515
516
  pos3d = params.pos3d, viewer = params.viewer;
516
- _a.label = 1;
517
+ _b.label = 1;
517
518
  case 1:
518
- _a.trys.push([1, 3, , 4]);
519
+ _b.trys.push([1, 3, , 4]);
520
+ terrainProviderReady = Boolean((_a = viewer === null || viewer === void 0 ? void 0 : viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a.ready);
521
+ if (!terrainProviderReady) {
522
+ return [2 /*return*/, {
523
+ height: 0,
524
+ error: "Terrain provider not ready."
525
+ }];
526
+ }
519
527
  if (viewer.scene.terrainProvider instanceof EllipsoidTerrainProvider) {
520
528
  return [2 /*return*/, {
521
529
  height: 0
@@ -523,7 +531,7 @@ var DrawingUtils;
523
531
  }
524
532
  return [4 /*yield*/, sampleTerrainMostDetailed(viewer.scene.terrainProvider, [Cartographic.fromCartesian(pos3d)])];
525
533
  case 2:
526
- sample = _a.sent();
534
+ sample = _b.sent();
527
535
  height = (sample === null || sample === void 0 ? void 0 : sample.length) ? sample[0].height : null;
528
536
  if (isNaN(height)) {
529
537
  return [2 /*return*/, {
@@ -535,7 +543,7 @@ var DrawingUtils;
535
543
  height: height
536
544
  }];
537
545
  case 3:
538
- e_1 = _a.sent();
546
+ e_1 = _b.sent();
539
547
  return [2 /*return*/, {
540
548
  height: 0,
541
549
  error: e_1
@@ -706,12 +714,17 @@ var DrawingUtils;
706
714
  * @param minimumHeight height relative to ground
707
715
  */
708
716
  function RaisePos3d(viewer, pos3d, minimumHeight) {
717
+ var _a;
709
718
  if (minimumHeight === void 0) { minimumHeight = 0; }
710
719
  return __awaiter(this, void 0, void 0, function () {
711
- var carto, terrainCarto, sample, terrainHeight;
712
- return __generator(this, function (_a) {
713
- switch (_a.label) {
720
+ var terrainProviderReady, carto, terrainCarto, sample, terrainHeight;
721
+ return __generator(this, function (_b) {
722
+ switch (_b.label) {
714
723
  case 0:
724
+ terrainProviderReady = Boolean((_a = viewer === null || viewer === void 0 ? void 0 : viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a.ready);
725
+ if (!terrainProviderReady) {
726
+ return [2 /*return*/, pos3d];
727
+ }
715
728
  carto = Cartographic.fromCartesian(pos3d);
716
729
  terrainCarto = carto.clone();
717
730
  terrainCarto.height = 0;
@@ -720,12 +733,12 @@ var DrawingUtils;
720
733
  return [3 /*break*/, 3];
721
734
  case 1: return [4 /*yield*/, sampleTerrainMostDetailed(viewer.scene.terrainProvider, [terrainCarto])];
722
735
  case 2:
723
- sample = _a.sent();
736
+ sample = _b.sent();
724
737
  terrainHeight = (sample === null || sample === void 0 ? void 0 : sample.length) ? sample[0].height : null;
725
738
  if (terrainHeight != null) {
726
739
  carto.height = Math.max(carto.height, terrainHeight + minimumHeight);
727
740
  }
728
- _a.label = 3;
741
+ _b.label = 3;
729
742
  case 3: return [2 /*return*/, Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height)];
730
743
  }
731
744
  });
@@ -806,7 +819,7 @@ var ViewUtils;
806
819
  function GatherTerrainTile(params) {
807
820
  var viewer = params.viewer;
808
821
  var provider = viewer.terrainProvider;
809
- if (provider._bMeta) {
822
+ if (provider === null || provider === void 0 ? void 0 : provider._bMeta) {
810
823
  return {
811
824
  terrain: {
812
825
  accountId: provider._bMeta.accountId,
@@ -1112,12 +1125,12 @@ var EntityUtils;
1112
1125
  * @param params
1113
1126
  */
1114
1127
  function GetLocation(params) {
1115
- var _a;
1128
+ var _a, _b;
1116
1129
  return __awaiter(this, void 0, void 0, function () {
1117
- var api, viewer, samples, visualRegister, minimumAlt, paddingAlt, MAX_DISTANCE_BETWEEN_SAMPLES, MAX_TERRAIN_SAMPLES, terrainSamples, MAX_API_CALLS, apiCalls, MAX_VALID_SAMPLES, validSamples, MIN_RECT_DIAGONAL_LENGTH, data, processPosHeight, ensureHeightRefs, getEntityPositions, allPosses, i, sample, samplePosses, valid, j, samplePos, k, allPos, distance, rect, factor, marginX, marginY, diagonalLen, terrData, posCarto, height, MIN_POSSES_LEN;
1130
+ var api, viewer, samples, visualRegister, minimumAlt, paddingAlt, MAX_DISTANCE_BETWEEN_SAMPLES, MAX_TERRAIN_SAMPLES, terrainSamples, MAX_API_CALLS, apiCalls, MAX_VALID_SAMPLES, validSamples, MIN_RECT_DIAGONAL_LENGTH, terrainProviderReady, data, processPosHeight, ensureHeightRefs, getEntityPositions, allPosses, i, sample, samplePosses, valid, j, samplePos, k, allPos, distance, rect, factor, marginX, marginY, diagonalLen, terrData, posCarto, height, MIN_POSSES_LEN;
1118
1131
  var _this = this;
1119
- return __generator(this, function (_b) {
1120
- switch (_b.label) {
1132
+ return __generator(this, function (_c) {
1133
+ switch (_c.label) {
1121
1134
  case 0:
1122
1135
  api = params.api, viewer = params.viewer, samples = params.samples, visualRegister = params.visualRegister, minimumAlt = params.minimumAlt, paddingAlt = params.paddingAlt;
1123
1136
  if (!paddingAlt) {
@@ -1134,6 +1147,7 @@ var EntityUtils;
1134
1147
  if (MIN_RECT_DIAGONAL_LENGTH < 1500) {
1135
1148
  MIN_RECT_DIAGONAL_LENGTH = 1500;
1136
1149
  }
1150
+ terrainProviderReady = Boolean((_a = viewer === null || viewer === void 0 ? void 0 : viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a.ready);
1137
1151
  data = {
1138
1152
  pos3d: null,
1139
1153
  rectangle: null
@@ -1143,11 +1157,12 @@ var EntityUtils;
1143
1157
  return __generator(this, function (_a) {
1144
1158
  switch (_a.label) {
1145
1159
  case 0:
1146
- if (!(!isNaN(minimumAlt) && minimumAlt != null)) return [3 /*break*/, 5];
1160
+ if (!(!isNaN(minimumAlt) && minimumAlt != null)) return [3 /*break*/, 7];
1147
1161
  carto = Cartographic.fromCartesian(pos3d);
1148
- if (!(carto === null || carto === void 0 ? void 0 : carto.latitude)) return [3 /*break*/, 4];
1162
+ if (!(carto === null || carto === void 0 ? void 0 : carto.latitude)) return [3 /*break*/, 6];
1149
1163
  baseHeight = 0;
1150
- if (!(heightRef == null || heightRef == HeightReference.RELATIVE_TO_GROUND || heightRef == HeightReference.NONE)) return [3 /*break*/, 3];
1164
+ if (!(heightRef == null || heightRef == HeightReference.RELATIVE_TO_GROUND || heightRef == HeightReference.NONE)) return [3 /*break*/, 5];
1165
+ if (!terrainProviderReady) return [3 /*break*/, 4];
1151
1166
  if (!(terrainSamples > MAX_TERRAIN_SAMPLES)) return [3 /*break*/, 1];
1152
1167
  baseHeight = viewer.scene.globe.getHeight(carto);
1153
1168
  return [3 /*break*/, 3];
@@ -1160,7 +1175,11 @@ var EntityUtils;
1160
1175
  baseHeight = terrData === null || terrData === void 0 ? void 0 : terrData.height;
1161
1176
  terrainSamples += 1;
1162
1177
  _a.label = 3;
1163
- case 3:
1178
+ case 3: return [3 /*break*/, 5];
1179
+ case 4:
1180
+ baseHeight = 0;
1181
+ _a.label = 5;
1182
+ case 5:
1164
1183
  if (baseHeight != undefined && !isNaN(baseHeight)) {
1165
1184
  height = baseHeight + minimumAlt;
1166
1185
  if (height > carto.height) {
@@ -1168,17 +1187,17 @@ var EntityUtils;
1168
1187
  }
1169
1188
  return [2 /*return*/, Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + paddingAlt)];
1170
1189
  }
1171
- _a.label = 4;
1172
- case 4: return [3 /*break*/, 6];
1173
- case 5:
1190
+ _a.label = 6;
1191
+ case 6: return [3 /*break*/, 8];
1192
+ case 7:
1174
1193
  if (paddingAlt) {
1175
1194
  carto = Cartographic.fromCartesian(pos3d);
1176
1195
  if (carto === null || carto === void 0 ? void 0 : carto.latitude) {
1177
1196
  return [2 /*return*/, Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + paddingAlt)];
1178
1197
  }
1179
1198
  }
1180
- _a.label = 6;
1181
- case 6: return [2 /*return*/, pos3d];
1199
+ _a.label = 8;
1200
+ case 8: return [2 /*return*/, pos3d];
1182
1201
  }
1183
1202
  });
1184
1203
  }); };
@@ -1216,67 +1235,36 @@ var EntityUtils;
1216
1235
  });
1217
1236
  }); };
1218
1237
  getEntityPositions = function (sample) { return __awaiter(_this, void 0, void 0, function () {
1219
- var entityId, entity, tileset, tilesetId, lat, lon, e_1, e_2, evaluateRendered, evaluateRecord, renderedPosses, recordPosses, tSettings, pos3d, alt, alt, heading, pitch, roll, matrix4, offset, m1, hpr, transform, transformedOffset;
1238
+ var entityId, entity, tileset, tilesetId, e_1, evaluateRendered, evaluateRecord, renderedPosses, recordPosses, e_2, tSettings, pos3d, alt, alt, heading, pitch, roll, matrix4, offset, m1, hpr, transform, transformedOffset;
1220
1239
  var _this = this;
1221
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
1222
- return __generator(this, function (_o) {
1223
- switch (_o.label) {
1240
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
1241
+ return __generator(this, function (_l) {
1242
+ switch (_l.label) {
1224
1243
  case 0:
1225
1244
  entityId = sample.entityId, entity = sample.entity, tileset = sample.tileset, tilesetId = sample.tilesetId;
1226
- if (!!entity) return [3 /*break*/, 9];
1227
- lat = 0;
1228
- lon = 0;
1229
- if (!(apiCalls < MAX_API_CALLS)) return [3 /*break*/, 9];
1230
- // Counting this whole area as a single call because it has a single purpose.
1245
+ if (!!entity) return [3 /*break*/, 4];
1246
+ if (!(apiCalls < MAX_API_CALLS)) return [3 /*break*/, 4];
1231
1247
  apiCalls += 1;
1232
- _o.label = 1;
1248
+ _l.label = 1;
1233
1249
  case 1:
1234
- _o.trys.push([1, 3, , 4]);
1250
+ _l.trys.push([1, 3, , 4]);
1235
1251
  return [4 /*yield*/, Entity$1.Get({
1236
1252
  api: api,
1237
1253
  entityId: entityId,
1254
+ // Not expanding relative positions at first to see if the entity has valid location just by itself.
1238
1255
  expandLocation: false
1239
1256
  })];
1240
1257
  case 2:
1241
- entity = (_o.sent()).entity;
1242
- lat = +((_a = entity === null || entity === void 0 ? void 0 : entity.location) === null || _a === void 0 ? void 0 : _a.latitude);
1243
- lon = +((_b = entity === null || entity === void 0 ? void 0 : entity.location) === null || _b === void 0 ? void 0 : _b.longitude);
1258
+ entity = (_l.sent()).entity;
1244
1259
  return [3 /*break*/, 4];
1245
1260
  case 3:
1246
- e_1 = _o.sent();
1261
+ e_1 = _l.sent();
1247
1262
  console.error(e_1);
1248
1263
  return [3 /*break*/, 4];
1249
1264
  case 4:
1250
- if (!(entity && (isNaN(lat) || isNaN(lon) || (lat == 0 && lon == 0)))) return [3 /*break*/, 9];
1251
- _o.label = 5;
1252
- case 5:
1253
- _o.trys.push([5, 7, , 9]);
1254
- return [4 /*yield*/, Entity$1.Get({
1255
- api: api,
1256
- entityId: entityId,
1257
- expandLocation: true
1258
- })];
1259
- case 6:
1260
- entity = (_o.sent()).entity;
1261
- return [3 /*break*/, 9];
1262
- case 7:
1263
- e_2 = _o.sent();
1264
- console.warn(e_2);
1265
- return [4 /*yield*/, Entity$1.Get({
1266
- api: api,
1267
- entityId: entityId,
1268
- expandLocation: false
1269
- })];
1270
- case 8:
1271
- entity = (_o.sent()).entity;
1272
- return [3 /*break*/, 9];
1273
- case 9:
1274
1265
  if (!entity) {
1275
1266
  return [2 /*return*/, []];
1276
1267
  }
1277
- if (!tilesetId) {
1278
- tilesetId = ((_c = entity.tilesetID) === null || _c === void 0 ? void 0 : _c.length) ? entity.tilesetID[0] : tilesetId;
1279
- }
1280
1268
  evaluateRendered = function () { return __awaiter(_this, void 0, void 0, function () {
1281
1269
  var rego, posses, visual, visualHeightRef, hierarchy, hPosses, hPossesSample, step, i, pPosses, pPossesSample, step, i, pPosses, pPossesSample, step, i, pos3d_1;
1282
1270
  return __generator(this, function (_a) {
@@ -1299,7 +1287,7 @@ var EntityUtils;
1299
1287
  if (!(hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions)) return [3 /*break*/, 3];
1300
1288
  hPosses = hierarchy.positions.map(function (x) { return x.clone ? x.clone() : x; });
1301
1289
  hPossesSample = [];
1302
- step = Math.floor(hPosses.length / 5);
1290
+ step = Math.max(1, Math.floor(hPosses.length / 5));
1303
1291
  for (i = 0; i < hPosses.length; i += step) {
1304
1292
  hPossesSample.push(hPosses[i]);
1305
1293
  }
@@ -1318,7 +1306,7 @@ var EntityUtils;
1318
1306
  // Grab 5 positions from the polyline at varied indexes.
1319
1307
  pPosses = pPosses.map(function (x) { return x.clone ? x.clone() : x; });
1320
1308
  pPossesSample = [];
1321
- step = Math.floor(pPosses.length / 5);
1309
+ step = Math.max(1, Math.floor(pPosses.length / 5));
1322
1310
  for (i = 0; i < pPosses.length; i += step) {
1323
1311
  pPossesSample.push(pPosses[i]);
1324
1312
  }
@@ -1340,7 +1328,7 @@ var EntityUtils;
1340
1328
  // Grab 5 positions from the corridor at varied indexes.
1341
1329
  pPosses = pPosses.map(function (x) { return x.clone ? x.clone() : x; });
1342
1330
  pPossesSample = [];
1343
- step = Math.floor(pPosses.length / 5);
1331
+ step = Math.max(1, Math.floor(pPosses.length / 5));
1344
1332
  for (i = 0; i < pPosses.length; i += step) {
1345
1333
  pPossesSample.push(pPosses[i]);
1346
1334
  }
@@ -1446,32 +1434,54 @@ var EntityUtils;
1446
1434
  });
1447
1435
  }); };
1448
1436
  return [4 /*yield*/, evaluateRendered()];
1449
- case 10:
1450
- renderedPosses = _o.sent();
1437
+ case 5:
1438
+ renderedPosses = _l.sent();
1451
1439
  if (renderedPosses === null || renderedPosses === void 0 ? void 0 : renderedPosses.length) {
1452
1440
  return [2 /*return*/, renderedPosses];
1453
1441
  }
1454
1442
  return [4 /*yield*/, evaluateRecord()];
1455
- case 11:
1456
- recordPosses = _o.sent();
1443
+ case 6:
1444
+ recordPosses = _l.sent();
1457
1445
  if (recordPosses === null || recordPosses === void 0 ? void 0 : recordPosses.length) {
1458
1446
  return [2 /*return*/, recordPosses];
1459
1447
  }
1460
- if (!!tileset) return [3 /*break*/, 13];
1461
- if (!(tilesetId && apiCalls < MAX_API_CALLS)) return [3 /*break*/, 13];
1448
+ if (!(apiCalls < MAX_API_CALLS)) return [3 /*break*/, 10];
1449
+ _l.label = 7;
1450
+ case 7:
1451
+ _l.trys.push([7, 9, , 10]);
1452
+ apiCalls += 1;
1453
+ return [4 /*yield*/, Entity$1.Get({
1454
+ api: api,
1455
+ entityId: entityId,
1456
+ // We'll be expanding relative positioning and related tilesets now.
1457
+ expandLocation: true
1458
+ })];
1459
+ case 8:
1460
+ entity = (_l.sent()).entity;
1461
+ return [3 /*break*/, 10];
1462
+ case 9:
1463
+ e_2 = _l.sent();
1464
+ console.warn(e_2);
1465
+ return [3 /*break*/, 10];
1466
+ case 10:
1467
+ if (!tilesetId) {
1468
+ tilesetId = ((_a = entity.tilesetID) === null || _a === void 0 ? void 0 : _a.length) ? entity.tilesetID[0] : tilesetId;
1469
+ }
1470
+ if (!!tileset) return [3 /*break*/, 12];
1471
+ if (!(tilesetId && apiCalls < MAX_API_CALLS)) return [3 /*break*/, 12];
1462
1472
  apiCalls += 1;
1463
1473
  return [4 /*yield*/, Tileset.Get({
1464
1474
  api: api,
1465
1475
  tilesetId: tilesetId
1466
1476
  })];
1477
+ case 11:
1478
+ tileset = (_l.sent()).tileset;
1479
+ _l.label = 12;
1467
1480
  case 12:
1468
- tileset = (_o.sent()).tileset;
1469
- _o.label = 13;
1470
- case 13:
1471
1481
  tSettings = tileset === null || tileset === void 0 ? void 0 : tileset.settings;
1472
1482
  pos3d = null;
1473
- if (!(((_d = entity.location) === null || _d === void 0 ? void 0 : _d.longitude) || ((_e = tSettings === null || tSettings === void 0 ? void 0 : tSettings.location) === null || _e === void 0 ? void 0 : _e.longitude))) return [3 /*break*/, 15];
1474
- if ((_f = entity === null || entity === void 0 ? void 0 : entity.location) === null || _f === void 0 ? void 0 : _f.longitude) {
1483
+ if (!(((_b = entity === null || entity === void 0 ? void 0 : entity.location) === null || _b === void 0 ? void 0 : _b.longitude) || ((_c = tSettings === null || tSettings === void 0 ? void 0 : tSettings.location) === null || _c === void 0 ? void 0 : _c.longitude))) return [3 /*break*/, 14];
1484
+ if ((_d = entity === null || entity === void 0 ? void 0 : entity.location) === null || _d === void 0 ? void 0 : _d.longitude) {
1475
1485
  alt = +entity.location.altitude;
1476
1486
  if (isNaN(alt)) {
1477
1487
  alt = 0;
@@ -1485,26 +1495,26 @@ var EntityUtils;
1485
1495
  }
1486
1496
  pos3d = Cartesian3.fromDegrees(+tSettings.location.longitude, +tSettings.location.latitude, alt);
1487
1497
  }
1488
- if (!(entity === null || entity === void 0 ? void 0 : entity.worldPosition)) return [3 /*break*/, 15];
1498
+ if (!(entity === null || entity === void 0 ? void 0 : entity.worldPosition)) return [3 /*break*/, 14];
1489
1499
  heading = 0;
1490
1500
  pitch = 0;
1491
1501
  roll = 0;
1492
- if ((_g = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _g === void 0 ? void 0 : _g.heading) {
1502
+ if ((_e = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _e === void 0 ? void 0 : _e.heading) {
1493
1503
  heading = entity.transform.heading;
1494
1504
  }
1495
- else if ((_h = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _h === void 0 ? void 0 : _h.heading) {
1505
+ else if ((_f = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _f === void 0 ? void 0 : _f.heading) {
1496
1506
  heading = tSettings.transform.heading;
1497
1507
  }
1498
- if ((_j = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _j === void 0 ? void 0 : _j.pitch) {
1508
+ if ((_g = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _g === void 0 ? void 0 : _g.pitch) {
1499
1509
  pitch = entity.transform.pitch;
1500
1510
  }
1501
- else if ((_k = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _k === void 0 ? void 0 : _k.pitch) {
1511
+ else if ((_h = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _h === void 0 ? void 0 : _h.pitch) {
1502
1512
  pitch = tSettings.transform.pitch;
1503
1513
  }
1504
- if ((_l = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _l === void 0 ? void 0 : _l.roll) {
1514
+ if ((_j = entity === null || entity === void 0 ? void 0 : entity.transform) === null || _j === void 0 ? void 0 : _j.roll) {
1505
1515
  roll = entity.transform.roll;
1506
1516
  }
1507
- else if ((_m = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _m === void 0 ? void 0 : _m.roll) {
1517
+ else if ((_k = tSettings === null || tSettings === void 0 ? void 0 : tSettings.transform) === null || _k === void 0 ? void 0 : _k.roll) {
1508
1518
  roll = tSettings.transform.roll;
1509
1519
  }
1510
1520
  heading = +heading;
@@ -1530,12 +1540,12 @@ var EntityUtils;
1530
1540
  transform = Matrix3.fromHeadingPitchRoll(hpr);
1531
1541
  transformedOffset = Matrix3.multiplyByVector(transform, offset, new Cartesian3());
1532
1542
  pos3d = Matrix4.multiplyByPoint(m1, transformedOffset, new Cartesian3());
1533
- if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) return [3 /*break*/, 15];
1543
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) return [3 /*break*/, 14];
1534
1544
  return [4 /*yield*/, processPosHeight(pos3d, HeightReference.NONE)];
1545
+ case 13:
1546
+ pos3d = _l.sent();
1547
+ _l.label = 14;
1535
1548
  case 14:
1536
- pos3d = _o.sent();
1537
- _o.label = 15;
1538
- case 15:
1539
1549
  if (pos3d) {
1540
1550
  return [2 /*return*/, [pos3d]];
1541
1551
  }
@@ -1545,13 +1555,13 @@ var EntityUtils;
1545
1555
  }); };
1546
1556
  allPosses = [];
1547
1557
  i = 0;
1548
- _b.label = 1;
1558
+ _c.label = 1;
1549
1559
  case 1:
1550
1560
  if (!(i < samples.length)) return [3 /*break*/, 4];
1551
1561
  sample = samples[i];
1552
1562
  return [4 /*yield*/, getEntityPositions(sample)];
1553
1563
  case 2:
1554
- samplePosses = _b.sent();
1564
+ samplePosses = _c.sent();
1555
1565
  if (samplePosses === null || samplePosses === void 0 ? void 0 : samplePosses.length) {
1556
1566
  valid = !(allPosses === null || allPosses === void 0 ? void 0 : allPosses.length);
1557
1567
  if (!valid) {
@@ -1578,7 +1588,7 @@ var EntityUtils;
1578
1588
  }
1579
1589
  }
1580
1590
  }
1581
- _b.label = 3;
1591
+ _c.label = 3;
1582
1592
  case 3:
1583
1593
  i++;
1584
1594
  return [3 /*break*/, 1];
@@ -1596,7 +1606,7 @@ var EntityUtils;
1596
1606
  terrData = ViewUtils.GatherTerrainTile({
1597
1607
  viewer: viewer
1598
1608
  });
1599
- if (((_a = terrData === null || terrData === void 0 ? void 0 : terrData.terrain) === null || _a === void 0 ? void 0 : _a.tilesetId) == ProjectViewTile.EDefaultTerrain.FlatTerrain) {
1609
+ if (((_b = terrData === null || terrData === void 0 ? void 0 : terrData.terrain) === null || _b === void 0 ? void 0 : _b.tilesetId) == ProjectViewTile.EDefaultTerrain.FlatTerrain) {
1600
1610
  MIN_RECT_DIAGONAL_LENGTH = 0;
1601
1611
  }
1602
1612
  posCarto = Cartographic.fromCartesian(allPosses[0]);
@@ -2964,6 +2974,11 @@ var EntityRenderEngine;
2964
2974
  if (viewer.isDestroyed()) {
2965
2975
  return;
2966
2976
  }
2977
+ // Entity relations have an embedded dispose method.
2978
+ if (entity === null || entity === void 0 ? void 0 : entity._dispose) {
2979
+ entity._dispose();
2980
+ entity._dispose = null;
2981
+ }
2967
2982
  if (entity._parentEntity && !ignoreParent) {
2968
2983
  doRemove({
2969
2984
  viewer: viewer,
@@ -2994,6 +3009,10 @@ var EntityRenderEngine;
2994
3009
  EntityRenderEngine.Remove = Remove;
2995
3010
  var Point;
2996
3011
  (function (Point) {
3012
+ function CreateCircleBillboard(params) {
3013
+ return createCircleBillboard(params.size, params.colorCss);
3014
+ }
3015
+ Point.CreateCircleBillboard = CreateCircleBillboard;
2997
3016
  function Render(params) {
2998
3017
  return __awaiter(this, void 0, void 0, function () {
2999
3018
  var entity, style, type, cEntity, siblings, iconUrlRows, icon, iconUrl_1, res, blob_1, e_4, e_5, iconScale, disableDepthTest, heightRef, radius, bFill, cFill, outline, cOutline, outlineWidth, bOutline, heightRef, pos3d, extrusion, outlineExtrusion, bColor, cColor, size, heightRef, circleBillboard;
@@ -3998,6 +4017,7 @@ var CesiumParabola = /** @class */ (function () {
3998
4017
  this.curPoints = [];
3999
4018
  this.animateInterval = null;
4000
4019
  this.retryTimeout = null;
4020
+ this.hidden = false;
4001
4021
  this.viewer = params.viewer;
4002
4022
  this.pos1 = params.pos1;
4003
4023
  this.pos2 = params.pos2;
@@ -4015,6 +4035,20 @@ var CesiumParabola = /** @class */ (function () {
4015
4035
  }
4016
4036
  this.prepareEntities();
4017
4037
  }
4038
+ Object.defineProperty(CesiumParabola.prototype, "Disposed", {
4039
+ get: function () {
4040
+ return this.disposed;
4041
+ },
4042
+ enumerable: false,
4043
+ configurable: true
4044
+ });
4045
+ Object.defineProperty(CesiumParabola.prototype, "Hidden", {
4046
+ set: function (value) {
4047
+ this.hidden = value;
4048
+ },
4049
+ enumerable: false,
4050
+ configurable: true
4051
+ });
4018
4052
  Object.defineProperty(CesiumParabola.prototype, "curPos1", {
4019
4053
  get: function () {
4020
4054
  return this.pos1 instanceof Function ? this.pos1() : this.pos1;
@@ -4037,7 +4071,10 @@ var CesiumParabola = /** @class */ (function () {
4037
4071
  return _this.curPoints;
4038
4072
  }, false),
4039
4073
  width: this.width,
4040
- material: Color.fromCssColorString(this.color)
4074
+ material: Color.fromCssColorString(this.color),
4075
+ show: new CallbackProperty(function () {
4076
+ return !_this.hidden;
4077
+ }, false)
4041
4078
  }
4042
4079
  });
4043
4080
  var p1Entity = new Entity({
@@ -4049,7 +4086,10 @@ var CesiumParabola = /** @class */ (function () {
4049
4086
  pixelSize: this.width * 1.3,
4050
4087
  color: Color.fromCssColorString(this.color),
4051
4088
  outlineColor: Color.WHITE,
4052
- outlineWidth: 2
4089
+ outlineWidth: 2,
4090
+ show: new CallbackProperty(function () {
4091
+ return !_this.hidden;
4092
+ }, false)
4053
4093
  }
4054
4094
  });
4055
4095
  var p2Entity = new Entity({
@@ -4061,7 +4101,10 @@ var CesiumParabola = /** @class */ (function () {
4061
4101
  pixelSize: this.width * 1.8,
4062
4102
  color: Color.fromCssColorString(this.color),
4063
4103
  outlineColor: Color.WHITE,
4064
- outlineWidth: 2
4104
+ outlineWidth: 2,
4105
+ show: new CallbackProperty(function () {
4106
+ return !_this.hidden;
4107
+ }, false)
4065
4108
  }
4066
4109
  });
4067
4110
  p1Entity.parent = parabola;
@@ -4069,7 +4112,9 @@ var CesiumParabola = /** @class */ (function () {
4069
4112
  var siblings = [p1Entity, p2Entity];
4070
4113
  this.parabola = parabola;
4071
4114
  this.siblings = siblings;
4072
- this.viewer.entities.add(this.parabola);
4115
+ // The parabola is hidden while this entity is not added.
4116
+ // If we avoid adding it now, then the parent can control if the parabola is visible at first or not.
4117
+ // this.viewer.entities.add(this.parabola);
4073
4118
  this.viewer.entities.add(p1Entity);
4074
4119
  this.viewer.entities.add(p2Entity);
4075
4120
  };
@@ -4498,7 +4543,7 @@ var RelationRenderEngine;
4498
4543
  function Render(params) {
4499
4544
  var _a;
4500
4545
  return __awaiter(this, void 0, void 0, function () {
4501
- var style, entity, bColor, cColor, width, duration, hDistanceRatio, fromPos, toPos, updatingPosses, updatePosses, parabola, cEntities, cEntity, i, sibling, updateInterval;
4546
+ var style, entity, bColor, cColor, width, duration, hDistanceRatio, fromPos, toPos, updatingPosses, updatePosses, parabola, cEntities, cEntity, i, sibling, updateInterval, disposed;
4502
4547
  var _this = this;
4503
4548
  return __generator(this, function (_b) {
4504
4549
  style = (_a = params.style) === null || _a === void 0 ? void 0 : _a.Settings;
@@ -4571,6 +4616,7 @@ var RelationRenderEngine;
4571
4616
  duration: duration,
4572
4617
  heightDistanceRatio: hDistanceRatio
4573
4618
  });
4619
+ parabola.Hidden = true;
4574
4620
  cEntities = parabola.Animate();
4575
4621
  cEntity = cEntities.parabola;
4576
4622
  cEntity._siblingGraphics = [];
@@ -4582,14 +4628,29 @@ var RelationRenderEngine;
4582
4628
  var _a;
4583
4629
  if (!((_a = params.viewer) === null || _a === void 0 ? void 0 : _a.scene) ||
4584
4630
  params.viewer.isDestroyed() ||
4585
- !params.viewer.entities.contains(cEntity)) {
4631
+ (!parabola || parabola.Disposed)) {
4586
4632
  clearInterval(updateInterval);
4587
4633
  parabola.Dispose();
4588
4634
  return;
4589
4635
  }
4636
+ if (parabola) {
4637
+ var visible = cEntity && cEntity.show != false && params.viewer.entities.contains(cEntity);
4638
+ parabola.Hidden = !visible;
4639
+ }
4590
4640
  updatePosses();
4591
4641
  params.viewer.scene.requestRender();
4592
4642
  }, 1000);
4643
+ disposed = false;
4644
+ cEntity._dispose = function () {
4645
+ if (disposed) {
4646
+ return;
4647
+ }
4648
+ disposed = true;
4649
+ clearInterval(updateInterval);
4650
+ if (parabola) {
4651
+ parabola.Dispose();
4652
+ }
4653
+ };
4593
4654
  return [2 /*return*/, cEntity];
4594
4655
  });
4595
4656
  });
@@ -10517,6 +10578,10 @@ var SharedGetters;
10517
10578
  if (!getter) {
10518
10579
  getter = new EntityFilterGetter.Getter(params.api, params.monitor, params.typeId, params.batchSize, params.attrFilter, params.cdn);
10519
10580
  this.data[cacheKey] = getter;
10581
+ /**
10582
+ * Debug option.
10583
+ * This will display the bounds of the cells that are being fetched.
10584
+ */
10520
10585
  if (params.viewer && params.debugShowBounds) {
10521
10586
  // Cell id -> entity.
10522
10587
  var cellCache_1 = {};
@@ -12105,6 +12170,10 @@ var RelationsRenderManager;
12105
12170
  if (cEntity && !_this.viewer.isDestroyed() && _this.viewer.entities.contains(cEntity)) {
12106
12171
  _this.viewer.entities.remove(cEntity);
12107
12172
  }
12173
+ if (cEntity === null || cEntity === void 0 ? void 0 : cEntity._dispose) {
12174
+ cEntity._dispose();
12175
+ cEntity._dispose = null;
12176
+ }
12108
12177
  };
12109
12178
  return [4 /*yield*/, RelationRenderEngine.Render({
12110
12179
  apiGetter: this.apiGetter,
@@ -12517,6 +12586,10 @@ var LegacyRelationsRenderManager;
12517
12586
  if (cEntity && !_this.viewer.isDestroyed() && _this.viewer.entities.contains(cEntity)) {
12518
12587
  _this.viewer.entities.remove(cEntity);
12519
12588
  }
12589
+ if (cEntity === null || cEntity === void 0 ? void 0 : cEntity._dispose) {
12590
+ cEntity._dispose();
12591
+ cEntity._dispose = null;
12592
+ }
12520
12593
  };
12521
12594
  return [4 /*yield*/, RelationRenderEngine.Render({
12522
12595
  apiGetter: this.apiGetter,
@@ -15376,7 +15449,8 @@ function renderNavigator(iteration, params, bookmark, view) {
15376
15449
  params.manager.VisualsRegister.SetSelected({
15377
15450
  selected: true,
15378
15451
  entityIds: selectedIds,
15379
- refreshIfSelected: false
15452
+ refreshIfSelected: false,
15453
+ requestRender: false
15380
15454
  });
15381
15455
  }
15382
15456
  params.manager.VisualsRegister.ClearHidden();
@@ -15387,7 +15461,8 @@ function renderNavigator(iteration, params, bookmark, view) {
15387
15461
  if (hiddenIds != null) {
15388
15462
  params.manager.VisualsRegister.SetHidden({
15389
15463
  hidden: true,
15390
- entityIds: hiddenIds
15464
+ entityIds: hiddenIds,
15465
+ requestRender: false
15391
15466
  });
15392
15467
  }
15393
15468
  params.manager.VisualsRegister.ClearIsolated();
@@ -15398,7 +15473,8 @@ function renderNavigator(iteration, params, bookmark, view) {
15398
15473
  if (isolatedIds != null) {
15399
15474
  params.manager.VisualsRegister.SetIsolated({
15400
15475
  isolated: true,
15401
- entityIds: isolatedIds
15476
+ entityIds: isolatedIds,
15477
+ requestRender: false
15402
15478
  });
15403
15479
  }
15404
15480
  labelledIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.labelledEntityIds;
@@ -15406,7 +15482,9 @@ function renderNavigator(iteration, params, bookmark, view) {
15406
15482
  labelledIds = (_2 = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _2 === void 0 ? void 0 : _2.labelledEntityIds;
15407
15483
  }
15408
15484
  if (!(labelledIds === null || labelledIds === void 0 ? void 0 : labelledIds.length)) {
15409
- params.manager.VisualsRegister.ClearLabelled();
15485
+ params.manager.VisualsRegister.ClearLabelled({
15486
+ requestRender: false
15487
+ });
15410
15488
  }
15411
15489
  else {
15412
15490
  curLabelledIds = params.manager.VisualsRegister.GetLabelled();
@@ -15418,7 +15496,8 @@ function renderNavigator(iteration, params, bookmark, view) {
15418
15496
  toUnLabel = curLabelledIds.filter(function (id) { return labelledIds.indexOf(id) === -1; });
15419
15497
  params.manager.VisualsRegister.SetLabelled({
15420
15498
  labelled: false,
15421
- entityIds: toUnLabel
15499
+ entityIds: toUnLabel,
15500
+ requestRender: false
15422
15501
  });
15423
15502
  }
15424
15503
  params.manager.VisualsRegister.ClearOpacity();
@@ -15432,7 +15511,8 @@ function renderNavigator(iteration, params, bookmark, view) {
15432
15511
  if (opacity != 1) {
15433
15512
  params.manager.VisualsRegister.SetOpacity({
15434
15513
  entityIds: [entityId],
15435
- opacity: opacity
15514
+ opacity: opacity,
15515
+ requestRender: false
15436
15516
  });
15437
15517
  }
15438
15518
  }
@@ -15467,6 +15547,7 @@ function renderNavigator(iteration, params, bookmark, view) {
15467
15547
  if (!relations) {
15468
15548
  relations = [];
15469
15549
  }
15550
+ viewer.scene.requestRender();
15470
15551
  curEnabled = params.manager.GetEnabledItemIds();
15471
15552
  newItemIds = (_5 = bSettings === null || bSettings === void 0 ? void 0 : bSettings.menuItemIds) !== null && _5 !== void 0 ? _5 : [];
15472
15553
  for (_i = 0, curEnabled_1 = curEnabled; _i < curEnabled_1.length; _i++) {
@@ -18455,7 +18536,7 @@ var ViewerUtils;
18455
18536
  ViewerUtils.CreateWidgets = CreateWidgets;
18456
18537
  })(ViewerUtils || (ViewerUtils = {}));
18457
18538
 
18458
- var VERSION$1 = "3.0.8";
18539
+ var VERSION$1 = "3.1.0";
18459
18540
 
18460
18541
  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 };
18461
18542
  //# sourceMappingURL=bruce-cesium.es5.js.map