bruce-cesium 0.1.9 → 0.2.1

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, EntityFilterGetter, BatchedDataGetter, ObjectUtils, Tileset, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTileSource, Camera } from 'bruce-models';
2
- import { Cartesian2, Cartographic, Math as Math$1, Viewer, ArcGisMapServerImageryProvider, ScreenSpaceEventType, Color, HeightReference, Cartesian3, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, HeadingPitchRange, OrthographicFrustum, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, createWorldTerrain, CesiumTerrainProvider, EllipsoidTerrainProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic } from 'cesium';
1
+ import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, EntityFilterGetter, BatchedDataGetter, ObjectUtils, Tileset, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTileSource, Camera, MathUtils } from 'bruce-models';
2
+ import { Cartesian2, Cartographic, Math as Math$1, Viewer, ArcGisMapServerImageryProvider, ScreenSpaceEventType, Cartesian3, HeadingPitchRange, Entity, Primitive, Cesium3DTileFeature, Color, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, OrthographicFrustum, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, createWorldTerrain, CesiumTerrainProvider, EllipsoidTerrainProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic } from 'cesium';
3
3
 
4
4
  var TIME_LAG = 300;
5
5
  var POSITION_CHECK_TIMER = 950;
@@ -717,6 +717,10 @@ var EntityRenderEngine;
717
717
  if (!displayType) {
718
718
  displayType = ZoomControl.EDisplayType.Hidden;
719
719
  }
720
+ // Backwards compatibility.
721
+ else if (displayType == "polygon") {
722
+ displayType = ZoomControl.EDisplayType.Geometry;
723
+ }
720
724
  if (displayType != ZoomControl.EDisplayType.Hidden) {
721
725
  newRenderId = getRenderGroupId(zoomItem);
722
726
  existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);
@@ -1674,7 +1678,7 @@ function updateEntityShow(viewer, visual, show) {
1674
1678
  }
1675
1679
  }
1676
1680
  }
1677
- function updateEntity(viewer, entityRegos) {
1681
+ function updateEntity(viewer, entityRegos, addons) {
1678
1682
  var highestPriority = null;
1679
1683
  for (var i = 0; i < entityRegos.length; i++) {
1680
1684
  var rego = entityRegos[i];
@@ -1684,7 +1688,14 @@ function updateEntity(viewer, entityRegos) {
1684
1688
  }
1685
1689
  for (var i = 0; i < entityRegos.length; i++) {
1686
1690
  var rego = entityRegos[i];
1687
- updateEntityShow(viewer, rego.visual, rego === highestPriority);
1691
+ var show = rego === highestPriority;
1692
+ updateEntityShow(viewer, rego.visual, show);
1693
+ }
1694
+ if (addons) {
1695
+ for (var j = 0; j < addons.length; j++) {
1696
+ var addon = addons[j];
1697
+ addon.Render(entityRegos.map(function (x) { return x.visual; }));
1698
+ }
1688
1699
  }
1689
1700
  }
1690
1701
  function markEntity(register, rego, visual) {
@@ -1793,6 +1804,7 @@ var VisualsRegister;
1793
1804
  this.rego = {};
1794
1805
  this.onUpdate = null;
1795
1806
  this.selectedIds = [];
1807
+ this.addons = {};
1796
1808
  this.viewer = viewer;
1797
1809
  }
1798
1810
  Object.defineProperty(Register.prototype, "Id", {
@@ -1812,6 +1824,40 @@ var VisualsRegister;
1812
1824
  enumerable: false,
1813
1825
  configurable: true
1814
1826
  });
1827
+ Register.prototype.AddAddon = function (entityId, addon) {
1828
+ if (!this.addons[entityId]) {
1829
+ this.addons[entityId] = [];
1830
+ }
1831
+ this.addons[entityId].push(addon);
1832
+ var regos = this.rego[entityId];
1833
+ if (regos) {
1834
+ addon.Render(regos.map(function (x) { return x.visual; }));
1835
+ }
1836
+ };
1837
+ Register.prototype.GetAddons = function (entityId) {
1838
+ return this.addons[entityId] || [];
1839
+ };
1840
+ Register.prototype.RemoveAddon = function (entityId, addonId) {
1841
+ var addons = this.addons[entityId];
1842
+ if (addons) {
1843
+ for (var i = 0; i < addons.length; i++) {
1844
+ if (addons[i].Id === addonId) {
1845
+ addons[i].Dispose();
1846
+ addons.splice(i, 1);
1847
+ break;
1848
+ }
1849
+ }
1850
+ }
1851
+ };
1852
+ Register.prototype.RemoveAddons = function (entityId) {
1853
+ var addons = this.addons[entityId];
1854
+ if (addons) {
1855
+ for (var i = 0; i < addons.length; i++) {
1856
+ addons[i].Dispose();
1857
+ }
1858
+ }
1859
+ this.addons[entityId] = [];
1860
+ };
1815
1861
  Register.prototype.Select = function (id) {
1816
1862
  if (this.selectedIds.indexOf(id) === -1) {
1817
1863
  this.selectedIds.push(id);
@@ -1861,7 +1907,7 @@ var VisualsRegister;
1861
1907
  entityRegos.push(rego);
1862
1908
  this.rego[entityId] = entityRegos;
1863
1909
  markEntity(this, rego, rego.visual);
1864
- updateEntity(this.viewer, this.rego[entityId]);
1910
+ updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
1865
1911
  if (this.selectedIds.includes(entityId)) {
1866
1912
  select(rego.visual);
1867
1913
  }
@@ -1915,7 +1961,7 @@ var VisualsRegister;
1915
1961
  var doesInclude = this.rego[entityId].find(function (r) { return r.menuItemId === id; });
1916
1962
  if (doesInclude) {
1917
1963
  this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== id; });
1918
- updateEntity(this.viewer, this.rego[entityId]);
1964
+ updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
1919
1965
  }
1920
1966
  }
1921
1967
  }
