bruce-cesium 2.1.4 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, HeightReference, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, NearFarScalar, Cesium3DTileset, Matrix4, Matrix3, IonResource, CesiumInspector, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, PolygonPipeline, ColorMaterialProperty, EasingFunction, GeometryInstance, EllipsoidGeodesic, sampleTerrainMostDetailed } from 'cesium';
3
+ import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, Entity, Primitive, Cesium3DTileFeature, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, NearFarScalar, EllipsoidGeodesic, EllipsoidTerrainProvider, sampleTerrainMostDetailed, CesiumInspector, PolygonPipeline, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Cesium3DTileset, Matrix4, Matrix3, IonResource, ColorMaterialProperty, EasingFunction, GeometryInstance } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -4761,6 +4761,8 @@ function correctStyle(style) {
4761
4761
  }
4762
4762
  return style;
4763
4763
  }
4764
+ var VIEWER_WATCH_KEY = "bruce-viewer-watch";
4765
+ var WATCH_KEY = "bruce-tileset-watch";
4764
4766
  /**
4765
4767
  * Creates and returns a tileset instance from a given url.
4766
4768
  * This is made to handle the difference between old and new cesium versions.
@@ -4771,15 +4773,21 @@ function correctStyle(style) {
4771
4773
  */
4772
4774
  function createTileset(url, props) {
4773
4775
  return __awaiter(this, void 0, void 0, function () {
4774
- var C3DT;
4776
+ var defaultProps, C3DT;
4775
4777
  return __generator(this, function (_a) {
4778
+ defaultProps = {
4779
+ // "Optimization option. Reduce the screen space error for tiles that are further away from the camera.".
4780
+ dynamicScreenSpaceError: true,
4781
+ // "The maximum amount of memory in MB that can be used by the tileset.".
4782
+ maximumMemoryUsage: 512
4783
+ };
4776
4784
  C3DT = Cesium3DTileset;
4777
4785
  if (C3DT.fromUrl) {
4778
4786
  // New cesium is running.
4779
- return [2 /*return*/, C3DT.fromUrl(url, __assign({}, props))];
4787
+ return [2 /*return*/, C3DT.fromUrl(url, __assign(__assign({}, defaultProps), props))];
4780
4788
  }
4781
4789
  // Old cesium is running.
4782
- return [2 /*return*/, new C3DT(__assign({ url: url }, props))];
4790
+ return [2 /*return*/, new C3DT(__assign(__assign({ url: url }, defaultProps), props))];
4783
4791
  });
4784
4792
  });
4785
4793
  }
@@ -4949,11 +4957,12 @@ var TilesetRenderEngine;
4949
4957
  cTileset_1 = _a.sent();
4950
4958
  params.viewer.scene.primitives.add(cTileset_1);
