bruce-cesium 7.0.0 → 7.0.2

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 (21) hide show
  1. package/dist/bruce-cesium.es5.js +108 -49
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +106 -47
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +1 -1
  6. package/dist/lib/rendering/entity-render-engine-polygon.js +39 -28
  7. package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -1
  8. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +13 -1
  9. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -1
  10. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +20 -8
  11. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -1
  12. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +20 -8
  13. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
  14. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +13 -1
  15. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -1
  16. package/dist/types/bruce-cesium.d.ts +1 -1
  17. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +2 -0
  18. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +2 -0
  19. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +2 -0
  20. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +2 -0
  21. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import * as Cesium from 'cesium';
2
- import { Cartographic, ColorMaterialProperty, Entity, Color, ConstantProperty, CallbackProperty, Primitive, Cesium3DTileFeature, DistanceDisplayCondition, HeightReference, HorizontalOrigin, VerticalOrigin, Cartesian3, ClassificationType, ConstantPositionProperty, Math as Math$1, JulianDate, Quaternion, Transforms, HeadingPitchRoll, Matrix4, ArcType, CornerType, ShadowMode, ColorBlendMode, Model, ImageMaterialProperty, PolygonHierarchy, PolylineGraphics, SceneTransforms, NearFarScalar, Cartesian2, Matrix3, Rectangle, KmlDataSource, GeoJsonDataSource, SceneMode, Ion, IonResource, Cesium3DTileStyle, HeadingPitchRange, Cesium3DTileset, OrthographicFrustum, EasingFunction, Cesium3DTileColorBlendMode, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, PolygonPipeline, CesiumInspector, ClockRange, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, ScreenSpaceEventHandler, ScreenSpaceEventType, BoundingSphere, GeometryInstance, Fullscreen, Intersect, CzmlDataSource } from 'cesium';
3
- import { Cartes, Entity as Entity$1, ENVIRONMENT, Api, Calculator, ClientFile, EntityTag, EntityType, LRUCache, ObjectUtils, Style, MenuItem, ProjectView, ProjectViewBookmark, Tileset, ZoomControl, Carto, Geometry, EntityLod, Bounds, Color as Color$1, BruceEvent, EntityCoords, DataLab, DelayQueue, EntityHistoricData, BruceApi, EntityRelation, ProgramKey, AccountConcept, RecordChangeFeed, EntitySource, Camera, ProjectViewTile, ProjectViewLegacyTile, EntityAttachment, EntityAttachmentType, EntityAttribute, MathUtils, Session, EntityRelationType } from 'bruce-models';
2
+ import { Cartographic, ColorMaterialProperty, Entity, Color, ConstantProperty, CallbackProperty, Primitive, Cesium3DTileFeature, DistanceDisplayCondition, Math as Math$1, Cartesian3, JulianDate, Quaternion, Transforms, HeadingPitchRoll, Matrix4, HeightReference, ColorBlendMode, ShadowMode, ClassificationType, Model, ArcType, CornerType, ConstantPositionProperty, ImageMaterialProperty, PolygonHierarchy, PolylineGraphics, HorizontalOrigin, VerticalOrigin, Cartesian2, SceneTransforms, NearFarScalar, Matrix3, Rectangle, KmlDataSource, GeoJsonDataSource, SceneMode, Cesium3DTileStyle, HeadingPitchRange, Ion, IonResource, Cesium3DTileColorBlendMode, Cesium3DTileset, EllipsoidTerrainProvider, IonImageryProvider, createWorldImagery, createWorldImageryAsync, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, UrlTemplateImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, TileMapServiceImageryProvider, CesiumTerrainProvider, OrthographicFrustum, EasingFunction, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, PolylineDashMaterialProperty, PolygonPipeline, CesiumInspector, ClockRange, BoundingSphere, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, Fullscreen, Intersect, CzmlDataSource } from 'cesium';
3
+ import { Cartes, Entity as Entity$1, ENVIRONMENT, Calculator, ClientFile, EntityLod, EntityTag, EntityType, LRUCache, ObjectUtils, Style, Carto, Geometry, Bounds, Color as Color$1, MenuItem, ProjectView, ProjectViewBookmark, Tileset, ZoomControl, Api, BruceEvent, EntityCoords, DataLab, DelayQueue, EntityHistoricData, BruceApi, EntityRelation, ProgramKey, EntitySource, AccountConcept, RecordChangeFeed, ProjectViewLegacyTile, ProjectViewTile, Camera, Session, EntityAttachment, EntityAttachmentType, EntityAttribute, MathUtils, EntityRelationType } from 'bruce-models';
4
4
 
