bruce-cesium 7.7.2 → 7.7.4

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 * as Cesium from 'cesium';
2
- import { Cartographic, ColorMaterialProperty, Entity, Color, ConstantProperty, CallbackProperty, Primitive, Cesium3DTileFeature, ConstantPositionProperty, HeightReference, DistanceDisplayCondition, Math as Math$1, Cartesian3, JulianDate, Quaternion, Transforms, HeadingPitchRoll, Matrix4, ShaderSource, Ellipsoid, Geometry, GeometryAttribute, ComponentDatatype, PrimitiveType, BoundingSphere, GeometryPipeline, Cartesian2, Cartesian4, sampleTerrain, Texture, PixelFormat, Sampler, TextureWrap, TextureMinificationFilter, TextureMagnificationFilter, PixelDatatype, VertexArray, BufferUsage, ShaderProgram, RenderState, BlendingState, DrawCommand, Pass, ColorBlendMode, ShadowMode, ClassificationType, Model, ArcType, CornerType, HorizontalOrigin, VerticalOrigin, ImageMaterialProperty, PolygonHierarchy, PolylineGraphics, Rectangle, SceneMode, IntersectionTests, Ray, SceneTransforms, NearFarScalar, Matrix3, KmlDataSource, FeatureDetection, GeoJsonDataSource, Cesium3DTileStyle, HeadingPitchRange, Ion, Cesium3DTileColorBlendMode, IonResource, Cesium3DTileset, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, OrthographicFrustum, EasingFunction, Intersect, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, PolygonPipeline, GeometryInstance, CesiumInspector, ClockRange, DynamicEnvironmentMapManager, CustomDataSource, ScreenSpaceEventHandler, ScreenSpaceEventType, Fullscreen, CzmlDataSource } from 'cesium';
3
- import { Cartes, LRUCache, Carto, ProjectViewTile, EntityHistoricData, BruceEvent, DelayQueue, Entity as Entity$1, EntityTag, ClientFile, ENVIRONMENT, EntityAttachmentType, EntityRelationType, EntityType, Tileset, Calculator, DataLab, Style, ObjectUtils, MenuItem, AccountConcept, RecordChangeFeed, EntityLod, UrlUtils, Geometry as Geometry$1, Api, Bounds, ClientFileValueMap, Color as Color$1, ProjectView, ProjectViewBookmark, ZoomControl, Assembly, EntityCoords, BruceApi, EntityRelation, EntitySource, ProgramKey, ProjectViewLegacyTile, Camera, Account, AccountLimits, Session, EntityAttachment, EntityAttribute, MathUtils, ProjectViewBookmarkGroup } from 'bruce-models';
2
+ import { Cartographic, Entity, ConstantPositionProperty, HeightReference, Color, DistanceDisplayCondition, ColorMaterialProperty, Math as Math$1, Cartesian3, JulianDate, Quaternion, Transforms, HeadingPitchRoll, Matrix4, ColorBlendMode, CallbackProperty, ShadowMode, ConstantProperty, ClassificationType, Model, Primitive, Cesium3DTileFeature, ShaderSource, Ellipsoid, Geometry, GeometryAttribute, ComponentDatatype, PrimitiveType, BoundingSphere, GeometryPipeline, Cartesian2, Cartesian4, sampleTerrain, Texture, PixelFormat, Sampler, TextureWrap, TextureMinificationFilter, TextureMagnificationFilter, PixelDatatype, VertexArray, BufferUsage, ShaderProgram, RenderState, BlendingState, DrawCommand, Pass, HorizontalOrigin, VerticalOrigin, ImageMaterialProperty, PolygonHierarchy, PolylineGraphics, ArcType, CornerType, Rectangle, SceneMode, IntersectionTests, Ray, SceneTransforms, NearFarScalar, Matrix3, KmlDataSource, GeoJsonDataSource, FeatureDetection, HeadingPitchRange, Cesium3DTileStyle, Cesium3DTileColorBlendMode, Ion, IonResource, OrthographicFrustum, EasingFunction, Intersect, Cesium3DTileset, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, WebGLConstants, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, PolygonPipeline, GeometryInstance, CustomDataSource, CesiumInspector, ClockRange, DynamicEnvironmentMapManager, ScreenSpaceEventHandler, ScreenSpaceEventType, Fullscreen, CzmlDataSource } from 'cesium';
3
+ import { Cartes, LRUCache, Carto, ProjectViewTile, EntityHistoricData, BruceEvent, DelayQueue, Entity as Entity$1, EntityTag, ClientFile, ENVIRONMENT, EntityAttachmentType, EntityRelationType, EntityType, Tileset, Calculator, DataLab, Style, ObjectUtils, MenuItem, AccountConcept, RecordChangeFeed, EntityLod, UrlUtils, Api, Bounds, ClientFileValueMap, Color as Color$1, Geometry as Geometry$1, ProjectView, ProjectViewBookmark, ZoomControl, Assembly, EntityCoords, BruceApi, EntityRelation, EntitySource, Camera, ProgramKey, ProjectViewLegacyTile, Account, AccountLimits, Session, EntityAttachment, EntityAttribute, MathUtils, ProjectViewBookmarkGroup } from 'bruce-models';
4
4
 
