bruce-cesium 5.7.9 → 5.8.0
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 +32262 -0
- package/dist/bruce-cesium.es5.js.map +1 -0
- package/dist/bruce-cesium.umd.js +32186 -0
- package/dist/bruce-cesium.umd.js.map +1 -0
- package/dist/lib/bruce-cesium.js +76 -0
- package/dist/lib/bruce-cesium.js.map +1 -0
- package/dist/lib/internal/cesium-utils.js +109 -0
- package/dist/lib/internal/cesium-utils.js.map +1 -0
- package/dist/lib/internal/js-utils.js +22 -0
- package/dist/lib/internal/js-utils.js.map +1 -0
- package/dist/lib/internal/limited-log.js +17 -0
- package/dist/lib/internal/limited-log.js.map +1 -0
- package/dist/lib/rendering/cesium-animated-in-out.js +166 -0
- package/dist/lib/rendering/cesium-animated-in-out.js.map +1 -0
- package/dist/lib/rendering/cesium-animated-property.js +1111 -0
- package/dist/lib/rendering/cesium-animated-property.js.map +1 -0
- package/dist/lib/rendering/entity-gatherer.js +327 -0
- package/dist/lib/rendering/entity-gatherer.js.map +1 -0
- package/dist/lib/rendering/entity-render-engine-model3d.js +689 -0
- package/dist/lib/rendering/entity-render-engine-model3d.js.map +1 -0
- package/dist/lib/rendering/entity-render-engine-point.js +984 -0
- package/dist/lib/rendering/entity-render-engine-point.js.map +1 -0
- package/dist/lib/rendering/entity-render-engine-polygon.js +669 -0
- package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -0
- package/dist/lib/rendering/entity-render-engine-polyline.js +415 -0
- package/dist/lib/rendering/entity-render-engine-polyline.js.map +1 -0
- package/dist/lib/rendering/entity-render-engine.js +442 -0
- package/dist/lib/rendering/entity-render-engine.js.map +1 -0
- package/dist/lib/rendering/getters/batched-data-getter.js +91 -0
- package/dist/lib/rendering/getters/batched-data-getter.js.map +1 -0
- package/dist/lib/rendering/getters/entity-filter-getter.js +634 -0
- package/dist/lib/rendering/getters/entity-filter-getter.js.map +1 -0
- package/dist/lib/rendering/getters/entity-globe.js +172 -0
- package/dist/lib/rendering/getters/entity-globe.js.map +1 -0
- package/dist/lib/rendering/menu-item-creator.js +354 -0
- package/dist/lib/rendering/menu-item-creator.js.map +1 -0
- package/dist/lib/rendering/menu-item-manager.js +464 -0
- package/dist/lib/rendering/menu-item-manager.js.map +1 -0
- package/dist/lib/rendering/relation-render-engine.js +235 -0
- package/dist/lib/rendering/relation-render-engine.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/cesium-parabola.js +368 -0
- package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/entity-label.js +703 -0
- package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/point-clustering.js +826 -0
- package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -0
- package/dist/lib/rendering/render-managers/common/shared-getters.js +187 -0
- package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -0
- package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js +668 -0
- package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +92 -0
- package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +143 -0
- package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +510 -0
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +717 -0
- package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +999 -0
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +186 -0
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +226 -0
- package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/other/google-search-render-manager.js +430 -0
- package/dist/lib/rendering/render-managers/other/google-search-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +290 -0
- package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/other/relations-render-manager.js +401 -0
- package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/render-manager.js +276 -0
- package/dist/lib/rendering/render-managers/render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +356 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +861 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +279 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +104 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js +81 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +378 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +140 -0
- package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -0
- package/dist/lib/rendering/tile-render-engine.js +1328 -0
- package/dist/lib/rendering/tile-render-engine.js.map +1 -0
- package/dist/lib/rendering/tileset-render-engine.js +588 -0
- package/dist/lib/rendering/tileset-render-engine.js.map +1 -0
- package/dist/lib/rendering/tileset-styler.js +590 -0
- package/dist/lib/rendering/tileset-styler.js.map +1 -0
- package/dist/lib/rendering/view-render-engine.js +1004 -0
- package/dist/lib/rendering/view-render-engine.js.map +1 -0
- package/dist/lib/rendering/visual-register-culler.js +676 -0
- package/dist/lib/rendering/visual-register-culler.js.map +1 -0
- package/dist/lib/rendering/visuals-register.js +1695 -0
- package/dist/lib/rendering/visuals-register.js.map +1 -0
- package/dist/lib/utils/cesium-entity-styler.js +914 -0
- package/dist/lib/utils/cesium-entity-styler.js.map +1 -0
- package/dist/lib/utils/drawing-utils.js +308 -0
- package/dist/lib/utils/drawing-utils.js.map +1 -0
- package/dist/lib/utils/entity-utils.js +1382 -0
- package/dist/lib/utils/entity-utils.js.map +1 -0
- package/dist/lib/utils/measure-utils.js +73 -0
- package/dist/lib/utils/measure-utils.js.map +1 -0
- package/dist/lib/utils/simplify-geometry.js +323 -0
- package/dist/lib/utils/simplify-geometry.js.map +1 -0
- package/dist/lib/utils/view-utils.js +392 -0
- package/dist/lib/utils/view-utils.js.map +1 -0
- package/dist/lib/viewer/cesium-view-monitor.js +393 -0
- package/dist/lib/viewer/cesium-view-monitor.js.map +1 -0
- package/dist/lib/viewer/viewer-event-tracker.js +70 -0
- package/dist/lib/viewer/viewer-event-tracker.js.map +1 -0
- package/dist/lib/viewer/viewer-utils.js +310 -0
- package/dist/lib/viewer/viewer-utils.js.map +1 -0
- package/dist/lib/widgets/common/draw-3d-polygon.js +458 -0
- package/dist/lib/widgets/common/draw-3d-polygon.js.map +1 -0
- package/dist/lib/widgets/common/draw-3d-polyline.js +415 -0
- package/dist/lib/widgets/common/draw-3d-polyline.js.map +1 -0
- package/dist/lib/widgets/common/measure-creator.js +468 -0
- package/dist/lib/widgets/common/measure-creator.js.map +1 -0
- package/dist/lib/widgets/common/walkthrough.js +336 -0
- package/dist/lib/widgets/common/walkthrough.js.map +1 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js +36 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js.map +1 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js +437 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js.map +1 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js +38 -0
- package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js.map +1 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +219 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +1 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js +304 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js.map +1 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js +29 -0
- package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js.map +1 -0
- package/dist/lib/widgets/widget-bookmarks.js +497 -0
- package/dist/lib/widgets/widget-bookmarks.js.map +1 -0
- package/dist/lib/widgets/widget-branding.js +165 -0
- package/dist/lib/widgets/widget-branding.js.map +1 -0
- package/dist/lib/widgets/widget-cursorbar.js +1179 -0
- package/dist/lib/widgets/widget-cursorbar.js.map +1 -0
- package/dist/lib/widgets/widget-embedded-info-view.js +201 -0
- package/dist/lib/widgets/widget-embedded-info-view.js.map +1 -0
- package/dist/lib/widgets/widget-info-view.js +681 -0
- package/dist/lib/widgets/widget-info-view.js.map +1 -0
- package/dist/lib/widgets/widget-left-panel.js +548 -0
- package/dist/lib/widgets/widget-left-panel.js.map +1 -0
- package/dist/lib/widgets/widget-nav-compass.js +469 -0
- package/dist/lib/widgets/widget-nav-compass.js.map +1 -0
- package/dist/lib/widgets/widget-view-bar.js +284 -0
- package/dist/lib/widgets/widget-view-bar.js.map +1 -0
- package/dist/lib/widgets/widget.js +66 -0
- package/dist/lib/widgets/widget.js.map +1 -0
- package/dist/types/bruce-cesium.d.ts +58 -0
- package/dist/types/internal/cesium-utils.d.ts +23 -0
- package/dist/types/internal/js-utils.d.ts +8 -0
- package/dist/types/internal/limited-log.d.ts +6 -0
- package/dist/types/rendering/cesium-animated-in-out.d.ts +12 -0
- package/dist/types/rendering/cesium-animated-property.d.ts +245 -0
- package/dist/types/rendering/entity-gatherer.d.ts +36 -0
- package/dist/types/rendering/entity-render-engine-model3d.d.ts +56 -0
- package/dist/types/rendering/entity-render-engine-point.d.ts +73 -0
- package/dist/types/rendering/entity-render-engine-polygon.d.ts +26 -0
- package/dist/types/rendering/entity-render-engine-polyline.d.ts +47 -0
- package/dist/types/rendering/entity-render-engine.d.ts +108 -0
- package/dist/types/rendering/getters/batched-data-getter.d.ts +28 -0
- package/dist/types/rendering/getters/entity-filter-getter.d.ts +104 -0
- package/dist/types/rendering/getters/entity-globe.d.ts +21 -0
- package/dist/types/rendering/menu-item-creator.d.ts +53 -0
- package/dist/types/rendering/menu-item-manager.d.ts +85 -0
- package/dist/types/rendering/relation-render-engine.d.ts +32 -0
- package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +39 -0
- package/dist/types/rendering/render-managers/common/entity-label.d.ts +82 -0
- package/dist/types/rendering/render-managers/common/point-clustering.d.ts +91 -0
- package/dist/types/rendering/render-managers/common/shared-getters.d.ts +41 -0
- package/dist/types/rendering/render-managers/data-source/data-source-static-csv-manager.d.ts +41 -0
- package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +25 -0
- package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +31 -0
- package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +76 -0
- package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +90 -0
- package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +90 -0
- package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +42 -0
- package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +38 -0
- package/dist/types/rendering/render-managers/other/google-search-render-manager.d.ts +45 -0
- package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +60 -0
- package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +53 -0
- package/dist/types/rendering/render-managers/render-manager.d.ts +30 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +37 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +86 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +41 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +26 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-i3s-render-manager.d.ts +25 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +48 -0
- package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +27 -0
- package/dist/types/rendering/tile-render-engine.d.ts +80 -0
- package/dist/types/rendering/tileset-render-engine.d.ts +99 -0
- package/dist/types/rendering/tileset-styler.d.ts +86 -0
- package/dist/types/rendering/view-render-engine.d.ts +32 -0
- package/dist/types/rendering/visual-register-culler.d.ts +18 -0
- package/dist/types/rendering/visuals-register.d.ts +351 -0
- package/dist/types/utils/cesium-entity-styler.d.ts +103 -0
- package/dist/types/utils/drawing-utils.d.ts +59 -0
- package/dist/types/utils/entity-utils.d.ts +133 -0
- package/dist/types/utils/measure-utils.d.ts +20 -0
- package/dist/types/utils/simplify-geometry.d.ts +19 -0
- package/dist/types/utils/view-utils.d.ts +101 -0
- package/dist/types/viewer/cesium-view-monitor.d.ts +35 -0
- package/dist/types/viewer/viewer-event-tracker.d.ts +47 -0
- package/dist/types/viewer/viewer-utils.d.ts +88 -0
- package/dist/types/widgets/common/draw-3d-polygon.d.ts +62 -0
- package/dist/types/widgets/common/draw-3d-polyline.d.ts +50 -0
- package/dist/types/widgets/common/measure-creator.d.ts +60 -0
- package/dist/types/widgets/common/walkthrough.d.ts +37 -0
- package/dist/types/widgets/controls-view-bar/widget-control-view-bar-fullscreen.d.ts +10 -0
- package/dist/types/widgets/controls-view-bar/widget-control-view-bar-search.d.ts +18 -0
- package/dist/types/widgets/controls-view-bar/widget-control-view-bar.d.ts +23 -0
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +11 -0
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-user.d.ts +24 -0
- package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab.d.ts +17 -0
- package/dist/types/widgets/widget-bookmarks.d.ts +40 -0
- package/dist/types/widgets/widget-branding.d.ts +15 -0
- package/dist/types/widgets/widget-cursorbar.d.ts +48 -0
- package/dist/types/widgets/widget-embedded-info-view.d.ts +13 -0
- package/dist/types/widgets/widget-info-view.d.ts +21 -0
- package/dist/types/widgets/widget-left-panel.d.ts +73 -0
- package/dist/types/widgets/widget-nav-compass.d.ts +27 -0
- package/dist/types/widgets/widget-view-bar.d.ts +37 -0
- package/dist/types/widgets/widget.d.ts +29 -0
- package/package.json +1 -1
|
@@ -0,0 +1,703 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EntityLabel = void 0;
|
|
4
|
+
const Cesium = require("cesium");
|
|
5
|
+
const entity_utils_1 = require("../../../utils/entity-utils");
|
|
6
|
+
const js_utils_1 = require("../../../internal/js-utils");
|
|
7
|
+
const drawing_utils_1 = require("../../../utils/drawing-utils");
|
|
8
|
+
const measure_utils_1 = require("../../../utils/measure-utils");
|
|
9
|
+
const bruce_models_1 = require("bruce-models");
|
|
10
|
+
/**
|
|
11
|
+
* Returns cesium property's value.
|
|
12
|
+
* This will check if it's one that changes over time, or just a fixed value.
|
|
13
|
+
* Eg: const pos3d = getValue<Cesium.Cartesian3>(cViewer, cEntity.point.position);
|
|
14
|
+
* @param viewer
|
|
15
|
+
* @param obj
|
|
16
|
+
*/
|
|
17
|
+
function getValue(viewer, obj) {
|
|
18
|
+
if (obj === null || obj === void 0 ? void 0 : obj.getValue) {
|
|
19
|
+
let date = viewer.scene.lastRenderTime;
|
|
20
|
+
if (!date) {
|
|
21
|
+
date = viewer.clock.currentTime;
|
|
22
|
+
}
|
|
23
|
+
return obj.getValue(date);
|
|
24
|
+
}
|
|
25
|
+
return obj;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Util for generating labels within cesium space on entities.
|
|
29
|
+
*/
|
|
30
|
+
var EntityLabel;
|
|
31
|
+
(function (EntityLabel) {
|
|
32
|
+
// Key where the label instance is stored within the cesium entity.
|
|
33
|
+
// Eg: rego[ATTACH_KEY] = new EntityLabel(...);
|
|
34
|
+
EntityLabel.ATTACH_KEY = "nextspace-navigator-entity-label";
|
|
35
|
+
class Label {
|
|
36
|
+
get Rego() {
|
|
37
|
+
return this.rego;
|
|
38
|
+
}
|
|
39
|
+
get Disposed() {
|
|
40
|
+
return this.disposed;
|
|
41
|
+
}
|
|
42
|
+
get pos3d() {
|
|
43
|
+
return this._pos3d;
|
|
44
|
+
}
|
|
45
|
+
set pos3d(val) {
|
|
46
|
+
this._pos3d = val;
|
|
47
|
+
this.prePositioned = !isNaN(val === null || val === void 0 ? void 0 : val.x);
|
|
48
|
+
this.createLabel(val);
|
|
49
|
+
}
|
|
50
|
+
constructor(params) {
|
|
51
|
+
var _a;
|
|
52
|
+
// Counter to help differentiate between createLabel calls.
|
|
53
|
+
this.counter = 0;
|
|
54
|
+
// The label element itself.
|
|
55
|
+
this.label = null;
|
|
56
|
+
// Callback to kill render listener.
|
|
57
|
+
this.renderRemoval = null;
|
|
58
|
+
// Callback to kill terrain listener.
|
|
59
|
+
this.terrChangedRemoval = null;
|
|
60
|
+
// Indicates the label was disposed and any actions will be ignored.
|
|
61
|
+
this.disposed = false;
|
|
62
|
+
// Calculated pos3d for the label.
|
|
63
|
+
// Override to make it draw at a different position.
|
|
64
|
+
this._pos3d = null;
|
|
65
|
+
this.prePositioned = false;
|
|
66
|
+
// If the entity name is not loaded-in, we'll wait a moment then request the information.
|
|
67
|
+
// We wait a moment to avoid the user quickly dragging their mouse over entities and spamming requests.
|
|
68
|
+
this.loadTimeout = null;
|
|
69
|
+
this.loadedName = false;
|
|
70
|
+
this.line = null;
|
|
71
|
+
// Null = not attempted to load.
|
|
72
|
+
this.additionalTexts = null;
|
|
73
|
+
this.rego = params.rego;
|
|
74
|
+
this.viewer = params.viewer;
|
|
75
|
+
this.api = params.api;
|
|
76
|
+
this.visualRegister = params.visualRegister;
|
|
77
|
+
this.prePositioned = !isNaN((_a = params.pos3d) === null || _a === void 0 ? void 0 : _a.x);
|
|
78
|
+
this.createLabel(params.pos3d);
|
|
79
|
+
if (!params.api && !bruce_models_1.ENVIRONMENT.IS_SELF_MANAGED) {
|
|
80
|
+
params.api = bruce_models_1.ENVIRONMENT.Api().GetBruceApi();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Loads the Entity's name and updates the corresponding visual rego.
|
|
85
|
+
*/
|
|
86
|
+
async loadName() {
|
|
87
|
+
if (this.loadedName) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
if (this.api) {
|
|
92
|
+
const rego = this.rego;
|
|
93
|
+
this.rego.name = await bruce_models_1.Entity.CalculateNameAsync({
|
|
94
|
+
api: this.api,
|
|
95
|
+
entity: null,
|
|
96
|
+
entityId: rego.entityId,
|
|
97
|
+
defaultToId: false
|
|
98
|
+
});
|
|
99
|
+
if (!this.rego.name) {
|
|
100
|
+
this.rego.name = "Unnamed Entity";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
console.error(e);
|
|
106
|
+
}
|
|
107
|
+
this.loadedName = true;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Disposes label and marks instance as disposed.
|
|
111
|
+
* Recalling will be ignored.
|
|
112
|
+
*/
|
|
113
|
+
Dispose() {
|
|
114
|
+
if (this.disposed) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.disposed = true;
|
|
118
|
+
this.removeLabel();
|
|
119
|
+
clearTimeout(this.loadTimeout);
|
|
120
|
+
this.loadTimeout = null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Creates cesium entity for the label if one does not exist.
|
|
124
|
+
* @param starterPos3d optional position to create label at. Ignored for billboard labels.
|
|
125
|
+
*/
|
|
126
|
+
async createLabel(starterPos3d) {
|
|
127
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
128
|
+
this.removeLabel();
|
|
129
|
+
let pos3d = starterPos3d ? starterPos3d.clone() : null;
|
|
130
|
+
const counter = ++this.counter;
|
|
131
|
+
if (this.disposed) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
let sizeInM = 0;
|
|
135
|
+
let heightRef = null;
|
|
136
|
+
let pixelOffset = new Cesium.Cartesian2(0, -5);
|
|
137
|
+
if (!isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
138
|
+
heightRef = Cesium.HeightReference.NONE;
|
|
139
|
+
pixelOffset.y = -15;
|
|
140
|
+
}
|
|
141
|
+
const visual = (_a = this.rego) === null || _a === void 0 ? void 0 : _a.visual;
|
|
142
|
+
// If pos3d is already set we'll run through the visuals to figure out the entity's size.
|
|
143
|
+
// If unset then we'll use the entity's position to draw the label.
|
|
144
|
+
if (visual && visual instanceof Cesium.Entity) {
|
|
145
|
+
if (!this.prePositioned && visual.polygon) {
|
|
146
|
+
const hierarchy = getValue(this.viewer, visual.polygon.hierarchy);
|
|
147
|
+
if ((_b = hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions) === null || _b === void 0 ? void 0 : _b.length) {
|
|
148
|
+
const posses = [].concat(hierarchy.positions);
|
|
149
|
+
try {
|
|
150
|
+
sizeInM = (_c = measure_utils_1.MeasureUtils.MeasurePolygon({
|
|
151
|
+
posses: posses
|
|
152
|
+
})) === null || _c === void 0 ? void 0 : _c.area;
|
|
153
|
+
if (isNaN(sizeInM)) {
|
|
154
|
+
sizeInM = 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
console.error("Failed to measure polygon", e);
|
|
159
|
+
}
|
|
160
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
161
|
+
heightRef = getValue(this.viewer, visual.polygon.heightReference);
|
|
162
|
+
if (bruce_models_1.Cartes.IsRing3Closed(posses)) {
|
|
163
|
+
posses.pop();
|
|
164
|
+
}
|
|
165
|
+
// We'll get 3 points from the polygon and use the center of them.
|
|
166
|
+
const centerIndex = Math.floor(posses.length / 2);
|
|
167
|
+
if (posses.length >= 3) {
|
|
168
|
+
const pos1 = posses[centerIndex];
|
|
169
|
+
const pos2 = posses[0];
|
|
170
|
+
const pos3 = posses[posses.length - 1];
|
|
171
|
+
if (pos1 && pos2 && pos3) {
|
|
172
|
+
pos3d = Cesium.Cartesian3.midpoint(pos1, pos2, new Cesium.Cartesian3());
|
|
173
|
+
pos3d = Cesium.Cartesian3.midpoint(pos3d, pos3, new Cesium.Cartesian3());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
177
|
+
pos3d = posses[centerIndex];
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (!this.prePositioned && visual.polyline) {
|
|
183
|
+
const posses = getValue(this.viewer, visual.polyline.positions);
|
|
184
|
+
if (posses === null || posses === void 0 ? void 0 : posses.length) {
|
|
185
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
186
|
+
const isClamped = getValue(this.viewer, visual.polyline.clampToGround);
|
|
187
|
+
heightRef = isClamped == false ? Cesium.HeightReference.NONE : Cesium.HeightReference.CLAMP_TO_GROUND;
|
|
188
|
+
// Center of the line.
|
|
189
|
+
const centerIndex = Math.floor(posses.length / 2);
|
|
190
|
+
pos3d = posses[centerIndex];
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
sizeInM = (_d = measure_utils_1.MeasureUtils.MeasurePolyline({
|
|
194
|
+
posses: posses
|
|
195
|
+
})) === null || _d === void 0 ? void 0 : _d.totalLength;
|
|
196
|
+
if (isNaN(sizeInM)) {
|
|
197
|
+
sizeInM = 0;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
console.error("Failed to measure polyline", e);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else if (visual.model) {
|
|
206
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
207
|
+
heightRef = getValue(this.viewer, visual.model.heightReference);
|
|
208
|
+
}
|
|
209
|
+
const model = visual.model;
|
|
210
|
+
if (model._radiusLoaded && model._radius > 0) {
|
|
211
|
+
sizeInM = model._radius;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else if (visual.point) {
|
|
215
|
+
heightRef = getValue(this.viewer, visual.point.heightReference);
|
|
216
|
+
const size = getValue(this.viewer, visual.point.pixelSize);
|
|
217
|
+
if (size) {
|
|
218
|
+
pixelOffset.y = -(size / 2);
|
|
219
|
+
pixelOffset.y -= 5;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else if (visual.billboard) {
|
|
223
|
+
heightRef = getValue(this.viewer, visual.billboard.heightReference);
|
|
224
|
+
// Height of billboard is used to offset label.
|
|
225
|
+
const height = visual.billboard._billboardSize;
|
|
226
|
+
if (height) {
|
|
227
|
+
const scale = (0, js_utils_1.EnsureNumber)(getValue(this.viewer, visual.billboard.scale), 1);
|
|
228
|
+
pixelOffset.y = -((height * scale) / 2);
|
|
229
|
+
pixelOffset.y -= 5;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else if (!this.prePositioned && visual.corridor) {
|
|
233
|
+
const posses = getValue(this.viewer, visual.corridor.positions);
|
|
234
|
+
if (posses === null || posses === void 0 ? void 0 : posses.length) {
|
|
235
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
236
|
+
heightRef = getValue(this.viewer, visual.corridor.heightReference);
|
|
237
|
+
// Center of the line.
|
|
238
|
+
const centerIndex = Math.floor(posses.length / 2);
|
|
239
|
+
pos3d = posses[centerIndex];
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
sizeInM = (_e = measure_utils_1.MeasureUtils.MeasurePolyline({
|
|
243
|
+
posses: posses
|
|
244
|
+
})) === null || _e === void 0 ? void 0 : _e.totalLength;
|
|
245
|
+
if (isNaN(sizeInM)) {
|
|
246
|
+
sizeInM = 0;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
console.error("Failed to measure polyline", e);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (visual.ellipse) {
|
|
255
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
256
|
+
heightRef = getValue(this.viewer, visual.ellipse.heightReference);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (visual.billboard || visual.point || isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
260
|
+
pos3d = getValue(this.viewer, visual.position);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
264
|
+
pos3d = await entity_utils_1.EntityUtils.GetPosAsync({
|
|
265
|
+
viewer: this.viewer,
|
|
266
|
+
api: this.api,
|
|
267
|
+
entityId: (_f = this.rego) === null || _f === void 0 ? void 0 : _f.entityId,
|
|
268
|
+
returnHeightRef: Cesium.HeightReference.NONE,
|
|
269
|
+
recordHeightRef: heightRef == null || isNaN(heightRef) ? Cesium.HeightReference.NONE : heightRef,
|
|
270
|
+
tilesetId: (_g = this.rego) === null || _g === void 0 ? void 0 : _g.tilesetId,
|
|
271
|
+
visualRegister: this.visualRegister
|
|
272
|
+
});
|
|
273
|
+
heightRef = Cesium.HeightReference.NONE;
|
|
274
|
+
if (this.counter != counter || this.disposed) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
pos3d = drawing_utils_1.DrawingUtils.EnsurePosHeight({
|
|
282
|
+
desiredHeightRef: Cesium.HeightReference.NONE,
|
|
283
|
+
heightRef: heightRef,
|
|
284
|
+
pos3d: pos3d,
|
|
285
|
+
viewer: this.viewer
|
|
286
|
+
});
|
|
287
|
+
if (isNaN(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
this._pos3d = pos3d;
|
|
291
|
+
let text = "Unknown Entity";
|
|
292
|
+
const additionalTexts = this.additionalTexts ? this.additionalTexts : [];
|
|
293
|
+
if (this.rego) {
|
|
294
|
+
if (this.rego.relation) {
|
|
295
|
+
let type = this.rego.relation.RelationType;
|
|
296
|
+
if (!type && this.rego.relation["Relation.Type.ID"]) {
|
|
297
|
+
try {
|
|
298
|
+
type = (await bruce_models_1.EntityRelationType.Get({
|
|
299
|
+
api: this.api,
|
|
300
|
+
relationTypeId: this.rego.relation["Relation.Type.ID"]
|
|
301
|
+
})).relationType;
|
|
302
|
+
}
|
|
303
|
+
catch (e) {
|
|
304
|
+
console.error(e);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (type) {
|
|
308
|
+
text = type.Name ? type.Name : (type.ForwardName + "/" + type.ReverseName);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
text = "Unknown Relationship";
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else if (this.rego.name) {
|
|
315
|
+
text = this.rego.name;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
text = "Unnamed Entity";
|
|
319
|
+
}
|
|
320
|
+
// Load any missing information and re-render the label afterwards.
|
|
321
|
+
if (this.additionalTexts == null || (text == "Unnamed Entity" && !this.loadedName)) {
|
|
322
|
+
let loadName = false;
|
|
323
|
+
if ((text == "Unnamed Entity" && !this.loadedName)) {
|
|
324
|
+
text = "Loading...";
|
|
325
|
+
loadName = true;
|
|
326
|
+
}
|
|
327
|
+
clearTimeout(this.loadTimeout);
|
|
328
|
+
this.loadTimeout = setTimeout(async () => {
|
|
329
|
+
var _a, _b, _c, _d;
|
|
330
|
+
if (this.disposed || this.counter != counter) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// Load additional texts to display alongside the name.
|
|
334
|
+
if (this.additionalTexts == null) {
|
|
335
|
+
const additionalTexts = [];
|
|
336
|
+
// Rego might not have a known or default Entity Type. Eg: OSM building.
|
|
337
|
+
if (this.rego.entityTypeId) {
|
|
338
|
+
let entityType = null;
|
|
339
|
+
try {
|
|
340
|
+
const data = await bruce_models_1.EntityType.Get({
|
|
341
|
+
api: this.api,
|
|
342
|
+
entityTypeId: this.rego.entityTypeId
|
|
343
|
+
});
|
|
344
|
+
if (data === null || data === void 0 ? void 0 : data.entityType) {
|
|
345
|
+
entityType = data.entityType;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Type could be deleted, however we'll just catch that to show a label instead of nothing.
|
|
349
|
+
// This is not unusual for Tilesets where the Type that is baked might be outdated.
|
|
350
|
+
catch (e) {
|
|
351
|
+
console.error(e);
|
|
352
|
+
}
|
|
353
|
+
// Type could be deleted, however we'll just catch that to show a label instead of nothing.
|
|
354
|
+
// This is not unusual for Tilesets where the Type that is baked might be outdated.
|
|
355
|
+
if (entityType) {
|
|
356
|
+
const attributes = (_b = (_a = entityType.VisualSettings) === null || _a === void 0 ? void 0 : _a.label) === null || _b === void 0 ? void 0 : _b.attributes;
|
|
357
|
+
if (attributes) {
|
|
358
|
+
try {
|
|
359
|
+
const { entity } = await bruce_models_1.Entity.Get({
|
|
360
|
+
api: this.api,
|
|
361
|
+
entityId: this.rego.entityId,
|
|
362
|
+
scenario: ((_c = this.rego.outline) === null || _c === void 0 ? void 0 : _c.length) ? (_d = this.rego.outline.find(x => !!x.Scenario)) === null || _d === void 0 ? void 0 : _d.Scenario : null,
|
|
363
|
+
schemaId: this.rego.schema,
|
|
364
|
+
migrated: true
|
|
365
|
+
});
|
|
366
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
367
|
+
const value = bruce_models_1.Entity.GetValue({
|
|
368
|
+
entity: entity,
|
|
369
|
+
path: attributes[i]
|
|
370
|
+
});
|
|
371
|
+
if (value) {
|
|
372
|
+
additionalTexts.push(value);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Entity doesn't exist.
|
|
377
|
+
// Likely a graphic with an ID that points to no record.
|
|
378
|
+
catch (e) {
|
|
379
|
+
console.error(e);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
this.additionalTexts = additionalTexts;
|
|
385
|
+
}
|
|
386
|
+
// Load name and apply to rego.
|
|
387
|
+
if (loadName) {
|
|
388
|
+
await this.loadName();
|
|
389
|
+
}
|
|
390
|
+
if (this.disposed || this.counter != counter) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
this.createLabel(starterPos3d);
|
|
394
|
+
}, 120);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (this.disposed || this.counter != counter) {
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
const labelContent = `
|
|
401
|
+
<div>
|
|
402
|
+
<div style="margin-bottom:4px">${text}</div>
|
|
403
|
+
${additionalTexts.map(attr => `<div>${attr}</div>`).join('')}
|
|
404
|
+
</div>
|
|
405
|
+
`;
|
|
406
|
+
let ele = null;
|
|
407
|
+
let lineEle = null;
|
|
408
|
+
if (this.label) {
|
|
409
|
+
ele = this.label;
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
ele = document.createElement("div");
|
|
413
|
+
ele.innerHTML = labelContent;
|
|
414
|
+
ele.setAttribute("style", `
|
|
415
|
+
position: absolute;
|
|
416
|
+
z-index: 0;
|
|
417
|
+
display: none;
|
|
418
|
+
pointer-events: none;
|
|
419
|
+
padding: 6px 8px;
|
|
420
|
+
border-radius: 6px;
|
|
421
|
+
font-family: Arial;
|
|
422
|
+
font-size: 13px;
|
|
423
|
+
border-radius: 9px;
|
|
424
|
+
color: #ffffff;
|
|
425
|
+
text-shadow: 0 0 5px rgba(0, 0, 0, 0.8);
|
|
426
|
+
}`);
|
|
427
|
+
this.label = ele;
|
|
428
|
+
this.viewer.container.appendChild(ele);
|
|
429
|
+
}
|
|
430
|
+
if (this.line) {
|
|
431
|
+
lineEle = this.line;
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
lineEle = document.createElement("div");
|
|
435
|
+
lineEle.setAttribute("style", `
|
|
436
|
+
position: absolute;
|
|
437
|
+
z-index: 0;
|
|
438
|
+
display: none;
|
|
439
|
+
pointer-events: none;
|
|
440
|
+
width: 2px;
|
|
441
|
+
background: rgba(255, 255, 255, 0.8);
|
|
442
|
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
|
443
|
+
`);
|
|
444
|
+
this.line = lineEle;
|
|
445
|
+
// We'll draw a ball at the bottom of the line to make it look like it's connecting to the entity.
|
|
446
|
+
const lineEleNode = document.createElement("div");
|
|
447
|
+
lineEleNode.setAttribute("style", `
|
|
448
|
+
position: absolute;
|
|
449
|
+
pointer-events: none;
|
|
450
|
+
width: 5px;
|
|
451
|
+
height: 5px;
|
|
452
|
+
background: rgba(255, 255, 255, 0.8);
|
|
453
|
+
border-radius: 50%;
|
|
454
|
+
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
|
|
455
|
+
top: -2px;
|
|
456
|
+
left: -2px;
|
|
457
|
+
`);
|
|
458
|
+
lineEle.appendChild(lineEleNode);
|
|
459
|
+
this.viewer.container.appendChild(lineEle);
|
|
460
|
+
}
|
|
461
|
+
let _lastDistance = null;
|
|
462
|
+
let _lastCameraPos = null;
|
|
463
|
+
const getDistance = () => {
|
|
464
|
+
var _a;
|
|
465
|
+
if (this.disposed) {
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
const cameraPos = (_a = this.viewer.camera) === null || _a === void 0 ? void 0 : _a.position;
|
|
469
|
+
if (isNaN(cameraPos === null || cameraPos === void 0 ? void 0 : cameraPos.x)) {
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
// If camera hasn't moved much then we can use the last distance.
|
|
473
|
+
const TOLERANCE = 0.1;
|
|
474
|
+
if (_lastCameraPos) {
|
|
475
|
+
const totalMovement = Math.abs(_lastCameraPos.x - cameraPos.x) +
|
|
476
|
+
Math.abs(_lastCameraPos.y - cameraPos.y) +
|
|
477
|
+
Math.abs(_lastCameraPos.z - cameraPos.z);
|
|
478
|
+
if (totalMovement < TOLERANCE) {
|
|
479
|
+
return _lastDistance;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
const distance = Cesium.Cartesian3.distance(cameraPos, this._pos3d);
|
|
483
|
+
_lastDistance = distance;
|
|
484
|
+
_lastCameraPos = cameraPos.clone();
|
|
485
|
+
return distance;
|
|
486
|
+
};
|
|
487
|
+
let MAX_DISTANCE = Math.max(15000, sizeInM * 35);
|
|
488
|
+
if (visual && visual instanceof Cesium.Entity) {
|
|
489
|
+
// Consistent sized things.
|
|
490
|
+
if (visual.polyline || visual.billboard || visual.point) {
|
|
491
|
+
MAX_DISTANCE = Infinity;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
const updateLabel = () => {
|
|
495
|
+
var _a;
|
|
496
|
+
if (this.disposed || isNaN((_a = this._pos3d) === null || _a === void 0 ? void 0 : _a.x)) {
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
if (!this.viewer || this.viewer.isDestroyed()) {
|
|
500
|
+
this.Dispose();
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
const distance = getDistance();
|
|
504
|
+
if (isNaN(distance) || (!this.prePositioned && distance >= MAX_DISTANCE)) {
|
|
505
|
+
ele.style.display = "none";
|
|
506
|
+
lineEle.style.display = "none";
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
const CESIUM = Cesium;
|
|
510
|
+
const _3dTo2D = Cesium.SceneTransforms.hasOwnProperty("wgs84ToWindowCoordinates") ? CESIUM.SceneTransforms.wgs84ToWindowCoordinates : CESIUM.SceneTransforms.worldToWindowCoordinates;
|
|
511
|
+
const lineStartPos2d = _3dTo2D(this.viewer.scene, this._pos3d);
|
|
512
|
+
// Invalid point.
|
|
513
|
+
if (isNaN(lineStartPos2d === null || lineStartPos2d === void 0 ? void 0 : lineStartPos2d.x)) {
|
|
514
|
+
ele.style.transform = "";
|
|
515
|
+
ele.style.opacity = "0";
|
|
516
|
+
lineEle.style.display = "none";
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
// Offset start by the pixel offset.
|
|
520
|
+
lineStartPos2d.x += pixelOffset.x;
|
|
521
|
+
lineStartPos2d.y += pixelOffset.y;
|
|
522
|
+
ele.style.display = "block";
|
|
523
|
+
lineEle.style.display = "block";
|
|
524
|
+
// Calculate opacity to apply based on distance between camera and pos3d.
|
|
525
|
+
// We'll make the label less transparent when further away.
|
|
526
|
+
const opacity = this.prePositioned || MAX_DISTANCE == Infinity ? 1 : 1 - (distance / MAX_DISTANCE);
|
|
527
|
+
if (opacity && opacity > 0.15) {
|
|
528
|
+
this.label.style.opacity = `${opacity}`;
|
|
529
|
+
// Calc where the line should end.
|
|
530
|
+
// We get the pos3d and add 'n' to it, then turn it back into 2d.
|
|
531
|
+
let lineEndPos3d = this._pos3d.clone();
|
|
532
|
+
const lineEndPoint = Cesium.Cartographic.fromCartesian(lineEndPos3d);
|
|
533
|
+
let addHeight = null;
|
|
534
|
+
// If we're pre-positioned that means the user is hovering over the entity.
|
|
535
|
+
// We will keep the height low to avoid looking goofy.
|
|
536
|
+
if (this.prePositioned) {
|
|
537
|
+
addHeight = distance / 24;
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
// If known then calculate based on size.
|
|
541
|
+
// If we're close then we'll favour the distance over the size.
|
|
542
|
+
if (sizeInM && sizeInM > 0) {
|
|
543
|
+
addHeight = Math.min(distance / 5, sizeInM * 1.2);
|
|
544
|
+
}
|
|
545
|
+
// If unknown then calculate based on camera height or distance.
|
|
546
|
+
// Radius is unknown for Tileset things. We could bake the radius in possibly as a feature property.
|
|
547
|
+
// We have to make it work for both labels against tall skyscrapers, and up-close assembly models.
|
|
548
|
+
else {
|
|
549
|
+
addHeight = Math.min(distance, this.viewer.camera.positionCartographic.height) / 7;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
// The ratio is roughly 1m = 11px on the screen.
|
|
553
|
+
// So if we want to add additional labels then we'll need to adjust the height.
|
|
554
|
+
if (additionalTexts === null || additionalTexts === void 0 ? void 0 : additionalTexts.length) {
|
|
555
|
+
// Each additional text is about 16px tall.
|
|
556
|
+
// So we get the total px height and divide by 11 to get the meters.
|
|
557
|
+
addHeight += ((additionalTexts.length * 16) / 11);
|
|
558
|
+
}
|
|
559
|
+
// Safety check.
|
|
560
|
+
if (!addHeight || addHeight <= 0) {
|
|
561
|
+
addHeight = 0.001;
|
|
562
|
+
}
|
|
563
|
+
lineEndPoint.height += addHeight;
|
|
564
|
+
lineEndPos3d = Cesium.Cartographic.toCartesian(lineEndPoint);
|
|
565
|
+
const CESIUM = Cesium;
|
|
566
|
+
const _3dTo2D = Cesium.SceneTransforms.hasOwnProperty("wgs84ToWindowCoordinates") ? CESIUM.SceneTransforms.wgs84ToWindowCoordinates : CESIUM.SceneTransforms.worldToWindowCoordinates;
|
|
567
|
+
let lineEndPos2d = _3dTo2D(this.viewer.scene, lineEndPos3d);
|
|
568
|
+
// Invalid point.
|
|
569
|
+
if (isNaN(lineEndPos2d === null || lineEndPos2d === void 0 ? void 0 : lineEndPos2d.x)) {
|
|
570
|
+
ele.style.transform = "";
|
|
571
|
+
ele.style.opacity = "0";
|
|
572
|
+
lineEle.style.display = "none";
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
// Offset end by the pixel offset.
|
|
576
|
+
lineEndPos2d.x += pixelOffset.x;
|
|
577
|
+
lineEndPos2d.y += pixelOffset.y;
|
|
578
|
+
// If out of the screen then we can hide it.
|
|
579
|
+
const startOutOfScreen = (lineStartPos2d.x < 0 || lineStartPos2d.x > this.viewer.canvas.clientWidth ||
|
|
580
|
+
lineStartPos2d.y < 0 || lineStartPos2d.y > this.viewer.canvas.clientHeight);
|
|
581
|
+
const endOutOfScreen = (lineEndPos2d.x < 0 || lineEndPos2d.x > this.viewer.canvas.clientWidth ||
|
|
582
|
+
lineEndPos2d.y < 0 || lineEndPos2d.y > this.viewer.canvas.clientHeight);
|
|
583
|
+
if (startOutOfScreen && endOutOfScreen) {
|
|
584
|
+
ele.style.transform = "";
|
|
585
|
+
ele.style.opacity = "0";
|
|
586
|
+
lineEle.style.display = "none";
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
// Position the label above the line end point.
|
|
590
|
+
this.label.style.left = `${lineEndPos2d.x}px`;
|
|
591
|
+
this.label.style.top = `${lineEndPos2d.y}px`;
|
|
592
|
+
// Update line position and size.
|
|
593
|
+
const dx = lineEndPos2d.x - lineStartPos2d.x;
|
|
594
|
+
const dy = lineEndPos2d.y - lineStartPos2d.y;
|
|
595
|
+
const length = Math.sqrt(dx * dx + dy * dy);
|
|
596
|
+
const angle = Math.atan2(dy, dx) - Math.PI / 2;
|
|
597
|
+
this.line.style.left = `${lineStartPos2d.x}px`;
|
|
598
|
+
this.line.style.top = `${lineStartPos2d.y}px`;
|
|
599
|
+
this.line.style.height = `${length}px`;
|
|
600
|
+
this.line.style.transform = `rotate(${angle}rad)`;
|
|
601
|
+
this.line.style.transformOrigin = 'top center';
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
ele.style.transform = "";
|
|
605
|
+
ele.style.opacity = "0";
|
|
606
|
+
lineEle.style.display = "none";
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
this.renderRemoval = this.viewer.scene.postUpdate.addEventListener(updateLabel);
|
|
610
|
+
updateLabel();
|
|
611
|
+
// If terrain changes then we'll re-call createLabel as the position may have changed.
|
|
612
|
+
let terrTimeout = null;
|
|
613
|
+
this.terrChangedRemoval = this.viewer.scene.terrainProviderChanged.addEventListener(() => {
|
|
614
|
+
clearTimeout(terrTimeout);
|
|
615
|
+
if (this.disposed || this.counter != counter) {
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
terrTimeout = setTimeout(() => {
|
|
619
|
+
if (this.disposed || counter != this.counter) {
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
this.createLabel(starterPos3d);
|
|
623
|
+
}, 2500);
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Removes label from the viewer and unsubscribes from events.
|
|
628
|
+
*/
|
|
629
|
+
removeLabel() {
|
|
630
|
+
if (this.label &&
|
|
631
|
+
this.label.parentElement) {
|
|
632
|
+
this.label.parentElement.removeChild(this.label);
|
|
633
|
+
this.label = null;
|
|
634
|
+
}
|
|
635
|
+
if (this.line && this.line.parentElement) {
|
|
636
|
+
this.line.parentElement.removeChild(this.line);
|
|
637
|
+
this.line = null;
|
|
638
|
+
}
|
|
639
|
+
if (this.renderRemoval) {
|
|
640
|
+
this.renderRemoval();
|
|
641
|
+
this.renderRemoval = null;
|
|
642
|
+
}
|
|
643
|
+
if (this.terrChangedRemoval) {
|
|
644
|
+
this.terrChangedRemoval();
|
|
645
|
+
this.terrChangedRemoval = null;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
EntityLabel.Label = Label;
|
|
650
|
+
/**
|
|
651
|
+
* Creates an entity label for a given rego.
|
|
652
|
+
* If one exists then the action is ignored.
|
|
653
|
+
*/
|
|
654
|
+
function Attach(params) {
|
|
655
|
+
const { rego, viewer, pos3d, visualRegister, api } = params;
|
|
656
|
+
if (!rego || !viewer || rego[EntityLabel.ATTACH_KEY]) {
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
rego[EntityLabel.ATTACH_KEY] = new Label({
|
|
660
|
+
rego,
|
|
661
|
+
viewer,
|
|
662
|
+
pos3d,
|
|
663
|
+
visualRegister,
|
|
664
|
+
api
|
|
665
|
+
});
|
|
666
|
+
return rego[EntityLabel.ATTACH_KEY];
|
|
667
|
+
}
|
|
668
|
+
EntityLabel.Attach = Attach;
|
|
669
|
+
/**
|
|
670
|
+
* Removes an entity label from a given rego.
|
|
671
|
+
* If one doesn't exist then the action is ignored.
|
|
672
|
+
*/
|
|
673
|
+
function Detatch(params) {
|
|
674
|
+
var _a, _b, _c;
|
|
675
|
+
let { rego, label } = params;
|
|
676
|
+
if (!rego && label) {
|
|
677
|
+
rego = label.Rego;
|
|
678
|
+
}
|
|
679
|
+
if (!rego || !rego[EntityLabel.ATTACH_KEY]) {
|
|
680
|
+
if (label) {
|
|
681
|
+
(_a = label.Dispose) === null || _a === void 0 ? void 0 : _a.call(label);
|
|
682
|
+
}
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
(_c = (_b = rego[EntityLabel.ATTACH_KEY]).Dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
686
|
+
rego[EntityLabel.ATTACH_KEY] = null;
|
|
687
|
+
}
|
|
688
|
+
EntityLabel.Detatch = Detatch;
|
|
689
|
+
/**
|
|
690
|
+
* Returns label instance from given rego if one exists.
|
|
691
|
+
* @param params
|
|
692
|
+
* @returns
|
|
693
|
+
*/
|
|
694
|
+
function GetLabel(params) {
|
|
695
|
+
const { rego } = params;
|
|
696
|
+
if (!rego) {
|
|
697
|
+
return null;
|
|
698
|
+
}
|
|
699
|
+
return rego[EntityLabel.ATTACH_KEY];
|
|
700
|
+
}
|
|
701
|
+
EntityLabel.GetLabel = GetLabel;
|
|
702
|
+
})(EntityLabel = exports.EntityLabel || (exports.EntityLabel = {}));
|
|
703
|
+
//# sourceMappingURL=entity-label.js.map
|