bruce-cesium 2.0.0 → 2.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.
@@ -1,6 +1,6 @@
1
- import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
1
+ import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, HeightReference, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, OrthographicFrustum, JulianDate, NearFarScalar, CesiumInspector, Cesium3DTileset, Matrix4, Matrix3, IonResource, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, ColorMaterialProperty, EasingFunction, GeometryInstance } from 'cesium';
3
+ import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, Entity, Primitive, Cesium3DTileFeature, SceneMode, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, HeadingPitchRange, Cesium3DTileColorBlendMode, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumInspector, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, Cesium3DTileset, Matrix4, Matrix3, IonResource, ColorMaterialProperty, EasingFunction, GeometryInstance, JulianDate, OrthographicFrustum, NearFarScalar } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -259,75 +259,6 @@ var CesiumViewMonitor = /** @class */ (function () {
259
259
  return CesiumViewMonitor;
260
260
  }());
261
261
 
262
- var ViewerUtils;
263
- (function (ViewerUtils) {
264
- /**
265
- * Destroys all the junk that cesium viewer ships with.
266
- * @param viewer
267
- */
268
- function InitViewer(params) {
269
- var viewer = params.viewer, destroyWidgets = params.destroyWidgets, styleContainer = params.styleContainer;
270
- if (destroyWidgets != false) {
271
- ViewerUtils.DestroyWidget(viewer.timeline);
272
- ViewerUtils.DestroyWidget(viewer.vrButton);
273
- ViewerUtils.DestroyWidget(viewer.sceneModePicker);
274
- ViewerUtils.DestroyWidget(viewer.homeButton);
275
- ViewerUtils.DestroyWidget(viewer.fullscreenButton);
276
- ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
277
- }
278
- if (styleContainer != false) {
279
- ViewerUtils.StyleContainer({ viewer: viewer });
280
- }
281
- }
282
- ViewerUtils.InitViewer = InitViewer;
283
- function DestroyWidget(widget) {
284
- if (widget && !widget.isDestroyed()) {
285
- widget.destroy();
286
- }
287
- }
288
- ViewerUtils.DestroyWidget = DestroyWidget;
289
- /**
290
- * Hides all unnecessary elements from the Cesium viewer container.
291
- * @param viewer
292
- */
293
- function StyleContainer(params) {
294
- var _a;
295
- var viewer = params.viewer;
296
- var container = viewer.container;
297
- var genContainer = (_a = container.getElementsByClassName("cesium-viewer")) === null || _a === void 0 ? void 0 : _a[0];
298
- if (genContainer) {
299
- var children = genContainer.children;
300
- for (var i = 0; i < children.length; i++) {
301
- var child = children[i];
302
- if (!child.classList.contains("cesium-viewer-cesiumWidgetContainer")) {
303
- child.style.display = "none";
304
- }
305
- }
306
- }
307
- var canvas = viewer.canvas;
308
- canvas.style.width = "100%";
309
- canvas.style.height = "100%";
310
- var widget = canvas.parentElement;
311
- widget.style.width = "100%";
312
- widget.style.height = "100%";
313
- widget.style.touchAction = "none";
314
- var widgetContainer = widget.parentElement;
315
- widgetContainer.style.width = "100%";
316
- widgetContainer.style.height = "100%";
317
- var viewerContainer = widgetContainer.parentElement;
318
- viewerContainer.style.fontFamily = "sans-serif";
319
- viewerContainer.style.fontSize = "16px";
320
- viewerContainer.style.overflow = "hidden";
321
- viewerContainer.style.display = "block";
322
- viewerContainer.style.position = "relative";
323
- viewerContainer.style.top = "0";
324
- viewerContainer.style.left = "0";
325
- viewerContainer.style.width = "100%";
326
- viewerContainer.style.height = "100%";
327
- }
328
- ViewerUtils.StyleContainer = StyleContainer;
329
- })(ViewerUtils || (ViewerUtils = {}));
330
-
331
262
  /*! *****************************************************************************
332
263
  Copyright (c) Microsoft Corporation. All rights reserved.
333
264
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -2609,10 +2540,18 @@ var EntitiesRenderManager;
2609
2540
  clearInterval(this.renderQueueInterval);
2610
2541
  this.renderQueueInterval = null;
2611
2542
  this.renderQueue = [];
2612
- this.visualsManager.RemoveRegos({
2613
- menuItemId: this.item.id
2614
- });
2615
- if (!shouldRender) {
2543
+ // Remove just the ones that shouldn't be rendered.
2544
+ // Eg: for a tag menu item we can see what tags are selected and only render those.
2545
+ if (shouldRender) {
2546
+ this.visualsManager.RemoveRegos({
2547
+ menuItemId: this.item.id,
2548
+ retainTagIds: tagsToRender
2549
+ });
2550
+ }
2551
+ else {
2552
+ this.visualsManager.RemoveRegos({
2553
+ menuItemId: this.item.id
2554
+ });
2616
2555
  return;
2617
2556
  }
2618
2557
  var api = this.apiGetter.getApi();
@@ -4165,10 +4104,13 @@ var VisualsRegister;
4165
4104
  */