5
5
  /**
6
6
  * Ensures a number is returned from a given value.
@@ -28241,14 +28241,12 @@ var XGridsRenderEngine;
28241
28241
  var _a, _b;
28242
28242
  // Array index is the LOD level, ie: index 0 = LOD 0.
28243
28243
  const lods = obj.getLodInfos();
28244
- //console.log("xgrids-getLodInfos()", lods);
28245
- const HARD_MIN = 1000000;
28246
- const HARD_MAX = 20000000;
28247
- const maxSplats = Math.max(lods ? lods[0] || 0 : 0, HARD_MIN);
28248
- obj.setMaxSplats(Math.min(HARD_MAX, maxSplats));
28249
- if (maxSplats >= HARD_MAX) {
28250
- console.warn("Reduced splat quality due to the number of splats being too large. Was: \"" + maxSplats + "\", now is: \"" + HARD_MAX + "\".");
28251
- }
28244
+ const maxSplats = 6000000;
28245
+ // LCC 0.5.4 fixes the LOD when the budget exceeds LOD 1, leaving distant splats sparse.
28246
+ const lodBudget = (lods === null || lods === void 0 ? void 0 : lods[0]) > maxSplats && (lods === null || lods === void 0 ? void 0 : lods[1]) > 0
28247
+ ? Math.min(maxSplats, lods[1])
28248
+ : maxSplats;
28249
+ obj.setMaxSplats(lodBudget);
28252
28250
  // Auto fly to.
28253
28251
  if (params.flyTo) {
28254
28252
  const pos3d = (_b = (_a = obj === null || obj === void 0 ? void 0 : obj.getBounds) === null || _a === void 0 ? void 0 : _a.call(obj)) === null || _b === void 0 ? void 0 : _b.origin;
@@ -28269,6 +28267,15 @@ var XGridsRenderEngine;
28269
28267
  }
28270
28268
  }
28271
28269
  });
28270
+ if (typeof (obj === null || obj === void 0 ? void 0 : obj.setRenderState) === "function") {
28271
+ // Splats must respect nearer meshes already drawn in the same Cesium pass.
28272
+ obj.setRenderState({
28273
+ depthTest: {
28274
+ enabled: true,
28275
+ func: WebGLConstants.LEQUAL
28276
+ }
28277
+ });
28278
+ }
28272
28279
  if (typeof (obj === null || obj === void 0 ? void 0 : obj.setVisible) === "function") {
28273
28280
  obj.setVisible(true);
28274
28281
  }
@@ -45593,6 +45600,45 @@ function calcAssemblyRootFrame(entity, modelSpace) {
45593
45600
  const hpr = HeadingPitchRoll.fromDegrees(EnsureNumber(transform.heading), EnsureNumber(transform.pitch), EnsureNumber(transform.roll));
45594
45601
  return Matrix4.multiply(frame, Matrix4.fromRotation(Matrix3.fromHeadingPitchRoll(hpr)), frame);
45595
45602
  }
45603
+ // Assembly parts are always drawn at the heights their records hold.
45604
+ const ASSEMBLY_HEIGHT_REFS = {
45605
+ point: HeightReference.NONE,
45606
+ polyline: HeightReference.NONE,
45607
+ polygon: HeightReference.NONE
45608
+ };
45609
+ /*
45610
+ * Reads how an Entity Type's default Style draws its records, or null when the type cannot be read.
45611
+ */
45612
+ async function getStyledHeightRefs(api, entityTypeId) {
45613
+ var _a, _b;
45614
+ let styleId;
45615
+ try {
45616
+ const { entityType } = await EntityType.Get({ api, entityTypeId });
45617
+ if (!entityType) {
45618
+ return null;
45619
+ }
45620
+ styleId = entityType["DisplaySetting.ID"];
45621
+ }
45622
+ catch (e) {
45623
+ console.error(e);
45624
+ return null;
45625
+ }
45626
+ let settings = {};
45627
+ if (styleId && styleId > 0) {
45628
+ try {
45629
+ settings = ((_b = (_a = (await Style.Get({ api, styleId })).style) === null || _a === void 0 ? void 0 : _a.Settings) !== null && _b !== void 0 ? _b : {});
45630
+ }
45631
+ catch (e) {
45632
+ // A deleted Style leaves the records drawn with the defaults, as the render engines do.
45633
+ console.error(e);
45634
+ }
45635
+ }
45636
+ return {
45637
+ point: EntityRenderEngine.GetHeightRef(settings.pointStyle),
45638
+ polyline: EntityRenderEngine.GetHeightRefPolyline(EntityRenderEngine.GetHeightRef(settings.polylineStyle)),
45639
+ polygon: EntityRenderEngine.GetHeightRef(settings.polygonStyle)
45640
+ };
45641
+ }
45596
45642
  // Records created within about this long ago are the ones the oversized GeometryRadius bug could have written.
