bruce-cesium 2.7.4 → 2.7.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, Bounds, EntityRelationType, DelayQueue, BatchedDataGetter, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera, AbstractApi, EntityAttachment, EntityAttachmentType, EntityAttribute } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, Entity, Primitive, Cesium3DTileFeature, Color, Cartesian2, JulianDate, Cartesian3, SceneMode, Math as Math$1, CallbackProperty, Rectangle, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, EllipsoidTerrainProvider, CesiumInspector, OrthographicFrustum, defined, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, Model, PolygonPipeline, Matrix4, Matrix3, IonResource, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, EasingFunction, GeometryInstance, Ion, BoundingSphere } from 'cesium';
3
+ import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, JulianDate, HeightReference, DistanceDisplayCondition, NearFarScalar, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, SceneMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, EasingFunction, Cesium3DTileset, Matrix4, Matrix3, IonResource, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, Model, PolygonPipeline, CesiumInspector, ColorMaterialProperty, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, Ion, BoundingSphere } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -1766,7 +1766,7 @@ function getName(api, entity) {
1766
1766
  }
1767
1767
  function getStyle(api, entity, styleId) {
1768
1768
  return __awaiter(this, void 0, void 0, function () {
1769
- var style, e_2, typeId, type, e_3;
1769
+ var style, e_2, typeId, type, e_3, hideError, error, code;
1770
1770
  return __generator(this, function (_a) {
1771
1771
  switch (_a.label) {
1772
1772
  case 0:
@@ -1809,7 +1809,18 @@ function getStyle(api, entity, styleId) {
1809
1809
  return [3 /*break*/, 9];
1810
1810
  case 8:
1811
1811
  e_3 = _a.sent();
1812
- console.error(e_3);
1812
+ hideError = false;
1813
+ // TODO: we need a util for extracting code + message rather than writing all this every time.
1814
+ if (e_3 && typeof e_3 == "object" && e_3.ERROR) {
1815
+ error = e_3.ERROR;
1816
+ code = error && typeof error == "object" ? error.Code : "";
1817
+ // Avoiding logging a common error.
1818
+ // This happens when rendering entities that don't have records.
1819
+ hideError = String(code).toLowerCase() == "notfound";
1820
+ }
1821
+ if (!hideError) {
1822
+ console.error(e_3);
1823
+ }
1813
1824
  return [3 /*break*/, 9];
1814
1825
  case 9: return [2 /*return*/, style];
1815
1826
  }
@@ -5519,16 +5530,14 @@ var EntitiesRenderManager;
5519
5530
  viewer: this.viewer,
5520
5531
  // Unfortunately this searches as an "AND" rather than "OR" which does not meet our needs here.
5521
5532
  // So for multiple tags we'll manually sort on UI end...
5522
- tagIds: tagsToRender.length == 1 ? tagsToRender : [],
5533
+ tagIds: (tagsToRender === null || tagsToRender === void 0 ? void 0 : tagsToRender.length) ? tagsToRender : [],
5523
5534
  debugShowBounds: Boolean(window === null || window === void 0 ? void 0 : window.ENTITIES_RENDER_MANAGER_SHOW_BOUNDS),
5524
5535
  cdn: this.item.cdnEnabled
5525
5536
  });
5526
5537
  var minMax = RenderManager.GetZoomMinMax({
5527
5538
  zoomControl: this.item.CameraZoomSettings
5528
5539
  });
5529
- // Unfortunately this searches as an "AND" rather than "OR" which does not meet our needs here.
5530
- // So for multiple tags we'll manually sort on UI end...
5531
- this.getter.IncludeMenuItem(this.item.id, tagsToRender.length == 1 ? tagsToRender : [], minMax[0], minMax[1]);
5540
+ this.getter.IncludeMenuItem(this.item.id, (tagsToRender === null || tagsToRender === void 0 ? void 0 : tagsToRender.length) ? tagsToRender : [], minMax[0], minMax[1]);
5532
5541
  this.getterSub = this.getter.OnUpdate.Subscribe(function (entities) {
5533
5542
  if (isTagItem) {
5534
5543
  _this.distributeForRender(entities.filter(function (entity) {
@@ -8247,6 +8256,7 @@ var TilesetEntitiesRenderManager;
8247
8256
  (function (TilesetEntitiesRenderManager) {
8248
8257
  var Manager = /** @class */ (function () {
8249
8258
  function Manager(params) {
8259
+ this.initCounter = 0;
8250
8260
  this.disposed = false;
8251
8261
  this.cTileset = null;
8252
8262
  var viewer = params.viewer, visualsManager = params.register, apiGetter = params.getters, item = params.item;
@@ -8269,23 +8279,32 @@ var TilesetEntitiesRenderManager;
8269
8279
  enumerable: false,
8270
8280
  configurable: true
8271
8281
  });
8272
- Manager.prototype.Init = function () {
8282
+ Manager.prototype.Init = function (params) {
8273
8283
  var _a;
8274
8284
  return __awaiter(this, void 0, void 0, function () {
8275
- var tilesetId;
8285
+ var counter, tilesetId;
8276
8286
  var _this = this;
8277
8287
  return __generator(this, function (_b) {
8288
+ this.initCounter += 1;
8289
+ counter = this.initCounter;
8290
+ if (this.disposed) {
8291
+ return [2 /*return*/];
8292
+ }
8293
+ if (params === null || params === void 0 ? void 0 : params.item) {
8294
+ this.item = params.item;
8295
+ }
8278
8296
  tilesetId = (_a = this.item.tileset) === null || _a === void 0 ? void 0 : _a.TilesetID;
8279
8297
  if (!tilesetId) {
8280
8298
  return [2 /*return*/];
8281
8299
  }
8282
8300
  (function () { return __awaiter(_this, void 0, void 0, function () {
8283
- var canAccess, e_1, accountId, api, tileset, cTileset, _a;
8301
+ var canAccess, e_1, accountId, api, tileset, cTileset, _a, attenuation, attenuationMax;
8284
8302
  var _this = this;
8285
8303
  var _b, _c, _d;
8286
8304
  return __generator(this, function (_e) {
8287
8305
  switch (_e.label) {
8288
8306
  case 0:
8307
+ if (!!this.cTileset) return [3 /*break*/, 9];
8289
8308
  if (!tilesetId) return [3 /*break*/, 5];
8290
8309
  canAccess = false;
8291
8310
  _e.label = 1;
@@ -8314,6 +8333,9 @@ var TilesetEntitiesRenderManager;
8314
8333
  console.warn("No tileset id found. Skipping access check.");
8315
8334
  _e.label = 6;
8316
8335
  case 6:
8336
+ if (this.disposed || counter !== this.initCounter) {
8337
+ return [2 /*return*/];
8338
+ }
8317
8339
  accountId = (_d = this.item.tileset) === null || _d === void 0 ? void 0 : _d.ClientAccountID;
8318
8340
  if (!accountId) {
8319
8341
  accountId = this.getters.GetAccountId();
@@ -8327,7 +8349,7 @@ var TilesetEntitiesRenderManager;
8327
8349
  })];
8328
8350
  case 7:
8329
8351
  tileset = (_e.sent()).tileset;
8330
- if (!tileset || this.disposed) {
8352
+ if (!tileset || this.disposed || counter !== this.initCounter) {
8331
8353
  return [2 /*return*/];
8332
8354
  }
8333
8355
  this.typeId = tileset.settings.entityTypeId;
@@ -8361,6 +8383,25 @@ var TilesetEntitiesRenderManager;
8361
8383
  cTileset.tileLoad.addEventListener(function (tile) {
8362
8384
  _this.mapCTile(tile);
8363
8385
  });
8386
+ _e.label = 9;
8387
+ case 9:
8388
+ attenuation = this.item.attenuation;
8389
+ if (!attenuation && attenuation != false) {
8390
+ attenuation = true;
8391
+ }
8392
+ attenuationMax = this.item.attenuationMax;
8393
+ if (isNaN(attenuationMax)) {
8394
+ attenuationMax = 20;
8395
+ }
8396
+ this.cTileset.readyPromise.then(function () {
8397
+ TilesetRenderEngine.ApplySettings({
8398
+ cTileset: _this.cTileset,
8399
+ settings: {
8400
+ attenuation: attenuation,
8401
+ maximumAttenuation: attenuationMax
8402
+ }
8403
+ });
8404
+ });
8364
8405
  return [2 /*return*/];
8365
8406
  }
8366
8407
  });
@@ -9387,6 +9428,14 @@ var MenuItemManager;
9387
9428
  rItem.item = params.item;
9388
9429
  }
9389
9430
  }
9431
+ // This means we're updating a entities tileset menu item.
9432
+ // These have different point scaling settings based on bookmark settings.
9433
+ else if (rItem.type == MenuItem.EType.EntityTileset && params.item.Type == MenuItem.EType.EntityTileset) {
9434
+ rItem.renderManager.Init({
9435
+ item: params.item,
9436
+ });
9437
+ rItem.item = params.item;
9438
+ }
9390
9439
  }
9391
9440
  else {
9392
9441
  rItem = {
@@ -10058,7 +10107,7 @@ var MenuItemCreator;
10058
10107
  renderedItemIds = [];
10059
10108
  if (!((menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) && (enabledIds === null || enabledIds === void 0 ? void 0 : enabledIds.length))) return [3 /*break*/, 10];
10060
10109
  traverseItems_1 = function (item) { return __awaiter(_this, void 0, void 0, function () {
10061
- var eItem, eItemAlt, itemId, i;
10110
+ var eItem, eItemAlt, tItem, tItemAlt, itemId, i;
10062
10111
  var _a;
10063
10112
  return __generator(this, function (_b) {
10064
10113
  switch (_b.label) {
@@ -10073,6 +10122,12 @@ var MenuItemCreator;
10073
10122
  eItem.BruceEntity = __assign(__assign({}, eItem.BruceEntity), { SelectedExpandLayers: (_a = eItemAlt.BruceEntity) === null || _a === void 0 ? void 0 : _a.SelectedExpandLayers });
10074
10123
  }
10075
10124
  }
10125
+ else if (item.Type == MenuItem.EType.EntityTileset) {
10126
+ tItem = item;
10127
+ tItemAlt = alternations[item.id];
10128
+ tItem.attenuation = tItemAlt.attenuation;
10129
+ tItem.attenuationMax = tItemAlt.attenuationMax;
10130
+ }
10076
10131
  }
10077
10132
  if (!enabledIds.includes(item.id)) return [3 /*break*/, 2];
10078
10133
  return [4 /*yield*/, manager.RenderItem({
@@ -12436,71 +12491,43 @@ var ViewRenderEngine;
12436
12491
  })(ViewRenderEngine || (ViewRenderEngine = {}));
12437
12492
 
12438
12493
  var DEFAULT_SMOOTH_MULTIPLIER = 0;
12439
- function avgDistanceFromPointPair(refPoint, pos1, pos2) {
12440
- var carto1 = Cartographic.fromCartesian(refPoint);
12441
- var carto2 = Cartographic.fromCartesian(pos1);
12442
- var carto3 = Cartographic.fromCartesian(pos2);
12443
- var x1 = carto1.longitude;
12444
- var y1 = carto1.latitude;
12445
- var x2 = carto2.longitude;
12446
- var y2 = carto2.latitude;
12447
- var x3 = carto3.longitude;
12448
- var y3 = carto3.latitude;
12449
- var A = x1 - x2;
12450
- var B = y1 - y2;
12451
- var C = x3 - x2;
12452
- var D = y3 - y2;
12453
- var dot = A * C + B * D;
12454
- var lenSq = C * C + D * D;
12455
- var param = dot / lenSq;
12456
- var xx;
12457
- var yy;
12458
- if (param < 0 || x2 == x3 && y2 == y3) {
12459
- xx = x2;
12460
- yy = y2;
12461
- }
12462
- else if (param > 1) {
12463
- xx = x3;
12464
- yy = y3;
12494
+ function distanceToSegment$1(p, v, w) {
12495
+ var l2 = Cartesian3.distanceSquared(v, w);
12496
+ if (l2 === 0) {
12497
+ return Cartesian3.distance(p, v);
12465
12498
  }
12466
- else {
12467
- xx = x2 + param * C;
12468
- yy = y2 + param * D;
12499
+ var t = Cartesian3.dot(Cartesian3.subtract(p, v, new Cartesian3()), Cartesian3.subtract(w, v, new Cartesian3())) / l2;
12500
+ if (t < 0) {
12501
+ return Cartesian3.distance(p, v);
12502
+ }
12503
+ if (t > 1) {
12504
+ return Cartesian3.distance(p, w);
12469
12505
  }
12470
- var dx = x1 - xx;
12471
- var dy = y1 - yy;
12472
- return Math.sqrt(dx * dx + dy * dy);
12506
+ var projection = Cartesian3.add(v, Cartesian3.multiplyByScalar(Cartesian3.subtract(w, v, new Cartesian3()), t, new Cartesian3()), new Cartesian3());
12507
+ return Cartesian3.distance(p, projection);
12473
12508
  }
12509
+ /**
12510
+ * Returns splice index into a list of positions to insert a new position.
12511
+ * @param positions List of positions to insert into.
12512
+ * @param pos3d New position to insert.
12513
+ * @returns Index to insert at.
12514
+ */
12474
12515
  function getInsertIndex(positions, pos3d) {
12475
12516
  if (positions.length < 2) {
12476
12517
  return 0;
12477
12518
  }
12519
+ var minDistance = Infinity;
12478
12520
  var index = -1;
12479
- if (positions) {
12480
- var distance = void 0;
12481
- for (var j = 0; j < positions.length; j++) {
12482
- var pos1 = positions[j];
12483
- var pos2 = void 0;
12484
- var pos2Index = -1;
12485
- if (j >= positions.length - 1) {
12486
- pos2 = positions[0];
12487
- pos2Index = 0;
12488
- }
12489
- else {
12490
- pos2 = positions[j + 1];
12491
- pos2Index = j + 1;
12492
- }
12493
- if (Cartes.ValidateCartes3(pos1), Cartes.ValidateCartes3(pos2)) {
12494
- var length_1 = avgDistanceFromPointPair(pos3d, pos1, pos2);
12495
- if (index == -1 || length_1 < distance) {
12496
- var insertIndex = pos2Index == 0 ? 0 : j > pos2Index ? j : pos2Index;
12497
- index = insertIndex;
12498
- distance = length_1;
12499
- }
12500
- }
12521
+ for (var i = 0; i < positions.length; i++) {
12522
+ var pos1 = positions[i];
12523
+ var pos2 = i < positions.length - 1 ? positions[i + 1] : positions[0];
12524
+ var dist = distanceToSegment$1(pos3d, pos1, pos2);
12525
+ if (dist < minDistance) {
12526
+ minDistance = dist;
12527
+ index = i + 1;
12501
12528
  }
12502
12529
  }
12503
- return index == -1 ? 0 : index;
12530
+ return index;
12504
12531
  }
12505
12532
  var OUTLINE_COLOR = "rgba(51, 177, 255, 0.2)";
12506
12533
  var FILL_COLOR = "#33B1FF";
@@ -12903,71 +12930,61 @@ var Draw3dPolygon = /** @class */ (function () {
12903
12930
  }());
12904
12931
 
12905
12932
  var DEFAULT_SMOOTH_MULTIPLIER$1 = 0;
12906
- function avgDistanceFromPointPair$1(refPoint, pos1, pos2) {
12907
- var carto1 = Cartographic.fromCartesian(refPoint);
12908
- var carto2 = Cartographic.fromCartesian(pos1);
12909
- var carto3 = Cartographic.fromCartesian(pos2);
12910
- var x1 = carto1.longitude;
12911
- var y1 = carto1.latitude;
12912
- var x2 = carto2.longitude;
12913
- var y2 = carto2.latitude;
12914
- var x3 = carto3.longitude;
12915
- var y3 = carto3.latitude;
12916
- var A = x1 - x2;
12917
- var B = y1 - y2;
12918
- var C = x3 - x2;
12919
- var D = y3 - y2;
12920
- var dot = A * C + B * D;
12921
- var lenSq = C * C + D * D;
12922
- var param = dot / lenSq;
12923
- var xx;
12924
- var yy;
12925
- if (param < 0 || x2 == x3 && y2 == y3) {
12926
- xx = x2;
12927
- yy = y2;
12928
- }
12929
- else if (param > 1) {
12930
- xx = x3;
12931
- yy = y3;
12933
+ function distanceToSegment$2(p, v, w) {
12934
+ var l2 = Cartesian3.distanceSquared(v, w);
12935
+ if (l2 === 0) {
12936
+ return Cartesian3.distance(p, v);
12932
12937
  }
12933
- else {
12934
- xx = x2 + param * C;
12935
- yy = y2 + param * D;
12938
+ var t = Cartesian3.dot(Cartesian3.subtract(p, v, new Cartesian3()), Cartesian3.subtract(w, v, new Cartesian3())) / l2;
12939
+ if (t < 0) {
12940
+ return Cartesian3.distance(p, v);
12936
12941
  }
12937
- var dx = x1 - xx;
12938
- var dy = y1 - yy;
12939
- return Math.sqrt(dx * dx + dy * dy);
12942
+ if (t > 1) {
12943
+ return Cartesian3.distance(p, w);
12944
+ }
12945
+ var projection = Cartesian3.add(v, Cartesian3.multiplyByScalar(Cartesian3.subtract(w, v, new Cartesian3()), t, new Cartesian3()), new Cartesian3());
12946
+ return Cartesian3.distance(p, projection);
12940
12947
  }
12948
+ /**
12949
+ * Returns splice index into a list of positions to insert a new position.
12950
+ * @param positions List of positions to insert into.
12951
+ * @param pos3d New position to insert.
12952
+ * @returns Index to insert at.
12953
+ */
12941
12954
  function getInsertIndex$1(positions, pos3d) {
12942
12955
  if (positions.length < 2) {
12943
12956
  return 0;
12944
12957
  }
12945
- var index = 0;
12946
- if (positions) {
12947
- var marginalShift = function (pos) {
12948
- var SHIFT = 0.001;
12949
- pos = pos.clone();
12950
- return new Cartesian3(pos.x + SHIFT, pos.y + SHIFT, pos.z + SHIFT);
12951
- };
12952
- var distance = avgDistanceFromPointPair$1(pos3d, positions[0], marginalShift(positions[0]));
12953
- var endDistance = avgDistanceFromPointPair$1(pos3d, positions[positions.length - 1], marginalShift(positions[positions.length - 1]));
12954
- if (endDistance < distance) {
12955
- index = positions.length;
12956
- distance = endDistance;
12957
- }
12958
- for (var j = 0; j < positions.length; j++) {
12959
- var pos1 = positions[j];
12960
- var pos2 = positions[j + 1];
12961
- var pos2Index = j + 1;
12962
- if (Cartes.ValidateCartes3(pos1), Cartes.ValidateCartes3(pos2)) {
12963
- var length_1 = avgDistanceFromPointPair$1(pos3d, pos1, pos2);
12964
- if (length_1 < distance) {
12965
- var insertIndex = pos2Index == 0 ? 0 : j > pos2Index ? j : pos2Index;
12966
- index = insertIndex;
12967
- distance = length_1;
12968
- }
12969
- }
12970
- }
12958
+ var minDistance = Infinity;
12959
+ var index = -1;
12960
+ // Check against segments
12961
+ for (var i = 0; i < positions.length - 1; i++) {
12962
+ var pos1 = positions[i];
12963
+ var pos2 = positions[i + 1];
12964
+ var dist = distanceToSegment$2(pos3d, pos1, pos2);
12965
+ if (dist < minDistance) {
12966
+ minDistance = dist;
12967
+ index = i + 1;
12968
+ }
12969
+ }
12970
+ // Check against start point
12971
+ var startDist = Cartesian3.distance(pos3d, positions[0]);
12972
+ if (startDist <= minDistance) {
12973
+ index = 0;
12974
+ minDistance = startDist;
12975
+ console.log("Insert at start");
12976
+ }
12977
+ else {
12978
+ console.log("Start distance was longer than cur distance. ".concat(startDist, " > ").concat(minDistance));
12979
+ }
12980
+ // Check against end point
12981
+ var endDist = Cartesian3.distance(pos3d, positions[positions.length - 1]);
12982
+ if (endDist <= minDistance) {
12983
+ index = positions.length;
12984
+ console.log("Insert at end");
12985
+ }
12986
+ else {
12987
+ console.log("End distance was longer than cur distance. ".concat(endDist, " > ").concat(minDistance));
12971
12988
  }
12972
12989
  return index;
12973
12990
  }
@@ -15272,7 +15289,7 @@ var ViewerUtils;
15272
15289
  ViewerUtils.CreateWidgets = CreateWidgets;
15273
15290
  })(ViewerUtils || (ViewerUtils = {}));
15274
15291
 
15275
- var VERSION$1 = "2.7.4";
15292
+ var VERSION$1 = "2.7.6";
15276
15293
 
15277
15294
  export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
15278
15295
  //# sourceMappingURL=bruce-cesium.es5.js.map