4166
4105
  Register.prototype.RemoveRegos = function (params) {
4167
4106
  var _a, _b, _c;
4168
- var entityId = params.entityId, menuItemId = params.menuItemId, doUpdate = params.doUpdate, relation = params.relation;
4107
+ var entityId = params.entityId, menuItemId = params.menuItemId, doUpdate = params.doUpdate, relation = params.relation, retainTagIds = params.retainTagIds;
4169
4108
  if (doUpdate == null) {
4170
4109
  doUpdate = true;
4171
4110
  }
4111
+ if (retainTagIds == null) {
4112
+ retainTagIds = [];
4113
+ }
4172
4114
  // TODO: refactor.
4173
4115
  // Currently this was made by merging two functions.
4174
4116
  if (menuItemId && !entityId) {
@@ -4179,6 +4121,11 @@ var VisualsRegister;
4179
4121
  if (!rego) {
4180
4122
  continue;
4181
4123
  }
4124
+ var regoTagIds = rego.tagIds ? rego.tagIds : [];
4125
+ var shouldRetain = regoTagIds.some(function (tagId) { return retainTagIds.includes(tagId); });
4126
+ if (shouldRetain) {
4127
+ continue;
4128
+ }
4182
4129
  removeEntity(this.viewer, rego.visual);
4183
4130
  var doesInclude = this.rego[entityId_3].find(function (r) { return r.menuItemId === menuItemId; });
4184
4131
  if (doesInclude) {
@@ -7292,14 +7239,31 @@ var MenuItemManager;
7292
7239
  * @returns
7293
7240
  */
7294
7241
  Manager.prototype.RenderItem = function (params) {
7295
- var _a, _b, _c;
7242
+ var _a, _b, _c, _d;
7296
7243
  if (this.viewer.isDestroyed()) {
7297
7244
  return null;
7298
7245
  }
7246
+ if (!params.apiGetter) {
7247
+ params.apiGetter = ENVIRONMENT.GetGetters().GetBruceGetter();
7248
+ }
7299
7249
  var rItem = this.items.find(function (x) { return x.id == params.item.id; });
7300
- if (!rItem) {
7250
+ if (rItem) {
7251
+ // This means we're updating a tag menu item.
7252
+ // Tag menu items have alternative states based on bookmark settings.
7253
+ // Eg: different tags that were enabled.
7254
+ if (rItem.type == MenuItem.EType.Entities && params.item.Type == MenuItem.EType.Entities) {
7255
+ var eItem = rItem.item;
7256
+ if ((_a = eItem === null || eItem === void 0 ? void 0 : eItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.ExpandLayers) {
7257
+ rItem.renderManager.Init({
7258
+ item: params.item,
7259
+ });
7260
+ rItem.item = params.item;
7261
+ }
7262
+ }
7263
+ }
7264
+ else {
7301
7265
  rItem = {
7302
- id: (_a = params.item.id) !== null && _a !== void 0 ? _a : ObjectUtils.UId(),
7266
+ id: (_b = params.item.id) !== null && _b !== void 0 ? _b : ObjectUtils.UId(),
7303
7267
  childIds: [],
7304
7268
  item: params.item,
7305
7269
  renderManager: null,
@@ -7434,8 +7398,8 @@ var MenuItemManager;
7434
7398
  rItem.childIds.push(childId);
7435
7399
  }
7436
7400
  }
7437
- if (!rItem.renderManager || !((_b = rItem.renderManager) === null || _b === void 0 ? void 0 : _b.Disposed)) {
7438
- (_c = this.onUpdate) === null || _c === void 0 ? void 0 : _c.Trigger({ isEnabling: true, itemId: rItem.id });
7401
+ if (rItem.renderManager && !((_c = rItem.renderManager) === null || _c === void 0 ? void 0 : _c.Disposed)) {
7402
+ (_d = this.onUpdate) === null || _d === void 0 ? void 0 : _d.Trigger({ isEnabling: true, itemId: rItem.id });
7439
7403
  }
7440
7404
  rItem.id;
7441
7405
  };
@@ -7533,6 +7497,95 @@ var MenuItemManager;
7533
7497
  MenuItemManager.Manager = Manager;
7534
7498
  })(MenuItemManager || (MenuItemManager = {}));
7535
7499
 
7500
+ var CESIUM_VIEWER_MANAGER_KEY = "_cesiumViewerManager";
7501
+ var ViewerUtils;
7502
+ (function (ViewerUtils) {
7503
+ /**
7504
+ * Destroys all the junk that cesium viewer ships with.
7505
+ * @param viewer
7506
+ */
7507
+ function InitViewer(params) {
7508
+ var viewer = params.viewer, destroyWidgets = params.destroyWidgets, styleContainer = params.styleContainer;
7509
+ if (destroyWidgets != false) {
7510
+ ViewerUtils.DestroyWidget(viewer.timeline);
7511
+ ViewerUtils.DestroyWidget(viewer.vrButton);
7512
+ ViewerUtils.DestroyWidget(viewer.sceneModePicker);
7513
+ ViewerUtils.DestroyWidget(viewer.homeButton);
7514
+ ViewerUtils.DestroyWidget(viewer.fullscreenButton);
7515
+ ViewerUtils.DestroyWidget(viewer.baseLayerPicker);
7516
+ }
7517
+ if (styleContainer != false) {
7518
+ ViewerUtils.StyleContainer({ viewer: viewer });
7519
+ }
7520
+ }
7521
+ ViewerUtils.InitViewer = InitViewer;
7522
+ function DestroyWidget(widget) {
7523
+ if (widget && !widget.isDestroyed()) {
7524
+ widget.destroy();
7525
+ }
7526
+ }
7527
+ ViewerUtils.DestroyWidget = DestroyWidget;
7528
+ /**
7529
+ * Hides all unnecessary elements from the Cesium viewer container.
7530
+ * @param viewer
7531
+ */
7532
+ function StyleContainer(params) {
7533
+ var _a;
7534
+ var viewer = params.viewer;
7535
+ var container = viewer.container;
7536
+ var genContainer = (_a = container.getElementsByClassName("cesium-viewer")) === null || _a === void 0 ? void 0 : _a[0];
7537
+ if (genContainer) {
7538
+ var children = genContainer.children;
7539
+ for (var i = 0; i < children.length; i++) {
7540
+ var child = children[i];
7541
+ if (!child.classList.contains("cesium-viewer-cesiumWidgetContainer")) {
7542
+ child.style.display = "none";
7543
+ }
7544
+ }
7545
+ }
7546
+ var canvas = viewer.canvas;
7547
+ canvas.style.width = "100%";
7548
+ canvas.style.height = "100%";
7549
+ var widget = canvas.parentElement;
7550
+ widget.style.width = "100%";
7551
+ widget.style.height = "100%";
7552
+ widget.style.touchAction = "none";
7553
+ var widgetContainer = widget.parentElement;
7554
+ widgetContainer.style.width = "100%";
7555
+ widgetContainer.style.height = "100%";
7556
+ var viewerContainer = widgetContainer.parentElement;
7557
+ viewerContainer.style.fontFamily = "sans-serif";
7558
+ viewerContainer.style.fontSize = "16px";
7559
+ viewerContainer.style.overflow = "hidden";
7560
+ viewerContainer.style.display = "block";
7561
+ viewerContainer.style.position = "relative";
7562
+ viewerContainer.style.top = "0";
7563
+ viewerContainer.style.left = "0";
7564
+ viewerContainer.style.width = "100%";
7565
+ viewerContainer.style.height = "100%";
7566
+ }
7567
+ ViewerUtils.StyleContainer = StyleContainer;
7568
+ /**
7569
+ * Returns a given Cesium viewer's menu item manager.
7570
+ * If one is missing then it'll optionally create one before returning it.
7571
+ * @param params
7572
+ * @returns
7573
+ */
7574
+ function GetManager(params) {
7575
+ var viewer = params.viewer, createIfMissing = params.createIfMissing;
7576
+ if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {
7577
+ return viewer[CESIUM_VIEWER_MANAGER_KEY];
7578
+ }
7579
+ else if (createIfMissing != false) {
7580
+ var manager = new MenuItemManager.Manager({ viewer: viewer });
7581
+ viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;
7582
+ return manager;
7583
+ }
7584
+ return null;
7585
+ }
7586
+ ViewerUtils.GetManager = GetManager;
7587
+ })(ViewerUtils || (ViewerUtils = {}));
7588
+
7536
7589
  /**
7537
7590
  * Utility to help generate menu items for rendering various data.
7538
7591
  */
@@ -7782,28 +7835,29 @@ var MenuItemCreator;
7782
7835
  }
7783
7836
  MenuItemCreator.RenderTileset = RenderTileset;
7784
7837
  function RenderBookmarkItems(params) {
7838
+ var _a;
7785
7839
  return __awaiter(this, void 0, void 0, function () {
7786
- var viewId, bookmarkId, api, view, _a, bookmark, _b, enabledIds, menuItems, version, vSettings, bSettings, vSettings, bSettings, renderedItemIds, traverseItems_1, i;
7840
+ var viewId, bookmarkId, api, view, _b, bookmark, _c, enabledIds, menuItems, version, vSettings, bSettings, vSettings, bSettings, alternations, renderedItemIds, traverseItems_1, i;
7787
7841
  var _this = this;
7788
- return __generator(this, function (_c) {
7789
- switch (_c.label) {
7842
+ return __generator(this, function (_d) {
7843
+ switch (_d.label) {
7790
7844
  case 0:
7791
7845
  viewId = params.viewId, bookmarkId = params.bookmarkId;
7792
7846
  api = params.apiGetter.getApi();
7793
7847
  if (!params.view) return [3 /*break*/, 1];
7794
- _a = params.view;
7848
+ _b = params.view;
7795
7849
  return [3 /*break*/, 3];
7796
7850
  case 1: return [4 /*yield*/, ProjectView.Get({
7797
7851
  api: api,
7798
7852
  viewId: viewId
7799
7853
  })];
7800
7854
  case 2:
7801
- _a = (_c.sent()).view;
7802
- _c.label = 3;
7855
+ _b = (_d.sent()).view;
7856
+ _d.label = 3;
7803
7857
  case 3:
7804
- view = _a;
7858
+ view = _b;
7805
7859
  if (!params.bookmark) return [3 /*break*/, 4];
7806
- _b = params.bookmark;
7860
+ _c = params.bookmark;
7807
7861
  return [3 /*break*/, 6];
7808
7862
  case 4: return [4 /*yield*/, ProjectViewBookmark.Get({
7809
7863
  api: api,
@@ -7811,10 +7865,10 @@ var MenuItemCreator;
7811
7865
  bookmarkId: bookmarkId
7812
7866
  })];
7813
7867
  case 5:
7814
- _b = (_c.sent()).bookmark;
7815
- _c.label = 6;
7868
+ _c = (_d.sent()).bookmark;
7869
+ _d.label = 6;
7816
7870
  case 6:
7817
- bookmark = _b;
7871
+ bookmark = _c;
7818
7872
  if (view.DataVersion != bookmark.DataVersion) {
7819
7873
  throw new Error("View and bookmark settings version mismatch.");
7820
7874
  }
@@ -7835,32 +7889,48 @@ var MenuItemCreator;
7835
7889
  enabledIds = bSettings.selectedItemIds;
7836
7890
  }
7837
7891
  }
7892
+ alternations = (_a = bookmark.Settings) === null || _a === void 0 ? void 0 : _a.menuItemAlternations;
7893
+ if (!alternations) {
7894
+ alternations = {};
7895
+ }
7838
7896
  renderedItemIds = [];
7839
7897
  if (!((menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) && (enabledIds === null || enabledIds === void 0 ? void 0 : enabledIds.length))) return [3 /*break*/, 10];
7840
7898
  traverseItems_1 = function (item) { return __awaiter(_this, void 0, void 0, function () {
7841
- var itemId, i;
7842
- return __generator(this, function (_a) {
7843
- switch (_a.label) {
7899
+ var eItem, eItemAlt, itemId, i;
7900
+ var _a;
7901
+ return __generator(this, function (_b) {
7902
+ switch (_b.label) {
7844
7903
  case 0:
7904
+ if (alternations[item.id]) {
7905
+ // The only alternation we support right now is tag menu item ones.
7906
+ // The project view menu item contains the instruction to enable tags, the bookmark specifies which ones.
7907
+ if (item.Type == MenuItem.EType.Entities) {
7908
+ eItem = item;
7909
+ if (eItem.BruceEntity.ExpandLayers) {
7910
+ eItemAlt = alternations[item.id];
7911
+ eItem.BruceEntity = __assign(__assign({}, eItem.BruceEntity), { SelectedExpandLayers: (_a = eItemAlt.BruceEntity) === null || _a === void 0 ? void 0 : _a.SelectedExpandLayers });
7912
+ }
7913
+ }
7914
+ }
7845
7915
  if (!enabledIds.includes(item.id)) return [3 /*break*/, 2];
7846
7916
  return [4 /*yield*/, params.manager.RenderItem({
7847
7917
  item: item,
7848
7918
  apiGetter: params.apiGetter
7849
7919
  })];
7850
7920
  case 1:
7851
- itemId = _a.sent();
7921
+ itemId = _b.sent();
7852
7922
  renderedItemIds.push(itemId);
7853
- _a.label = 2;
7923
+ _b.label = 2;
7854
7924
  case 2:
7855
7925
  if (!item.Children) return [3 /*break*/, 6];
7856
7926
  i = 0;
7857
- _a.label = 3;
7927
+ _b.label = 3;
7858
7928
  case 3:
7859
7929
  if (!(i < item.Children.length)) return [3 /*break*/, 6];
7860
7930
  return [4 /*yield*/, traverseItems_1(item.Children[i])];
7861
7931
  case 4:
7862
- _a.sent();
7863
- _a.label = 5;
7932
+ _b.sent();
7933
+ _b.label = 5;
7864
7934
  case 5:
7865
7935
  i++;
7866
7936
  return [3 /*break*/, 3];
@@ -7869,13 +7939,13 @@ var MenuItemCreator;
7869
7939
  });
7870
7940
  }); };
7871
7941
  i = 0;
7872
- _c.label = 7;
7942
+ _d.label = 7;
7873
7943
  case 7:
7874
7944
  if (!(i < menuItems.length)) return [3 /*break*/, 10];
7875
7945
  return [4 /*yield*/, traverseItems_1(menuItems[i])];
7876
7946
  case 8:
7877
- _c.sent();
7878
- _c.label = 9;
7947
+ _d.sent();
7948
+ _d.label = 9;
7879
7949
  case 9:
7880
7950
  i++;
7881
7951
  return [3 /*break*/, 7];
@@ -9540,6 +9610,18 @@ var ViewRenderEngine;
9540
9610
  return __generator(this, function (_c) {
9541
9611
  switch (_c.label) {
9542
9612
  case 0:
9613
+ if (!params.manager && params.viewer) {
9614
+ params.manager = ViewerUtils.GetManager({
9615
+ viewer: params.viewer,
9616
+ createIfMissing: true
9617
+ });
9618
+ }
9619
+ else if (!params.viewer && params.manager) {
9620
+ params.viewer = params.manager.Viewer;
9621
+ }
9622
+ if (!params.apiGetter) {
9623
+ params.apiGetter = ENVIRONMENT.GetGetters().GetBruceGetter();
9624
+ }
9543
9625
  api = params.apiGetter.getApi();
9544
9626
  if (!params.view) return [3 /*break*/, 1];
9545
9627
  _a = params.view;