bruce-cesium 2.1.4 → 2.1.6

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, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, OrthographicFrustum, JulianDate, NearFarScalar, Cesium3DTileset, Matrix4, Matrix3, IonResource, CesiumInspector, ColorMaterialProperty, EasingFunction, GeometryInstance, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -2035,11 +2035,17 @@ var EntityRenderEngine;
2035
2035
  }
2036
2036
  var bColor = style.lineColor ? Calculator.GetColor(style.lineColor, entity, params.tags) : null;
2037
2037
  var cColor = bColor ? colorToCColor(bColor) : Color.RED;
2038
+ if (cColor.alpha <= 0) {
2039
+ return null;
2040
+ }
2038
2041
  var width = style.lineWidth ? Calculator.GetNumber(style.lineWidth, entity, params.tags) : null;
2039
2042
  if (width == null) {
2040
2043
  width = 4;
2041
2044
  }
2042
2045
  width = EnsureNumber(width);
2046
+ if (width < 0.01) {
2047
+ width = 0;
2048
+ }
2043
2049
  if (width <= 0) {
2044
2050
  return null;
2045
2051
  }
@@ -2135,7 +2141,12 @@ var EntityRenderEngine;
2135
2141
  width = 4;
2136
2142
  }
2137
2143
  width = EnsureNumber(width);
2138
- if (width <= 0) {
2144
+ if (width < 0.01) {
2145
+ width = 0;
2146
+ }
2147
+ // If both outline and fill is not available then don't render anything.
2148
+ if ((width <= 0 || cLineColor.alpha <= 0) &&
2149
+ cFillColor.alpha <= 0) {
2139
2150
  return null;
2140
2151
  }
2141
2152
  var heightRef = getHeightRef(style);
@@ -4761,6 +4772,8 @@ function correctStyle(style) {
4761
4772
  }
4762
4773
  return style;
4763
4774
  }
4775
+ var VIEWER_WATCH_KEY = "bruce-viewer-watch";
4776
+ var WATCH_KEY = "bruce-tileset-watch";
4764
4777
  /**
4765
4778
  * Creates and returns a tileset instance from a given url.
4766
4779
  * This is made to handle the difference between old and new cesium versions.
@@ -4771,15 +4784,21 @@ function correctStyle(style) {
4771
4784
  */
4772
4785
  function createTileset(url, props) {
4773
4786
  return __awaiter(this, void 0, void 0, function () {
4774
- var C3DT;
4787
+ var defaultProps, C3DT;
4775
4788
  return __generator(this, function (_a) {
4789
+ defaultProps = {
4790
+ // "Optimization option. Reduce the screen space error for tiles that are further away from the camera.".
4791
+ dynamicScreenSpaceError: true,
4792
+ // "The maximum amount of memory in MB that can be used by the tileset.".
4793
+ maximumMemoryUsage: 512
4794
+ };
4776
4795
  C3DT = Cesium3DTileset;
4777
4796
  if (C3DT.fromUrl) {
4778
4797
  // New cesium is running.
4779
- return [2 /*return*/, C3DT.fromUrl(url, __assign({}, props))];
4798
+ return [2 /*return*/, C3DT.fromUrl(url, __assign(__assign({}, defaultProps), props))];
4780
4799
  }
4781
4800
  // Old cesium is running.
4782
- return [2 /*return*/, new C3DT(__assign({ url: url }, props))];
4801
+ return [2 /*return*/, new C3DT(__assign(__assign({ url: url }, defaultProps), props))];
4783
4802
  });
4784
4803
  });
4785
4804
  }
@@ -4949,11 +4968,12 @@ var TilesetRenderEngine;
4949
4968
  cTileset_1 = _a.sent();
4950
4969
  params.viewer.scene.primitives.add(cTileset_1);
