bruce-cesium 0.6.6 → 0.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/bruce-cesium.es5.js +155 -63
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +154 -62
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/rendering/entity-render-engine.js +19 -18
  6. package/dist/lib/rendering/entity-render-engine.js.map +1 -1
  7. package/dist/lib/rendering/menu-item-manager.js +14 -11
  8. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  9. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +93 -0
  10. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +1 -0
  11. package/dist/lib/rendering/render-managers/render-manager.js +4 -3
  12. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -1
  13. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +6 -1
  14. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  15. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +6 -1
  16. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -1
  17. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +6 -1
  18. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -1
  19. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +6 -1
  20. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -1
  21. package/dist/lib/rendering/tile-render-engine.js +7 -6
  22. package/dist/lib/rendering/tile-render-engine.js.map +1 -1
  23. package/dist/lib/rendering/tileset-render-engine.js +8 -7
  24. package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
  25. package/dist/lib/rendering/view-render-engine.js +8 -7
  26. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  27. package/dist/lib/utils/entity-utils.js +7 -6
  28. package/dist/lib/utils/entity-utils.js.map +1 -1
  29. package/dist/lib/utils/js-utils.js +22 -0
  30. package/dist/lib/utils/js-utils.js.map +1 -0
  31. package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +16 -0
  32. package/dist/types/rendering/render-managers/render-manager.d.ts +3 -1
  33. package/dist/types/utils/js-utils.d.ts +8 -0
  34. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, ObjectUtils, Tileset, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, TilesetExtMapTiles, ProgramKey, Camera } from 'bruce-models';
2
- import { Cartesian2, Cartographic, Math as Math$1, Entity, Primitive, Cesium3DTileFeature, Color, Cartesian3, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, HeadingPitchRange, OrthographicFrustum, JulianDate, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, createOsmBuildings, Cesium3DTileStyle } from 'cesium';
2
+ import { Cartesian2, Cartographic, Math as Math$1, Cartesian3, Color, HeightReference, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, HeadingPitchRange, OrthographicFrustum, JulianDate, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Primitive, Cesium3DTileFeature, Matrix4, Cesium3DTileset, EllipsoidGeodesic, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, createOsmBuildings, Cesium3DTileStyle, KmlDataSource } from 'cesium';
3
3
 
4
4
  var TIME_LAG = 300;
5
5
  var POSITION_CHECK_TIMER = 950;
@@ -423,6 +423,24 @@ var MeasureUtils;
423
423
  MeasureUtils.MeasurePolyline = MeasurePolyline;
424
424
  })(MeasureUtils || (MeasureUtils = {}));
425
425
 
426
+ /**
427
+ * Ensures a number is returned from a given value.
428
+ * If given value cannot be parsed it will return defaultNum.
429
+ * @param value
430
+ * @param defaultNum default is 0.
431
+ * @returns
432
+ */
433
+ function EnsureNumber(value, defaultNum) {
434
+ if (!defaultNum) {
435
+ defaultNum = 0;
436
+ }
437
+ value = Number(value);
438
+ if (isNaN(value)) {
439
+ return defaultNum;
440
+ }
441
+ return value;
442
+ }
443
+
426
444
  function traverseEntity(cEntity, arr) {
427
445
  if (cEntity._parentEntity) {
428
446
  traverseEntity(cEntity._parentEntity, arr);
@@ -555,7 +573,7 @@ var EntityUtils;
555
573
  function evaluate() {
556
574
  if (entity.location && Carto.ValidateCarto(entity.location)) {
557
575
  var location_1 = entity.location;
558
- return Cartesian3.fromDegrees(Number(location_1.longitude), Number(location_1.latitude), Number(location_1.altitude));
576
+ return Cartesian3.fromDegrees(EnsureNumber(location_1.longitude), EnsureNumber(location_1.latitude), EnsureNumber(location_1.altitude));
559
577
  }
560
578
  if (entity.geometry && typeof entity.geometry == "object") {
561
579
  var pointStr = entity.geometry.Point;
@@ -563,14 +581,14 @@ var EntityUtils;
563
581
  var points = Geometry.ParsePoints(pointStr);
564
582
  var point = points.length > 0 ? points[0] : null;
565
583
  if (point && Carto.ValidateCarto(point)) {
566
- return Cartesian3.fromDegrees(Number(point.longitude), Number(point.latitude), Number(point.altitude));
584
+ return Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));
567
585
  }
568
586
  }
569
587
  var lineStr = entity.geometry.LineString;
570
588
  if (lineStr && typeof lineStr == "string") {
571
589
  var points = Geometry.ParsePoints(lineStr);
572
590
  if (points.length > 0) {
573
- var posses = points.map(function (x) { return Cartesian3.fromDegrees(Number(x.longitude), Number(x.latitude), Number(x.altitude)); });
591
+ var posses = points.map(function (x) { return Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)); });
574
592
  var length_1 = MeasureUtils.MeasurePolyline(posses);
575
593
  if (length_1 > 0) {
576
594
  var point = DrawingUtils.PointAcrossPolyline(viewer, posses, length_1 / 2);
@@ -590,15 +608,15 @@ var EntityUtils;
590
608
  var points = Geometry.ParsePoints(boundary.LinearRing);
591
609
  var point = Carto.GetCenter(points);
592
610
  if (point && Carto.ValidateCarto(point)) {
593
- return Cartesian3.fromDegrees(Number(point.longitude), Number(point.latitude), Number(point.altitude));
611
+ return Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));
594
612
  }
