bruce-cesium 1.0.6 → 1.0.8

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 (31) hide show
  1. package/dist/bruce-cesium.es5.js +472 -268
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +470 -266
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/rendering/menu-item-creator.js +8 -0
  6. package/dist/lib/rendering/menu-item-creator.js.map +1 -1
  7. package/dist/lib/rendering/menu-item-manager.js +17 -13
  8. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  9. package/dist/lib/rendering/relation-render-engine.js +34 -15
  10. package/dist/lib/rendering/relation-render-engine.js.map +1 -1
  11. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +170 -109
  12. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -1
  13. package/dist/lib/rendering/render-managers/common/shared-getters.js +2 -1
  14. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -1
  15. package/dist/lib/rendering/view-render-engine.js +96 -32
  16. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  17. package/dist/lib/utils/drawing-utils.js +18 -13
  18. package/dist/lib/utils/drawing-utils.js.map +1 -1
  19. package/dist/lib/utils/entity-utils.js +71 -4
  20. package/dist/lib/utils/entity-utils.js.map +1 -1
  21. package/dist/lib/utils/view-utils.js +13 -5
  22. package/dist/lib/utils/view-utils.js.map +1 -1
  23. package/dist/lib/viewer/viewer-utils.js +12 -8
  24. package/dist/lib/viewer/viewer-utils.js.map +1 -1
  25. package/dist/types/rendering/menu-item-creator.d.ts +5 -0
  26. package/dist/types/rendering/menu-item-manager.d.ts +18 -11
  27. package/dist/types/rendering/view-render-engine.d.ts +1 -1
  28. package/dist/types/utils/entity-utils.d.ts +1 -0
  29. package/dist/types/utils/view-utils.d.ts +10 -2
  30. package/dist/types/viewer/viewer-utils.d.ts +2 -0
  31. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, EntityRelationType, ObjectUtils, Tileset, EntityCoords, EntityFilterGetter, EntitySource, EntityRelation, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
- import { Cartesian2, Cartographic, Math as Math$1, Entity, Primitive, Cesium3DTileFeature, Color, HeightReference, Cartesian3, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, OrthographicFrustum, JulianDate, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Cesium3DTileColorBlendMode, HeadingPitchRange, Matrix4, Cesium3DTileStyle, Cesium3DTileset, IonResource, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, CallbackProperty, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, createOsmBuildings, KmlDataSource } from 'cesium';
2
+ import { Cartesian2, Cartographic, Math as Math$1, Color, HeightReference, Cartesian3, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, OrthographicFrustum, JulianDate, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Matrix4, Cesium3DTileStyle, Cesium3DTileset, IonResource, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, CallbackProperty, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, createOsmBuildings, KmlDataSource } from 'cesium';
3
3
 
4
4
  var TIME_LAG = 300;
5
5
  var POSITION_CHECK_TIMER = 950;
@@ -234,14 +234,18 @@ var ViewerUtils;
234
234
  * @param viewer
235
235
  */
236
236
  function InitViewer(params) {
237
- var viewer = params.viewer;
238
- ViewerUtils.DestroyWidget(viewer.timeline);
239
- ViewerUtils.DestroyWidget(viewer.vrButton);
240
- ViewerUtils.DestroyWidget(viewer.sceneModePicker);
241
- ViewerUtils.DestroyWidget(viewer.homeButton);
242
- ViewerUtils.DestroyWidget(viewer.fullscreenButton);
243
- ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
244
- ViewerUtils.StyleContainer({ viewer: viewer });
237
+ var viewer = params.viewer, destroyWidgets = params.destroyWidgets, styleContainer = params.styleContainer;
238
+ if (destroyWidgets != false) {
239
+ ViewerUtils.DestroyWidget(viewer.timeline);
240
+ ViewerUtils.DestroyWidget(viewer.vrButton);
241
+ ViewerUtils.DestroyWidget(viewer.sceneModePicker);
242
+ ViewerUtils.DestroyWidget(viewer.homeButton);
243
+ ViewerUtils.DestroyWidget(viewer.fullscreenButton);
244
+ ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
245
+ }
246
+ if (styleContainer != false) {
247
+ ViewerUtils.StyleContainer({ viewer: viewer });
248
+ }
245
249
  }
246
250
  ViewerUtils.InitViewer = InitViewer;
247
251
  function DestroyWidget(widget) {
@@ -355,6 +359,74 @@ function __generator(thisArg, body) {
355
359
  }
356
360
  }
357
361
 
362
+ var MeasureUtils;
363
+ (function (MeasureUtils) {
364
+ /**
365
+ * Returns the total distance in meters between an array of points.
366
+ * This distance is NOT following the terrain.
367
+ * @param posses
368
+ * @returns
369
+ */
370
+ function MeasurePolyline(params) {
371
+ var posses = params.posses;
372
+ if (posses.length < 2) {
373
+ return {
374
+ totalLength: 0
375
+ };
376
+ }
377
+ var totalLength = 0;
378
+ var pos1 = null;
379
+ var pos2 = null;
380
+ for (var i = 0; i < posses.length; i++) {
381
+ if (pos1 == null) {
382
+ pos1 = posses[i];
383
+ }
384
+ else if (pos2 == null) {
385
+ pos2 = posses[i];
386
+ totalLength += Cartesian3.distance(pos1, pos2);
387
+ pos1 = pos2;
388
+ pos2 = null;
389
+ }
390
+ }
391
+ return {
392
+ totalLength: totalLength
393
+ };
394
+ }
395
+ MeasureUtils.MeasurePolyline = MeasurePolyline;
396
+ function MeasurePolygon(params) {
397
+ var posses = params.posses;
398
+ posses = [].concat(posses);
399
+ if (!Cartes.IsRing3Closed(posses)) {
400
+ posses.push(posses[0].clone());
401
+ }
402
+ if (posses.length < 3) {
403
+ return {
404
+ area: 0,
405
+ perimeter: 0
406
+ };
407
+ }
408
+ var area = 0;
409
+ var indices = PolygonPipeline.triangulate(posses, []);
410
+ for (var i = 0; i < indices.length; i += 3) {
411
+ var vector1 = posses[indices[i]];
412
+ var vector2 = posses[indices[i + 1]];
413
+ var vector3 = posses[indices[i + 2]];
414
+ var vectorC = Cartesian3.subtract(vector2, vector1, new Cartesian3());
415
+ var vectorD = Cartesian3.subtract(vector3, vector1, new Cartesian3());
416
+ var areaVector = Cartesian3.cross(vectorC, vectorD, new Cartesian3());
417
+ area += Cartesian3.magnitude(areaVector) / 2.0;
418
+ }
419
+ var perimeter = MeasurePolyline({
420
+ posses: posses
421
+ }).totalLength;
422
+ return {
423
+ area: area,
424
+ perimeter: perimeter
425
+ };
426
+ }
427
+ MeasureUtils.MeasurePolygon = MeasurePolygon;
428
+ })(MeasureUtils || (MeasureUtils = {}));
429
+
358
430
  var DrawingUtils;