4951
4970
  cTileset_1.readyPromise.then(function () {
4952
- var _a, _b, _c;
4971
+ var _a, _b, _c, _d;
4953
4972
  try {
4954
4973
  if (!isAlive(params.viewer, cTileset_1)) {
4955
4974
  return;
4956
4975
  }
4976
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_1);
4957
4977
  var settings = params.tileset.settings;
4958
4978
  ApplySettings({
4959
4979
  cTileset: cTileset_1,
@@ -4964,9 +4984,9 @@ var TilesetRenderEngine;
4964
4984
  ApplyPosition({
4965
4985
  cTileset: cTileset_1,
4966
4986
  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
4987
+ ucs: (_b = params.coords) === null || _b === void 0 ? void 0 : _b.ucs,
4988
+ location: ((_c = params.coords) === null || _c === void 0 ? void 0 : _c.location) == null ? settings.location : params.coords.location,
4989
+ transform: ((_d = params.coords) === null || _d === void 0 ? void 0 : _d.transform) == null ? settings.transform : params.coords.transform
4970
4990
  }
4971
4991
  });
4972
4992
  }
@@ -4997,10 +5017,12 @@ var TilesetRenderEngine;
4997
5017
  cTileset_2 = _a.sent();
4998
5018
  params.viewer.scene.primitives.add(cTileset_2);
4999
5019
  cTileset_2.readyPromise.then(function () {
5020
+ var _a;
5000
5021
  try {
5001
5022
  if (!isAlive(params.viewer, cTileset_2)) {
5002
5023
  return;
5003
5024
  }
5025
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_2);
5004
5026
  var settings = params.tileset.settings;
5005
5027
  ApplySettings({
5006
5028
  cTileset: cTileset_2,
@@ -5073,10 +5095,12 @@ var TilesetRenderEngine;
5073
5095
  cTileset = _a.sent();
5074
5096
  viewer.scene.primitives.add(cTileset);
5075
5097
  cTileset.readyPromise.then(function () {
5098
+ var _a;
5076
5099
  try {
5077
5100
  if (!isAlive(viewer, cTileset)) {
5078
5101
  return;
5079
5102
  }
5103
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset);
5080
5104
  if (tileset) {
5081
5105
  var settings_1 = tileset.Settings;
5082
5106
  settings_1 = __assign({}, settings_1);
@@ -5523,6 +5547,89 @@ var TilesetRenderEngine;
5523
5547
  return Styler;
5524
5548
  }());
5525
5549
  TilesetRenderEngine.Styler = Styler;
5550
+ /**
5551
+ * The maximum memory in MB that can be used by all tilesets.
5552
+ * This is distributed evenly between all loaded tilesets.
5553
+ */
5554
+ TilesetRenderEngine.MAX_TILESET_MEMORY = 1024;
5555
+ /**
5556
+ * Watches tilesets in the viewer.
5557
+ * This will regulate their max memory param.
5558
+ * As more get watched their memory will be reduced.
5559
+ */
5560
+ var MemoryWatcher = /** @class */ (function () {
5561
+ function MemoryWatcher(viewer) {
5562
+ this.watched = [];
5563
+ this.viewer = viewer;
5564
+ }
5565
+ MemoryWatcher.prototype.distributeMemory = function () {
5566
+ this.clean();
5567
+ // Total 1gb as default.
5568
+ // We'll need to allow user to change this somehow.
5569
+ var maxMemory = TilesetRenderEngine.MAX_TILESET_MEMORY;
5570
+ // Minimum memory in MB per tileset.
5571
+ var minMemory = 80;
5572
+ var totalPerTileset = Math.max(this.watched.length ? maxMemory / this.watched.length : maxMemory, minMemory);
5573
+ this.watched.forEach(function (x) {
5574
+ x.maximumMemoryUsage = totalPerTileset;
5575
+ });
5576
+ };
5577
+ MemoryWatcher.prototype.destroy = function () {
5578
+ this.watched = [];
5579
+ };
5580
+ /**
5581
+ * Remove all dead tilesets.
5582
+ */
5583
+ MemoryWatcher.prototype.clean = function () {
5584
+ var _this = this;
5585
+ // Remove all dead tilesets.
5586
+ this.watched = this.watched.filter(function (x) { return isAlive(_this.viewer, x); });
5587
+ // Check if viewer is destroyed.
5588
+ if (!this.viewer || this.viewer.isDestroyed()) {
5589
+ this.destroy();
5590
+ }
5591
+ };
5592
+ MemoryWatcher.prototype.Watch = function (tileset) {
5593
+ if (!tileset) {
5594
+ return;
5595
+ }
5596
+ if (!tileset[WATCH_KEY]) {
5597
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5598
+ }
5599
+ var index = this.watched.findIndex(function (x) { return x[WATCH_KEY] === tileset[WATCH_KEY]; });
5600
+ if (index >= 0) {
5601
+ return;
5602
+ }
5603
+ this.watched.push(tileset);
5604
+ this.distributeMemory();
5605
+ };
5606
+ MemoryWatcher.prototype.Unwatch = function (tileset) {
5607
+ if (!tileset) {
5608
+ return;
5609
+ }
5610
+ if (!tileset[WATCH_KEY]) {
5611
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5612
+ }
5613
+ var index = this.watched.findIndex(function (x) { return (x === null || x === void 0 ? void 0 : x[WATCH_KEY]) === tileset[WATCH_KEY]; });
5614
+ if (index > -1) {
5615
+ this.watched.splice(index, 1);
5616
+ }
5617
+ this.distributeMemory();
5618
+ };
5619
+ return MemoryWatcher;
5620
+ }());
5621
+ TilesetRenderEngine.MemoryWatcher = MemoryWatcher;
5622
+ function GetMemoryWatcher(viewer) {
5623
+ // If viewer is dead return nothing.
5624
+ if (!viewer || viewer.isDestroyed()) {
5625
+ return null;
5626
+ }
5627
+ if (!viewer[VIEWER_WATCH_KEY]) {
5628
+ viewer[VIEWER_WATCH_KEY] = new MemoryWatcher(viewer);
5629
+ }
5630
+ return viewer[VIEWER_WATCH_KEY];
5631
+ }
5632
+ TilesetRenderEngine.GetMemoryWatcher = GetMemoryWatcher;
5526
5633
  })(TilesetRenderEngine || (TilesetRenderEngine = {}));
5527
5634
 
5528
5635
  /**
@@ -5803,16 +5910,17 @@ var TilesetCadRenderManager;
5803
5910
  this.doDispose();
5804
5911
  };
5805
5912
  Manager.prototype.doDispose = function () {
5806
- var _a;
5913
+ var _a, _b;
5807
5914
  if (this.cTileset) {
5808
5915
  var viewer = this.viewer;
5809
5916
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
5810
5917
  this.cTileset.show = false;
5811
5918
  this.viewer.scene.primitives.remove(this.cTileset);
5919
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
5812
5920
  }
5813
5921
  this.cTileset = null;
5814
5922
  }
5815
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
5923
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
5816
5924
  this.visualsManager.RemoveRegos({
5817
5925
  menuItemId: this.item.id
5818
5926
  });
@@ -6353,11 +6461,13 @@ var TilesetEntitiesRenderManager;
6353
6461
  this.doDispose();
6354
6462
  };
6355
6463
  Manager.prototype.doDispose = function () {
6464
+ var _a;
6356
6465
  if (this.cTileset) {
6357
6466
  var viewer = this.viewer;
6358
6467
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6359
6468
  this.cTileset.show = false;
6360
6469
  this.viewer.scene.primitives.remove(this.cTileset);
6470
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6361
6471
  }
6362
6472
  this.cTileset = null;
6363
6473
  }
@@ -6505,11 +6615,13 @@ var TilesetPointcloudRenderManager;
6505
6615
  this.doDispose();
6506
6616
  };
6507
6617
  Manager.prototype.doDispose = function () {
6618
+ var _a;
6508
6619
  if (this.cTileset) {
6509
6620
  var viewer = this.viewer;
6510
6621
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6511
6622
  this.cTileset.show = false;
6512
6623
  this.viewer.scene.primitives.remove(this.cTileset);
6624
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6513
6625
  }
6514
6626
  this.cTileset = null;
6515
6627
  }
@@ -6855,16 +6967,17 @@ var TilesetArbRenderManager;
6855
6967
  this.doDispose();
6856
6968
  };
6857
6969
  Manager.prototype.doDispose = function () {
6858
- var _a;
6970
+ var _a, _b;
6859
6971
  if (this.cTileset) {
6860
6972
  var viewer = this.viewer;
6861
6973
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6862
6974
  this.cTileset.show = false;
6863
6975
  this.viewer.scene.primitives.remove(this.cTileset);
6976
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6864
6977
  }
6865
6978
  this.cTileset = null;
6866
6979
  }
6867
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
6980
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
6868
6981
  this.visualsManager.RemoveRegos({
6869
6982
  menuItemId: this.item.id
6870
6983
  });