@@ -1935,7 +1981,7 @@ var VisualsRegister;
1935
1981
  removeEntity(this.viewer, rego.visual);
1936
1982
  this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== menuItemId; });
1937
1983
  if (_doUpdate) {
1938
- updateEntity(this.viewer, this.rego[entityId]);
1984
+ updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
1939
1985
  }
1940
1986
  };
1941
1987
  /**
@@ -2856,6 +2902,7 @@ var MenuItemManager;
2856
2902
  break;
2857
2903
  case MenuItem.EType.Entity:
2858
2904
  rItem.renderManager = new EntityRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, params.item);
2905
+ break;
2859
2906
  case MenuItem.EType.CadTileset:
2860
2907
  rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, params.item);
2861
2908
  break;
@@ -3742,5 +3789,176 @@ var ViewRenderEngine;
3742
3789
  ViewRenderEngine.Render = Render;
3743
3790
  })(ViewRenderEngine || (ViewRenderEngine = {}));
3744
3791
 
3745
- export { CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, RenderHelper, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, ViewRenderEngine, TileRenderEngine };
3792
+ function createContainer(viewer) {
3793
+ if (!viewer.canvas.parentElement) {
3794
+ return null;
3795
+ }
3796
+ var container = document.createElement("div");
3797
+ 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 ");
3798
+ viewer.canvas.parentElement.appendChild(container);
3799
+ return container;
3800
+ }
3801
+ function destroyContainer(container) {
3802
+ if ((container === null || container === void 0 ? void 0 : container.parentElement) && container.parentElement.contains(container)) {
3803
+ container.parentElement.removeChild(container);
3804
+ }
3805
+ }
3806
+ var MPolyline;
3807
+ (function (MPolyline) {
3808
+ function Render(container, viewer, entity) {
3809
+ var _a;
3810
+ var items = [];
3811
+ if ((_a = entity.polyline) === null || _a === void 0 ? void 0 : _a.positions) {
3812
+ var pointsUnk = entity.polyline.positions;
3813
+ if (pointsUnk.getValue) {
3814
+ pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);
3815
+ }
3816
+ var points = pointsUnk;
3817
+ if (points && points.length) {
3818
+ var totalLength = 0;
3819
+ for (var i = 0; i < points.length; i++) {
3820
+ var p1 = points[i];
3821
+ var p2 = points[i + 1];
3822
+ if (p1 && p2) {
3823
+ totalLength += Cartesian3.distance(p1, p2);
3824
+ }
3825
+ }
3826
+ if (totalLength <= 0) {
3827
+ return items;
3828
+ }
3829
+ var center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);
3830
+ var screenPos = viewer.scene.cartesianToCanvasCoordinates(center);
3831
+ if (screenPos) {
3832
+ var element = document.createElement("div");
3833
+ 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 ");
3834
+ var text = MathUtils.Round(totalLength, 3) + "m";
3835
+ element.innerText = text;
3836
+ var bounds = element.getBoundingClientRect();
3837
+ element.style.marginLeft = (-bounds.width / 2) + "px";
3838
+ element.style.marginTop = (-bounds.height - 10) + "px";
3839
+ container.appendChild(element);
3840
+ items.push({ element: element, text: text });
3841
+ }
3842
+ }
3843
+ }
3844
+ return items;
3845
+ }
3846
+ MPolyline.Render = Render;
3847
+ })(MPolyline || (MPolyline = {}));
3848
+ var MPoint;
3849
+ (function (MPoint) {
3850
+ function Render(container, viewer, entity) {
3851
+ var items = [];
3852
+ if (entity === null || entity === void 0 ? void 0 : entity.position) {
3853
+ var posUnk = entity.position;
3854
+ if (posUnk.getValue) {
3855
+ posUnk = posUnk.getValue(viewer.scene.lastRenderTime);
3856
+ }
3857
+ var pos = posUnk;
3858
+ if (!(pos === null || pos === void 0 ? void 0 : pos.x)) {
3859
+ return items;
3860
+ }
3861
+ var screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);
3862
+ if (screenPos) {
3863
+ var element = document.createElement("div");
3864
+ 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 ");
3865
+ var point = Cartographic.fromCartesian(pos);
3866
+ var lat = MathUtils.Round(Math$1.toDegrees(point.latitude), 4);
3867
+ var lon = MathUtils.Round(Math$1.toDegrees(point.longitude), 4);
3868
+ var alt = MathUtils.Round(Math$1.toDegrees(point.height), 3);
3869
+ var text = lat + ", " + lon + ", " + alt;
3870
+ element.innerText = text;
3871
+ var bounds = element.getBoundingClientRect();
3872
+ element.style.marginLeft = (-bounds.width / 2) + "px";
3873
+ element.style.marginTop = (-bounds.height - 30) + "px";
3874
+ container.appendChild(element);
3875
+ items.push({ element: element, text: text });
3876
+ }
3877
+ }
3878
+ return items;
3879
+ }
3880
+ MPoint.Render = Render;
3881
+ })(MPoint || (MPoint = {}));
3882
+ function findVisual(visuals) {
3883
+ visuals.sort(function (a, b) {
3884
+ if (a.show && !b.show) {
3885
+ return -1;
3886
+ }
3887
+ if (!a.show && b.show) {
3888
+ return 1;
3889
+ }
3890
+ return 0;
3891
+ });
3892
+ for (var i = 0; i < visuals.length; i++) {
3893
+ var visual = visuals[i];
3894
+ if (visual instanceof Entity) {
3895
+ return visual;
3896
+ }
3897
+ }
3898
+ return null;
3899
+ }
3900
+ /**
3901
+ * Measure addon will render measurement details on the position of the 3d object.
3902
+ * For example it will add lengths to the line segments of a polyline.
3903
+ */
3904
+ var MeasureAddon = /** @class */ (function () {
3905
+ function MeasureAddon(viewer) {
3906
+ var _this = this;
3907
+ this.Id = ObjectUtils.UId();
3908
+ this.visual = null;
3909
+ this.items = [];
3910
+ this.container = null;
3911
+ this.viewer = viewer;
3912
+ this.cRenderListener = this.viewer.scene.postRender.addEventListener(function () {
3913
+ _this.updateQueue.Call();
3914
+ });
3915
+ this.updateQueue = new DelayQueue(function () {
3916
+ _this.doUpdate();
3917
+ }, 1000 / 60);
3918
+ }
3919
+ MeasureAddon.prototype.doUpdate = function () {
3920
+ if (!this.container) {
3921
+ this.container = createContainer(this.viewer);
3922
+ }
3923
+ this.Remove();
3924
+ if (!this.container) {
3925
+ return;
3926
+ }
3927
+ var visual = this.visual;
3928
+ if (visual instanceof Entity) {
3929
+ var entity = visual;
3930
+ if (entity.polyline) {
3931
+ this.items = MPolyline.Render(this.container, this.viewer, entity);
3932
+ }
3933
+ else if (entity.point) {
3934
+ this.items = MPoint.Render(this.container, this.viewer, entity);
3935
+ }
3936
+ }
3937
+ };
3938
+ MeasureAddon.prototype.Render = function (visuals) {
3939
+ var newVisual = findVisual(visuals);
3940
+ if (newVisual != this.visual) {
3941
+ this.Remove();
3942
+ }
3943
+ this.visual = newVisual;
3944
+ this.updateQueue.Call(true);
3945
+ };
3946
+ MeasureAddon.prototype.Remove = function () {
3947
+ var _a;
3948
+ for (var i = 0; i < this.items.length; i++) {
3949
+ var item = this.items[i];
3950
+ if (((_a = item.element) === null || _a === void 0 ? void 0 : _a.parentElement) && item.element.parentElement.contains(item.element)) {
3951
+ item.element.parentElement.removeChild(item.element);
3952
+ }
3953
+ }
3954
+ this.items = [];
3955
+ };
3956
+ MeasureAddon.prototype.Dispose = function () {
3957
+ this.cRenderListener();
3958
+ destroyContainer(this.container);
3959
+ };
3960
+ return MeasureAddon;
3961
+ }());
3962
+
3963
+ export { CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, RenderHelper, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, ViewRenderEngine, TileRenderEngine, MeasureAddon };
3746
3964
  //# sourceMappingURL=bruce-cesium.es5.js.map