bruce-cesium 5.8.7 → 5.8.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 (27) hide show
  1. package/dist/bruce-cesium.es5.js +299 -85
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +298 -84
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +1 -1
  6. package/dist/lib/rendering/menu-item-manager.js +64 -5
  7. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  8. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +22 -11
  9. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
  10. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +29 -6
  11. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -1
  12. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +25 -1
  13. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -1
  14. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +26 -12
  15. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -1
  16. package/dist/lib/rendering/tileset-render-engine.js +13 -1
  17. package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
  18. package/dist/lib/utils/entity-utils.js +22 -3
  19. package/dist/lib/utils/entity-utils.js.map +1 -1
  20. package/dist/lib/widgets/widget-info-view.js +220 -45
  21. package/dist/lib/widgets/widget-info-view.js.map +1 -1
  22. package/dist/types/bruce-cesium.d.ts +1 -1
  23. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +5 -1
  24. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +3 -1
  25. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +5 -2
  26. package/dist/types/widgets/widget-info-view.d.ts +0 -1
  27. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { BruceEvent, Cartes, Entity as Entity$1, ProjectViewTile, Carto, Geometry, MathUtils, LRUCache, Api, Calculator, ClientFile, EntityTag, EntityType, ObjectUtils, Style, DelayQueue, EntityLod, Bounds, ZoomControl, EntityRelationType, ENVIRONMENT, EntityHistoricData, Tileset, EntityCoords, DataLab, EntitySource, MenuItem, EntityRelation, ProgramKey, ProjectView, ProjectViewBookmark, Camera, ProjectViewLegacyTile, EntityAttachment, EntityAttachmentType, EntityAttribute, AbstractApi, Session } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, JulianDate, Entity, DistanceDisplayCondition, HorizontalOrigin, VerticalOrigin, ConstantProperty, ClassificationType, ConstantPositionProperty, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, ColorMaterialProperty, ColorBlendMode, HeadingPitchRoll, Transforms, Model, SceneMode, Primitive, Cesium3DTileFeature, GeoJsonDataSource, Cesium3DTileStyle, Cesium3DTileColorBlendMode, HeadingPitchRange, Ion, KmlDataSource, Quaternion, Matrix3, Matrix4, OrthographicFrustum, EasingFunction, NearFarScalar, SceneTransforms, Cesium3DTileset, IonResource, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, CesiumInspector, defined, ClockRange, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, BoundingSphere, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, CzmlDataSource, Intersect, Fullscreen } from 'cesium';
3
+ import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, JulianDate, Entity, DistanceDisplayCondition, HorizontalOrigin, VerticalOrigin, ConstantProperty, ClassificationType, ConstantPositionProperty, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, ColorMaterialProperty, ColorBlendMode, HeadingPitchRoll, Transforms, Model, Primitive, Cesium3DTileFeature, SceneMode, GeoJsonDataSource, Cesium3DTileStyle, Cesium3DTileColorBlendMode, HeadingPitchRange, Ion, KmlDataSource, Quaternion, Matrix3, Matrix4, SceneTransforms, OrthographicFrustum, EasingFunction, NearFarScalar, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, IonResource, Cesium3DTileset, CesiumInspector, defined, ClockRange, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, BoundingSphere, GeometryInstance, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, ScreenSpaceEventHandler, ScreenSpaceEventType, CzmlDataSource, Intersect, Fullscreen } from 'cesium';
4
4
 
5
5
  const TIME_LAG = 300;
6
6
  const POSITION_CHECK_TIMER = 950;