595
613
  }
596
614
  }
597
615
  }
598
616
  if (entity.boundaries) {
599
617
  var point = {
600
- latitude: (Number(entity.boundaries.minLatitude) + Number(entity.boundaries.maxLatitude)) / 2,
601
- longitude: (Number(entity.boundaries.minLongitude) + Number(entity.boundaries.maxLongitude)) / 2,
618
+ latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,
619
+ longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,
602
620
  altitude: 0
603
621
  };
604
622
  if (point && Carto.ValidateCarto(point)) {
@@ -766,7 +784,7 @@ var RenderManager;
766
784
  function GetZoomControlFromDistance(zoomControl, distance) {
767
785
  for (var i = 0; i < zoomControl.length; i++) {
768
786
  var zoomItem = zoomControl[i];
769
- if ((distance >= Number(zoomItem.MinZoom)) && (distance <= Number(zoomItem.MaxZoom))) {
787
+ if ((distance >= EnsureNumber(zoomItem.MinZoom)) && (distance <= EnsureNumber(zoomItem.MaxZoom))) {
770
788
  return zoomItem;
771
789
  }
772
790
  }
@@ -778,8 +796,8 @@ var RenderManager;
778
796
  var max = 100;
779
797
  for (var i = 0; i < zoomControl.length; i++) {
780
798
  var zoomItem = zoomControl[i];
781
- zoomItem.MinZoom = Number(zoomItem.MinZoom);
782
- zoomItem.MaxZoom = Number(zoomItem.MaxZoom);
799
+ zoomItem.MinZoom = EnsureNumber(zoomItem.MinZoom);
800
+ zoomItem.MaxZoom = EnsureNumber(zoomItem.MaxZoom);
783
801
  if (zoomItem.MinZoom != null) {
784
802
  if (zoomItem.MinZoom < min) {
785
803
  min = zoomItem.MinZoom;
@@ -845,7 +863,7 @@ function getPolygonExtrusion(entity, tags, ring, posses, heightRef, pStyle) {
845
863
  points.forEach(function (point) {
846
864
  point.height = alt_1;
847
865
  });
848
- posses = points.map(function (x) { return Cartesian3.fromRadians(Number(x.longitude), Number(x.latitude), Number(x.height)); });
866
+ posses = points.map(function (x) { return Cartesian3.fromRadians(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.height)); });
849
867
  }
850
868
  }
851
869
  // Step 2. Try get using geometry data.
@@ -872,7 +890,7 @@ function getPolygonExtrusion(entity, tags, ring, posses, heightRef, pStyle) {
872
890
  }
873
891
  data.posses = posses;
874
892
  if (data.value != undefined) {
875
- data.value = Number(data.value);
893
+ data.value = EnsureNumber(data.value);
876
894
  }
877
895
  return data;
878
896
  }
@@ -893,7 +911,7 @@ function getZIndex(style, entity, tags) {
893
911
  if (zIndex == null) {
894
912
  zIndex = 0;
895
913
  }
896
- return Number(zIndex);
914
+ return EnsureNumber(zIndex);
897
915
  }
898
916
  function getStyle(api, entity, styleId) {
899
917
  return __awaiter(this, void 0, void 0, function () {
@@ -1093,7 +1111,7 @@ var EntityRenderEngine;
1093
1111
  iconUrl = ClientFile.GetUrl(params.api, style.iconId);
1094
1112
  }
1095
1113
  if (iconUrl) {
1096
- var iconScale = Number(Calculator.GetValue(style.iconScale, entity, params.tags));
1114
+ var iconScale = EnsureNumber(Calculator.GetValue(style.iconScale, entity, params.tags));
1097
1115
  if (!iconScale && iconScale != 0) {
1098
1116
  iconScale = 1;
1099
1117
  }
@@ -1120,7 +1138,7 @@ var EntityRenderEngine;
1120
1138
  if (size == null) {
1121
1139
  size = 30;
1122
1140
  }
1123
- size = Number(size);
1141
+ size = EnsureNumber(size);
1124
1142
  if (size <= 0) {
1125
1143
  return null;
1126
1144
  }
@@ -1207,7 +1225,7 @@ var EntityRenderEngine;
1207
1225
  if (!isValid) {
1208
1226
  return null;
1209
1227
  }
1210
- var posses = points.map(function (x) { return Cartesian3.fromDegrees(Number(x.longitude), Number(x.latitude), Number(x.altitude)); });
1228
+ var posses = points.map(function (x) { return Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)); });
1211
1229
  // Making sure no 0 length lines coming through.
1212
1230
  // Ideally we would measure the full line but I fear that's too expensive.
1213
1231
  if (posses.length == 2 || posses.length == 3) {
@@ -1230,7 +1248,7 @@ var EntityRenderEngine;
1230
1248
  if (width == null) {
1231
1249
  width = 4;
1232
1250
  }
1233
- width = Number(width);
1251
+ width = EnsureNumber(width);
1234
1252
  if (width <= 0) {
1235
1253
  return null;
1236
1254
  }
@@ -1318,20 +1336,20 @@ var EntityRenderEngine;
1318
1336
  if (width == null) {
1319
1337
  width = 4;
1320
1338
  }
1321
- width = Number(width);
1339
+ width = EnsureNumber(width);
1322
1340
  if (width <= 0) {
1323
1341
  return null;
1324
1342
  }
1325
1343
  var heightRef = getHeightRef(style);
1326
1344
  var outerRing = pRings.find(function (x) { return x.Facing == Geometry.EPolygonRingType.Boundaries; });
1327
1345
  var points = Geometry.ParsePoints(outerRing === null || outerRing === void 0 ? void 0 : outerRing.LinearRing);
1328
- var posses = points.map(function (x) { return Cartesian3.fromDegrees(Number(x.longitude), Number(x.latitude), Number(x.altitude)); });
1346
+ var posses = points.map(function (x) { return Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)); });
1329
1347
  var extrusion = getPolygonExtrusion(entity, params.tags, outerRing, posses, heightRef, style);
1330
1348
  posses = extrusion.posses;
1331
1349
  var holeRings = pRings.filter(function (x) { return x.Facing == Geometry.EPolygonRingType.Hole; });
1332
1350
  var holePosses = holeRings.map(function (x) {
1333
1351
  var points = Geometry.ParsePoints(x.LinearRing);
1334
- return points.map(function (x) { return Cartesian3.fromDegrees(Number(x.longitude), Number(x.latitude), Number(x.altitude)); });
1352
+ return points.map(function (x) { return Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)); });
1335
1353
  });
1336
1354
  var zIndex = getZIndex(style, entity, params.tags);
1337
1355
  var cEntity = new Entity({
@@ -1425,27 +1443,27 @@ var EntityRenderEngine;
1425
1443
  function Render(params) {
1426
1444
  var entity = params.entity;
1427
1445
  var transform = entity === null || entity === void 0 ? void 0 : entity.transform;
1428
- var heading = transform ? Number(transform.heading) : 0;
1446
+ var heading = EnsureNumber(transform === null || transform === void 0 ? void 0 : transform.heading);
1429
1447
  heading = (heading + 90) % 360;
1430
- var pitch = transform ? Number(transform.pitch) : 0;
1431
- var roll = transform ? Number(transform.roll) : 0;
1432
- var scale = transform ? Number(transform.scale) : 1;
1448
+ var pitch = EnsureNumber(transform === null || transform === void 0 ? void 0 : transform.pitch);
1449
+ var roll = EnsureNumber(transform === null || transform === void 0 ? void 0 : transform.roll);
1450
+ var scale = EnsureNumber(transform.scale, 1);
1433
1451
  if (scale <= 0) {
1434
1452
  scale = 1;
1435
1453
  }
1436
1454
  var style = params.style;
1437
1455
  var styleScale = (style === null || style === void 0 ? void 0 : style.scale) ? Calculator.GetValue(style === null || style === void 0 ? void 0 : style.scale, entity, params.tags) : null;
1438
- styleScale = Number(styleScale);
1439
- if (!styleScale) {
1456
+ styleScale = EnsureNumber(styleScale ? styleScale : 1);
1457
+ if (styleScale <= 0) {
1440
1458
  styleScale = 1;
1441
1459
  }
1442
1460
  scale *= styleScale;
1443
- var hpr = new HeadingPitchRoll(heading, pitch, roll);
1461
+ var hpr = new HeadingPitchRoll(Math$1.toRadians(heading), Math$1.toRadians(pitch), Math$1.toRadians(roll));
1444
1462
  var heightRef = getHeightRef(style);
1445
1463
  var pos = EntityUtils.GetPos(params.viewer, entity);
1446
1464
  if (heightRef == HeightReference.CLAMP_TO_GROUND) {
1447
1465
  var carto = Cartographic.fromCartesian(pos);
1448
- pos = Cartesian3.fromRadians(Number(carto.longitude), Number(carto.latitude), 0);
1466
+ pos = Cartesian3.fromRadians(EnsureNumber(carto.longitude), EnsureNumber(carto.latitude), 0);
1449
1467
  heightRef = HeightReference.RELATIVE_TO_GROUND;
1450
1468
  }
1451
1469
  var orientation = Transforms.headingPitchRollQuaternion(pos, hpr);
@@ -2652,17 +2670,17 @@ var TilesetRenderEngine;
2652
2670
  return;
2653
2671
  }
2654
2672
  transform = __assign({ heading: 0, pitch: 0, roll: 0, scale: 1, x: 0, y: 0, z: 0 }, transform);
2655
- transform.scale = Number(transform.scale);
2673
+ transform.scale = EnsureNumber(transform.scale);
2656
2674
  if (transform.scale <= 0) {
2657
2675
  transform.scale = 0.000001;
2658
2676
  }
2659
- var pos = Cartesian3.fromDegrees(Number(location.longitude), Number(location.latitude), Number(location.altitude));
2660
- var hpr = HeadingPitchRoll.fromDegrees(Number(transform.heading), Number(transform.pitch), Number(transform.roll), new HeadingPitchRoll());
2677
+ var pos = Cartesian3.fromDegrees(EnsureNumber(location.longitude), EnsureNumber(location.latitude), EnsureNumber(location.altitude));
2678
+ var hpr = HeadingPitchRoll.fromDegrees(EnsureNumber(transform.heading), EnsureNumber(transform.pitch), EnsureNumber(transform.roll), new HeadingPitchRoll());
2661
2679
  var root = cTileset.root;
2662
2680
  root.transform = Transforms.headingPitchRollToFixedFrame(pos, hpr);
2663
2681
  var scaleMatrix = Matrix4.fromScale(new Cartesian3(transform.scale, transform.scale, transform.scale), new Matrix4());
2664
2682
  root.transform = Matrix4.multiply(root.transform, scaleMatrix, root.transform);
2665
- root.transform = Matrix4.multiplyByTranslation(root.transform, new Cartesian3(Number(transform.x), Number(transform.y), Number(transform.z)), root.transform);
2683
+ root.transform = Matrix4.multiplyByTranslation(root.transform, new Cartesian3(EnsureNumber(transform.x), EnsureNumber(transform.y), EnsureNumber(transform.z)), root.transform);
2666
2684
  // Force matrix to update
2667
2685
  root.updateTransform();
2668
2686
  }
@@ -2672,14 +2690,14 @@ var TilesetRenderEngine;
2672
2690
  var settings = tileset.settings;
2673
2691
  var maxScreenSpaceError = settings.maximumScreenSpaceError;
2674
2692
  if (maxScreenSpaceError || maxScreenSpaceError == 0) {
2675
- cTileset.maximumScreenSpaceError = Number(maxScreenSpaceError);
2693
+ cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);
2676
2694
  }
2677
2695
  }
2678
2696
  else if (tileset.type == Tileset.EType.PointCloud) {
2679
2697
  var settings = tileset.settings;
2680
2698
  var maxScreenSpaceError = settings.maximumScreenSpaceError;
2681
2699
  if (maxScreenSpaceError || maxScreenSpaceError == 0) {
2682
- cTileset.maximumScreenSpaceError = Number(maxScreenSpaceError);
2700
+ cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);
2683
2701
  }
2684
2702
  var attenuation = settings.attenuation;
2685
2703
  if (attenuation != null) {
@@ -2687,7 +2705,7 @@ var TilesetRenderEngine;
2687
2705
  }
2688
2706
  var attenuationMax = settings.attenuationMax;
2689
2707
  if (attenuationMax || attenuationMax == 0) {
2690
- cTileset.pointCloudShading.maximumAttenuation = Number(attenuationMax);
2708
+ cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(attenuationMax);
2691
2709
  }
2692
2710
  }
2693
2711
  else {
@@ -3321,7 +3339,12 @@ var TilesetCadRenderManager;
3321
3339
  }
3322
3340
  this.disposed = true;
3323
3341
  if (this.cTileset) {
3324
- this.cTileset.show = false;
3342
+ var viewer = this.viewer;
3343
+ if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
3344
+ this.cTileset.show = false;
3345
+ this.viewer.scene.primitives.remove(this.cTileset);
3346
+ }
3347
+ this.cTileset = null;
3325
3348
  }