45597
45643
  const GEOMETRY_RADIUS_SUSPECT_AGE_MS = 1000 * 60 * 60 * 24 * 183;
45598
45644
  // Above this a recent record's radius is treated as that bug rather than a real size.
@@ -46029,6 +46075,44 @@ var EntityUtils;
46029
46075
  }
46030
46076
  return [];
46031
46077
  };
46078
+ // Entity Type ID -> how its default Style draws each kind of geometry, read once per call.
46079
+ const styledRefs = new Map();
46080
+ /*
46081
+ * How the scene would draw an undrawn record's geometry, or null to fall back to the sample's heightRef.
46082
+ */
46083
+ const getStyledRefs = (entity) => {
46084
+ var _a, _b, _c;
46085
+ // Assembly parts are drawn at absolute heights whatever their type's Style says, read with a root or not.
46086
+ if (((_a = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _a === void 0 ? void 0 : _a.AssemblyPosition) || ((_b = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _b === void 0 ? void 0 : _b.AssemblyRootLocation)) {
46087
+ return Promise.resolve(ASSEMBLY_HEIGHT_REFS);
46088
+ }
46089
+ const typeId = (_c = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _c === void 0 ? void 0 : _c["EntityType.ID"];
46090
+ if (!api || !typeId) {
46091
+ return Promise.resolve(null);
46092
+ }
46093
+ if (!styledRefs.has(typeId)) {
46094
+ styledRefs.set(typeId, getStyledHeightRefs(api, typeId));
46095
+ }
46096
+ return styledRefs.get(typeId);
46097
+ };
46098
+ /*
46099
+ * Makes a record's positions absolute as a Style draws them, sampling terrain as none may be loaded there.
46100
+ */
46101
+ const placeStyled = async (posses, heightRef, sample) => {
46102
+ if (heightRef != HeightReference.NONE) {
46103
+ for (let i = 0; i < posses.length; i++) {
46104
+ const carto = Cartographic.fromCartesian(posses[i]);
46105
+ if (!carto) {
46106
+ continue;
46107
+ }
46108
+ const { height: terrainHeight } = await DrawingUtils.GetTerrainHeight({ pos3d: posses[i], viewer });
46109
+ const ground = EnsureNumber(terrainHeight, 0);
46110
+ carto.height = heightRef == HeightReference.CLAMP_TO_GROUND ? ground : carto.height + ground;
46111
+ posses[i] = Cartographic.toCartesian(carto);
46112
+ }
46113
+ }
46114
+ await ensureHeightRefs(posses, { ...sample, heightRef: HeightReference.NONE });
46115
+ };
46032
46116
  /**
46033
46117
  * Returns an array of positions for a given sampled entity.
46034
46118
  * This will include the location, and geometry positions.
@@ -46043,6 +46127,9 @@ var EntityUtils;
46043
46127
  */
46044
46128
  const evaluateRecord = async () => {
46045
46129
  let posses = [];
46130
+ const refs = await getStyledRefs(entity);
46131
+ // The record's own point, kept apart so a Style can say what its altitude means.
46132
+ const pointPosses = [];
46046
46133
  const location = Entity$1.GetValue({
46047
46134
  entity: entity,
46048
46135
  path: ["Bruce", "Location"]
@@ -46053,7 +46140,7 @@ var EntityUtils;
46053
46140
  // Disallowing 0.
46054
46141
  if (latitude && longitude) {
46055
46142
  const pos3d = Cartesian3.fromDegrees(longitude, latitude, EnsureNumber(location.altitude));
46056
- posses.push(pos3d);
46143
+ pointPosses.push(pos3d);
46057
46144
  }
46058
46145
  }
46059
46146
  const geometry = Entity$1.GetValue({
@@ -46069,7 +46156,7 @@ var EntityUtils;
46069
46156
  const point = points.length > 0 ? points[0] : null;
46070
46157
  if (point && Carto.ValidateCarto(point)) {
46071
46158
  const pos3d = Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));
46072
- posses.push(pos3d);
46159
+ pointPosses.push(pos3d);
46073
46160
  }
46074
46161
  }
46075
46162
  const lineStr = geometry.LineString;
@@ -46077,7 +46164,12 @@ var EntityUtils;
46077
46164
  const points = Geometry$1.ParsePoints(lineStr);
46078
46165
  if (points.length > 0) {
46079
46166
  const pPosses = points.map(x => Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));
46080
- await ensureHeightRefs(pPosses, sample);
46167
+ if (refs) {
46168
+ await placeStyled(pPosses, refs.polyline, sample);
46169
+ }
46170
+ else {
46171
+ await ensureHeightRefs(pPosses, sample);
46172
+ }
46081
46173
  posses = posses.concat(pPosses);
46082
46174
  }
46083
46175
  }
@@ -46087,7 +46179,12 @@ var EntityUtils;
46087
46179
  if (boundary === null || boundary === void 0 ? void 0 : boundary.LinearRing) {
46088
46180
  const points = Geometry$1.ParsePoints(boundary.LinearRing);
46089
46181
  const pPosses = points.map(x => Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));
46090
- await ensureHeightRefs(pPosses, sample);
46182
+ if (refs) {
46183
+ await placeStyled(pPosses, refs.polygon, sample);
46184
+ }
46185
+ else {
46186
+ await ensureHeightRefs(pPosses, sample);
46187
+ }
46091
46188
  posses = posses.concat(pPosses);
46092
46189
  }
46093
46190
  }
