bruce-cesium 2.8.3 → 2.8.4
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 +303 -176
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +301 -174
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/bruce-cesium.js +1 -1
- package/dist/lib/rendering/entity-render-engine.js +1 -1
- package/dist/lib/rendering/menu-item-manager.js +22 -4
- package/dist/lib/rendering/menu-item-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/common/entity-label.js +261 -163
- package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
- package/dist/lib/rendering/visuals-register.js +13 -3
- package/dist/lib/rendering/visuals-register.js.map +1 -1
- package/dist/lib/viewer/viewer-utils.js +5 -2
- package/dist/lib/viewer/viewer-utils.js.map +1 -1
- package/dist/lib/widgets/widget-info-view.js +1 -1
- package/dist/types/bruce-cesium.d.ts +1 -1
- package/dist/types/rendering/menu-item-manager.d.ts +3 -0
- package/dist/types/rendering/render-managers/common/entity-label.d.ts +25 -3
- package/dist/types/rendering/visuals-register.d.ts +7 -2
- package/dist/types/viewer/viewer-utils.d.ts +1 -0
- package/package.json +1 -1
package/dist/bruce-cesium.es5.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, DelayQueue, BatchedDataGetter, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera, AbstractApi, EntityAttachment, EntityAttachmentType, EntityAttribute } from 'bruce-models';
|
|
2
2
|
import * as Cesium from 'cesium';
|
|
3
|
-
import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1,
|
|
3
|
+
import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, Entity, Primitive, Cesium3DTileFeature, JulianDate, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, EasingFunction, SceneTransforms, EllipsoidTerrainProvider, CesiumInspector, defined, EllipsoidGeodesic, sampleTerrainMostDetailed, Cesium3DTileset, Model, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Matrix4, Matrix3, IonResource, Ion, PolygonPipeline, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, GeometryInstance, BoundingSphere } from 'cesium';
|
|
4
4
|
|
|
5
5
|
var TIME_LAG = 300;
|
|
6
6
|
var POSITION_CHECK_TIMER = 950;
|
|
@@ -1741,7 +1741,7 @@ function getName(api, entity) {
|
|
|
1741
1741
|
type: type,
|
|
1742
1742
|
defaultToId: false
|
|
1743
1743
|
});
|
|
1744
|
-
return [2 /*return*/, name_1 ? name_1 : "Unnamed
|
|
1744
|
+
return [2 /*return*/, name_1 ? name_1 : "Unnamed Entity"];
|
|
1745
1745
|
}
|
|
1746
1746
|
return [3 /*break*/, 4];
|
|
1747
1747
|
case 3:
|
|
@@ -3716,16 +3716,13 @@ var RelationRenderEngine;
|
|
|
3716
3716
|
})(Parabola = RelationRenderEngine.Parabola || (RelationRenderEngine.Parabola = {}));
|
|
3717
3717
|
})(RelationRenderEngine || (RelationRenderEngine = {}));
|
|
3718
3718
|
|
|
3719
|
-
// Key where the label instance is stored within the cesium entity.
|
|
3720
|
-
// Eg: cEntity[ATTACH_KEY] = new EntityLabel(...);
|
|
3721
|
-
var ATTACH_KEY = "nextspace-navigator-entity-label";
|
|
3722
3719
|
/**
|
|
3723
3720
|
* Returns cesium property's value.
|
|
3724
3721
|
* This will check if it's one that changes over time, or just a fixed value.
|
|
3725
3722
|
* Eg: const pos3d = getValue<Cesium.Cartesian3>(cViewer, cEntity.point.position);
|
|
3726
3723
|
* @param viewer
|
|
3727
3724
|
* @param obj
|
|
3728
|
-
|
|
3725
|
+
*/
|
|
3729
3726
|
function getValue$1(viewer, obj) {
|
|
3730
3727
|
if (obj === null || obj === void 0 ? void 0 : obj.getValue) {
|
|
3731
3728
|
return obj.getValue(viewer.scene.lastRenderTime);
|
|
@@ -3734,9 +3731,12 @@ function getValue$1(viewer, obj) {
|
|
|
3734
3731
|
}
|
|
3735
3732
|
/**
|
|
3736
3733
|
* Util for generating labels within cesium space on entities.
|
|
3737
|
-
|
|
3734
|
+
*/
|
|
3738
3735
|
var EntityLabel;
|
|
3739
3736
|
(function (EntityLabel) {
|
|
3737
|
+
// Key where the label instance is stored within the cesium entity.
|
|
3738
|
+
// Eg: rego[ATTACH_KEY] = new EntityLabel(...);
|
|
3739
|
+
EntityLabel.ATTACH_KEY = "nextspace-navigator-entity-label";
|
|
3740
3740
|
var Label = /** @class */ (function () {
|
|
3741
3741
|
function Label(params) {
|
|
3742
3742
|
var _this = this;
|
|
@@ -3747,16 +3747,28 @@ var EntityLabel;
|
|
|
3747
3747
|
// Indicates the label was disposed and any actions will be ignored.
|
|
3748
3748
|
this.disposed = false;
|
|
3749
3749
|
this.creating = false;
|
|
3750
|
+
// Calculated pos3d for the label.
|
|
3751
|
+
// Override to make it draw at a different position.
|
|
3752
|
+
this.pos3d = null;
|
|
3750
3753
|
this.rego = params.rego;
|
|
3751
3754
|
this.viewer = params.viewer;
|
|
3755
|
+
this.api = params.api;
|
|
3756
|
+
this.visualRegister = params.visualRegister;
|
|
3752
3757
|
this.creating = true;
|
|
3753
|
-
this.createCLabel().then(function () {
|
|
3758
|
+
this.createCLabel(params.pos3d).then(function () {
|
|
3754
3759
|
_this.creating = false;
|
|
3755
3760
|
}).catch(function (e) {
|
|
3756
3761
|
console.error("Failed to create label", e);
|
|
3757
3762
|
_this.creating = false;
|
|
3758
3763
|
});
|
|
3759
3764
|
}
|
|
3765
|
+
Object.defineProperty(Label.prototype, "Rego", {
|
|
3766
|
+
get: function () {
|
|
3767
|
+
return this.rego;
|
|
3768
|
+
},
|
|
3769
|
+
enumerable: false,
|
|
3770
|
+
configurable: true
|
|
3771
|
+
});
|
|
3760
3772
|
Object.defineProperty(Label.prototype, "Disposed", {
|
|
3761
3773
|
get: function () {
|
|
3762
3774
|
return this.disposed;
|
|
@@ -3792,161 +3804,222 @@ var EntityLabel;
|
|
|
3792
3804
|
};
|
|
3793
3805
|
/**
|
|
3794
3806
|
* Creates cesium entity for the label if one does not exist.
|
|
3807
|
+
* @param pos23 optional position to create label at.
|
|
3795
3808
|
*/
|
|
3796
|
-
Label.prototype.createCLabel = function () {
|
|
3797
|
-
var _a, _b, _c;
|
|
3809
|
+
Label.prototype.createCLabel = function (pos3d) {
|
|
3810
|
+
var _a, _b, _c, _d, _e, _f;
|
|
3798
3811
|
return __awaiter(this, void 0, void 0, function () {
|
|
3799
|
-
var
|
|
3812
|
+
var heightRef, heightOffset, pixelOffset, visual, isClamped, height, scale, featureAny, propertyNames, latProp, lonProp, lat, lon, latIsRad, lonIsRad, latIsDeg, lonIsDeg, carto, text, ele, _lastDistance, _lastCameraPos, getDistance, MAX_DISTANCE, updateLabel;
|
|
3800
3813
|
var _this = this;
|
|
3801
|
-
return __generator(this, function (
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3814
|
+
return __generator(this, function (_g) {
|
|
3815
|
+
switch (_g.label) {
|
|
3816
|
+
case 0:
|
|
3817
|
+
if (this.label || this.disposed) {
|
|
3818
|
+
return [2 /*return*/];
|
|
3819
|
+
}
|
|
3820
|
+
heightRef = null;
|
|
3821
|
+
heightOffset = 10;
|
|
3822
|
+
pixelOffset = new Cartesian2(0, 0);
|
|
3823
|
+
if (!isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) return [3 /*break*/, 3];
|
|
3824
|
+
visual = (_a = this.rego) === null || _a === void 0 ? void 0 : _a.visual;
|
|
3825
|
+
if (visual && visual instanceof Entity) {
|
|
3826
|
+
if (visual.polygon) {
|
|
3827
|
+
heightRef = getValue$1(this.viewer, visual.polygon.heightReference);
|
|
3828
|
+
}
|
|
3829
|
+
else if (visual.polyline) {
|
|
3830
|
+
isClamped = getValue$1(this.viewer, visual.polyline.clampToGround);
|
|
3831
|
+
heightRef = isClamped == false ? HeightReference.NONE : HeightReference.CLAMP_TO_GROUND;
|
|
3832
|
+
}
|
|
3833
|
+
else if (visual.model) {
|
|
3834
|
+
heightRef = getValue$1(this.viewer, visual.model.heightReference);
|
|
3835
|
+
}
|
|
3836
|
+
else if (visual.point) {
|
|
3837
|
+
heightRef = getValue$1(this.viewer, visual.point.heightReference);
|
|
3838
|
+
}
|
|
3839
|
+
else if (visual.billboard) {
|
|
3840
|
+
heightRef = getValue$1(this.viewer, visual.billboard.heightReference);
|
|
3841
|
+
height = getValue$1(this.viewer, visual.billboard.height);
|
|
3842
|
+
if (height) {
|
|
3843
|
+
scale = EnsureNumber(getValue$1(this.viewer, visual.billboard.scale), 1);
|
|
3844
|
+
pixelOffset.y = -(height * scale);
|
|
3845
|
+
}
|
|
3846
|
+
// Flat padding.
|
|
3847
|
+
pixelOffset.y -= 5;
|
|
3848
|
+
heightOffset = 0;
|
|
3849
|
+
}
|
|
3850
|
+
else if (visual.corridor) {
|
|
3851
|
+
heightRef = getValue$1(this.viewer, visual.corridor.heightReference);
|
|
3852
|
+
}
|
|
3853
|
+
else if (visual.ellipse) {
|
|
3854
|
+
heightRef = getValue$1(this.viewer, visual.ellipse.heightReference);
|
|
3855
|
+
}
|
|
3856
|
+
pos3d = getValue$1(this.viewer, visual.position);
|
|
3857
|
+
}
|
|
3858
|
+
else if (visual instanceof Cesium3DTileFeature) {
|
|
3859
|
+
featureAny = visual;
|
|
3860
|
+
propertyNames = featureAny.getPropertyNames ? featureAny.getPropertyNames() : (_b = featureAny.getPropertyIds) === null || _b === void 0 ? void 0 : _b.call(featureAny);
|
|
3861
|
+
if (propertyNames === null || propertyNames === void 0 ? void 0 : propertyNames.length) {
|
|
3862
|
+
latProp = propertyNames.find(function (x) { return x.toLowerCase().includes("lat"); });
|
|
3863
|
+
lonProp = propertyNames.find(function (x) { return x.toLowerCase().includes("lon"); });
|
|
3864
|
+
lat = latProp ? featureAny.getProperty(latProp) : null;
|
|
3865
|
+
lon = lonProp ? featureAny.getProperty(lonProp) : null;
|
|
3866
|
+
if (lat && lon) {
|
|
3867
|
+
latIsRad = typeof lat == "number" && lat > -Math.PI && lat < Math.PI;
|
|
3868
|
+
lonIsRad = typeof lon == "number" && lon > -Math.PI && lon < Math.PI;
|
|
3869
|
+
latIsDeg = typeof lat == "number" && lat > -180 && lat < 180;
|
|
3870
|
+
lonIsDeg = typeof lon == "number" && lon > -180 && lon < 180;
|
|
3871
|
+
if (latIsRad && lonIsRad) {
|
|
3872
|
+
pos3d = Cartographic.toCartesian(Cartographic.fromRadians(lon, lat, 0));
|
|
3873
|
+
}
|
|
3874
|
+
else if (latIsDeg && lonIsDeg) {
|
|
3875
|
+
pos3d = Cartographic.toCartesian(Cartographic.fromDegrees(lon, lat, 0));
|
|
3876
|
+
}
|
|
3877
|
+
heightRef = HeightReference.CLAMP_TO_GROUND;
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3830
3880
|
}
|
|
3881
|
+
if (!isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) return [3 /*break*/, 2];
|
|
3882
|
+
return [4 /*yield*/, EntityUtils.GetPosAsync({
|
|
3883
|
+
viewer: this.viewer,
|
|
3884
|
+
api: this.api,
|
|
3885
|
+
entityId: (_c = this.rego) === null || _c === void 0 ? void 0 : _c.entityId,
|
|
3886
|
+
returnHeightRef: HeightReference.NONE,
|
|
3887
|
+
tilesetId: (_d = this.rego) === null || _d === void 0 ? void 0 : _d.tilesetId,
|
|
3888
|
+
visualRegister: this.visualRegister
|
|
3889
|
+
})];
|
|
3890
|
+
case 1:
|
|
3891
|
+
pos3d = _g.sent();
|
|
3892
|
+
heightRef = HeightReference.NONE;
|
|
3893
|
+
_g.label = 2;
|
|
3894
|
+
case 2: return [3 /*break*/, 4];
|
|
3895
|
+
case 3:
|
|
3896
|
+
heightRef = HeightReference.NONE;
|
|
3831
3897
|
// Flat padding.
|
|
3832
|
-
pixelOffset.y -= 5;
|
|
3833
3898
|
heightOffset = 0;
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3899
|
+
pixelOffset.y = -15;
|
|
3900
|
+
_g.label = 4;
|
|
3901
|
+
case 4:
|
|
3902
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
3903
|
+
return [2 /*return*/];
|
|
3904
|
+
}
|
|
3905
|
+
pos3d = DrawingUtils.EnsurePosHeight({
|
|
3906
|
+
desiredHeightRef: HeightReference.NONE,
|
|
3907
|
+
heightRef: heightRef,
|
|
3908
|
+
pos3d: pos3d,
|
|
3909
|
+
viewer: this.viewer
|
|
3910
|
+
});
|
|
3911
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
3912
|
+
return [2 /*return*/];
|
|
3913
|
+
}
|
|
3914
|
+
if (heightOffset) {
|
|
3915
|
+
carto = Cartographic.fromCartesian(pos3d);
|
|
3916
|
+
// TODO: Check if we need to use heightRef and adjust to absolute height.
|
|
3917
|
+
// TODO: We should be smarter and not just add 10m to the height. Eg: use polygon extrusion.
|
|
3918
|
+
carto.height += heightOffset;
|
|
3919
|
+
pos3d = Cartographic.toCartesian(carto);
|
|
3920
|
+
}
|
|
3921
|
+
this.pos3d = pos3d;
|
|
3922
|
+
text = (_f = (_e = this.rego) === null || _e === void 0 ? void 0 : _e.name) !== null && _f !== void 0 ? _f : "Unnamed Entity";
|
|
3923
|
+
ele = document.createElement("div");
|
|
3924
|
+
ele.innerHTML = text;
|
|
3925
|
+
ele.setAttribute("style", "\n position: absolute;\n z-index: 1;\n display: none;\n pointer-events: none;\n padding: 6px 8px;\n border-radius: 6px;\n font-family: Arial;\n font-size: 12px;\n -webkit-backdrop-filter: blur(20px);\n backdrop-filter: blur(20px);\n background: rgba(33,39,42,.8);\n border-radius: 9px;\n box-shadow: 0 0 1px rgba(18,22,25,.36),0 18px 36px -4px rgba(18,22,25,.36);\n color: #ffffff;\n }");
|
|
3926
|
+
this.label = ele;
|
|
3927
|
+
this.viewer.container.appendChild(ele);
|
|
3928
|
+
_lastDistance = null;
|
|
3929
|
+
_lastCameraPos = null;
|
|
3930
|
+
getDistance = function () {
|
|
3931
|
+
var _a;
|
|
3932
|
+
if (_this.disposed) {
|
|
3933
|
+
return null;
|
|
3934
|
+
}
|
|
3935
|
+
var cameraPos = (_a = _this.viewer.camera) === null || _a === void 0 ? void 0 : _a.position;
|
|
3936
|
+
if (isNaN(cameraPos === null || cameraPos === void 0 ? void 0 : cameraPos.x)) {
|
|
3937
|
+
return null;
|
|
3938
|
+
}
|
|
3939
|
+
// If camera hasn't moved much then we can use the last distance.
|
|
3940
|
+
var TOLERANCE = 0.1;
|
|
3941
|
+
if (_lastCameraPos) {
|
|
3942
|
+
var totalMovement = Math.abs(_lastCameraPos.x - cameraPos.x) +
|
|
3943
|
+
Math.abs(_lastCameraPos.y - cameraPos.y) +
|
|
3944
|
+
Math.abs(_lastCameraPos.z - cameraPos.z);
|
|
3945
|
+
if (totalMovement < TOLERANCE) {
|
|
3946
|
+
return _lastDistance;
|
|
3947
|
+
}
|
|
3948
|
+
}
|
|
3949
|
+
// Check if there is a raycast collision between camera and pos3d.
|
|
3950
|
+
// We'll let the labels draw through a ground collision.
|
|
3951
|
+
// Commented out while it is WIP.
|
|
3952
|
+
// const direction = Cesium.Cartesian3.subtract(pos3d, cameraPos, new Cesium.Cartesian3());
|
|
3953
|
+
// const ray = new Cesium.Ray(pos3d.clone(), direction);
|
|
3954
|
+
// const objects = (this.viewer.scene as any).drillPickFromRay(ray, 1, [visuals]);
|
|
3955
|
+
// if (objects && objects.length > 0) {
|
|
3956
|
+
// for (let i = 0; i < objects.length; ++i) {
|
|
3957
|
+
// const obj = objects[i];
|
|
3958
|
+
// if (!visuals.find(x => x == obj?.id)) {
|
|
3959
|
+
// let isGround = true;
|
|
3960
|
+
// if (obj.object) {
|
|
3961
|
+
// const url = obj.object?.primitive?._basePath;
|
|
3962
|
+
// if (url && typeof url == "string") {
|
|
3963
|
+
// isGround = url.includes("tile.googleapis.com");
|
|
3964
|
+
// }
|
|
3965
|
+
// else {
|
|
3966
|
+
// isGround = false;
|
|
3967
|
+
// }
|
|
3968
|
+
// }
|
|
3969
|
+
// if (!isGround) {
|
|
3970
|
+
// return null;
|
|
3971
|
+
// }
|
|
3972
|
+
// }
|
|
3973
|
+
// }
|
|
3974
|
+
// }
|
|
3975
|
+
var distance = Cartesian3.distance(cameraPos, _this.pos3d);
|
|
3976
|
+
_lastDistance = distance;
|
|
3977
|
+
_lastCameraPos = cameraPos.clone();
|
|
3978
|
+
return distance;
|
|
3979
|
+
};
|
|
3980
|
+
MAX_DISTANCE = 5000;
|
|
3981
|
+
updateLabel = function () {
|
|
3982
|
+
var _a;
|
|
3983
|
+
if (_this.disposed || isNaN((_a = _this.pos3d) === null || _a === void 0 ? void 0 : _a.x)) {
|
|
3984
|
+
return;
|
|
3985
|
+
}
|
|
3986
|
+
var distance = getDistance();
|
|
3987
|
+
if (isNaN(distance) || distance >= MAX_DISTANCE) {
|
|
3988
|
+
ele.style.display = "none";
|
|
3989
|
+
return;
|
|
3990
|
+
}
|
|
3991
|
+
var pos2d = SceneTransforms.wgs84ToWindowCoordinates(_this.viewer.scene, _this.pos3d);
|
|
3992
|
+
if (isNaN(pos2d === null || pos2d === void 0 ? void 0 : pos2d.x)) {
|
|
3993
|
+
ele.style.display = "none";
|
|
3994
|
+
return;
|
|
3995
|
+
}
|
|
3996
|
+
// If out of the screen then we can hide it.
|
|
3997
|
+
if (pos2d.x < 0 || pos2d.x > _this.viewer.canvas.clientWidth ||
|
|
3998
|
+
pos2d.y < 0 || pos2d.y > _this.viewer.canvas.clientHeight) {
|
|
3999
|
+
ele.style.display = "none";
|
|
4000
|
+
return;
|
|
4001
|
+
}
|
|
4002
|
+
ele.style.display = "block";
|
|
4003
|
+
// Check scale to apply based on distance between camera and pos3d.
|
|
4004
|
+
// We'll make the label smaller and less transparent when further away.
|
|
4005
|
+
var scale = 1 - (distance / MAX_DISTANCE);
|
|
4006
|
+
if (scale && scale > 0.15) {
|
|
4007
|
+
ele.style.transform = "scale(".concat(scale, ")");
|
|
4008
|
+
ele.style.opacity = "".concat(scale);
|
|
4009
|
+
var left = pos2d.x - (ele.clientWidth / 2) + pixelOffset.x;
|
|
4010
|
+
ele.style.left = "".concat(left, "px");
|
|
4011
|
+
var top_1 = pos2d.y - ele.clientHeight + (pixelOffset.y * scale);
|
|
4012
|
+
ele.style.top = "".concat(top_1, "px");
|
|
4013
|
+
}
|
|
4014
|
+
else {
|
|
4015
|
+
ele.style.transform = "";
|
|
4016
|
+
ele.style.opacity = "0";
|
|
4017
|
+
}
|
|
4018
|
+
};
|
|
4019
|
+
this.renderRemoval = this.viewer.scene.postUpdate.addEventListener(updateLabel);
|
|
4020
|
+
updateLabel();
|
|
4021
|
+
return [2 /*return*/];
|
|
3845
4022
|
}
|
|
3846
|
-
carto = Cartographic.fromCartesian(pos3d);
|
|
3847
|
-
// TODO: Check if we need to use heightRef and adjust to absolute height.
|
|
3848
|
-
// TODO: We should be smarter and not just add 10m to the height. Eg: use polygon extrusion.
|
|
3849
|
-
carto.height += heightOffset;
|
|
3850
|
-
pos3d = Cartographic.toCartesian(carto);
|
|
3851
|
-
text = (_c = (_b = this.rego) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : "Unnamed Entity";
|
|
3852
|
-
ele = document.createElement("div");
|
|
3853
|
-
ele.innerHTML = text;
|
|
3854
|
-
ele.setAttribute("style", "\n position: absolute;\n z-index: 1;\n display: none;\n pointer-events: none;\n padding: 6px;\n border-radius: 6px;\n font-family: sans-serif;\n font-size: 12px;\n background-color: #000000;\n color: #ffffff;\n }");
|
|
3855
|
-
this.label = ele;
|
|
3856
|
-
this.viewer.container.appendChild(ele);
|
|
3857
|
-
_lastDistance = null;
|
|
3858
|
-
_lastCameraPos = null;
|
|
3859
|
-
getDistance = function () {
|
|
3860
|
-
var _a;
|
|
3861
|
-
if (_this.disposed) {
|
|
3862
|
-
return null;
|
|
3863
|
-
}
|
|
3864
|
-
var cameraPos = (_a = _this.viewer.camera) === null || _a === void 0 ? void 0 : _a.position;
|
|
3865
|
-
if (isNaN(cameraPos === null || cameraPos === void 0 ? void 0 : cameraPos.x)) {
|
|
3866
|
-
return null;
|
|
3867
|
-
}
|
|
3868
|
-
// If camera hasn't moved much then we can use the last distance.
|
|
3869
|
-
var TOLERANCE = 0.1;
|
|
3870
|
-
if (_lastCameraPos) {
|
|
3871
|
-
var totalMovement = Math.abs(_lastCameraPos.x - cameraPos.x) +
|
|
3872
|
-
Math.abs(_lastCameraPos.y - cameraPos.y) +
|
|
3873
|
-
Math.abs(_lastCameraPos.z - cameraPos.z);
|
|
3874
|
-
if (totalMovement < TOLERANCE) {
|
|
3875
|
-
return _lastDistance;
|
|
3876
|
-
}
|
|
3877
|
-
}
|
|
3878
|
-
// Check if there is a raycast collision between camera and pos3d.
|
|
3879
|
-
// We'll let the labels draw through a ground collision.
|
|
3880
|
-
// Commented out while it is WIP.
|
|
3881
|
-
// const direction = Cesium.Cartesian3.subtract(pos3d, cameraPos, new Cesium.Cartesian3());
|
|
3882
|
-
// const ray = new Cesium.Ray(pos3d.clone(), direction);
|
|
3883
|
-
// const objects = (this.viewer.scene as any).drillPickFromRay(ray, 1, [visuals]);
|
|
3884
|
-
// if (objects && objects.length > 0) {
|
|
3885
|
-
// for (let i = 0; i < objects.length; ++i) {
|
|
3886
|
-
// const obj = objects[i];
|
|
3887
|
-
// if (!visuals.find(x => x == obj?.id)) {
|
|
3888
|
-
// let isGround = true;
|
|
3889
|
-
// if (obj.object) {
|
|
3890
|
-
// const url = obj.object?.primitive?._basePath;
|
|
3891
|
-
// if (url && typeof url == "string") {
|
|
3892
|
-
// isGround = url.includes("tile.googleapis.com");
|
|
3893
|
-
// }
|
|
3894
|
-
// else {
|
|
3895
|
-
// isGround = false;
|
|
3896
|
-
// }
|
|
3897
|
-
// }
|
|
3898
|
-
// if (!isGround) {
|
|
3899
|
-
// return null;
|
|
3900
|
-
// }
|
|
3901
|
-
// }
|
|
3902
|
-
// }
|
|
3903
|
-
// }
|
|
3904
|
-
var distance = Cartesian3.distance(cameraPos, pos3d);
|
|
3905
|
-
_lastDistance = distance;
|
|
3906
|
-
_lastCameraPos = cameraPos.clone();
|
|
3907
|
-
return distance;
|
|
3908
|
-
};
|
|
3909
|
-
MAX_DISTANCE = 5000;
|
|
3910
|
-
updateLabel = function () {
|
|
3911
|
-
if (_this.disposed || isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
3912
|
-
return;
|
|
3913
|
-
}
|
|
3914
|
-
var distance = getDistance();
|
|
3915
|
-
if (isNaN(distance) || distance >= MAX_DISTANCE) {
|
|
3916
|
-
ele.style.display = "none";
|
|
3917
|
-
return;
|
|
3918
|
-
}
|
|
3919
|
-
var pos2d = SceneTransforms.wgs84ToWindowCoordinates(_this.viewer.scene, pos3d);
|
|
3920
|
-
if (isNaN(pos2d === null || pos2d === void 0 ? void 0 : pos2d.x)) {
|
|
3921
|
-
ele.style.display = "none";
|
|
3922
|
-
return;
|
|
3923
|
-
}
|
|
3924
|
-
// If out of the screen then we can hide it.
|
|
3925
|
-
if (pos2d.x < 0 || pos2d.x > _this.viewer.canvas.clientWidth ||
|
|
3926
|
-
pos2d.y < 0 || pos2d.y > _this.viewer.canvas.clientHeight) {
|
|
3927
|
-
ele.style.display = "none";
|
|
3928
|
-
return;
|
|
3929
|
-
}
|
|
3930
|
-
ele.style.display = "block";
|
|
3931
|
-
// Check scale to apply based on distance between camera and pos3d.
|
|
3932
|
-
// We'll make the label smaller and less transparent when further away.
|
|
3933
|
-
var scale = 1 - (distance / MAX_DISTANCE);
|
|
3934
|
-
if (scale && scale > 0.15) {
|
|
3935
|
-
ele.style.transform = "scale(".concat(scale, ")");
|
|
3936
|
-
ele.style.opacity = "".concat(scale);
|
|
3937
|
-
var left = pos2d.x - (ele.clientWidth / 2) + pixelOffset.x;
|
|
3938
|
-
ele.style.left = "".concat(left, "px");
|
|
3939
|
-
var top_1 = pos2d.y - ele.clientHeight + (pixelOffset.y * scale);
|
|
3940
|
-
ele.style.top = "".concat(top_1, "px");
|
|
3941
|
-
}
|
|
3942
|
-
else {
|
|
3943
|
-
ele.style.transform = "";
|
|
3944
|
-
ele.style.opacity = "0";
|
|
3945
|
-
}
|
|
3946
|
-
};
|
|
3947
|
-
this.renderRemoval = this.viewer.scene.postUpdate.addEventListener(updateLabel);
|
|
3948
|
-
updateLabel();
|
|
3949
|
-
return [2 /*return*/];
|
|
3950
4023
|
});
|
|
3951
4024
|
});
|
|
3952
4025
|
};
|
|
@@ -3958,14 +4031,18 @@ var EntityLabel;
|
|
|
3958
4031
|
* If one exists then the action is ignored.
|
|
3959
4032
|
*/
|
|
3960
4033
|
function Attach(params) {
|
|
3961
|
-
var rego = params.rego, viewer = params.viewer;
|
|
3962
|
-
if (!rego || !viewer || rego[ATTACH_KEY]) {
|
|
4034
|
+
var rego = params.rego, viewer = params.viewer, pos3d = params.pos3d, visualRegister = params.visualRegister, api = params.api;
|
|
4035
|
+
if (!rego || !viewer || rego[EntityLabel.ATTACH_KEY]) {
|
|
3963
4036
|
return;
|
|
3964
4037
|
}
|
|
3965
|
-
rego[ATTACH_KEY] = new Label({
|
|
4038
|
+
rego[EntityLabel.ATTACH_KEY] = new Label({
|
|
3966
4039
|
rego: rego,
|
|
3967
|
-
viewer: viewer
|
|
4040
|
+
viewer: viewer,
|
|
4041
|
+
pos3d: pos3d,
|
|
4042
|
+
visualRegister: visualRegister,
|
|
4043
|
+
api: api
|
|
3968
4044
|
});
|
|
4045
|
+
return rego[EntityLabel.ATTACH_KEY];
|
|
3969
4046
|
}
|
|
3970
4047
|
EntityLabel.Attach = Attach;
|
|
3971
4048
|
/**
|
|
@@ -3973,15 +4050,34 @@ var EntityLabel;
|
|
|
3973
4050
|
* If one doesn't exist then the action is ignored.
|
|
3974
4051
|
*/
|
|
3975
4052
|
function Detatch(params) {
|
|
3976
|
-
var _a, _b;
|
|
3977
|
-
var rego = params.rego;
|
|
3978
|
-
if (!rego
|
|
4053
|
+
var _a, _b, _c;
|
|
4054
|
+
var rego = params.rego, label = params.label;
|
|
4055
|
+
if (!rego && label) {
|
|
4056
|
+
rego = label.Rego;
|
|
4057
|
+
}
|
|
4058
|
+
if (!rego || !rego[EntityLabel.ATTACH_KEY]) {
|
|
4059
|
+
if (label) {
|
|
4060
|
+
(_a = label.Dispose) === null || _a === void 0 ? void 0 : _a.call(label);
|
|
4061
|
+
}
|
|
3979
4062
|
return;
|
|
3980
4063
|
}
|
|
3981
|
-
(
|
|
3982
|
-
rego[ATTACH_KEY] = null;
|
|
4064
|
+
(_c = (_b = rego[EntityLabel.ATTACH_KEY]).Dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
4065
|
+
rego[EntityLabel.ATTACH_KEY] = null;
|
|
3983
4066
|
}
|
|
3984
4067
|
EntityLabel.Detatch = Detatch;
|
|
4068
|
+
/**
|
|
4069
|
+
* Returns label instance from given rego if one exists.
|
|
4070
|
+
* @param params
|
|
4071
|
+
* @returns
|
|
4072
|
+
*/
|
|
4073
|
+
function GetLabel(params) {
|
|
4074
|
+
var rego = params.rego;
|
|
4075
|
+
if (!rego) {
|
|
4076
|
+
return null;
|
|
4077
|
+
}
|
|
4078
|
+
return rego[EntityLabel.ATTACH_KEY];
|
|
4079
|
+
}
|
|
4080
|
+
EntityLabel.GetLabel = GetLabel;
|
|
3985
4081
|
})(EntityLabel || (EntityLabel = {}));
|
|
3986
4082
|
|
|
3987
4083
|
/**
|
|
@@ -4121,7 +4217,9 @@ function updateEntity(viewer, entityId, register) {
|
|
|
4121
4217
|
if (isLabelled && visible) {
|
|
4122
4218
|
EntityLabel.Attach({
|
|
4123
4219
|
rego: rego,
|
|
4124
|
-
viewer: viewer
|
|
4220
|
+
viewer: viewer,
|
|
4221
|
+
api: register.ApiGetters.GetBruceApi(),
|
|
4222
|
+
visualRegister: register
|
|
4125
4223
|
});
|
|
4126
4224
|
}
|
|
4127
4225
|
else {
|
|
@@ -4302,7 +4400,7 @@ var VisualsRegister;
|
|
|
4302
4400
|
EVisualUpdateType["DeselectAll"] = "DESELECT_ALL";
|
|
4303
4401
|
})(EVisualUpdateType = VisualsRegister.EVisualUpdateType || (VisualsRegister.EVisualUpdateType = {}));
|
|
4304
4402
|
var Register = /** @class */ (function () {
|
|
4305
|
-
function Register(
|
|
4403
|
+
function Register(params) {
|
|
4306
4404
|
this.id = ObjectUtils.UId();
|
|
4307
4405
|
this.rego = {};
|
|
4308
4406
|
this.onUpdate = null;
|
|
@@ -4315,7 +4413,8 @@ var VisualsRegister;
|
|
|
4315
4413
|
// It will be drawn on the "best" visual, and only while the entity is visible.
|
|
4316
4414
|
// Warning: this sucks for CAD entities.
|
|
4317
4415
|
this.labelledEntityIds = [];
|
|
4318
|
-
this.viewer = viewer;
|
|
4416
|
+
this.viewer = params.viewer;
|
|
4417
|
+
this.apiGetters = params.apiGetters;
|
|
4319
4418
|
}
|
|
4320
4419
|
Object.defineProperty(Register.prototype, "Id", {
|
|
4321
4420
|
get: function () {
|
|
@@ -4331,6 +4430,13 @@ var VisualsRegister;
|
|
|
4331
4430
|
enumerable: false,
|
|
4332
4431
|
configurable: true
|
|
4333
4432
|
});
|
|
4433
|
+
Object.defineProperty(Register.prototype, "ApiGetters", {
|
|
4434
|
+
get: function () {
|
|
4435
|
+
return this.apiGetters;
|
|
4436
|
+
},
|
|
4437
|
+
enumerable: false,
|
|
4438
|
+
configurable: true
|
|
4439
|
+
});
|
|
4334
4440
|
Object.defineProperty(Register.prototype, "OnUpdate", {
|
|
4335
4441
|
get: function () {
|
|
4336
4442
|
if (!this.onUpdate) {
|
|
@@ -9927,15 +10033,29 @@ var MenuItemManager;
|
|
|
9927
10033
|
function Manager(params) {
|
|
9928
10034
|
this.items = [];
|
|
9929
10035
|
this.onUpdate = null;
|
|
9930
|
-
var viewer = params.viewer, visualsRegister = params.visualsRegister;
|
|
10036
|
+
var viewer = params.viewer, visualsRegister = params.visualsRegister, getters = params.getters;
|
|
9931
10037
|
this.viewer = viewer;
|
|
10038
|
+
if (!getters) {
|
|
10039
|
+
getters = ENVIRONMENT.Api();
|
|
10040
|
+
}
|
|
10041
|
+
this.getters = getters;
|
|
9932
10042
|
if (!visualsRegister) {
|
|
9933
|
-
visualsRegister = new VisualsRegister.Register(
|
|
10043
|
+
visualsRegister = new VisualsRegister.Register({
|
|
10044
|
+
viewer: this.viewer,
|
|
10045
|
+
apiGetters: getters
|
|
10046
|
+
});
|
|
9934
10047
|
}
|
|
9935
10048
|
this.visualsRegister = visualsRegister;
|
|
9936
10049
|
this.sharedGetters = new SharedGetters.Cache();
|
|
9937
10050
|
this.sharedMonitor = new CesiumViewMonitor(this.viewer);
|
|
9938
10051
|
}
|
|
10052
|
+
Object.defineProperty(Manager.prototype, "Getters", {
|
|
10053
|
+
get: function () {
|
|
10054
|
+
return this.getters;
|
|
10055
|
+
},
|
|
10056
|
+
enumerable: false,
|
|
10057
|
+
configurable: true
|
|
10058
|
+
});
|
|
9939
10059
|
Object.defineProperty(Manager.prototype, "Viewer", {
|
|
9940
10060
|
get: function () {
|
|
9941
10061
|
return this.viewer;
|
|
@@ -9978,11 +10098,15 @@ var MenuItemManager;
|
|
|
9978
10098
|
if (this.viewer.isDestroyed()) {
|
|
9979
10099
|
return null;
|
|
9980
10100
|
}
|
|
10101
|
+
if (!params.getters) {
|
|
10102
|
+
params.getters = this.getters;
|
|
10103
|
+
}
|
|
10104
|
+
// Deprecated. Backwards compatibility.
|
|
9981
10105
|
if (!params.getters) {
|
|
9982
10106
|
params.getters = ENVIRONMENT.Api();
|
|
9983
10107
|
}
|
|
9984
|
-
if (params.apiGetter && !
|
|
9985
|
-
console.warn("RenderItem(): Please pass getters
|
|
10108
|
+
if (params.apiGetter && !this.getters) {
|
|
10109
|
+
console.warn("RenderItem(): Please pass getters within menu-item-manager constructor. 'getters' and 'apiGetter' within RenderItem are now deprecated.");
|
|
9986
10110
|
}
|
|
9987
10111
|
else if (!params.apiGetter) {
|
|
9988
10112
|
params.apiGetter = params.getters.GetBruceGetter();
|
|
@@ -15591,7 +15715,7 @@ var WidgetInfoView = /** @class */ (function (_super) {
|
|
|
15591
15715
|
defaultToId: false
|
|
15592
15716
|
});
|
|
15593
15717
|
if (!name_1) {
|
|
15594
|
-
name_1 = "Unnamed
|
|
15718
|
+
name_1 = "Unnamed Entity";
|
|
15595
15719
|
}
|
|
15596
15720
|
this._title.style.display = "block";
|
|
15597
15721
|
this._flyTo.style.display = "flex";
|
|
@@ -15817,12 +15941,15 @@ var ViewerUtils;
|
|
|
15817
15941
|
* @returns
|
|
15818
15942
|
*/
|
|
15819
15943
|
function GetManager(params) {
|
|
15820
|
-
var viewer = params.viewer, createIfMissing = params.createIfMissing;
|
|
15944
|
+
var viewer = params.viewer, createIfMissing = params.createIfMissing, getters = params.getters;
|
|
15821
15945
|
if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {
|
|
15822
15946
|
return viewer[CESIUM_VIEWER_MANAGER_KEY];
|
|
15823
15947
|
}
|
|
15824
15948
|
else if (createIfMissing != false) {
|
|
15825
|
-
var manager = new MenuItemManager.Manager({
|
|
15949
|
+
var manager = new MenuItemManager.Manager({
|
|
15950
|
+
viewer: viewer,
|
|
15951
|
+
getters: getters
|
|
15952
|
+
});
|
|
15826
15953
|
viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;
|
|
15827
15954
|
return manager;
|
|
15828
15955
|
}
|
|
@@ -15881,7 +16008,7 @@ var ViewerUtils;
|
|
|
15881
16008
|
ViewerUtils.CreateWidgets = CreateWidgets;
|
|
15882
16009
|
})(ViewerUtils || (ViewerUtils = {}));
|
|
15883
16010
|
|
|
15884
|
-
var VERSION$1 = "2.8.
|
|
16011
|
+
var VERSION$1 = "2.8.4";
|
|
15885
16012
|
|
|
15886
16013
|
export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, EntityLabel, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
|
|
15887
16014
|
//# sourceMappingURL=bruce-cesium.es5.js.map
|