359
431
  (function (DrawingUtils) {
360
432
  /**
@@ -367,15 +439,29 @@ var DrawingUtils;
367
439
  */
368
440
  function PointAcrossPolyline(params) {
369
441
  var viewer = params.viewer, positions = params.posses, distance = params.distance;
370
- if (positions.length > 1) {
442
+ if (distance <= 0 && positions.length > 0) {
443
+ return {
444
+ point: positions[0]
445
+ };
446
+ }
447
+ else if (positions.length > 1) {
371
448
  var currentDistance = 0;
449
+ var totalLength = MeasureUtils.MeasurePolyline({
450
+ posses: positions,
451
+ }).totalLength;
452
+ if (distance > totalLength) {
453
+ return {
454
+ point: positions[positions.length - 1]
455
+ };
456
+ }
372
457
  for (var i = 0; i < positions.length - 1; i++) {
373
458
  var length_1 = Cartesian3.distance(positions[i], positions[i + 1]);
374
459
  if (length_1 + currentDistance >= distance) {
375
460
  var carto1 = Cartographic.fromCartesian(positions[i]);
376
461
  var carto2 = Cartographic.fromCartesian(positions[i + 1]);
377
462
  var geodesic = new EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);
378
- var position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);
463
+ //const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);
464
+ var position = geodesic.interpolateUsingFraction((distance - currentDistance) / length_1);
379
465
  var height = (carto1.height + carto2.height) / 2;
380
466
  return {
381
467
  point: Cartesian3.fromRadians(position.longitude, position.latitude, height)
@@ -386,18 +472,8 @@ var DrawingUtils;
386
472
  }
387
473
  }
388
474
  }
389
- else if (positions.length > 0) {
390
- return {
391
- point: positions[0]
392
- };
393
- }
394
- else {
395
- return {
396
- point: null
397
- };
398
- }
399
475
  return {
400
- point: positions[positions.length - 1]
476
+ point: positions.length ? positions[positions.length - 1] : null
401
477
  };
402
478
  }
403
479
  DrawingUtils.PointAcrossPolyline = PointAcrossPolyline;
@@ -451,74 +527,6 @@ var DrawingUtils;
451
527
  DrawingUtils.GetTerrainHeight = GetTerrainHeight;
452
528
  })(DrawingUtils || (DrawingUtils = {}));
453
529
 
454
- var MeasureUtils;
455
- (function (MeasureUtils) {
456
- /**
457
- * Returns the total distance in meters between an array of points.
458
- * This distance is NOT following the terrain.
459
- * @param posses
460
- * @returns
461
- */
462
- function MeasurePolyline(params) {
463
- var posses = params.posses;
464
- if (posses.length < 2) {
465
- return {
466
- totalLength: 0
467
- };
468
- }
469
- var totalLength = 0;
470
- var pos1 = null;
471
- var pos2 = null;
472
- for (var i = 0; i < posses.length; i++) {
473
- if (pos1 == null) {
474
- pos1 = posses[i];
475
- }
476
- else if (pos2 == null) {
477
- pos2 = posses[i];
478
- totalLength += Cartesian3.distance(pos1, pos2);
479
- pos1 = pos2;
480
- pos2 = null;
481
- }
482
- }
483
- return {
484
- totalLength: totalLength
485
- };
486
- }
487
- MeasureUtils.MeasurePolyline = MeasurePolyline;
488
- function MeasurePolygon(params) {
489
- var posses = params.posses;
490
- posses = [].concat(posses);
491
- if (!Cartes.IsRing3Closed(posses)) {
492
- posses.push(posses[0].clone());
493
- }
494
- if (posses.length < 3) {
495
- return {
496
- area: 0,
497
- perimeter: 0
498
- };
499
- }
500
- var area = 0;
501
- var indices = PolygonPipeline.triangulate(posses, []);
502
- for (var i = 0; i < indices.length; i += 3) {
503
- var vector1 = posses[indices[i]];
504
- var vector2 = posses[indices[i + 1]];
505
- var vector3 = posses[indices[i + 2]];
506
- var vectorC = Cartesian3.subtract(vector2, vector1, new Cartesian3());
507
- var vectorD = Cartesian3.subtract(vector3, vector1, new Cartesian3());
508
- var areaVector = Cartesian3.cross(vectorC, vectorD, new Cartesian3());
509
- area += Cartesian3.magnitude(areaVector) / 2.0;
510
- }
511
- var perimeter = MeasurePolyline({
512
- posses: posses
513
- }).totalLength;
514
- return {
515
- area: area,
516
- perimeter: perimeter
517
- };
518
- }
519
- MeasureUtils.MeasurePolygon = MeasurePolygon;
520
- })(MeasureUtils || (MeasureUtils = {}));
521
-
522
530
  /**
523
531
  * Ensures a number is returned from a given value.
524
532
  * If given value cannot be parsed it will return defaultNum.
@@ -656,6 +664,13 @@ function applyOpacityToEntity(viewer, opacity, entity) {
656
664
  function findOpacity(entity) {
657
665
  return entity[NEW_OPACITY_KEY];
658
666
  }
667
+ function GetValue(viewer, obj) {
668
+ var _a;
669
+ if ((_a = obj) === null || _a === void 0 ? void 0 : _a.getValue) {
670
+ return obj.getValue(viewer.scene.lastRenderTime);
671
+ }
672
+ return obj;
673
+ }
659
674
  var EntityUtils;
660
675
  (function (EntityUtils) {
661
676
  /**
@@ -666,6 +681,8 @@ var EntityUtils;
666
681
  */
