bruce-cesium 0.5.6 → 0.5.7

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,5 +1,5 @@
1
- import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, ObjectUtils, Tileset, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, TilesetExtMapTiles, ProgramKey, Camera, MathUtils } from 'bruce-models';
2
- import { Color, HeightReference, Cartographic, Cartesian3, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, Cartesian2, HeadingPitchRange, OrthographicFrustum, Math as Math$1, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, JulianDate, createOsmBuildings, Cesium3DTileStyle } from 'cesium';
1
+ import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, ObjectUtils, Tileset, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, TilesetExtMapTiles, ProgramKey, Camera } from 'bruce-models';
2
+ import { Cartesian2, Cartographic, Math as Math$1, Color, HeightReference, Cartesian3, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, HeadingPitchRange, OrthographicFrustum, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic, ColorMaterialProperty, Rectangle, Matrix3, EasingFunction, GeometryInstance, JulianDate, createOsmBuildings, Cesium3DTileStyle } from 'cesium';
3
3
 
4
4
  var TIME_LAG = 300;
5
5
  var POSITION_CHECK_TIMER = 950;
@@ -1939,25 +1939,31 @@ function updateEntityShow(viewer, visual, show) {
1939
1939
  }
1940
1940
  }
1941
1941
  }
1942
- function updateEntity(viewer, entityRegos, addons) {
1942
+ function updateEntity(viewer, entityId, register) {
1943
+ var isolatedIds = register.GetIsolated();
1944
+ var isIsolated = isolatedIds.includes(entityId);
1945
+ var isHidden = register.IsHidden(entityId);
1946
+ var regos = register.GetRegos(entityId);
1943
1947
  var highestPriority = null;
1944
- for (var i = 0; i < entityRegos.length; i++) {
1945
- var rego = entityRegos[i];
1948
+ for (var i = 0; i < regos.length; i++) {
1949
+ var rego = regos[i];
1946
1950
  if (highestPriority === null || rego.priority > highestPriority.priority) {
1947
1951
  highestPriority = rego;
1948
1952
  }
1949
1953
  }
1950
- for (var i = 0; i < entityRegos.length; i++) {
1951
- var rego = entityRegos[i];
1952
- var show = rego === highestPriority;
1953
- rego.best = show;
1954
- updateEntityShow(viewer, rego.visual, show);
1955
- }
1956
- if (addons) {
1957
- for (var j = 0; j < addons.length; j++) {
1958
- var addon = addons[j];
1959
- addon.Render(entityRegos.map(function (x) { return x.visual; }));
1954
+ function getShowState(rego) {
1955
+ if (isHidden) {
1956
+ return false;
1960
1957
  }
1958
+ if (!isIsolated && isolatedIds.length > 0) {
1959
+ return false;
1960
+ }
1961
+ return rego === highestPriority;
1962
+ }
1963
+ for (var i = 0; i < regos.length; i++) {
1964
+ var rego = regos[i];
1965
+ rego.best = rego === highestPriority;
1966
+ updateEntityShow(viewer, rego.visual, getShowState(rego));
1961
1967
  }
1962
1968
  }
1963
1969
  function markEntity(register, rego, visual) {
@@ -2088,7 +2094,8 @@ var VisualsRegister;
2088
2094
  this.rego = {};
2089
2095
  this.onUpdate = null;
2090
2096
  this.selectedIds = [];
2091
- this.addons = {};
2097
+ this.isolatedIds = [];
2098
+ this.hiddenIds = [];
2092
2099
  this.viewer = viewer;
2093
2100
  }
2094
2101
  Object.defineProperty(Register.prototype, "Id", {
@@ -2108,40 +2115,6 @@ var VisualsRegister;
2108
2115
  enumerable: false,
2109
2116
  configurable: true
2110
2117
  });
2111
- Register.prototype.AddAddon = function (entityId, addon) {
2112
- if (!this.addons[entityId]) {
2113
- this.addons[entityId] = [];
2114
- }
2115
- this.addons[entityId].push(addon);
2116
- var regos = this.rego[entityId];
2117
- if (regos) {
2118
- addon.Render(regos.map(function (x) { return x.visual; }));
2119
- }
2120
- };
2121
- Register.prototype.GetAddons = function (entityId) {
2122
- return this.addons[entityId] || [];
2123
- };
2124
- Register.prototype.RemoveAddon = function (entityId, addonId) {
2125
- var addons = this.addons[entityId];
2126
- if (addons) {
2127
- for (var i = 0; i < addons.length; i++) {
2128
- if (addons[i].Id === addonId) {
2129
- addons[i].Dispose();
2130
- addons.splice(i, 1);
2131
- break;
2132
- }
2133
- }
2134
- }
2135
- };
2136
- Register.prototype.RemoveAddons = function (entityId) {
2137
- var addons = this.addons[entityId];
2138
- if (addons) {
2139
- for (var i = 0; i < addons.length; i++) {
2140
- addons[i].Dispose();
2141
- }
2142
- }
2143
- this.addons[entityId] = [];
2144
- };
2145
2118
  Register.prototype.Select = function (id, refreshIfSelected) {
2146
2119
  if (refreshIfSelected === void 0) { refreshIfSelected = false; }
2147
2120
  var doSelect = refreshIfSelected;
@@ -2188,6 +2161,52 @@ var VisualsRegister;
2188
2161
  }
2189
2162
  this.selectedIds = [];
2190
2163
  };
2164
+ Register.prototype.Isolate = function (id) {
2165
+ if (this.isolatedIds.indexOf(id) === -1) {
2166
+ this.isolatedIds.push(id);
2167
+ }
2168
+ this.updateAllEntities();
2169
+ };
2170
+ Register.prototype.Deisolate = function (id) {
2171
+ var index = this.isolatedIds.indexOf(id);
2172
+ if (index !== -1) {
2173
+ this.isolatedIds.splice(index, 1);
2174
+ }
2175
+ this.updateAllEntities();
2176
+ };
2177
+ Register.prototype.IsIsolated = function (id) {
2178
+ return this.isolatedIds.indexOf(id) !== -1;
2179
+ };
2180
+ Register.prototype.GetIsolated = function () {
2181
+ return this.isolatedIds;
2182
+ };
2183
+ Register.prototype.ClearIsolated = function () {
2184
+ this.isolatedIds = [];
2185
+ this.updateAllEntities();
2186
+ };
2187
+ Register.prototype.Hide = function (id) {
2188
+ if (this.hiddenIds.indexOf(id) === -1) {
2189
+ this.hiddenIds.push(id);
2190
+ }
2191
+ updateEntity(this.viewer, id, this);
2192
+ };
2193
+ Register.prototype.Show = function (id) {
2194
+ var index = this.hiddenIds.indexOf(id);
2195
+ if (index !== -1) {
2196
+ this.hiddenIds.splice(index, 1);
2197
+ }
2198
+ updateEntity(this.viewer, id, this);
2199
+ };
2200
+ Register.prototype.IsHidden = function (id) {
2201
+ return this.hiddenIds.indexOf(id) !== -1;
2202
+ };
2203
+ Register.prototype.GetHidden = function () {
2204
+ return this.hiddenIds;
2205
+ };
2206
+ Register.prototype.ClearHidden = function () {
2207
+ this.hiddenIds = [];
2208
+ this.updateAllEntities();
2209
+ };
2191
2210
  Register.prototype.Add = function (rego) {
2192
2211
  var _a, _b;
2193
2212
  this.Remove(rego.entityId, rego.menuItemId, false);
@@ -2196,7 +2215,7 @@ var VisualsRegister;
2196
2215
  entityRegos.push(rego);
2197
2216
  this.rego[entityId] = entityRegos;
2198
2217
  markEntity(this, rego, rego.visual);
2199
- updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
2218
+ updateEntity(this.viewer, entityId, this);
2200
2219
  if (this.selectedIds.includes(entityId)) {
2201
2220
  select(this.viewer, rego.visual);
2202
2221
  }
@@ -2267,7 +2286,7 @@ var VisualsRegister;
2267
2286
  var doesInclude = this.rego[entityId].find(function (r) { return r.menuItemId === id; });
2268
2287
  if (doesInclude) {
2269
2288
  this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== id; });
2270
- updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
2289
+ updateEntity(this.viewer, entityId, this);
2271
2290
  }
2272
2291
  }
2273
2292
  }