@@ -46108,11 +46205,22 @@ var EntityUtils;
46108
46205
  Cartesian3.fromDegrees(EnsureNumber(boundaries.minLongitude), EnsureNumber(boundaries.minLatitude), EnsureNumber(boundaries.minAltitude)),
46109
46206
  Cartesian3.fromDegrees(EnsureNumber(boundaries.maxLongitude), EnsureNumber(boundaries.maxLatitude), EnsureNumber(boundaries.maxAltitude))
46110
46207
  ];
46111
- await ensureHeightRefs(bPosses, sample);
46208
+ if (refs) {
46209
+ // The bounds span the record's main geometry, so they are drawn the way it is.
46210
+ const boundsRef = (geometry === null || geometry === void 0 ? void 0 : geometry.Polygon) ? refs.polygon : (geometry === null || geometry === void 0 ? void 0 : geometry.LineString) ? refs.polyline : refs.point;
46211
+ await placeStyled(bPosses, boundsRef, sample);
46212
+ }
46213
+ else {
46214
+ await ensureHeightRefs(bPosses, sample);
46215
+ }
46112
46216
  posses = posses.concat(bPosses);
46113
46217
  }
46114
46218
  }
46115
- return posses;
46219
+ if (refs) {
46220
+ await placeStyled(pointPosses, refs.point, sample);
46221
+ }
46222
+ // Points first, since a lone record is placed by its first position.
46223
+ return pointPosses.concat(posses);
46116
46224
  };