667
682
  function GetPos(params) {
668
683
  var viewer = params.viewer, entity = params.entity, visualRegister = params.visualRegister;
684
+ // TODO: Tidy this up, move to a separate function.
685
+ // We need a generic "get pos AS blah height reference" function.
669
686
  function evaluateRendered() {
670
687
  var rego = visualRegister ? visualRegister.GetRego({
671
688
  entityId: entity.Bruce.ID,
@@ -673,10 +690,61 @@ var EntityUtils;
673
690
  if ((rego === null || rego === void 0 ? void 0 : rego.visual) instanceof Entity) {
674
691
  var visual = rego.visual;
675
692
  if (visual.position) {
676
- if (visual.position.getValue) {
677
- return visual.position.getValue(viewer.scene.lastRenderTime);
693
+ var pos3d_1 = GetValue(viewer, visual.position);
694
+ // Fix height reference.
695
+ if (pos3d_1 === null || pos3d_1 === void 0 ? void 0 : pos3d_1.x) {
696
+ var visualHeightRef = HeightReference.RELATIVE_TO_GROUND;
697
+ if (visual.model) {
698
+ visualHeightRef = GetValue(viewer, visual.model.heightReference);
699
+ }
700
+ else if (visual.polygon) {
701
+ visualHeightRef = GetValue(viewer, visual.polygon.heightReference);
702
+ }
703
+ else if (visual.polyline) {
704
+ visualHeightRef = GetValue(viewer, visual.polyline.clampToGround) ?
705
+ HeightReference.RELATIVE_TO_GROUND : HeightReference.NONE;
706
+ }
707
+ else if (visual.billboard) {
708
+ visualHeightRef = GetValue(viewer, visual.billboard.heightReference);
709
+ }
710
+ else if (visual.ellipse) {
711
+ visualHeightRef = GetValue(viewer, visual.ellipse.heightReference);
712
+ }
713
+ else if (visual.point) {
714
+ visualHeightRef = GetValue(viewer, visual.point.heightReference);
715
+ }
716
+ if (visualHeightRef == params.heightReference) {
717
+ return pos3d_1;
718
+ }
719
+ var carto_1 = Cartographic.fromCartesian(pos3d_1);
720
+ if (visualHeightRef == HeightReference.NONE) {
721
+ // Turn absolute into clamped.
722
+ if (params.heightReference == HeightReference.CLAMP_TO_GROUND) {
723
+ return Cartesian3.fromRadians(carto_1.longitude, carto_1.latitude, 0);
724
+ }
725
+ // Turn absolute into relative (remove terrain height).
726
+ else if (params.heightReference == HeightReference.RELATIVE_TO_GROUND) {
727
+ var terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto_1), 0);
728
+ return Cartesian3.fromRadians(carto_1.longitude, carto_1.latitude, carto_1.height - terrainHeight);
729
+ }
730
+ }
731
+ else if (visualHeightRef == HeightReference.CLAMP_TO_GROUND) {
732
+ var terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto_1), 0);
733
+ return Cartesian3.fromRadians(carto_1.longitude, carto_1.latitude, terrainHeight);
734
+ }
735
+ else if (visualHeightRef == HeightReference.RELATIVE_TO_GROUND) {
736
+ // Turn relative into absolute (add terrain height).
737
+ if (params.heightReference == HeightReference.NONE) {
738
+ var terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto_1), 0);
739
+ return Cartesian3.fromRadians(carto_1.longitude, carto_1.latitude, carto_1.height + terrainHeight);
740
+ }
741
+ // Turn relative into clamped.
742
+ else if (params.heightReference == HeightReference.CLAMP_TO_GROUND) {
743
+ return Cartesian3.fromRadians(carto_1.longitude, carto_1.latitude, 0);
744
+ }
745
+ }
746
+ return pos3d_1;
678
747
  }
679
- return visual.position;
680
748
  }
681
749
  }
682
750
  return null;
@@ -746,7 +814,14 @@ var EntityUtils;
746
814
  return pos3d;
747
815
  }
748
816
  pos3d = evaluateRecord();
749
- return Cartes.ValidateCartes3(pos3d) ? pos3d : null;
817
+ var carto = Cartes.ValidateCartes3(pos3d) ? Cartographic.fromCartesian(pos3d) : null;
818
+ if (carto) {
819
+ // Since we don't know height reference, we can't convert it.
820
+ // We will just clamp it to ground.
821
+ var terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);
822
+ pos3d = Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);
823
+ }
824
+ return pos3d;
750
825
  }
751
826
  EntityUtils.GetPos = GetPos;
752
827
  /**
@@ -2311,13 +2386,11 @@ var CesiumParabola = /** @class */ (function () {
2311
2386
  CesiumParabola.prototype.Animate = function () {
2312
2387
  var _this = this;
2313
2388
  this.Dispose();
2314
- var p1 = this.curPos1;
2315
- var p2 = this.curPos2;
2316
2389
  var retry = false;
2317
- if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {
2390
+ if (!this.curPos1 || !this.curPos2 || !Cartes.ValidateCartes3(this.curPos1) || !Cartes.ValidateCartes3(this.curPos2)) {
2318
2391
  retry = true;
2319
2392
  }
2320
- var TOTAL_LENGTH = retry ? 0 : Cartesian3.distance(p1, p2);
2393
+ var TOTAL_LENGTH = retry ? 0 : Cartesian3.distance(this.curPos1, this.curPos2);
2321
2394
  if (TOTAL_LENGTH <= 0) {
2322
2395
  retry = true;
2323
2396
  }
@@ -2330,11 +2403,11 @@ var CesiumParabola = /** @class */ (function () {
2330
2403
  };
2331
2404
  return;
2332
2405
  }
2333
- var TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));
2334
- var POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;
2335
2406
  var RATE_PER_SECOND = 1000 / 40;
2336
2407
  var SEC_DURATION = this.duration;
2337
2408
  var HEIGHT_DISTANCE_RATIO = this.heightDistanceRatio;
2409
+ var TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));
2410
+ var POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;
2338
2411
  var TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);
2339
2412
  var curPoints = [];
2340
2413
  var curPoint = 0;
@@ -2366,7 +2439,7 @@ var CesiumParabola = /** @class */ (function () {
2366
2439
  }, false),