3326
3349
  (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
3327
3350
  this.visualsManager.RemoveByMenuItemId(this.item.id);
@@ -3403,7 +3426,12 @@ var TilesetOsmRenderManager;
3403
3426
  }
3404
3427
  clearInterval(this.queueCheckInterval);
3405
3428
  if (this.cTileset) {
3406
- this.cTileset.show = false;
3429
+ var viewer = this.viewer;
3430
+ if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
3431
+ this.cTileset.show = false;
3432
+ this.viewer.scene.primitives.remove(this.cTileset);
3433
+ }
3434
+ this.cTileset = null;
3407
3435
  }
3408
3436
  this.visualsManager.RemoveByMenuItemId(this.item.id);
3409
3437
  this.featureQueue = [];
@@ -3715,7 +3743,12 @@ var TilesetEntitiesRenderManager;
3715
3743
  }
3716
3744
  this.disposed = true;
3717
3745
  if (this.cTileset) {
3718
- this.cTileset.show = false;
3746
+ var viewer = this.viewer;
3747
+ if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
3748
+ this.cTileset.show = false;
3749
+ this.viewer.scene.primitives.remove(this.cTileset);
3750
+ }
3751
+ this.cTileset = null;
3719
3752
  }
3720
3753
  this.visualsManager.RemoveByMenuItemId(this.item.id);