@@ -2287,7 +2306,7 @@ var VisualsRegister;
2287
2306
  removeEntity(this.viewer, rego.visual);
2288
2307
  this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== menuItemId; });
2289
2308
  if (_doUpdate) {
2290
- updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
2309
+ updateEntity(this.viewer, entityId, this);
2291
2310
  }
2292
2311
  };
2293
2312
  /**
@@ -2310,6 +2329,14 @@ var VisualsRegister;
2310
2329
  }
2311
2330
  return found;
2312
2331
  };
2332
+ Register.prototype.updateAllEntities = function () {
2333
+ for (var entityId in this.rego) {
2334
+ var regos = this.rego[entityId];
2335
+ if (regos && regos.length) {
2336
+ updateEntity(this.viewer, entityId, this);
2337
+ }
2338
+ }
2339
+ };
2313
2340
  return Register;
2314
2341
  }());
2315
2342
  VisualsRegister.Register = Register;
@@ -5184,183 +5211,6 @@ var ViewRenderEngine;
5184
5211
  ViewRenderEngine.Render = Render;
5185
5212
  })(ViewRenderEngine || (ViewRenderEngine = {}));
5186
5213
 
5187
- function createContainer(viewer) {
5188
- if (!viewer.canvas.parentElement) {
5189
- return null;
5190
- }
5191
- var container = document.createElement("div");
5192
- container.setAttribute("style", "\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n ");
5193
- viewer.canvas.parentElement.appendChild(container);
5194
- return container;
5195
- }
5196
- function destroyContainer(container) {
5197
- if ((container === null || container === void 0 ? void 0 : container.parentElement) && container.parentElement.contains(container)) {
5198
- container.parentElement.removeChild(container);
5199
- }
5200
- }
5201
- var MPolyline;
5202
- (function (MPolyline) {
5203
- function Render(container, viewer, entity) {
5204
- var _a;
5205
- var items = [];
5206
- if ((_a = entity.polyline) === null || _a === void 0 ? void 0 : _a.positions) {
5207
- var pointsUnk = entity.polyline.positions;
5208
- if (pointsUnk.getValue) {
5209
- pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);
5210
- }
5211
- var points = pointsUnk;
5212
- if (points && points.length) {
5213
- var totalLength = 0;
5214
- for (var i = 0; i < points.length; i++) {
5215
- var p1 = points[i];
5216
- var p2 = points[i + 1];
5217
- if (p1 && p2) {
5218
- totalLength += Cartesian3.distance(p1, p2);
5219
- }
5220
- }
5221
- if (totalLength <= 0) {
5222
- return items;
5223
- }
5224
- var center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);
5225
- var screenPos = viewer.scene.cartesianToCanvasCoordinates(center);
5226
- if (screenPos) {
5227
- var element = document.createElement("div");
5228
- element.setAttribute("style", "\n position: absolute;\n top: " + screenPos.y + "px;\n left: " + screenPos.x + "px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n ");
5229
- var text = MathUtils.Round(totalLength, 3) + "m";
5230
- element.innerText = text;
5231
- var bounds = element.getBoundingClientRect();
5232
- element.style.marginLeft = (-bounds.width / 2) + "px";
5233
- element.style.marginTop = (-bounds.height - 10) + "px";
5234
- container.appendChild(element);
5235
- items.push({ element: element, text: text });
5236
- }
5237
- }
5238
- }
5239
- return items;
5240
- }
5241
- MPolyline.Render = Render;
5242
- })(MPolyline || (MPolyline = {}));
5243
- var MPoint;
5244
- (function (MPoint) {
5245
- function Render(container, viewer, entity) {
5246
- var items = [];
5247
- if (entity === null || entity === void 0 ? void 0 : entity.position) {
5248
- var posUnk = entity.position;
5249
- if (posUnk.getValue) {
5250
- posUnk = posUnk.getValue(viewer.scene.lastRenderTime);
5251
- }
5252
- var pos = posUnk;
5253
- if (!(pos === null || pos === void 0 ? void 0 : pos.x)) {
5254
- return items;
5255
- }
5256
- var screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);
5257
- if (screenPos) {
5258
- var element = document.createElement("div");
5259
- element.setAttribute("style", "\n position: absolute;\n top: " + screenPos.y + "px;\n left: " + screenPos.x + "px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n ");
5260
- var point = Cartographic.fromCartesian(pos);
5261
- var lat = MathUtils.Round(Math$1.toDegrees(point.latitude), 4);
5262
- var lon = MathUtils.Round(Math$1.toDegrees(point.longitude), 4);
5263
- var alt = MathUtils.Round(Math$1.toDegrees(point.height), 3);
5264
- var text = lat + ", " + lon + ", " + alt;
5265
- element.innerText = text;
5266
- var bounds = element.getBoundingClientRect();
5267
- // TODO: Account for billboard image size.
5268
- element.style.marginLeft = (-bounds.width / 2) + "px";
5269
- element.style.marginTop = (-bounds.height - 30) + "px";
5270
- container.appendChild(element);
5271
- items.push({ element: element, text: text });
5272
- }
5273
- }
5274
- return items;
5275
- }
5276
- MPoint.Render = Render;
5277
- })(MPoint || (MPoint = {}));
5278
- function findVisual(visuals) {
5279
- visuals.sort(function (a, b) {
5280
- if (a.show && !b.show) {
5281
- return -1;
5282
- }
5283
- if (!a.show && b.show) {
5284
- return 1;
5285
- }
5286
- return 0;
5287
- });
5288
- for (var i = 0; i < visuals.length; i++) {
5289
- var visual = visuals[i];
5290
- if (visual instanceof Entity) {
5291
- return visual;
5292
- }
5293
- }
5294
- return null;
5295
- }
5296
- /**
5297
- * Measure addon will render measurement details on the position of the 3d object.
5298
- * For example it will add lengths to the line segments of a polyline.
5299
- */
5300
- var MeasureAddon = /** @class */ (function () {
5301
- function MeasureAddon(viewer) {
5302
- var _this = this;
5303
- this.Id = ObjectUtils.UId();
5304
- this.visual = null;
5305
- this.items = [];
5306
- this.container = null;
5307
- this.viewer = viewer;
5308
- this.cRenderListener = this.viewer.scene.postRender.addEventListener(function () {
5309
- _this.updateQueue.Call();
5310
- });
5311
- this.updateQueue = new DelayQueue(function () {
5312
- _this.doUpdate();
5313
- }, 1000 / 60);
5314
- }
5315
- MeasureAddon.prototype.doUpdate = function () {
5316
- if (!this.container) {
5317
- this.container = createContainer(this.viewer);
5318
- }
5319
- this.Remove();
5320
- if (!this.container) {
5321
- return;
5322
- }
5323
- var visual = this.visual;
5324
- if (visual instanceof Entity) {
5325
- var entity = visual;
5326
- if (entity.polyline) {
5327
- this.items = MPolyline.Render(this.container, this.viewer, entity);
5328
- }
5329
- else if (entity.point || entity.billboard) {
5330
- this.items = MPoint.Render(this.container, this.viewer, entity);
5331
- }
5332
- // TODO:
5333
- // - Polygon measurement.
5334
- // - Polygon that is an angle measurement?
5335
- // We'll need params for the addon that dictate what measurements we want to see.
5336
- // Eg: I care about "length", "area" but not "angle" measurements in polygons.
5337
- }
5338
- };
5339
- MeasureAddon.prototype.Render = function (visuals) {
5340
- var newVisual = findVisual(visuals);
5341
- if (newVisual != this.visual) {
5342
- this.Remove();
5343
- }
5344
- this.visual = newVisual;
5345
- this.updateQueue.Call(true);
5346
- };
5347
- MeasureAddon.prototype.Remove = function () {
5348
- var _a;
5349
- for (var i = 0; i < this.items.length; i++) {
5350
- var item = this.items[i];
5351
- if (((_a = item.element) === null || _a === void 0 ? void 0 : _a.parentElement) && item.element.parentElement.contains(item.element)) {
5352
- item.element.parentElement.removeChild(item.element);
5353
- }
5354
- }
5355
- this.items = [];
5356
- };
5357
- MeasureAddon.prototype.Dispose = function () {
5358
- this.cRenderListener();
5359
- destroyContainer(this.container);
5360
- };
5361
- return MeasureAddon;
5362
- }());
5363
-
5364
5214
  var ViewUtils;
5365
5215
  (function (ViewUtils) {
5366
5216
  function GatherLegacyMapTiles(viewer) {
@@ -5431,5 +5281,5 @@ var ViewUtils;
5431
5281
  ViewUtils.GatherTerrainTile = GatherTerrainTile;
5432
5282
  })(ViewUtils || (ViewUtils = {}));
5433
5283
 
5434
- export { CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, RenderHelper, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, MeasureAddon, SharedGetters, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils };
5284
+ export { CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, RenderHelper, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, SharedGetters, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils };
5435
5285
  //# sourceMappingURL=bruce-cesium.es5.js.map