2367
2440
  point: {
2368
2441
  heightReference: HeightReference.NONE,
2369
- pixelSize: this.width * 1.3,
2442
+ pixelSize: this.width * 1.8,
2370
2443
  color: Color.fromCssColorString(this.color),
2371
2444
  outlineColor: Color.WHITE,
2372
2445
  outlineWidth: 2
@@ -2376,107 +2449,125 @@ var CesiumParabola = /** @class */ (function () {
2376
2449
  this.viewer.entities.add(p2Entity);
2377
2450
  p1Entity.parent = parabola;
2378
2451
  p2Entity.parent = parabola;
2452
+ var siblings = [p1Entity, p2Entity];
2379
2453
  var quadraticKey = null;
2380
2454
  var quadratic = null;
2381
- var prepareQuadratic = function () {
2382
- var p1 = _this.curPos1;
2383
- var p2 = _this.curPos2;
2384
- if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {
2385
- return;
2386
- }
2387
- var height1 = Cartographic.fromCartesian(p1).height;
2388
- var height2 = Cartographic.fromCartesian(p2).height;
2389
- if (isNaN(height1) || isNaN(height2)) {
2390
- return;
2391
- }
2392
- var totalHeight = height2 + height1;
2393
- var curQuadraticKey = height1 + "-" + height2;
2394
- if (quadraticKey == curQuadraticKey) {
2395
- return;
2396
- }
2397
- var points2d = [
2398
- new Cartesian2(0, height1),
2399
- new Cartesian2(TOTAL_LENGTH, height2)
2400
- ];
2401
- var vertexHeight = 0;
2402
- // Flat line.
2403
- if (HEIGHT_DISTANCE_RATIO == 0) {
2404
- vertexHeight = totalHeight * 0.5;
2405
- }
2406
- else {
2407
- var largestHeight = Math.max(height1, height2);
2408
- vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);
2409
- }
2410
- points2d.push(new Cartesian2(TOTAL_LENGTH * 0.5, vertexHeight));
2411
- var calcQuadratic = function (points) {
2412
- // Swaps position of two rows in matrix.
2413
- function swapRows(matrix, rowAIndex, rowBIndex) {
2414
- var rowAVal = matrix[rowAIndex];
2415
- matrix[rowAIndex] = matrix[rowBIndex];
2416
- matrix[rowBIndex] = rowAVal;
2417
- return matrix;
2455
+ var quadraticPreparing = false;
2456
+ var prepareQuadratic = function () { return __awaiter(_this, void 0, void 0, function () {
2457
+ var p1, p2, height1, height2, totalHeight, curQuadraticKey, points2d, vertexHeight, largestHeight, calcQuadratic;
2458
+ return __generator(this, function (_a) {
2459
+ if (quadraticPreparing) {
2460
+ return [2 /*return*/];
2418
2461
  }
2419
- // Zeros rowA at colIndex by subtracting a multiplied rowB from it.
2420
- function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {
2421
- var zeroRow = matrix[zeroingIndex];
2422
- var parentRow = matrix[parentIndex];
2423
- if (zeroRow[colIndex] == 0) {
2424
- return matrix;
2462
+ quadraticPreparing = true;
2463
+ try {
2464
+ p1 = this.curPos1;
2465
+ p2 = this.curPos2;
2466
+ if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {
2467
+ return [2 /*return*/];
2425
2468
  }
2426
- else if (parentRow[colIndex] == 0) {
2427
- matrix = swapRows(matrix, parentIndex, zeroingIndex);
2428
- return divideMatrixRow(matrix, parentIndex, colIndex);
2469
+ height1 = Cartographic.fromCartesian(p1).height;
2470
+ height2 = Cartographic.fromCartesian(p2).height;
2471
+ if (isNaN(height1) || isNaN(height2)) {
2472
+ return [2 /*return*/];
2429
2473
  }
2430
- // rowAIndex colIndex / rowBIndex colIndex = factor;
2431
- var factor = zeroRow[colIndex] / parentRow[colIndex];
2432
- for (var i = 0; i < zeroRow.length; i++) {
2433
- if (i >= colIndex) {
2434
- zeroRow[i] -= parentRow[i] * factor;
2435
- }
2474
+ totalHeight = height2 + height1;
2475
+ curQuadraticKey = height1 + "-" + height2 + "-" + TOTAL_LENGTH;
2476
+ if (quadraticKey == curQuadraticKey) {
2477
+ return [2 /*return*/];
2436
2478
  }
2437
- return matrix;
2438
- }
2439
- // Makes a given row column equal 1 by diving while row by that column.
2440
- function divideMatrixRow(matrix, rowIndex, colIndex) {
2441
- var row = matrix[rowIndex];
2442
- var colValue = row[colIndex];
2443
- for (var i = 0; i < row.length; i++) {
2444
- if (i >= colIndex) {
2445
- row[i] /= colValue;
2446
- }
2479
+ points2d = [
2480
+ new Cartesian2(0, height1),
2481
+ new Cartesian2(TOTAL_LENGTH, height2)
2482
+ ];
2483
+ vertexHeight = 0;
2484
+ // Flat line.
2485
+ if (HEIGHT_DISTANCE_RATIO == 0) {
2486
+ vertexHeight = totalHeight * 0.5;
2447
2487
  }
2448
- return matrix;
2449
- }
2450
- // Returns initial matrix for calculating a, b and c for quadratic formula from given points.
2451
- function matrixFromPoints(points) {
2452
- var rows = [];
2453
- var constructRow = function (point) {
2454
- rows.push([
2455
- -Math.pow(point.x, 2),
2456
- point.x,
2457
- 1,
2458
- point.y
2459
- ]);
2460
- };
2461
- for (var i = 0; i < points.length; i++) {
2462
- constructRow(points[i]);
2488
+ else {
2489
+ largestHeight = Math.max(height1, height2);
2490
+ vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);
2463
2491
  }
2464
- return rows;
2492
+ points2d.push(new Cartesian2(TOTAL_LENGTH * 0.5, vertexHeight));
2493
+ calcQuadratic = function (points) {
2494
+ // Swaps position of two rows in matrix.
2495
+ function swapRows(matrix, rowAIndex, rowBIndex) {
2496
+ var rowAVal = matrix[rowAIndex];
2497
+ matrix[rowAIndex] = matrix[rowBIndex];
2498
+ matrix[rowBIndex] = rowAVal;
2499
+ return matrix;
2500
+ }
2501
+ // Zeros rowA at colIndex by subtracting a multiplied rowB from it.
2502
+ function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {
2503
+ var zeroRow = matrix[zeroingIndex];
2504
+ var parentRow = matrix[parentIndex];
2505
+ if (zeroRow[colIndex] == 0) {
2506
+ return matrix;
2507
+ }
2508
+ else if (parentRow[colIndex] == 0) {
2509
+ matrix = swapRows(matrix, parentIndex, zeroingIndex);
2510
+ return divideMatrixRow(matrix, parentIndex, colIndex);
2511
+ }
2512
+ // rowAIndex colIndex / rowBIndex colIndex = factor;
2513
+ var factor = zeroRow[colIndex] / parentRow[colIndex];
2514
+ for (var i = 0; i < zeroRow.length; i++) {
2515
+ if (i >= colIndex) {
2516
+ zeroRow[i] -= parentRow[i] * factor;
2517
+ }
2518
+ }
2519
+ return matrix;
2520
+ }
2521
+ // Makes a given row column equal 1 by diving while row by that column.
2522
+ function divideMatrixRow(matrix, rowIndex, colIndex) {
2523
+ var row = matrix[rowIndex];
2524
+ var colValue = row[colIndex];
2525
+ for (var i = 0; i < row.length; i++) {
2526
+ if (i >= colIndex) {
2527
+ row[i] /= colValue;
2528
+ }
2529
+ }
2530
+ return matrix;
2531
+ }
2532
+ // Returns initial matrix for calculating a, b and c for quadratic formula from given points.
2533
+ function matrixFromPoints(points) {
2534
+ var rows = [];
2535
+ var constructRow = function (point) {
2536
+ rows.push([
2537
+ -Math.pow(point.x, 2),
2538
+ point.x,
2539
+ 1,
2540
+ point.y
2541
+ ]);
2542
+ };
2543
+ for (var i = 0; i < points.length; i++) {
2544
+ constructRow(points[i]);
2545
+ }
2546
+ return rows;
2547
+ }
2548
+ var initialMatrix = matrixFromPoints(points);
2549
+ var step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);
2550
+ var step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);
2551
+ var step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);
2552
+ var step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);
2553
+ var step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);
2554
+ var step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);
2555
+ var a = step6Matrix[0][3];
2556
+ var b = step6Matrix[1][3];
2557
+ var c = step6Matrix[2][3];
2558
+ return { a: a, b: b, c: c };
2559
+ };
2560
+ quadratic = calcQuadratic(points2d);
2465
2561
  }
2466
- var initialMatrix = matrixFromPoints(points);
2467
- var step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);
2468
- var step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);
2469
- var step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);
2470
- var step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);
2471
- var step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);
2472
- var step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);
2473
- var a = step6Matrix[0][3];
2474
- var b = step6Matrix[1][3];
2475
- var c = step6Matrix[2][3];
2476
- return { a: a, b: b, c: c };
2477
- };
2478
- quadratic = calcQuadratic(points2d);
2479
- };
2562
+ catch (e) {
2563
+ console.error(e);
2564
+ }
2565
+ finally {
2566
+ quadraticPreparing = false;
2567
+ }
2568
+ return [2 /*return*/];
2569
+ });
2570
+ }); };
2480
2571
  var getPosition = function (increment) {
2481
2572
  if (!quadratic) {
2482
2573
  return null;
@@ -2494,13 +2585,16 @@ var CesiumParabola = /** @class */ (function () {
2494
2585
  var pos3d = DrawingUtils.PointAcrossPolyline({
2495
2586
  viewer: _this.viewer,
2496
2587
  distance: lengthAcross,
2497
- posses: [p1, p2]
2588
+ posses: [_this.curPos1, _this.curPos2]
2498
2589
  }).point;
2499
2590
  var point = Cartographic.fromCartesian(pos3d);
2500
2591
  var posHeight = getParabolaYFromX(lengthAcross, quadratic);
2501
2592
  return Cartesian3.fromRadians(point.longitude, point.latitude, posHeight);
2502
2593
  };
2503
2594
  var updatePoints = function () {
2595
+ if (!quadratic) {
2596
+ return;
2597
+ }
2504
2598
  var increment = Math.floor(curPoint);
2505
2599
  var chips = curPoint - Math.floor(curPoint);
2506
2600
  var posses = [];
@@ -2517,13 +2611,22 @@ var CesiumParabola = /** @class */ (function () {
2517
2611
  curPoints = posses;
2518
2612
  };
2519
2613
  var doTick = function () {
2520
- if (curPoint >= TOTAL_POINTS) {
2521
- clearInterval(animateInterval);
2522
- return;
2614
+ var p1 = _this.curPos1;
2615
+ var p2 = _this.curPos2;
2616
+ var newLength = p1 && p2 ? Cartesian3.distance(p1, p2) : -1;
2617
+ if (newLength > 0 && newLength != TOTAL_LENGTH) {
2618
+ TOTAL_LENGTH = newLength;
2619
+ TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));
2620
+ POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;
2621
+ TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);
2523
2622
  }
2524
- curPoint += TICK_LENGTH_INC;
2525
2623
  prepareQuadratic();
2526
- updatePoints();
2624
+ if (quadratic) {
2625
+ if (curPoint < TOTAL_POINTS) {
2626
+ curPoint += TICK_LENGTH_INC;
2627
+ }
2628
+ updatePoints();
2629
+ }
2527
2630
  };
2528
2631
  var animateInterval = setInterval(doTick, RATE_PER_SECOND);
2529
2632
  this.dispose = function () {
@@ -2540,10 +2643,7 @@ var CesiumParabola = /** @class */ (function () {
2540
2643
  };
2541
2644
  return {
2542
2645
  parabola: parabola,
2543
- siblings: [
2544
- p1Entity,
2545
- p2Entity
2546
- ]
2646
+ siblings: siblings
2547
2647
  };
2548
2648
  };
2549
2649
  CesiumParabola.prototype.Dispose = function () {
@@ -2565,7 +2665,7 @@ var RelationRenderEngine;
2565
2665
  RelationRenderEngine.GetRenderGroupId = GetRenderGroupId;
2566
2666
  function Render(params) {
2567
2667
  return __awaiter(this, void 0, void 0, function () {
2568
- var apiGetter, viewer, visualRegister, menuItemId, relations, api, rendered, i, relation, fromEntity, toEntity, dataEntity, _a, relationType, style, _b, cEntity;
2668
+ var apiGetter, viewer, visualRegister, menuItemId, relations, api, rendered, i, relation, fromEntity, toEntity, dataEntity, _a, relationType, styleId, entityType, style, _b, cEntity;
2569
2669
  return __generator(this, function (_c) {
2570
2670
  switch (_c.label) {
2571
2671
  case 0:
@@ -2575,7 +2675,7 @@ var RelationRenderEngine;
2575
2675
  i = 0;
2576
2676
  _c.label = 1;
2577
2677
  case 1:
2578
- if (!(i < relations.length)) return [3 /*break*/, 12];
2678
+ if (!(i < relations.length)) return [3 /*break*/, 14];
2579
2679
  relation = relations[i];
2580
2680
  return [4 /*yield*/, Entity$1.Get({
2581
2681
  api: api,
@@ -2608,18 +2708,29 @@ var RelationRenderEngine;
2608
2708
  })];
2609
2709
  case 7:
2610
2710
  relationType = (_c.sent()).relationType;
2611
- if (!relationType.EntityDisplaySettingID) return [3 /*break*/, 9];
2612
- return [4 /*yield*/, Style.Get({
2711
+ styleId = Number(relationType === null || relationType === void 0 ? void 0 : relationType["Relation.EntityType.ID"]);
2712
+ if (!!styleId) return [3 /*break*/, 9];
2713
+ return [4 /*yield*/, EntityType.Get({
2613
2714
  api: api,
2614
- styleId: Number(relationType.EntityDisplaySettingID)
2715
+ entityTypeId: relationType === null || relationType === void 0 ? void 0 : relationType["Relation.EntityType.ID"]
2615
2716
  })];
2616
2717
  case 8:
2617
- _b = (_c.sent()).style;
2618
- return [3 /*break*/, 10];
2718
+ entityType = (_c.sent()).entityType;
2719
+ styleId = entityType === null || entityType === void 0 ? void 0 : entityType["DisplaySetting.ID"];
2720
+ _c.label = 9;
2619
2721
  case 9:
2620
- _b = null;
2621
- _c.label = 10;
2722
+ if (!styleId) return [3 /*break*/, 11];
2723
+ return [4 /*yield*/, Style.Get({
2724
+ api: api,
2725
+ styleId: styleId
2726
+ })];
2622
2727
  case 10:
2728
+ _b = (_c.sent()).style;
2729
+ return [3 /*break*/, 12];
2730
+ case 11:
2731
+ _b = null;
2732
+ _c.label = 12;
2733
+ case 12:
2623
2734
  style = _b;
2624
2735
  cEntity = Parabola.Render({
2625
2736
  dataEntity: dataEntity,
@@ -2632,11 +2743,11 @@ var RelationRenderEngine;
2632
2743
  });
2633
2744
  cEntity._renderGroup = GetRenderGroupId(relation);
2634
2745
  rendered[GetRenderGroupId(relation)] = cEntity;
2635
- _c.label = 11;
2636
- case 11:
2746
+ _c.label = 13;
2747
+ case 13:
2637
2748
  i++;
2638
2749
  return [3 /*break*/, 1];
2639
- case 12: return [2 /*return*/, rendered];
2750
+ case 14: return [2 /*return*/, rendered];
2640
2751
  }
2641
2752
  });
2642
2753
  });
@@ -2658,29 +2769,37 @@ var RelationRenderEngine;
2658
2769
  var hDistanceRatio = EnsureNumber((style === null || style === void 0 ? void 0 : style.heightDistanceRatio) ? Calculator.GetValue(style === null || style === void 0 ? void 0 : style.heightDistanceRatio, entity, []) : 0.25, 0.25);
2659
2770
  var fromPos = null;
2660
2771
  var toPos = null;
2772
+ var updatingPosses = false;
2661
2773
  var updatePosses = function () {
2774
+ if (updatingPosses) {
2775
+ return;
2776
+ }
2777
+ updatingPosses = true;
2662
2778
  try {
2663
2779
  fromPos = EntityUtils.GetPos({
2664
2780
  entity: params.fromEntity,
2665
2781
  viewer: params.viewer,
2666
- visualRegister: params.visualRegister
2782
+ visualRegister: params.visualRegister,
2783
+ heightReference: HeightReference.NONE
2667
2784
  });
2668
2785
  toPos = EntityUtils.GetPos({
2669
2786
  entity: params.toEntity,
2670
2787
  viewer: params.viewer,
2671
- visualRegister: params.visualRegister
2788
+ visualRegister: params.visualRegister,
2789
+ heightReference: HeightReference.NONE
2672
2790
  });
2673
2791
  }
2674
2792
  catch (e) {
2675
2793
  console.error(e);
2676
2794
  }
2795
+ updatingPosses = false;
2677
2796
  };
2678
2797
  updatePosses();
2679
2798
  var parabola = new CesiumParabola({
2680
2799
  viewer: params.viewer,
2681
2800
  pos1: function () { return fromPos; },
2682
2801
  pos2: function () { return toPos; },
2683
- color: cColor.toString(),
2802
+ color: cColor.toCssColorString(),
2684
2803
  width: width,
2685
2804
  duration: duration,
2686
2805
  heightDistanceRatio: hDistanceRatio
@@ -4677,7 +4796,8 @@ function createFilterGetterCacheKey(params) {
4677
4796
  cacheKey += params.api.GetBaseUrl();
4678
4797
  cacheKey += params.typeId;
4679
4798
  cacheKey += params.batchSize;
4680
- cacheKey += JSON.stringify(params.attrFilter);
4799
+ // This could potentially crash, but if it crashes here then it would crash during API request anyways.
4800
+ cacheKey += JSON.stringify(params.attrFilter ? params.attrFilter : {});
4681
4801
  return cacheKey;
4682
4802
  }
4683
4803
  var SharedGetters;
@@ -5729,9 +5849,10 @@ var RelationsRenderManager;
5729
5849
  var MenuItemManager;
5730
5850
  (function (MenuItemManager) {
5731
5851
  var Manager = /** @class */ (function () {
5732
- function Manager(viewer, visualsRegister) {
5852
+ function Manager(params) {
5733
5853
  this.items = [];
5734
5854
  this.onUpdate = null;
5855
+ var viewer = params.viewer, visualsRegister = params.visualsRegister;
5735
5856
  this.viewer = viewer;
5736
5857
  if (!visualsRegister) {
5737
5858
  visualsRegister = new VisualsRegister.Register(viewer);
@@ -5768,12 +5889,10 @@ var MenuItemManager;
5768
5889
  * Renders a given menu item and all ids children.
5769
5890
  * Will return the enabled item id.
5770
5891
  * @param params
5771
- * @param recursive
5772
5892
  * @returns
5773
5893
  */
5774
- Manager.prototype.RenderItem = function (params, recursive) {
5894
+ Manager.prototype.RenderItem = function (params) {
5775
5895
  var _a, _b, _c;
5776
- if (recursive === void 0) { recursive = true; }
5777
5896
  return __awaiter(this, void 0, void 0, function () {
5778
5897
  var rItem, isFolder, i, childId;
5779
5898
  return __generator(this, function (_d) {
@@ -5901,7 +6020,7 @@ var MenuItemManager;
5901
6020
  _d.label = 2;
5902
6021
  case 2:
5903
6022
  isFolder = !params.item.Type || params.item.Type == MenuItem.EType.None;
5904
- if (!(params.item.Children && recursive && isFolder)) return [3 /*break*/, 6];
6023
+ if (!(params.item.Children && params.recursive != false && isFolder)) return [3 /*break*/, 6];
5905
6024
  i = 0;
5906
6025
  _d.label = 3;
5907
6026
  case 3:
@@ -5929,17 +6048,20 @@ var MenuItemManager;
5929
6048
  * @param id
5930
6049
  * @param recursive
5931
6050
  */
5932
- Manager.prototype.RemoveItemById = function (id, recursive) {
6051
+ Manager.prototype.RemoveItemById = function (params) {
5933
6052
  var _a, _b;
5934
- if (recursive === void 0) { recursive = true; }
5935
6053
  return __awaiter(this, void 0, void 0, function () {
5936
- var item, _loop_1, this_1, i;
6054
+ var id, recursive, item, _loop_1, this_1, i;
5937
6055
  return __generator(this, function (_c) {
5938
6056
  switch (_c.label) {
5939
6057
  case 0:
6058
+ id = params.menuItemId, recursive = params.recursive;
5940
6059
  if (this.viewer.isDestroyed()) {
5941
6060
  return [2 /*return*/];
5942
6061
  }
6062
+ if (recursive == null) {
6063
+ recursive = true;
6064
+ }
5943
6065
  item = this.items.find(function (x) { return x.id === id; });
5944
6066
  if (!item) return [3 /*break*/, 5];
5945
6067
  if (!recursive) return [3 /*break*/, 4];
@@ -5950,7 +6072,9 @@ var MenuItemManager;
5950
6072
  case 0:
5951
6073
  child = this_1.items.find(function (x) { return x.id === item.childIds[i]; });
5952
6074
  if (!child) return [3 /*break*/, 2];
5953
- return [4 /*yield*/, this_1.RemoveItemById(child.id)];
6075
+ return [4 /*yield*/, this_1.RemoveItemById({
6076
+ menuItemId: child.id
6077
+ })];
5954
6078
  case 1:
5955
6079
  _a.sent();
5956
6080
  _a.label = 2;
@@ -5995,15 +6119,15 @@ var MenuItemManager;
5995
6119
  * Rerenders given entities.
5996
6120
  * If no menu items are specified then the rerender is called on all enabled menu items.
5997
6121
  * It is highly recommended to supply menu item ids.
5998
- * @param entityIds
5999
- * @param menuItemIds
6122
+ * @param params
6000
6123
  */
6001
- Manager.prototype.ReRender = function (entityIds, menuItemIds) {
6124
+ Manager.prototype.ReRender = function (params) {
6002
6125
  return __awaiter(this, void 0, void 0, function () {
6003
- var items, i, item;
6126
+ var entityIds, menuItemIds, items, i, item;
6004
6127
  return __generator(this, function (_a) {
6005
6128
  switch (_a.label) {
6006
6129
  case 0:
6130
+ entityIds = params.entityIds, menuItemIds = params.menuItemIds;
6007
6131
  if (!(entityIds === null || entityIds === void 0 ? void 0 : entityIds.length)) {
6008
6132
  return [2 /*return*/];
6009
6133
  }
@@ -6345,6 +6469,14 @@ var MenuItemCreator;
6345
6469
  });
6346
6470
  }
6347
6471
  MenuItemCreator.RenderBookmarkItems = RenderBookmarkItems;
6472
+ function RenderRelations(params) {
6473
+ return __awaiter(this, void 0, void 0, function () {
6474
+ return __generator(this, function (_a) {
6475
+ return [2 /*return*/];
6476
+ });
6477
+ });
6478
+ }
6479
+ MenuItemCreator.RenderRelations = RenderRelations;
6348
6480
  })(MenuItemCreator || (MenuItemCreator = {}));
6349
6481
 
6350
6482
  var DEFAULT_BING_KEY = "AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl";
@@ -7311,37 +7443,61 @@ var TileRenderEngine;
7311
7443
  // TODO: Move these to the data model.
7312
7444
  var MIN_SHADOW_SIZE = 2048;
7313
7445
  var MAX_SHADOW_SIZE = 32768;
7446
+ var RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
7447
+ /**
7448
+ * Renders DATA_VERSION = 1 navigator.
7449
+ * @param params
7450
+ * @param bookmark
7451
+ * @param view
7452
+ */
7314
7453
  function renderLegacyNavigator(params, bookmark, view) {
7315
- var _a, _b;
7454
+ var _a, _b, _c, _d, _e;
7316
7455
  return __awaiter(this, void 0, void 0, function () {
7317
- var vSettings, bSettings, frustum, scene, curFrustum, camera, pos, go, enabledItems, newItemIds, _i, enabledItems_1, id;
7318
- return __generator(this, function (_c) {
7319
- switch (_c.label) {
7456
+ var vSettings, bSettings, manager, VR, scene, baseColor, frustum, curFrustum, camera, pos, go, fxaa, pointer, clock, timeStr, enabledItems, newItemIds, _i, enabledItems_1, id, menuItem;
7457
+ return __generator(this, function (_f) {
7458
+ switch (_f.label) {
7320
7459
  case 0:
7321
7460
  vSettings = view.Settings;
7322
7461
  bSettings = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings;
7462
+ manager = params.manager;
7463
+ VR = manager.VisualsRegister;
7464
+ scene = manager.Viewer.scene;
7323
7465
  return [4 /*yield*/, TileRenderEngine.Terrain.LegacyNavigator.RenderView({
7324
7466
  apiGetter: params.apiGetter,
7325
7467
  bookmarkId: params.bookmarkId,
7326
- viewer: params.manager.Viewer,
7468
+ viewer: manager.Viewer,
7327
7469
  viewId: params.viewId,
7328
7470
  })];
7329
7471
  case 1:
7330
- _c.sent();
7472
+ _f.sent();
7331
7473
  return [4 /*yield*/, TileRenderEngine.Map.LegacyNavigator.RenderView({
7332
7474
  apiGetter: params.apiGetter,
7333
7475
  bookmarkId: params.bookmarkId,
7334
- viewer: params.manager.Viewer,
7476
+ viewer: manager.Viewer,
7335
7477
  viewId: params.viewId,
7336
7478
  ignoreIds: []
7337
7479
  })];
7338
7480
  case 2:
7339
- _c.sent();
7481
+ _f.sent();
7482
+ baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
7483
+ if (baseColor == null) {
7484
+ // TODO: Need global default.
7485
+ baseColor = "#0326BE";
7486
+ }
7487
+ scene.globe.baseColor = Color.fromCssColorString(baseColor);
7488
+ // TODO: Other scene settings.
7489
+ // TODO: Rendered relationships.
7490
+ VR.ClearHidden();
7491
+ if ((_a = bSettings.hiddenEntityIds) === null || _a === void 0 ? void 0 : _a.length) {
7492
+ VR.SetHidden({
7493
+ entityIds: bSettings.hiddenEntityIds,
7494
+ hidden: true
7495
+ });
7496
+ }
7340
7497
  frustum = bSettings === null || bSettings === void 0 ? void 0 : bSettings.cameraFrustum;
7341
7498
  if (frustum == null) {
7342
7499
  frustum = Camera.EFrustum.Perspective;
7343
7500
  }
7344
- scene = params.manager.Viewer.scene;
7345
7501
  curFrustum = scene.camera.frustum instanceof OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;
7346
7502
  if (curFrustum != frustum) {
7347
7503
  if (frustum == Camera.EFrustum.Perspective) {
@@ -7357,7 +7513,7 @@ function renderLegacyNavigator(params, bookmark, view) {
7357
7513
  if (!params.skipCamera) {
7358
7514
  camera = bookmark.Camera;
7359
7515
  pos = Cartesian3.fromDegrees(+camera.position.longitude, +camera.position.latitude, +camera.position.height);
7360
- params.manager.Viewer.scene.camera.flyTo({
7516
+ manager.Viewer.scene.camera.flyTo({
7361
7517
  destination: pos,
7362
7518
  orientation: {
7363
7519
  heading: +camera.heading,
@@ -7367,41 +7523,83 @@ function renderLegacyNavigator(params, bookmark, view) {
7367
7523
  duration: params.skipTransition ? 0 : 2
7368
7524
  });
7369
7525
  }
7370
- go = (_a = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _a === void 0 ? void 0 : _a.groundOcclusion;
7526
+ go = (_b = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _b === void 0 ? void 0 : _b.groundOcclusion;
7371
7527
  if (go == null) {
7372
7528
  go = vSettings === null || vSettings === void 0 ? void 0 : vSettings.GroundOcclusion;
7373
7529
  }
7374
7530
  if (go == null) {
7375
7531
  go = false;
7376
7532
  }
7377
- params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;
7378
- enabledItems = params.manager.GetEnabledItemIds();
7379
- newItemIds = (_b = bSettings === null || bSettings === void 0 ? void 0 : bSettings.selectedItemIds) !== null && _b !== void 0 ? _b : [];
7380
- for (_i = 0, enabledItems_1 = enabledItems; _i < enabledItems_1.length; _i++) {
7381
- id = enabledItems_1[_i];
7382
- if (newItemIds.indexOf(id) === -1) {
7383
- params.manager.RemoveItemById(id);
7384
- }
7533
+ manager.Viewer.scene.globe.depthTestAgainstTerrain = go;
7534
+ fxaa = manager.Viewer.scene.postProcessStages.fxaa;
7535
+ fxaa.enabled = true;
7536
+ pointer = (_c = bSettings === null || bSettings === void 0 ? void 0 : bSettings.timelineSettings) === null || _c === void 0 ? void 0 : _c.timelinePointer;
7537
+ if (pointer != null) {
7538
+ clock = manager.Viewer.clock;
7539
+ timeStr = JulianDate.toIso8601(pointer);
7540
+ clock.currentTime = JulianDate.fromIso8601(timeStr);
7385
7541
  }
7386
- if (!params.bookmarkId) return [3 /*break*/, 4];
7542
+ enabledItems = manager.GetEnabledItemIds();
7543
+ newItemIds = (_d = bSettings === null || bSettings === void 0 ? void 0 : bSettings.selectedItemIds) !== null && _d !== void 0 ? _d : [];
7544
+ _i = 0, enabledItems_1 = enabledItems;
7545
+ _f.label = 3;
7546
+ case 3:
7547
+ if (!(_i < enabledItems_1.length)) return [3 /*break*/, 6];
7548
+ id = enabledItems_1[_i];
7549
+ if (!(newItemIds.indexOf(id) === -1 ||
7550
+ id == RELATION_MENU_ITEM_ID)) return [3 /*break*/, 5];
7551
+ return [4 /*yield*/, params.manager.RemoveItemById({
7552
+ menuItemId: id
7553
+ })];
7554
+ case 4:
7555
+ _f.sent();
7556
+ _f.label = 5;
7557
+ case 5:
7558
+ _i++;
7559
+ return [3 /*break*/, 3];
7560
+ case 6:
7561
+ if (!params.bookmarkId) return [3 /*break*/, 8];
7387
7562
  return [4 /*yield*/, MenuItemCreator.RenderBookmarkItems({
7388
7563
  apiGetter: params.apiGetter,
7389
- manager: params.manager,
7564
+ manager: manager,
7390
7565
  view: view,
7391
7566
  bookmark: bookmark
7392
7567
  })];
7393
- case 3:
7394
- _c.sent();
7395
- _c.label = 4;
7396
- case 4: return [2 /*return*/];
7568
+ case 7:
7569
+ _f.sent();
7570
+ _f.label = 8;
7571
+ case 8:
7572
+ if (!((_e = bSettings.drawnRelationEntityIDs) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 10];
7573
+ menuItem = {
7574
+ id: RELATION_MENU_ITEM_ID,
7575
+ Caption: "Entity relations",
7576
+ BruceEntity: {
7577
+ EntityIds: bSettings.drawnRelationEntityIDs
7578
+ },
7579
+ Type: MenuItem.EType.Relations
7580
+ };
7581
+ return [4 /*yield*/, params.manager.RenderItem({
7582
+ apiGetter: params.apiGetter,
7583
+ item: menuItem
7584
+ })];
7585
+ case 9:
7586
+ _f.sent();
7587
+ _f.label = 10;
7588
+ case 10: return [2 /*return*/];
7397
7589
  }
7398
7590
  });
7399
7591
  });
7400
7592
  }
7593
+ /**
7594
+ * Renders DATA_VERSION > 1 navigator.
7595
+ * @param params
7596
+ * @param bookmark
7597
+ * @param view
7598
+ */
7401
7599
  function renderNavigator(params, bookmark, view) {
7402
7600
  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;
7403
7601
  return __awaiter(this, void 0, void 0, function () {
7404
- var viewer, scene, vSettings, bSettings, defaults, camera, newLens, curLens, transition, pos, gOcclusion, hillShades, baseColor, shadows, size, ambientOcclusion, AO, lighting, light, quality, fxaa, dateTime, clock, terrain, selectedIds, i, id, imagery, RELATION_MENU_ITEM_ID, renderedRelationEntityIds, curEnabled, newItemIds, _i, curEnabled_1, id, menuItem;
7602
+ var viewer, scene, vSettings, bSettings, defaults, camera, newLens, curLens, transition, pos, gOcclusion, hillShades, baseColor, shadows, size, ambientOcclusion, AO, lighting, light, quality, fxaa, dateTime, clock, terrain, selectedIds, i, id, imagery, renderedRelationEntityIds, curEnabled, newItemIds, _i, curEnabled_1, id, menuItem;
7405
7603
  return __generator(this, function (_2) {
7406
7604
  switch (_2.label) {
7407
7605
  case 0:
@@ -7616,7 +7814,6 @@ function renderNavigator(params, bookmark, view) {
7616
7814
  })];
7617
7815
  case 3:
7618
7816
  _2.sent();
7619
- RELATION_MENU_ITEM_ID = "BOOKMARK_ENTITY_RELATIONS";
7620
7817
  renderedRelationEntityIds = bSettings.renderedEntityRelations;
7621
7818
  if (!renderedRelationEntityIds) {
7622
7819
  renderedRelationEntityIds = [];
@@ -7630,7 +7827,9 @@ function renderNavigator(params, bookmark, view) {
7630
7827
  id = curEnabled_1[_i];
7631
7828
  if (!(newItemIds.indexOf(id) === -1 ||
7632
7829
  id == RELATION_MENU_ITEM_ID)) return [3 /*break*/, 6];
7633
- return [4 /*yield*/, params.manager.RemoveItemById(id)];
7830
+ return [4 /*yield*/, params.manager.RemoveItemById({
7831
+ menuItemId: id
7832
+ })];
7634
7833
  case 5:
7635
7834
  _2.sent();
7636
7835
  _2.label = 6;
@@ -7713,9 +7912,6 @@ var ViewRenderEngine;
7713
7912
  bookmark = _b;
7714
7913
  _c.label = 7;
7715
7914
  case 7:
7716
- if (bookmark && view.DataVersion != bookmark.DataVersion) {
7717
- throw new Error("View and bookmark settings version mismatch.");
7718
- }
7719
7915
  version = view.DataVersion;
7720
7916
  if (!(version == 1)) return [3 /*break*/, 9];
7721
7917
  return [4 /*yield*/, renderLegacyNavigator(params, bookmark, view)];
@@ -7736,7 +7932,8 @@ var ViewRenderEngine;
7736
7932
 
7737
7933
  var ViewUtils;
7738
7934
  (function (ViewUtils) {
7739
- function GatherLegacyMapTiles(viewer) {
7935
+ function GatherLegacyMapTiles(params) {
7936
+ var viewer = params.viewer;
7740
7937
  var collection = viewer.imageryLayers;
7741
7938
  var tiles = [];
7742
7939
  for (var i = 0; i < collection.length; i++) {
@@ -7753,15 +7950,22 @@ var ViewUtils;
7753
7950
  });
7754
7951
  }
7755
7952
  }
7756
- return tiles.reverse();
7953
+ return {
7954
+ imagery: tiles.reverse()
7955
+ };
7757
7956
  }
7758
7957
  ViewUtils.GatherLegacyMapTiles = GatherLegacyMapTiles;
7759
- function GatherLegacyTerrainTile(viewer) {
7958
+ function GatherLegacyTerrainTile(params) {
7959
+ var viewer = params.viewer;
7760
7960
  var enabled = viewer.terrainProvider;
7761
7961
  if (enabled === null || enabled === void 0 ? void 0 : enabled._bName) {
7762
- return enabled._bName;
7962
+ return {
7963
+ terrain: enabled._bName
7964
+ };
7763
7965
  }
7764
- return "flatterrain";
7966
+ return {
7967
+ terrain: "flatterrain"
7968
+ };
7765
7969
  }
7766
7970
  ViewUtils.GatherLegacyTerrainTile = GatherLegacyTerrainTile;
7767
7971
  function GatherMapTiles(params) {