46117
46225
  if (isAssemblyEntity) {
46118
46226
  // See if we have tileset coords to use.
@@ -46271,6 +46379,8 @@ var EntityUtils;
46271
46379
  sample.entity = (_e = simulation === null || simulation === void 0 ? void 0 : simulation.GetEntity(sample.entityId)) !== null && _e !== void 0 ? _e : sample.entity;
46272
46380
  }
46273
46381
  }
46382
+ // Read here at the scene's time with their location; records a caller supplied may be of another time.
46383
+ const readHere = new Set();
46274
46384
  // Bulk requesting Entity records.
46275
46385
  try {
46276
46386
  const toSearchIds = recordSamples.filter(x => !x.entity && x.entityId).map(x => x.entityId);
@@ -46292,6 +46402,9 @@ var EntityUtils;
46292
46402
  const sample = recordSamples[i];
46293
46403
  if (!sample.entity && sample.entityId) {
46294
46404
  const read = entitiesMap.get(sample.entityId);
46405
+ if (read) {
46406
+ readHere.add(sample.entityId);
46407
+ }
46295
46408
  sample.entity = read && simulation ? simulation.Overlay(read) : read;
46296
46409
  }
46297
46410
  }
@@ -46302,10 +46415,10 @@ var EntityUtils;
46302
46415
  catch (e) {
46303
46416
  console.error(e);
46304
46417
  }