3721
3754
  };
@@ -3821,7 +3854,12 @@ var TilesetPointcloudRenderManager;
3821
3854
  }
3822
3855
  this.disposed = true;
3823
3856
  if (this.cTileset) {
3824
- this.cTileset.show = false;
3857
+ var viewer = this.viewer;
3858
+ if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
3859
+ this.cTileset.show = false;
3860
+ this.viewer.scene.primitives.remove(this.cTileset);
3861
+ }
3862
+ this.cTileset = null;
3825
3863
  }
3826
3864
  };
3827
3865
  return Manager;
@@ -3829,6 +3867,58 @@ var TilesetPointcloudRenderManager;
3829
3867
  TilesetPointcloudRenderManager.Manager = Manager;
3830
3868
  })(TilesetPointcloudRenderManager || (TilesetPointcloudRenderManager = {}));
3831
3869
 
3870
+ var DataSourceStaticKmlManager;
3871
+ (function (DataSourceStaticKmlManager) {
3872
+ var Manager = /** @class */ (function () {
3873
+ function Manager(viewer, apiGetter, item) {
3874
+ this.disposed = false;
3875
+ this.dataSource = null;
3876
+ this.viewer = viewer;
3877
+ this.apiGetter = apiGetter;
3878
+ this.item = item;
3879
+ }
3880
+ Object.defineProperty(Manager.prototype, "Disposed", {
3881
+ get: function () {
3882
+ return this.disposed;
3883
+ },
3884
+ enumerable: false,
3885
+ configurable: true
3886
+ });
3887
+ Manager.prototype.Init = function () {
3888
+ var _a, _b;
3889
+ return __awaiter(this, void 0, void 0, function () {
3890
+ var fileId, api, fileUrl;
3891
+ return __generator(this, function (_c) {
3892
+ fileId = (_b = (_a = this.item.KML) === null || _a === void 0 ? void 0 : _a.ClientFile) === null || _b === void 0 ? void 0 : _b.ID;
3893
+ if (!fileId) {
3894
+ return [2 /*return*/];
3895
+ }
3896
+ api = this.apiGetter.getApi();
3897
+ fileUrl = ClientFile.GetUrl(api, fileId);
3898
+ this.dataSource = new KmlDataSource();
3899
+ this.dataSource.load(fileUrl);
3900
+ this.viewer.dataSources.add(this.dataSource);
3901
+ return [2 /*return*/];
3902
+ });
3903
+ });
3904
+ };
3905
+ Manager.prototype.Dispose = function () {
3906
+ var _a;
3907
+ if (this.disposed) {
3908
+ return;
3909
+ }
3910
+ this.disposed = true;
3911
+ if (this.dataSource &&
3912
+ !((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.isDestroyed()) &&
3913
+ this.viewer.dataSources.contains(this.dataSource)) {
3914
+ this.viewer.dataSources.remove(this.dataSource);
3915
+ }
3916
+ };
3917
+ return Manager;
3918
+ }());
3919
+ DataSourceStaticKmlManager.Manager = Manager;
3920
+ })(DataSourceStaticKmlManager || (DataSourceStaticKmlManager = {}));
3921
+
3832
3922
  /**
3833
3923
  * Utility to keep track of enabled menu items within a Cesium viewer.
3834
3924
  */
@@ -3878,12 +3968,12 @@ var MenuItemManager;
3878
3968
  * @returns
3879
3969
  */
3880
3970
  Manager.prototype.RenderItem = function (params, recursive) {
3881
- var _a, _b;
3971
+ var _a, _b, _c;
3882
3972
  if (recursive === void 0) { recursive = true; }
3883
3973
  return __awaiter(this, void 0, void 0, function () {
3884
3974
  var rItem, i, childId;
3885
- return __generator(this, function (_c) {
3886
- switch (_c.label) {
3975
+ return __generator(this, function (_d) {
3976
+ switch (_d.label) {
3887
3977
  case 0:
3888
3978
  if (this.viewer.isDestroyed()) {
3889
3979
  return [2 /*return*/, null];
@@ -3927,7 +4017,7 @@ var MenuItemManager;
3927
4017
  rItem.renderManager = new TilesetEntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, params.item);
3928
4018
  break;
3929
4019
  case MenuItem.EType.Kml:
3930
- // TODO;
4020
+ rItem.renderManager = new DataSourceStaticKmlManager.Manager(this.viewer, params.apiGetter, params.item);
3931
4021
  break;
3932
4022
  // Any "none" type can be ignored. These are just containers for other items.
3933
4023
  case MenuItem.EType.None:
@@ -3935,27 +4025,29 @@ var MenuItemManager;
3935
4025
  default:
3936
4026
  console.error("Menu item type is not implemented.", params.item.Type);
3937
4027
  }
3938
- if (!rItem.renderManager) return [3 /*break*/, 2];
4028
+ if (!(rItem.renderManager && !rItem.renderManager.Disposed)) return [3 /*break*/, 2];
3939
4029
  return [4 /*yield*/, rItem.renderManager.Init()];
3940
4030
  case 1:
3941
- _c.sent();
3942
- _c.label = 2;
4031
+ _d.sent();
4032
+ _d.label = 2;
3943
4033
  case 2:
3944
4034
  if (!(params.item.Children && recursive)) return [3 /*break*/, 6];
3945
4035
  i = 0;
3946
- _c.label = 3;
4036
+ _d.label = 3;
3947
4037
  case 3:
3948
4038
  if (!(i < params.item.Children.length)) return [3 /*break*/, 6];
3949
4039
  return [4 /*yield*/, this.RenderItem(__assign(__assign({}, params), { item: params.item.Children[i] }))];
3950
4040
  case 4:
3951
- childId = _c.sent();
4041
+ childId = _d.sent();
3952
4042
  rItem.childIds.push(childId);
3953
- _c.label = 5;
4043
+ _d.label = 5;
3954
4044
  case 5:
3955
4045
  i++;
3956
4046
  return [3 /*break*/, 3];
3957
4047
  case 6:
3958
- (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({ isEnabling: true, itemId: rItem.id });
4048
+ if (!rItem.renderManager || !((_b = rItem.renderManager) === null || _b === void 0 ? void 0 : _b.Disposed)) {
4049
+ (_c = this.onUpdate) === null || _c === void 0 ? void 0 : _c.Trigger({ isEnabling: true, itemId: rItem.id });
4050
+ }
3959
4051
  return [2 /*return*/, rItem.id];
3960
4052
  }
3961
4053
  });
@@ -5043,12 +5135,12 @@ var TileRenderEngine;
5043
5135
  var layer = curEnabledArr.find(function (x) { var _a, _b; return ((_a = x._bMeta) === null || _a === void 0 ? void 0 : _a.accountId) === enabled.accountId && ((_b = x._bMeta) === null || _b === void 0 ? void 0 : _b.tilesetId) === enabled.tilesetId; });
5044
5136
  if (layer) {
5045
5137
  params.viewer.imageryLayers.raiseToTop(layer);
5046
- layer.alpha = Number(enabled.alpha == null ? 1 : enabled.alpha);
5047
- layer.brightness = Number(enabled.brightness == null ? 1 : enabled.brightness);
5048
- layer.contrast = Number(enabled.contrast == null ? 1 : enabled.contrast);
5049
- layer.hue = Number(enabled.hue == null ? 0 : enabled.hue);
5050
- layer.saturation = Number(enabled.saturation == null ? 1 : enabled.saturation);
5051
- layer.gamma = Number(enabled.gamma == null ? 1 : enabled.gamma);
5138
+ layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);
5139
+ layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);
5140
+ layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);
5141
+ layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);
5142
+ layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);
5143
+ layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);
5052
5144
  }
5053
5145
  };