5
5
  /**
6
6
  * Ensures a number is returned from a given value.
@@ -9686,6 +9686,14 @@ var EntitiesRenderManager;
9686
9686
  // Type IDs that we'll allow to be rendered when receiving Entities.
9687
9687
  // This might be exactly the Menu Item Type ID because of local data sources.
9688
9688
  this.allowedTypeIDs = [];
9689
+ /**
9690
+ * Our default path.
9691
+ * We render each entity individually.
9692
+ * @param entities
9693
+ * @param force
9694
+ * @returns
9695
+ */
9696
+ this.renderAsIndividualsChain = Promise.resolve();
9689
9697
  const { viewer, apiGetter, monitor, item, register: visualsManager, sharedGetters, onSeriesDiscovered } = params;
9690
9698
  this.viewer = viewer;
9691
9699
  this.sharedGetters = sharedGetters;
@@ -10618,14 +10626,18 @@ var EntitiesRenderManager;
10618
10626
  }
10619
10627
  this.viewer.scene.requestRender();
10620
10628
  }
10621
- /**
10622
- * Our default path.
10623
- * We render each entity individually.
10624
- * @param entities
10625
- * @param force
10626
- * @returns
10627
- */
10628
- async renderAsIndividuals(entities, force = false) {
10629
+ renderAsIndividuals(entities, force = false) {
10630
+ // Waiting for prior call to finish resolving.
10631
+ // This avoids race conditions against two sets of overlapping Entities.
10632
+ const next = this.renderAsIndividualsChain
10633
+ .then(() => this.doRenderAsIndividuals(entities, force))
10634
+ .catch((e) => {
10635
+ console.error("EntitiesRenderManager.renderAsIndividuals failed:", e);
10636
+ });
10637
+ this.renderAsIndividualsChain = next;
10638
+ return next;
10639
+ }
10640
+ async doRenderAsIndividuals(entities, force = false) {
10629
10641
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
10630
10642
  // When live we just want to show the latest pos.
10631
10643
  // When not live, the user might scroll the timeline and want to see it a fluid animation between points in time.
@@ -10985,6 +10997,14 @@ var EntitiesLoadedRenderManager;
10985
10997
  // Many things are not supported when this is enabled.
10986
10998
  this.useGeojson = false;
10987
10999
  this.reRenderState = new EntityReRenderMaintainState();
11000
+ /**
11001
+ * Our default path.
11002
+ * We render each entity individually.
11003
+ * @param entities
11004
+ * @param force
11005
+ * @returns
11006
+ */
11007
+ this.renderAsIndividualsChain = Promise.resolve();
10988
11008
  const { viewer, apiGetter, monitor, item, register: visualsManager } = params;
10989
11009
  this.viewer = viewer;
10990
11010
  this.apiGetter = apiGetter;
@@ -11608,14 +11628,18 @@ var EntitiesLoadedRenderManager;
11608
11628
  }
11609
11629
  this.viewer.scene.requestRender();
11610
11630
  }
