bruce-cesium 0.2.0 → 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.
- package/dist/bruce-cesium.es5.js +225 -8
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +223 -5
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/bruce-cesium.js +2 -0
- package/dist/lib/bruce-cesium.js.map +1 -1
- package/dist/lib/rendering/entity-render-engine.js +4 -0
- package/dist/lib/rendering/entity-render-engine.js.map +1 -1
- package/dist/lib/rendering/render-addons/measure-addon.js +181 -0
- package/dist/lib/rendering/render-addons/measure-addon.js.map +1 -0
- package/dist/lib/rendering/render-addons/render-addon.js +3 -0
- package/dist/lib/rendering/render-addons/render-addon.js.map +1 -0
- package/dist/lib/rendering/visuals-register.js +47 -5
- package/dist/lib/rendering/visuals-register.js.map +1 -1
- package/dist/types/bruce-cesium.d.ts +2 -0
- package/dist/types/rendering/render-addons/measure-addon.d.ts +21 -0
- package/dist/types/rendering/render-addons/render-addon.d.ts +7 -0
- package/dist/types/rendering/visuals-register.d.ts +7 -2
- package/package.json +2 -2
package/dist/bruce-cesium.es5.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
/**
|
|
@@ -3743,5 +3789,176 @@ var ViewRenderEngine;
|
|
|
3743
3789
|
ViewRenderEngine.Render = Render;
|
|
3744
3790
|
})(ViewRenderEngine || (ViewRenderEngine = {}));
|
|
3745
3791
|
|
|
3746
|
-
|
|
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 };
|
|
3747
3964
|
//# sourceMappingURL=bruce-cesium.es5.js.map
|