5054
5146
  for (i = 0; i < params.tiles.length; i++) {
@@ -5370,7 +5462,7 @@ function renderV2(params, bookmark, view) {
5370
5462
  if (shadows.enabled) {
5371
5463
  viewer.shadows = true;
5372
5464
  viewer.shadowMap.enabled = true;
5373
- size = Number(shadows.pixelSize);
5465
+ size = EnsureNumber(shadows.pixelSize);
5374
5466
  if (size < MIN_SHADOW_SIZE) {
5375
5467
  size = MIN_SHADOW_SIZE;
5376
5468
  }
@@ -5396,11 +5488,11 @@ function renderV2(params, bookmark, view) {
5396
5488
  AO = viewer.scene.postProcessStages.ambientOcclusion;
5397
5489
  if (ambientOcclusion.enabled) {
5398
5490
  AO.enabled = true;
5399
- AO.uniforms.intensity = Number(ambientOcclusion.intensity);
5400
- AO.uniforms.lengthCap = Number(ambientOcclusion.lengthCap);
5401
- AO.uniforms.bias = Number(ambientOcclusion.bias);
5402
- AO.uniforms.stepSize = Number(ambientOcclusion.stepSize);
5403
- AO.uniforms.blurStepSize = Number(ambientOcclusion.blurStepSize);
5491
+ AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity);
5492
+ AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap);
5493
+ AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias);
5494
+ AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize);
5495
+ AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize);
5404
5496
  }
5405
5497
  else {
5406
5498
  AO.enabled = false;
@@ -5418,7 +5510,7 @@ function renderV2(params, bookmark, view) {
5418
5510
  light = viewer.scene.light;
5419
5511
  if (light) {
5420
5512
  light.color = Color.fromCssColorString(lighting.color);
5421
- light.intensity = Number(lighting.intensity);
5513
+ light.intensity = EnsureNumber(lighting.intensity);
5422
5514
  }
5423
5515
  quality = bSettings === null || bSettings === void 0 ? void 0 : bSettings.quality;
5424
5516
  if (quality == null) {