11611
- /**
11612
- * Our default path.
11613
- * We render each entity individually.
11614
- * @param entities
11615
- * @param force
11616
- * @returns
11617
- */
11618
- async renderAsIndividuals(entities, force = false) {
11631
+ renderAsIndividuals(entities, force = false) {
11632
+ // Waiting for prior call to finish resolving.
11633
+ // This avoids race conditions against two sets of overlapping Entities.
11634
+ const next = this.renderAsIndividualsChain
11635
+ .then(() => this.doRenderAsIndividuals(entities, force))
11636
+ .catch((e) => {
11637
+ console.error("EntitiesLoadedRenderManager.renderAsIndividuals failed:", e);
11638
+ });
11639
+ this.renderAsIndividualsChain = next;
11640
+ return next;
11641
+ }
11642
+ async doRenderAsIndividuals(entities, force = false) {
11619
11643
  const { updated, entities: cEntities } = await EntityRenderEngine.Render({
11620
11644
  viewer: this.viewer,
11621
11645
  apiGetter: this.apiGetter,
@@ -12260,6 +12284,7 @@ var EntityRenderManager;
12260
12284
  this.getterSub = null;
12261
12285
  this.disposed = false;
12262
12286
  this.reRenderState = new EntityReRenderMaintainState();
12287
+ this.renderEntityChain = Promise.resolve();
12263
12288
  const { viewer, apiGetter, monitor, item, register: visualsManager } = params;
12264
12289
  this.viewer = viewer;
12265
12290
  this.apiGetter = apiGetter;
@@ -12382,7 +12407,18 @@ var EntityRenderManager;
12382
12407
  this.onGetterUpdate(entityId, true);
12383
12408
  }
12384
12409
  }
12385
- async renderEntity(entity, force = false) {
12410
+ renderEntity(entity, force = false) {
12411
+ // Waiting for prior call to finish resolving.
12412
+ // This avoids race conditions against two sets of overlapping Entities.
12413
+ const next = this.renderEntityChain
12414
+ .then(() => this.doRenderEntity(entity, force))
12415
+ .catch((e) => {
12416
+ console.error("EntityRenderManager.renderEntity failed:", e);
12417
+ });
12418
+ this.renderEntityChain = next;
12419
+ return next;
12420
+ }
12421
+ async doRenderEntity(entity, force = false) {
12386
12422
  try {
12387
12423
  if (this.disposed || this.viewer.isDestroyed()) {
12388
12424
  return;
@@ -16826,6 +16862,7 @@ var DataLabRenderManager;
16826
16862
  this.reRenderState = new EntityReRenderMaintainState();
16827
16863
  this.zoomControl = [];
16828
16864
  this.queryLoadId = 0;
16865
+ this.renderDataLabEntitiesChain = Promise.resolve();
16829
16866
  const { viewer, item, apiGetter, monitor, visualsRegister } = params;
16830
16867
  this.viewer = viewer;
16831
16868
  this.item = item;
@@ -17164,7 +17201,18 @@ var DataLabRenderManager;
17164
17201
  }
17165
17202
  return Array.from(entityMap.values());
17166
17203
  }
17167
- async renderDataLabEntities(entities, force = false) {
17204
+ renderDataLabEntities(entities, force = false) {
17205
+ // Waiting for prior call to finish resolving.
17206
+ // This avoids race conditions against two sets of overlapping Entities.
17207
+ const next = this.renderDataLabEntitiesChain
17208
+ .then(() => this.doRenderDataLabEntities(entities, force))
17209
+ .catch((e) => {
17210
+ console.error("EntitiesDatalabRenderManager.renderDataLabEntities failed:", e);
17211
+ });
17212
+ this.renderDataLabEntitiesChain = next;
17213
+ return next;
17214
+ }
17215
+ async doRenderDataLabEntities(entities, force = false) {
17168
17216
  var _a, _b, _c;
17169
17217
  if (this.disposed || this.viewer.isDestroyed() || !(entities === null || entities === void 0 ? void 0 : entities.length)) {
17170
17218
  return;
@@ -37081,8 +37129,9 @@ const TEXTURE_FRAME_SERIES_ANIMATOR_KEY = "TextureFrameSeriesAnimator.Animator";
37081
37129
  var EntityRenderEnginePolygon;
37082
37130
  (function (EntityRenderEnginePolygon) {
37083
37131
  async function Render(params) {
37084
- var _a, _b;
37132
+ var _a, _b, _c;
37085
37133
  const entity = params.entity;
37134
+ const style = params.style;
37086
37135
  const pRings = Entity$1.GetValue({
37087
37136
  entity: entity,
37088
37137
  path: ["Bruce", "VectorGeometry", "Polygon"]
@@ -37090,7 +37139,6 @@ var EntityRenderEnginePolygon;
37090
37139
  if (pRings == null || !Array.isArray(pRings) || pRings.length <= 0) {
37091
37140
  return null;
37092
37141
  }
37093
- const style = params.style;
37094
37142
  const fillType = style.fillType || Style.EPolygonFillType.Color;
37095
37143
  const fillColorTrace = style.fillColor ? Calculator.TraceGetColor(style.fillColor, entity, params.tags) : { value: null, effective: null };
37096
37144
  const bFillColor = fillColorTrace.value;
@@ -37099,15 +37147,20 @@ var EntityRenderEnginePolygon;
37099
37147
  let textureTraceEffective = null;
37100
37148
  let frameArchive = null;
37101
37149
  if (fillType === Style.EPolygonFillType.Texture) {
37102
- const resolved = await resolveTexturedFill({
37103
- api: params.api,
37104
- style,
37105
- entity,
37106
- tags: params.tags
37107
- });
37108
- textureDataUri = resolved.dataUri;
37109
- textureTraceEffective = resolved.effective;
37110
- frameArchive = resolved.frameArchive || null;
37150
+ try {
37151
+ const resolved = await resolveTexturedFill({
37152
+ api: params.api,
37153
+ style,
37154
+ entity,
37155
+ tags: params.tags
37156
+ });
37157
+ textureDataUri = resolved.dataUri;
37158
+ textureTraceEffective = resolved.effective;
37159
+ frameArchive = resolved.frameArchive || null;
37160
+ }
37161
+ catch (e) {
37162
+ console.error(`Polygon.Render: failed to resolve textured fill for entity ${((_a = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _a === void 0 ? void 0 : _a.ID) || "<NONE>"}:`, e);
37163
+ }
37111
37164
  }
37112
37165
  const hasFill = fillType === Style.EPolygonFillType.Texture
37113
37166
  ? Boolean(textureDataUri || frameArchive || cFillColor.alpha > 0)
@@ -37305,7 +37358,7 @@ var EntityRenderEnginePolygon;
37305
37358
  }
37306
37359
  }
37307
37360
  let borderPosses = posses.map(x => x.clone ? x.clone() : { ...x });
37308
- let cEntityBorder = (_b = (_a = params.rendered) === null || _a === void 0 ? void 0 : _a._siblingGraphics) === null || _b === void 0 ? void 0 : _b[0];
37361
+ let cEntityBorder = (_c = (_b = params.rendered) === null || _b === void 0 ? void 0 : _b._siblingGraphics) === null || _c === void 0 ? void 0 : _c[0];
37309
37362
  cEntity._siblingGraphics = [];
37310
37363
  if (!cEntityBorder || ((!cEntityBorder.polyline && units == "px") ||
37311
37364
  (!cEntityBorder.corridor && units == "m"))) {
@@ -37446,7 +37499,7 @@ var EntityRenderEnginePolygon;
37446
37499
  }
37447
37500
  EntityRenderEnginePolygon.Render = Render;
37448
37501
  async function RenderGroup(params) {
37449
- var _a, _b, _c;
37502
+ var _a, _b, _c, _d;
37450
37503
  const api = params.apiGetter.getApi();
37451
37504
  const cEntities = new Map();
37452
37505
  // Gathering tags in case styling needs it.
@@ -37490,21 +37543,27 @@ var EntityRenderEnginePolygon;
37490
37543
  }
37491
37544
  }
37492
37545
  const pStyle = (_b = style === null || style === void 0 ? void 0 : style.polygonStyle) !== null && _b !== void 0 ? _b : {};
37493
- const cEntity = await Render({
37494
- entity: entity,
37495
- style: pStyle,
37496
- tags: tags,
37497
- viewer: params.viewer,
37498
- api,
37499
- maxDistance: zoomItem.MaxZoom,
37500
- minDistance: zoomItem.MinZoom,
37501
- // Temporarily disabling re-using graphics for polygons as they have some bugs, and
37502
- // they don't support any animation yet.
37503
- // rendered: null
37504
- rendered: (_c = params.rendered) === null || _c === void 0 ? void 0 : _c.get(entity.Bruce.ID),
37505
- menuItemId: params.menuItemId,
37506
- onSeriesDiscovered: params.onSeriesDiscovered
37507
- });
37546
+ let cEntity = null;
37547
+ try {
37548
+ cEntity = await Render({
37549
+ entity: entity,
37550
+ style: pStyle,
37551
+ tags: tags,
37552
+ viewer: params.viewer,
37553
+ api,
37554
+ maxDistance: zoomItem.MaxZoom,
37555
+ minDistance: zoomItem.MinZoom,
37556
+ // Temporarily disabling re-using graphics for polygons as they have some bugs, and
37557
+ // they don't support any animation yet.
37558
+ // rendered: null
37559
+ rendered: (_c = params.rendered) === null || _c === void 0 ? void 0 : _c.get(entity.Bruce.ID),
37560
+ menuItemId: params.menuItemId,
37561
+ onSeriesDiscovered: params.onSeriesDiscovered
37562
+ });
37563
+ }
37564
+ catch (e) {
37565
+ console.error(`Polygon.RenderGroup: failed to render entity ${((_d = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _d === void 0 ? void 0 : _d.ID) || "<NONE>"}:`, e);
37566
+ }
37508
37567
  if (cEntity) {
37509
37568
  const name = await getName$3(api, entity);
37510
37569
  cEntity.name = name;
@@ -39125,7 +39184,7 @@ var StyleUtils;
39125
39184
  StyleUtils.ApplyTypeStyle = ApplyTypeStyle;
39126
39185
  })(StyleUtils || (StyleUtils = {}));
39127
39186
 
39128
- const VERSION = "7.0.0";
39187
+ const VERSION = "7.0.2";
39129
39188
  /**
39130
39189
  * Updates the environment instance used by bruce-cesium to one specified.
39131
39190
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.