@@ -3382,11 +3382,31 @@ function calcEntityLocation(entity, modelSpace) {
3382
3382
  if (!worldPosition) {
3383
3383
  return null;
3384
3384
  }
3385
- let offset = new Cartesian3(+worldPosition[0][3], +worldPosition[1][3], +worldPosition[2][3]);
3385
+ let offset;
3386
+ {
3387
+ // Check if we have rotation/scale components (non-identity 3x3 upper-left matrix).
3388
+ const hasRotationOrScale = Math.abs(+worldPosition[0][0] - 1) > 1e-6 || Math.abs(+worldPosition[0][1]) > 1e-6 || Math.abs(+worldPosition[0][2]) > 1e-6 ||
3389
+ Math.abs(+worldPosition[1][0]) > 1e-6 || Math.abs(+worldPosition[1][1] - 1) > 1e-6 || Math.abs(+worldPosition[1][2]) > 1e-6 ||
3390
+ Math.abs(+worldPosition[2][0]) > 1e-6 || Math.abs(+worldPosition[2][1]) > 1e-6 || Math.abs(+worldPosition[2][2] - 1) > 1e-6;
3391
+ if (hasRotationOrScale) {
3392
+ // Extract translation first.
3393
+ const translation = new Cartesian3(+worldPosition[0][3], +worldPosition[1][3], +worldPosition[2][3]);
3394
+ // Extract rotation matrix.
3395
+ const mawp = new Matrix4(+worldPosition[0][0], +worldPosition[0][1], +worldPosition[0][2], +worldPosition[0][3], +worldPosition[1][0], +worldPosition[1][1], +worldPosition[1][2], +worldPosition[1][3], +worldPosition[2][0], +worldPosition[2][1], +worldPosition[2][2], +worldPosition[2][3], +worldPosition[3][0], +worldPosition[3][1], +worldPosition[3][2], +worldPosition[3][3]);
3396
+ let rotmat = new Matrix3();
3397
+ rotmat = Matrix4.getRotation(mawp, rotmat);
3398
+ const inverseRotmat = Matrix3.transpose(rotmat, new Matrix3());
3399
+ offset = Matrix3.multiplyByVector(inverseRotmat, translation, new Cartesian3());
3400
+ }
3401
+ // For translation-only matrices, extract translation directly.
3402
+ else {
3403
+ offset = new Cartesian3(+worldPosition[0][3], +worldPosition[1][3], +worldPosition[2][3]);
3404
+ }
3405
+ }
3386
3406
  let heading = 0;
3387
3407
  let pitch = 0;
3388
3408
  let roll = 0;
3389
- {
3409
+ if (!modelSpace) {
3390
3410
  const eTransform = entity.Bruce.Transform;
3391
3411
  if (eTransform) {
3392
3412
  if (eTransform.heading) {
@@ -14910,6 +14930,14 @@ var EntitiesIdsRenderManager;
14910
14930
  get Disposed() {
14911
14931
  return this.disposed;
14912
14932
  }
14933
+ get EntityIds() {
14934
+ var _a, _b;
14935
+ return ((_b = (_a = this.item) === null || _a === void 0 ? void 0 : _a.BruceEntity) === null || _b === void 0 ? void 0 : _b.EntityIds) || [];
14936
+ }
14937
+ get ZoomControl() {
14938
+ var _a;
14939
+ return ((_a = this.item) === null || _a === void 0 ? void 0 : _a.CameraZoomSettings) || [];
14940
+ }
14913
14941
  constructor(params) {
14914
14942
  var _a;
14915
14943
  this.getter = null;
@@ -14935,11 +14963,14 @@ var EntitiesIdsRenderManager;
14935
14963
  this.clustering = new PointClustering(visualsManager, this.item.id, (_a = this.item) === null || _a === void 0 ? void 0 : _a.clustering);
14936
14964
  }
14937
14965
  }
14938
- Init() {
14966
+ Init(params) {
14939
14967
  var _a, _b, _c;
14940
14968
  if (this.disposed) {
14941
14969
  throw (new Error("This item is disposed."));
14942
14970
  }
14971
+ if (params === null || params === void 0 ? void 0 : params.item) {
14972
+ this.item = params.item;
14973
+ }
14943
14974
  if (!((_a = this.item.CameraZoomSettings) === null || _a === void 0 ? void 0 : _a.length)) {
14944
14975
  this.item.CameraZoomSettings = [
14945
14976
  {
@@ -14956,19 +14987,19 @@ var EntitiesIdsRenderManager;
14956
14987
  if (this.renderPriority == null) {
14957
14988
  this.renderPriority = 2;
14958
14989
  }
14959
- this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.EntityIds, this.monitor, BATCH_SIZE$2,
14960
- // Don't emit the same Entity multiple times.
14961
- true);
14962
- this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {
14963
- this.onGetterUpdate(ids);
14964
- });
14965
- this.getter.Start();
14990
+ if (!this.getter) {
14991
+ this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.EntityIds, this.monitor, BATCH_SIZE$2,
14992
+ // Don't emit the same Entity multiple times.
14993
+ true);
14994
+ this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {
14995
+ this.onGetterUpdate(ids);
14996
+ });
14997
+ this.getter.Start();
14998
+ }
14999
+ this.viewerDateTimeDispose();
14966
15000
  if (((_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b.historic) || ((_c = this.item.BruceEntity) === null || _c === void 0 ? void 0 : _c.historicAttrKey)) {
14967
15001
  this.viewerDateTimeSub();
14968
15002
  }
14969
- else {
14970
- this.viewerDateTimeDispose();
14971
- }
14972
15003
  }
14973
15004
  Dispose() {
14974
15005
  if (this.disposed) {
@@ -16569,9 +16600,21 @@ var TilesetRenderEngine;
16569
16600
  if (transform.scale <= 0) {
16570
16601
  transform.scale = 0.000001;
16571
16602
  }
16572
- // If we're in model-space we'll just go at 0,0 lat/lon.
16603
+ // If we're in model-space we'll just go at 0,0 lat/lon and no h/p/r from the coords.
16573
16604
  if (params.modelSpace) {
16574
16605
  location = null;
16606
+ transform = {
16607
+ heading: 0,
16608
+ pitch: 0,
16609
+ roll: 0,
16610
+ scale: EnsureNumber(transform.scale, 1),
16611
+ x: 0,
16612
+ y: 0,
16613
+ z: 0
16614
+ };
16615
+ if (transform.scale <= 0) {
16616
+ transform.scale = 0.000001;
16617
+ }
16575
16618
  }
16576
16619
  /**
16577
16620
  * Very cursed.
@@ -19261,8 +19304,7 @@ var DataLabRenderManager;
19261
19304
  })(DataLabRenderManager || (DataLabRenderManager = {}));
19262
19305
 
19263
19306
  const MAX_BATCHES = 2;
19264
- const BATCH_SIZE_OLD_API = 30;
19265
- const BATCH_SIZE_NEW_API = 1000;
19307
+ const BATCH_SIZE$3 = 1000;
19266
19308
  const BATCH_DELAY = 200;
19267
19309
  const MAX_RANGE = 3000;
19268
19310
  var TilesetOsmRenderManager;
@@ -19277,6 +19319,12 @@ var TilesetOsmRenderManager;
19277
19319
  get count() {
19278
19320
  return ++this.counter;
19279
19321
  }
19322
+ get SourceId() {
19323
+ return this.sourceId;
19324
+ }
19325
+ get EntityTypeId() {
19326
+ return this.entityTypeId;
19327
+ }
19280
19328
  constructor(params) {
19281
19329
  this.disposed = false;
19282
19330
  this.cTileset = null;
@@ -19289,7 +19337,6 @@ var TilesetOsmRenderManager;
19289
19337
  this.queueCheckInterval = null;
19290
19338
  this.processingQueue = 0;
19291
19339
  this._osmIdToBruceId = {};
19292
- this.batchSize = BATCH_SIZE_OLD_API;
19293
19340
  const { viewer, register: visualsManager, getters: apiGetter, monitor, item } = params;
19294
19341
  this.viewer = viewer;
19295
19342
  this.getters = apiGetter;
@@ -19321,12 +19368,22 @@ var TilesetOsmRenderManager;
19321
19368
  });
19322
19369
  this.featureQueue = [];
19323
19370
  }
19324
- Init() {
19371
+ Init(params) {
19325
19372
  var _a, _b;
19373
+ if (params === null || params === void 0 ? void 0 : params.item) {
19374
+ this.item = params.item;
19375
+ }
19326
19376
  const menuItem = this.item;
19327
19377
  this.sourceId = EnsureNumber((_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId, 0);
19328
19378
  this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
19329
19379
  (async () => {
19380
+ if (this.disposed) {
19381
+ return;
19382
+ }
19383
+ else if (this.cTileset) {
19384
+ // Already exists, no need to re-initialize.
19385
+ return;
19386
+ }
19330
19387
  const validToken = await ViewerUtils.AssertIonToken(Ion.defaultAccessToken);
19331
19388
  if (!validToken) {
19332
19389
  console.warn("'tileset-osm-render-manager.ts' could not locate a valid Cesium Ion token.");
@@ -19346,12 +19403,13 @@ var TilesetOsmRenderManager;
19346
19403
  console.warn("'tileset-osm-render-manager.ts' could not locate a create function for OSM buildings.");
19347
19404
  return;
19348
19405
  }
19349
- // New API versions are way better at processing this request.
19350
- const api = this.getters.GetBruceApi();
19351
- await api.Loading;
19352
- if (api.IsVersionAtLeast("1.0.5244")) {
19353
- this.batchSize = BATCH_SIZE_NEW_API;
19406
+ // See if we already have a cTileset set.
19407
+ // Happens if we re-initialized in quick succession.
19408
+ if (this.cTileset) {
19409
+ cTileset.destroy();
19410
+ return;
19354
19411
  }
19412
+ this.cTileset = cTileset;
19355
19413
  if (this.disposed) {
19356
19414
  if (this.cTileset && !this.cTileset.isDestroyed()) {
19357
19415
  this.cTileset.destroy();
@@ -19359,7 +19417,6 @@ var TilesetOsmRenderManager;
19359
19417
  }
19360
19418
  return;
19361
19419
  }
19362
- this.cTileset = cTileset;
19363
19420
  if (this.sourceId) {
19364
19421
  if (menuItem.ghostLoading == true) {
19365
19422
  this.cTileset.style = new Cesium3DTileStyle({
@@ -19463,7 +19520,7 @@ var TilesetOsmRenderManager;
19463
19520
  const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);
19464
19521
  if (isClose) {
19465
19522
  batch.push(feature);
19466
- if (batch.length >= this.batchSize) {
19523
+ if (batch.length >= BATCH_SIZE$3) {
19467
19524
  return batch;
19468
19525
  }
19469
19526
  }
@@ -19613,7 +19670,7 @@ var TilesetOsmRenderManager;
19613
19670
  delete this._loadedCesiumEntities[key];
19614
19671
  this.totalLoaded -= 1;
19615
19672
  removed += 1;
19616
- if (removed >= this.batchSize) {
19673
+ if (removed >= BATCH_SIZE$3) {
19617
19674
  return true;
19618
19675
  }
19619
19676
  }
@@ -20891,9 +20948,33 @@ var TilesetGooglePhotosRenderManager;
20891
20948
  this.cTileset = null;
20892
20949
  }
20893
20950
  }
20894
- Init() {
20951
+ Init(params) {
20952
+ if (this.disposed) {
20953
+ return;
20954
+ }
20955
+ if (params === null || params === void 0 ? void 0 : params.item) {
20956
+ this.item = params.item;
20957
+ }
20895
20958
  (async () => {
20896
20959
  var _a;
20960
+ // If the tileset already exists then we just need to update the style.
20961
+ if (this.cTileset) {
20962
+ const colorCss = this.item.colorMask;
20963
+ if (colorCss) {
20964
+ this.cTileset.style = new Cesium3DTileStyle({
20965
+ color: {
20966
+ conditions: [
20967
+ ["true", `color("${colorCss}")`]
20968
+ ]
20969
+ }
20970
+ });
20971
+ }
20972
+ else {
20973
+ this.cTileset.style = undefined;
20974
+ }
20975
+ this.viewer.scene.requestRender();
20976
+ return;
20977
+ }
20897
20978
  const CESIUM = Cesium;
20898
20979
  if (!CESIUM.createGooglePhotorealistic3DTileset) {
20899
20980
  console.warn("Cesium version does not support 'createGooglePhotorealistic3DTileset' so Google Photos tileset will not be rendered.");
@@ -22406,7 +22487,7 @@ var AssemblyRenderManager;
22406
22487
  continue;
22407
22488
  }
22408
22489
  const pos3d = calcEntityLocation$1(entity, this.modelSpace);
22409
- const orient = calcEntityOrientation(entity, pos3d);
22490
+ const orient = calcEntityOrientation(entity, pos3d, this.modelSpace);
22410
22491
  if (!pos3d || !orient) {
22411
22492
  continue;
22412
22493
  }
@@ -22424,9 +22505,15 @@ var AssemblyRenderManager;
22424
22505
  position: pos3d,
22425
22506
  orientation: new ConstantProperty(orient)
22426
22507
  });
22508
+ const geometryRadius = Entity$1.GetValue({
22509
+ entity: entity,
22510
+ path: ["Bruce", "GeometryRadius"]
22511
+ });
22512
+ cEntity.model["_radius"] = geometryRadius;
22513
+ cEntity.model["_radiusLoaded"] = true;
22427
22514
  this.visualsManager.AddRego({
22428
22515
  rego: {
22429
- canEdit: false,
22516
+ canEdit: true,
22430
22517
  entityId: entity.Bruce.ID,
22431
22518
  menuItemId: this.item.id,
22432
22519
  menuItemType: this.item.Type,
@@ -22687,7 +22774,7 @@ function calcEntityLocation$1(entity, modelSpace) {
22687
22774
  let heading = 0;
22688
22775
  let pitch = 0;
22689
22776
  let roll = 0;
22690
- {
22777
+ if (!modelSpace) {
22691
22778
  const eTransform = entity.Bruce.Transform;
22692
22779
  if (eTransform) {
22693
22780
  if (eTransform.heading) {
@@ -22709,12 +22796,29 @@ function calcEntityLocation$1(entity, modelSpace) {
22709
22796
  pos3d = Matrix4.multiplyByPoint(m1, transformedOffset, new Cartesian3());
22710
22797
  return pos3d;
22711
22798
  }
22712
- function calcEntityOrientation(entity, pos3d) {
22713
- var _a, _b, _c;
22799
+ function calcEntityOrientation(entity, pos3d, modelSpace) {
22714
22800
  if (!entity.Bruce || !pos3d) {
22715
22801
  return null;
22716
22802
  }
22717
- let hpr = HeadingPitchRoll.fromDegrees(((_a = entity.Bruce.Transform) === null || _a === void 0 ? void 0 : _a.heading) || 90, ((_b = entity.Bruce.Transform) === null || _b === void 0 ? void 0 : _b.pitch) || 0, ((_c = entity.Bruce.Transform) === null || _c === void 0 ? void 0 : _c.roll) || 0);
22803
+ // 0 or 90 for these?
22804
+ let heading = 90;
22805
+ let pitch = 0;
22806
+ let roll = 0;
22807
+ if (!modelSpace) {
22808
+ const eTransform = entity.Bruce.Transform;
22809
+ if (eTransform) {
22810
+ if (eTransform.heading) {
22811
+ heading = eTransform.heading;
22812
+ }
22813
+ if (eTransform.pitch) {
22814
+ pitch = eTransform.pitch;
22815
+ }
22816
+ if (eTransform.roll) {
22817
+ roll = eTransform.roll;
22818
+ }
22819
+ }
22820
+ }
22821
+ let hpr = HeadingPitchRoll.fromDegrees(EnsureNumber(heading), EnsureNumber(pitch), EnsureNumber(roll));
22718
22822
  let orientation = Transforms.headingPitchRollQuaternion(pos3d, hpr);
22719
22823
  if (entity.Bruce.AssemblyWorldPosition) {
22720
22824
  // extract rot, scale
@@ -22807,7 +22911,7 @@ var MenuItemManager;
22807
22911
  * @returns
22808
22912
  */
22809
22913
  RenderItem(params) {
22810
- var _a, _b, _c, _d, _e;
22914
+ var _a, _b, _c, _d, _e, _f, _g, _h;
22811
22915
  if (this.viewer.isDestroyed()) {
22812
22916
  return null;
22813
22917
  }
@@ -22829,6 +22933,7 @@ var MenuItemManager;
22829
22933
  }
22830
22934
  let rItem = this.items.find(x => x.id == params.item.id);
22831
22935
  let create = true;
22936
+ // Item already exists so we'll check if we should re-create it.
22832
22937
  if (rItem) {
22833
22938
  // This means we're updating a tag menu item.
22834
22939
  // Tag menu items have alternative states based on bookmark settings.
@@ -22877,18 +22982,76 @@ var MenuItemManager;
22877
22982
  create = false;
22878
22983
  }
22879
22984
  }
22985
+ else if (rItem.type == MenuItem.EType.PointCloud && params.item.Type == MenuItem.EType.PointCloud) {
22986
+ if (rItem.renderManager) {
22987
+ create = false;
22988
+ }
22989
+ }
22990
+ else if (rItem.type == MenuItem.EType.ArbTileset && params.item.Type == MenuItem.EType.ArbTileset) {
22991
+ if (rItem.renderManager) {
22992
+ create = false;
22993
+ }
22994
+ }
22995
+ else if (rItem.type == MenuItem.EType.I3sTileset && params.item.Type == MenuItem.EType.I3sTileset) {
22996
+ if (rItem.renderManager) {
22997
+ create = false;
22998
+ }
22999
+ }
22880
23000
  // Re-init in case model-space changed to geo-spatial or vice-versa.
22881
23001
  else if (rItem.type == MenuItem.EType.Assembly && params.item.Type == MenuItem.EType.Assembly) {
22882
23002
  if (rItem.renderManager && rItem.renderManager.ModelSpace == params.modelSpace) {
22883
23003
  create = false;
22884
23004
  }
22885
23005
  }
23006
+ // Updating an existing Google photos tileset.
23007
+ // Eg: different color mask (opacity).
23008
+ else if (rItem.type == MenuItem.EType.GooglePhotoTileset && params.item.Type == MenuItem.EType.GooglePhotoTileset) {
23009
+ if (rItem.renderManager) {
23010
+ rItem.renderManager.Init({
23011
+ item: params.item
23012
+ });
23013
+ rItem.item = params.item;
23014
+ create = false;
23015
+ }
23016
+ }
23017
+ else if (rItem.type == MenuItem.EType.Osm && params.item.Type == MenuItem.EType.Osm) {
23018
+ // If the source is the same then we can re-use the render manager.
23019
+ const oRenderManager = rItem.renderManager;
23020
+ const oItem = params.item;
23021
+ if (oRenderManager && oItem) {
23022
+ if (+oRenderManager.SourceId == +((_b = oItem.BruceEntity) === null || _b === void 0 ? void 0 : _b.SourceId) && oRenderManager.EntityTypeId == ((_c = oItem.BruceEntity) === null || _c === void 0 ? void 0 : _c["EntityType.ID"])) {
23023
+ oRenderManager.Init({
23024
+ item: oItem
23025
+ });
23026
+ rItem.item = params.item;
23027
+ create = false;
23028
+ }
23029
+ }
23030
+ }
23031
+ else if (rItem.type == MenuItem.EType.EntitiesIds && params.item.Type == MenuItem.EType.EntitiesIds) {
23032
+ // Checking for Entity IDs.
23033
+ const eIdsRenderManager = rItem.renderManager;
23034
+ const eIdsItem = params.item;
23035
+ if (eIdsRenderManager && eIdsItem) {
23036
+ const eEntityIds = eIdsRenderManager.EntityIds;
23037
+ const mEntityIds = (_d = eIdsItem.BruceEntity) === null || _d === void 0 ? void 0 : _d.EntityIds;
23038
+ const eEntityIdsStr = eEntityIds ? eEntityIds.join(",") : "";
23039
+ const mEntityIdsStr = mEntityIds ? mEntityIds.join(",") : "";
23040
+ if (eEntityIdsStr == mEntityIdsStr) {
23041
+ eIdsRenderManager.Init({
23042
+ item: eIdsItem
23043
+ });
23044
+ rItem.item = params.item;
23045
+ create = false;
23046
+ }
23047
+ }
23048
+ }
22886
23049
  else if (rItem.type != params.item.Type) {
22887
23050
  create = true;
22888
23051
  }
22889
23052
  if (create) {
22890
23053
  try {
22891
- (_b = rItem.renderManager) === null || _b === void 0 ? void 0 : _b.Dispose();
23054
+ (_e = rItem.renderManager) === null || _e === void 0 ? void 0 : _e.Dispose();
22892
23055
  }
22893
23056
  catch (e) {
22894
23057
  console.error(e);
@@ -22899,7 +23062,7 @@ var MenuItemManager;
22899
23062
  if (create) {
22900
23063
  if (!rItem) {
22901
23064
  rItem = {
22902
- id: (_c = params.item.id) !== null && _c !== void 0 ? _c : ObjectUtils.UId(),
23065
+ id: (_f = params.item.id) !== null && _f !== void 0 ? _f : ObjectUtils.UId(),
22903
23066
  childIds: [],
22904
23067
  item: params.item,
22905
23068
  renderManager: null,
@@ -23098,8 +23261,8 @@ var MenuItemManager;
23098
23261
  rItem.childIds.push(childId);
23099
23262
  }
23100
23263
  }
23101
- if (rItem.renderManager && !((_d = rItem.renderManager) === null || _d === void 0 ? void 0 : _d.Disposed)) {
23102
- (_e = this.onUpdate) === null || _e === void 0 ? void 0 : _e.Trigger({ isEnabling: true, itemId: rItem.id });
23264
+ if (rItem.renderManager && !((_g = rItem.renderManager) === null || _g === void 0 ? void 0 : _g.Disposed)) {
23265
+ (_h = this.onUpdate) === null || _h === void 0 ? void 0 : _h.Trigger({ isEnabling: true, itemId: rItem.id });
23103
23266
  }
23104
23267
  return rItem.id;
23105
23268
  }
@@ -30951,6 +31114,7 @@ var EMode;
30951
31114
  EMode["ShowAvailable"] = "AV";
30952
31115
  EMode["ShowImportantAndAvailable"] = "IMP_AV";
30953
31116
  })(EMode || (EMode = {}));
31117
+ const DISPLAY_ASSEMBLY_INFO = false;
30954
31118
  const OPEN_STORAGE_KEY = "EntityViewSummary_open_";
30955
31119
  const EXCLUDED_PROPERTIES = ["Bruce", "geometry", "position", "boundaries"];
30956
31120
  function isAttributeImportant(mode, entity, path, field) {
@@ -31187,7 +31351,7 @@ class WidgetInfoView extends Widget.AWidget {
31187
31351
  flex-shrink: 1;
31188
31352
  margin-top: 12px;
31189
31353
  overflow: auto;
31190
- padding: 25px;
31354
+ padding: 20px;
31191
31355
  width: 100%;
31192
31356
  }
31193
31357
 
@@ -31198,32 +31362,42 @@ class WidgetInfoView extends Widget.AWidget {
31198
31362
  width: 100%;
31199
31363
  }
31200
31364
 
31365
+ .NextspaceInfoViewLabel {
31366
+ align-items: center;
31367
+ column-gap: 8px;
31368
+ display: flex;
31369
+ flex-wrap: wrap;
31370
+ margin-top: 12px;
31371
+ max-width: 100%;
31372
+ row-gap: 5px;
31373
+ text-align: left;
31374
+ white-space: nowrap;
31375
+ }
31376
+
31201
31377
  .NextspaceInfoViewName {
31202
31378
  font-family: Arial;
31203
31379
  font-style: normal;
31204
31380
  font-weight: 400;
31205
- text-align: center;
31206
- width: 100%;
31381
+ font-size: 12px;
31382
+ letter-spacing: .05em;
31207
31383
  color: #40c4ff;
31208
- font-size: 13px;
31209
- letter-spacing: .01em;
31210
- line-height: 16px;
31211
- margin-bottom: 5px;
31384
+ overflow: hidden;
31385
+ text-overflow: ellipsis;
31386
+ transition: .3s ease;
31387
+ max-width: 100%;
31388
+ width: 100%;
31389
+ width: -webkit-max-content !important;
31390
+ width: max-content !important;
31212
31391
  }
31213
31392
 
31214
31393
  .NextspaceInfoViewType {
31215
31394
  font-family: Arial;
31216
31395
  font-style: normal;
31217
31396
  font-weight: 400;
31218
- text-align: center;
31219
- width: 100%;
31220
- color: #c1c7cd;
31221
- font-size: 10px;
31397
+ font-size: 12px;
31222
31398
  letter-spacing: .05em;
31223
- line-height: 10px;
31224
- margin-bottom: 12px;
31225
- -webkit-user-select: none;
31226
- user-select: none;
31399
+ color: #fff;
31400
+ opacity: .7;
31227
31401
  }
31228
31402
 
31229
31403
  .NextspaceInfoViewTitle {
@@ -31237,7 +31411,7 @@ class WidgetInfoView extends Widget.AWidget {
31237
31411
  -webkit-touch-callout: none;
31238
31412
  -webkit-user-select: none;
31239
31413
  user-select: none;
31240
- margin-top: 20px;
31414
+ margin-top: 10px;
31241
31415
  margin-bottom: 10px;
31242
31416
  }
31243
31417
 
@@ -31259,8 +31433,8 @@ class WidgetInfoView extends Widget.AWidget {
31259
31433
 
31260
31434
  .NextspaceAttributesGroupToggle {
31261
31435
  align-items: center;
31262
- background-color: #343a3f;
31263
- border: 1px solid #343a3f;
31436
+ background-color: #293034;
31437
+ border: 1px solid #494949;
31264
31438
  border-radius: 5px;
31265
31439
  cursor: pointer;
31266
31440
  display: flex;
@@ -31279,13 +31453,11 @@ class WidgetInfoView extends Widget.AWidget {
31279
31453
  .NextspaceAttributesGroupToggleIcon {
31280
31454
  align-items: center;
31281
31455
  display: flex;
31282
- height: 20px;
31456
+ height: 15px;
31283
31457
  justify-content: center;
31284
- margin-left: auto;
31285
31458
  margin-right: 8px;
31286
- width: 20px;
31287
- cursor: pointer;
31288
- white-space: nowrap;
31459
+ position: relative;
31460
+ width: 15px;
31289
31461
  }
31290
31462
 
31291
31463
  .NextspaceAttributesGroup[is-opened="false"] .NextspaceAttributesGroupToggleIconOpened {
@@ -31381,6 +31553,40 @@ class WidgetInfoView extends Widget.AWidget {
31381
31553
  width: 100%;
31382
31554
  user-select: none;
31383
31555
  }
31556
+
31557
+ .NextspaceInputRow {
31558
+ display: flex;
31559
+ flex-direction: row;
31560
+ align-items: center;
31561
+ margin-bottom: 4px;
31562
+ }
31563
+
31564
+ .NextspaceInputRow > label {
31565
+ flex-grow: 0;
31566
+ flex-shrink: 0;
31567
+ width: 120px;
31568
+ margin-right: 5px;
31569
+ color: #f2f4f8;
31570
+ font-family: Arial;
31571
+ font-size: 14px;
31572
+ font-style: normal;
31573
+ font-weight: 500;
31574
+ line-height: 20px;
31575
+ }
31576
+
31577
+ .NextspaceInputRow > input {
31578
+ width: 100px;
31579
+ flex-grow: 1;
31580
+ flex-shrink: 1;
31581
+ background-color: #121619;
31582
+ border: 1px solid #434343;
31583
+ border-radius: 5px;
31584
+ display: flex;
31585
+ height: 35px;
31586
+ color: #fff;
31587
+ font-size: 12px;
31588
+ outline: none;
31589
+ }
31384
31590
  `;
31385
31591
  document.head.appendChild(style);
31386
31592
  }
@@ -31419,13 +31625,16 @@ class WidgetInfoView extends Widget.AWidget {
31419
31625
  const scrollBox = document.createElement("div");
31420
31626
  scrollBox.className = "NextspaceInfoViewScrollBox";
31421
31627
  content.appendChild(scrollBox);
31628
+ const label = document.createElement("div");
31629
+ label.className = "NextspaceInfoViewLabel";
31630
+ scrollBox.appendChild(label);
31422
31631
  const name = document.createElement("div");
31423
31632
  name.className = "NextspaceInfoViewName";
31424
- scrollBox.appendChild(name);
31633
+ label.appendChild(name);
31425
31634
  this._name = name;
31426
31635
  const type = document.createElement("div");
31427
31636
  type.className = "NextspaceInfoViewType";
31428
- scrollBox.appendChild(type);
31637
+ label.appendChild(type);
31429
31638
  this._type = type;
31430
31639
  const imageContainer = document.createElement("div");
31431
31640
  imageContainer.className = "NextspaceDefaultImageContainer";
@@ -31435,11 +31644,6 @@ class WidgetInfoView extends Widget.AWidget {
31435
31644
  scrollBox.appendChild(imageContainer);
31436
31645
  this._imageContainer = imageContainer;
31437
31646
  this._image = image;
31438
- const title = document.createElement("div");
31439
- title.className = "NextspaceInfoViewTitle";
31440
- title.innerText = "Details";
31441
- scrollBox.appendChild(title);
31442
- this._title = title;
31443
31647
  const summary = document.createElement("div");
31444
31648
  summary.className = "NextspaceInfoViewSummary";
31445
31649
  scrollBox.appendChild(summary);
@@ -31463,7 +31667,7 @@ class WidgetInfoView extends Widget.AWidget {
31463
31667
  }
31464
31668
  }
31465
31669
  async _updateInfoView() {
31466
- var _a, _b, _c;
31670
+ var _b, _c, _d;
31467
31671
  const selectedIds = this._manager.VisualsRegister.GetSelected();
31468
31672
  if (selectedIds.length <= 0) {
31469
31673
  this._element.style.display = "none";
@@ -31479,9 +31683,8 @@ class WidgetInfoView extends Widget.AWidget {
31479
31683
  }
31480
31684
  this._lastSelectedId = firstId;
31481
31685
  try {
31482
- this._title.style.display = "none";
31483
31686
  this._flyTo.style.display = "none";
31484
- this._name.innerText = "Loading...";
31687
+ this._name.innerText = "Loading..";
31485
31688
  this._type.innerText = "";
31486
31689
  this._summary.innerHTML = "";
31487
31690
  this._imageContainer.style.display = "none";
@@ -31489,13 +31692,14 @@ class WidgetInfoView extends Widget.AWidget {
31489
31692
  const { entity } = await Entity$1.Get({
31490
31693
  entityId: firstId,
31491
31694
  api: api,
31492
- migrated: true
31695
+ migrated: true,
31696
+ expandLocation: DISPLAY_ASSEMBLY_INFO
31493
31697
  });
31494
31698
  if (!entity) {
31495
31699
  throw (new Error("Could not get entity."));
31496
31700
  }
31497
31701
  const { entityType } = await EntityType.Get({
31498
- entityTypeId: (_a = entity.Bruce) === null || _a === void 0 ? void 0 : _a["EntityType.ID"],
31702
+ entityTypeId: (_b = entity.Bruce) === null || _b === void 0 ? void 0 : _b["EntityType.ID"],
31499
31703
  api: api
31500
31704
  });
31501
31705
  let name = Entity$1.CalculateName({
@@ -31506,7 +31710,6 @@ class WidgetInfoView extends Widget.AWidget {
31506
31710
  if (!name) {
31507
31711
  name = "Unnamed Entity";
31508
31712
  }
31509
- this._title.style.display = "block";
31510
31713
  this._flyTo.style.display = "flex";
31511
31714
  this._name.innerText = name;
31512
31715
  this._type.innerText = (entityType === null || entityType === void 0 ? void 0 : entityType.Name) ? entityType.Name : "Unknown type";
@@ -31526,9 +31729,13 @@ class WidgetInfoView extends Widget.AWidget {
31526
31729
  });
31527
31730
  this._image.style.backgroundImage = `url(${url})`;
31528
31731
  }
31732
+ const detailsTitle = document.createElement("div");
31733
+ detailsTitle.className = "NextspaceInfoViewTitle";
31734
+ detailsTitle.innerText = "Details";
31735
+ this._summary.appendChild(detailsTitle);
31529
31736
  // TODO: Selection for what mode instead of always doing "all".
31530
31737
  const attributes = gatherAttributes(EMode.ShowAll, entity, entityType);
31531
- const groups = groupAttributes(attributes, (_c = (_b = entityType.DataSchema) === null || _b === void 0 ? void 0 : _b.Structure) !== null && _c !== void 0 ? _c : []);
31738
+ const groups = groupAttributes(attributes, (_d = (_c = entityType.DataSchema) === null || _c === void 0 ? void 0 : _c.Structure) !== null && _d !== void 0 ? _d : []);
31532
31739
  for (const group of groups) {
31533
31740
  this._generateAttrGroup(entityType, entity, group);
31534
31741
  }
@@ -31536,7 +31743,7 @@ class WidgetInfoView extends Widget.AWidget {
31536
31743
  catch (e) {
31537
31744
  console.error(e);
31538
31745
  this._name.innerText = "";
31539
- this._summary.innerHTML = "<p>Could not read entity information</p>";
31746
+ this._summary.innerHTML = "<p>Could not read Entity information</p>";
31540
31747
  }
31541
31748
  }
31542
31749
  _generateAttrGroup(type, entity, group) {
@@ -31547,11 +31754,11 @@ class WidgetInfoView extends Widget.AWidget {
31547
31754
  const toggle = document.createElement("div");
31548
31755
  toggle.className = "NextspaceAttributesGroupToggle";
31549
31756
  toggle.innerHTML = `
31550
- ${group.group.Key}
31551
31757
  <div class="NextspaceAttributesGroupToggleIcon">
31552
31758
  <svg class="NextspaceAttributesGroupToggleIconOpened" width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15 1L8 8L1 1" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
31553
- <svg class="NextspaceAttributesGroupToggleIconClosed" width="10" height="17" viewBox="0 0 10 17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 15.5L1.5 8.5L8.5 1.5" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
31759
+ <svg class="NextspaceAttributesGroupToggleIconClosed" width="10" height="17" viewBox="0 0 10 17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 1.5L8.5 8.5L1.5 15.5" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>
31554
31760
  </div>
31761
+ ${group.group.Name ? group.group.Name : group.group.Key}
31555
31762
  `;
31556
31763
  toggle.addEventListener("click", () => {
31557
31764
  const isOpened = groupDiv.getAttribute("is-opened") == "true";
@@ -31561,17 +31768,24 @@ class WidgetInfoView extends Widget.AWidget {
31561
31768
  groupDiv.appendChild(toggle);
31562
31769
  }
31563
31770
  for (const attr of group.attributes) {
31564
- const attrDiv = this._generateAttr(groupDiv, type, entity, attr);
31565
- if (group.group.Key != "ROOT") {
31566
- attrDiv.style.marginLeft = "12px";
31567
- }
31771
+ this._generateAttr(groupDiv, type, entity, attr, group.group.Key != "ROOT");
31568
31772
  }
31569
31773
  this._summary.appendChild(groupDiv);
31570
31774
  }
31571
- _generateAttr(container, type, entity, path) {
31775
+ _generateAttr(container, type, entity, path, nested) {
31572
31776
  var _a, _b, _c;
31573
31777
  const attrDiv = document.createElement("div");
31574
31778
  attrDiv.className = "NextspaceAttribute";
31779
+ if (nested) {
31780
+ const nestedIconStr = `
31781
+ <svg width="11" height="13" viewBox="0 0 11 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1V10C1 11.1046 1.89543 12 3 12H10" stroke="#4D5358" stroke-linecap="round" stroke-linejoin="round"></path></svg>
31782
+ `;
31783
+ const nestedIcon = document.createElement("div");
31784
+ nestedIcon.style.marginLeft = "12px";
31785
+ nestedIcon.style.marginRight = "5px";
31786
+ nestedIcon.innerHTML = nestedIconStr;
31787
+ attrDiv.appendChild(nestedIcon);
31788
+ }
31575
31789
  const typeItem = digTypeItem(path, (_b = (_a = type.DataSchema) === null || _a === void 0 ? void 0 : _a.Structure) !== null && _b !== void 0 ? _b : []);
31576
31790
  const attrType = (_c = typeItem === null || typeItem === void 0 ? void 0 : typeItem.Type) !== null && _c !== void 0 ? _c : EntityAttribute.EType.String;
31577
31791
  const input = document.createElement("div");
@@ -32878,7 +33092,7 @@ class WidgetViewBar extends Widget.AWidget {
32878
33092
  }
32879
33093
  }
32880
33094
 
32881
- const VERSION = "5.8.7";
33095
+ const VERSION = "5.8.9";
32882
33096
 
32883
33097
  export { VERSION, CesiumViewMonitor, ViewerUtils, ViewerEventTracker, MenuItemManager, isOutlineChanged, EntityRenderEngine, EntityRenderEnginePoint, EntityRenderEnginePolyline, EntityRenderEnginePolygon, EntityRenderEngineModel3d, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, DataLabRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, GoogleSearchRenderManager, AssemblyRenderManager, RelationsRenderManager, SharedGetters, CesiumParabola, EntityLabel, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, CESIUM_TIMELINE_KEY, CESIUM_TIMELINE_LIVE_KEY, CESIUM_TIMELINE_LIVE_PADDING_KEY, CESIUM_TIMELINE_INTERVAL_KEY, DEFAULT_LIVE_PADDING_SECONDS, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, CesiumEntityStyler, CesiumAnimatedProperty, CesiumAnimatedInOut, Draw3dPolygon, Draw3dPolyline, MeasureCreator, Walkthrough, Widget, VIEWER_BOOKMARKS_WIDGET_KEY, WidgetBookmarks, WidgetBranding, WidgetCursorBar, WidgetEmbeddedInfoView, WidgetInfoView, WidgetNavCompass$$1 as WidgetNavCompass, VIEWER_VIEW_BAR_WIDGET_KEY, WidgetViewBar, WidgetControlViewBar, WidgetControlViewBarSearch, VIEWER_LEFT_PANEL_WIDGET_KEY, VIEWER_LEFT_PANEL_CSS_VAR_LEFT, WidgetLeftPanel, WidgetLeftPanelTab, WidgetLeftPanelTabBookmarks };
32884
33098
  //# sourceMappingURL=bruce-cesium.es5.js.map