46305
- // Some records may still not be expanded.
46306
- // We have to detect whatever is an Assembly Entity and expand it.
46418
+ // Assembly parts not read above with a location expand still need one, and the ones off the scene are dropped
46419
+ // when others are in it, since category nodes without geometry would otherwise pull the result elsewhere.
46307
46420
  try {
46308
- const needsExpansion = recordSamples.filter(x => {
46421
+ const assemblySamples = recordSamples.filter(x => {
46309
46422
  var _a;
46310
46423
  // Expanding reads the API's record, which would replace the stand-in or undo the patch.
46311
46424
  if (simulation === null || simulation === void 0 ? void 0 : simulation.HasBlob((_a = x.entity.Bruce) === null || _a === void 0 ? void 0 : _a.ID)) {
@@ -46315,36 +46428,30 @@ var EntityUtils;
46315
46428
  entity: x.entity,
46316
46429
  path: ["Bruce", "AssemblyPosition"]
46317
46430
  });
46318
- if (!assemblyPos) {
46319
- return false;
46320
- }
46321
- const rootPos = Entity$1.GetValue({
46322
- entity: x.entity,
46323
- path: ["Bruce", "AssemblyRootPosition"]
46324
- });
46325
- return !rootPos;
46431
+ return !!assemblyPos;
46326
46432
  });
46433
+ const isInScene = (sample) => {
46434
+ var _a;
46435
+ return !!(visualRegister && visualRegister.GetRego({
46436
+ entityId: (_a = sample.entityId) !== null && _a !== void 0 ? _a : sample.entity.Bruce.ID,
46437
+ menuItemId: sample.menuItemId
46438
+ }));
46439
+ };
46440
+ const sceneSamples = assemblySamples.filter(isInScene);
46441
+ const offSceneSamples = sceneSamples.length ? assemblySamples.filter(x => !isInScene(x)) : [];
46442
+ if (offSceneSamples.length) {
46443
+ const offSceneIds = new Set(offSceneSamples.map(x => x.entity.Bruce.ID));
46444
+ recordSamples = recordSamples.filter(x => !offSceneIds.has(x.entity.Bruce.ID));
46445
+ }
46446
+ const keptSamples = sceneSamples.length ? sceneSamples : assemblySamples;
46447
+ const needsExpansion = keptSamples.filter(x => !readHere.has(x.entity.Bruce.ID) || !Entity$1.GetValue({
46448
+ entity: x.entity,
46449
+ path: ["Bruce", "AssemblyRootLocation"]
46450
+ }));
46327
46451
  if (needsExpansion.length) {
46328
46452
  const EXPAND_BATCH_SIZE = 30;
46329
46453
  const EXPAND_MAX_IDS = 200;
46330
- // Figure out if any are in the scene.
46331
- // Helps us sort leaf-nodes away from category nodes thta don't have geometry.
46332
- const isInScene = (sample) => {
46333
- var _a;
46334
- return !!(visualRegister && visualRegister.GetRego({
46335
- entityId: (_a = sample.entityId) !== null && _a !== void 0 ? _a : sample.entity.Bruce.ID,
46336
- menuItemId: sample.menuItemId
46337
- }));
46338
- };
46339
- // Trim to max 200 with a preference to those in the scene.
46340
- const sceneSamples = needsExpansion.filter(isInScene);
46341
- const offSceneSamples = sceneSamples.length ? needsExpansion.filter(x => !isInScene(x)) : [];
46342
- if (offSceneSamples.length) {
46343
- const offSceneIds = new Set(offSceneSamples.map(x => x.entity.Bruce.ID));
46344
- recordSamples = recordSamples.filter(x => !offSceneIds.has(x.entity.Bruce.ID));
46345
- }
46346
- const effectiveSamples = sceneSamples.length ? sceneSamples : needsExpansion;
46347
- const uniqueIds = Array.from(new Set(effectiveSamples.map(x => x.entity.Bruce.ID)));
46454
+ const uniqueIds = Array.from(new Set(needsExpansion.map(x => x.entity.Bruce.ID)));
46348
46455
  const expandIds = uniqueIds.slice(0, EXPAND_MAX_IDS);
46349
46456
  // Anything we didn't expand will taint the overall result so we have to filter them out.
46350
46457
  const droppedIds = new Set(uniqueIds.slice(EXPAND_MAX_IDS));
@@ -46373,8 +46480,8 @@ var EntityUtils;
46373
46480
  expandedMap.set(entities[i].Bruce.ID, entities[i]);
46374
46481
  }
46375
46482
  }
46376
- for (let i = 0; i < effectiveSamples.length; i++) {
46377
- const sample = effectiveSamples[i];
46483
+ for (let i = 0; i < needsExpansion.length; i++) {
46484
+ const sample = needsExpansion[i];
46378
46485
  const expanded = expandedMap.get(sample.entity.Bruce.ID);
46379
46486
  if (expanded) {
46380
46487
  sample.entity = expanded;
@@ -57167,7 +57274,7 @@ var StyleUtils;
57167
57274
  StyleUtils.ApplyTypeStyle = ApplyTypeStyle;
57168
57275
  })(StyleUtils || (StyleUtils = {}));
57169
57276
 
57170
- const VERSION = "7.7.2";
57277
+ const VERSION = "7.7.4";
57171
57278
  /**
57172
57279
  * Updates the environment instance used by bruce-cesium to one specified.
57173
57280
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.