4951
4959
  cTileset_1.readyPromise.then(function () {
4952
- var _a, _b, _c;
4960
+ var _a, _b, _c, _d;
4953
4961
  try {
4954
4962
  if (!isAlive(params.viewer, cTileset_1)) {
4955
4963
  return;
4956
4964
  }
4965
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_1);
4957
4966
  var settings = params.tileset.settings;
4958
4967
  ApplySettings({
4959
4968
  cTileset: cTileset_1,
@@ -4964,9 +4973,9 @@ var TilesetRenderEngine;
4964
4973
  ApplyPosition({
4965
4974
  cTileset: cTileset_1,
4966
4975
  position: {
4967
- ucs: (_a = params.coords) === null || _a === void 0 ? void 0 : _a.ucs,
4968
- location: ((_b = params.coords) === null || _b === void 0 ? void 0 : _b.location) == null ? settings.location : params.coords.location,
4969
- transform: ((_c = params.coords) === null || _c === void 0 ? void 0 : _c.transform) == null ? settings.transform : params.coords.transform
4976
+ ucs: (_b = params.coords) === null || _b === void 0 ? void 0 : _b.ucs,
4977
+ location: ((_c = params.coords) === null || _c === void 0 ? void 0 : _c.location) == null ? settings.location : params.coords.location,
4978
+ transform: ((_d = params.coords) === null || _d === void 0 ? void 0 : _d.transform) == null ? settings.transform : params.coords.transform
4970
4979
  }
4971
4980
  });
4972
4981
  }
@@ -4997,10 +5006,12 @@ var TilesetRenderEngine;
4997
5006
  cTileset_2 = _a.sent();
4998
5007
  params.viewer.scene.primitives.add(cTileset_2);
4999
5008
  cTileset_2.readyPromise.then(function () {
5009
+ var _a;
5000
5010
  try {
5001
5011
  if (!isAlive(params.viewer, cTileset_2)) {
5002
5012
  return;
5003
5013
  }
5014
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_2);
5004
5015
  var settings = params.tileset.settings;
5005
5016
  ApplySettings({
5006
5017
  cTileset: cTileset_2,
@@ -5073,10 +5084,12 @@ var TilesetRenderEngine;
5073
5084
  cTileset = _a.sent();
5074
5085
  viewer.scene.primitives.add(cTileset);
5075
5086
  cTileset.readyPromise.then(function () {
5087
+ var _a;
5076
5088
  try {
5077
5089
  if (!isAlive(viewer, cTileset)) {
5078
5090
  return;
5079
5091
  }
5092
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset);
5080
5093
  if (tileset) {
5081
5094
  var settings_1 = tileset.Settings;
5082
5095
  settings_1 = __assign({}, settings_1);
@@ -5523,6 +5536,89 @@ var TilesetRenderEngine;
5523
5536
  return Styler;
5524
5537
  }());
5525
5538
  TilesetRenderEngine.Styler = Styler;
5539
+ /**
5540
+ * The maximum memory in MB that can be used by all tilesets.
5541
+ * This is distributed evenly between all loaded tilesets.
5542
+ */
5543
+ TilesetRenderEngine.MAX_TILESET_MEMORY = 1024;
5544
+ /**
5545
+ * Watches tilesets in the viewer.
5546
+ * This will regulate their max memory param.
5547
+ * As more get watched their memory will be reduced.
5548
+ */
5549
+ var MemoryWatcher = /** @class */ (function () {
5550
+ function MemoryWatcher(viewer) {
5551
+ this.watched = [];
5552
+ this.viewer = viewer;
5553
+ }
5554
+ MemoryWatcher.prototype.distributeMemory = function () {
5555
+ this.clean();
5556
+ // Total 1gb as default.
5557
+ // We'll need to allow user to change this somehow.
5558
+ var maxMemory = TilesetRenderEngine.MAX_TILESET_MEMORY;
5559
+ // Minimum memory in MB per tileset.
5560
+ var minMemory = 80;
5561
+ var totalPerTileset = Math.max(this.watched.length ? maxMemory / this.watched.length : maxMemory, minMemory);
5562
+ this.watched.forEach(function (x) {
5563
+ x.maximumMemoryUsage = totalPerTileset;
5564
+ });
5565
+ };
5566
+ MemoryWatcher.prototype.destroy = function () {
5567
+ this.watched = [];
5568
+ };
5569
+ /**
5570
+ * Remove all dead tilesets.
5571
+ */
5572
+ MemoryWatcher.prototype.clean = function () {
5573
+ var _this = this;
5574
+ // Remove all dead tilesets.
5575
+ this.watched = this.watched.filter(function (x) { return isAlive(_this.viewer, x); });
5576
+ // Check if viewer is destroyed.
5577
+ if (!this.viewer || this.viewer.isDestroyed()) {
5578
+ this.destroy();
5579
+ }
5580
+ };
5581
+ MemoryWatcher.prototype.Watch = function (tileset) {
5582
+ if (!tileset) {
5583
+ return;
5584
+ }
5585
+ if (!tileset[WATCH_KEY]) {
5586
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5587
+ }
5588
+ var index = this.watched.findIndex(function (x) { return x[WATCH_KEY] === tileset[WATCH_KEY]; });
5589
+ if (index >= 0) {
5590
+ return;
5591
+ }
5592
+ this.watched.push(tileset);
5593
+ this.distributeMemory();
5594
+ };
5595
+ MemoryWatcher.prototype.Unwatch = function (tileset) {
5596
+ if (!tileset) {
5597
+ return;
5598
+ }
5599
+ if (!tileset[WATCH_KEY]) {
5600
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5601
+ }
5602
+ var index = this.watched.findIndex(function (x) { return (x === null || x === void 0 ? void 0 : x[WATCH_KEY]) === tileset[WATCH_KEY]; });
5603
+ if (index > -1) {
5604
+ this.watched.splice(index, 1);
5605
+ }
5606
+ this.distributeMemory();
5607
+ };
5608
+ return MemoryWatcher;
5609
+ }());
5610
+ TilesetRenderEngine.MemoryWatcher = MemoryWatcher;
5611
+ function GetMemoryWatcher(viewer) {
5612
+ // If viewer is dead return nothing.
5613
+ if (!viewer || viewer.isDestroyed()) {
5614
+ return null;
5615
+ }
5616
+ if (!viewer[VIEWER_WATCH_KEY]) {
5617
+ viewer[VIEWER_WATCH_KEY] = new MemoryWatcher(viewer);
5618
+ }
5619
+ return viewer[VIEWER_WATCH_KEY];
5620
+ }
5621
+ TilesetRenderEngine.GetMemoryWatcher = GetMemoryWatcher;
5526
5622
  })(TilesetRenderEngine || (TilesetRenderEngine = {}));
5527
5623
 
5528
5624
  /**
@@ -5803,16 +5899,17 @@ var TilesetCadRenderManager;
5803
5899
  this.doDispose();
5804
5900
  };
5805
5901
  Manager.prototype.doDispose = function () {
5806
- var _a;
5902
+ var _a, _b;
5807
5903
  if (this.cTileset) {
5808
5904
  var viewer = this.viewer;
5809
5905
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
5810
5906
  this.cTileset.show = false;
5811
5907
  this.viewer.scene.primitives.remove(this.cTileset);
5908
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
5812
5909
  }
5813
5910
  this.cTileset = null;
5814
5911
  }
5815
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
5912
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
5816
5913
  this.visualsManager.RemoveRegos({
5817
5914
  menuItemId: this.item.id
5818
5915
  });
@@ -6353,11 +6450,13 @@ var TilesetEntitiesRenderManager;
6353
6450
  this.doDispose();
6354
6451
  };
6355
6452
  Manager.prototype.doDispose = function () {
6453
+ var _a;
6356
6454
  if (this.cTileset) {
6357
6455
  var viewer = this.viewer;
6358
6456
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6359
6457
  this.cTileset.show = false;
6360
6458
  this.viewer.scene.primitives.remove(this.cTileset);
6459
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6361
6460
  }
6362
6461
  this.cTileset = null;
6363
6462
  }
@@ -6505,11 +6604,13 @@ var TilesetPointcloudRenderManager;
6505
6604
  this.doDispose();
6506
6605
  };
6507
6606
  Manager.prototype.doDispose = function () {
6607
+ var _a;
6508
6608
  if (this.cTileset) {
6509
6609
  var viewer = this.viewer;
6510
6610
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6511
6611
  this.cTileset.show = false;
6512
6612
  this.viewer.scene.primitives.remove(this.cTileset);
6613
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6513
6614
  }
6514
6615
  this.cTileset = null;
6515
6616
  }
@@ -6855,16 +6956,17 @@ var TilesetArbRenderManager;
6855
6956
  this.doDispose();
6856
6957
  };
6857
6958
  Manager.prototype.doDispose = function () {
6858
- var _a;
6959
+ var _a, _b;
6859
6960
  if (this.cTileset) {
6860
6961
  var viewer = this.viewer;
6861
6962
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6862
6963
  this.cTileset.show = false;
6863
6964
  this.viewer.scene.primitives.remove(this.cTileset);
6965
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6864
6966
  }
6865
6967
  this.cTileset = null;
6866
6968
  }
6867
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
6969
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
6868
6970
  this.visualsManager.RemoveRegos({
6869
6971
  menuItemId: this.item.id
6870
6972
  });