@openglobus/og 0.18.4 → 0.19.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/README.md +19 -68
- package/css/og.css +308 -45
- package/lib/@openglobus/og.css +1 -1
- package/lib/@openglobus/og.esm.js +1 -1
- package/lib/@openglobus/og.esm.js.map +1 -1
- package/lib/@openglobus/og.umd.js +1 -1
- package/lib/@openglobus/og.umd.js.map +1 -1
- package/lib/js/Globe.d.ts +2 -0
- package/lib/js/Globe.js +3 -1
- package/lib/js/camera/PlanetCamera.d.ts +2 -2
- package/lib/js/camera/PlanetCamera.js +3 -2
- package/lib/js/control/DebugInfo.js +5 -0
- package/lib/js/control/EarthCoordinates.js +2 -2
- package/lib/js/control/LayerSwitcher.d.ts +18 -3
- package/lib/js/control/LayerSwitcher.js +111 -11
- package/lib/js/control/MouseNavigation.d.ts +2 -0
- package/lib/js/control/MouseNavigation.js +15 -15
- package/lib/js/control/elevationProfile/ElevationProfile.d.ts +41 -25
- package/lib/js/control/elevationProfile/ElevationProfile.js +106 -75
- package/lib/js/control/elevationProfile/ElevationProfileButtonsView.d.ts +14 -0
- package/lib/js/control/elevationProfile/ElevationProfileButtonsView.js +61 -0
- package/lib/js/control/elevationProfile/ElevationProfileControl.d.ts +33 -0
- package/lib/js/control/elevationProfile/ElevationProfileControl.js +153 -0
- package/lib/js/control/elevationProfile/ElevationProfileLegend.d.ts +20 -0
- package/lib/js/control/elevationProfile/ElevationProfileLegend.js +82 -0
- package/lib/js/control/elevationProfile/ElevationProfileScene.d.ts +80 -0
- package/lib/js/control/elevationProfile/ElevationProfileScene.js +539 -0
- package/lib/js/control/elevationProfile/ElevationProfileView.d.ts +63 -0
- package/lib/js/control/elevationProfile/ElevationProfileView.js +504 -0
- package/lib/js/control/elevationProfile/PointListDialog.d.ts +12 -0
- package/lib/js/control/elevationProfile/PointListDialog.js +57 -0
- package/lib/js/control/heightRuler/HeightRulerScene.js +1 -1
- package/lib/js/control/index.d.ts +2 -1
- package/lib/js/control/index.js +2 -1
- package/lib/js/control/ruler/RulerScene.js +3 -3
- package/lib/js/control/selection/SelectionScene.js +2 -2
- package/lib/js/entity/Entity.js +5 -1
- package/lib/js/entity/Polyline.js +1 -1
- package/lib/js/layer/GeoImage.js +3 -0
- package/lib/js/layer/Layer.d.ts +18 -4
- package/lib/js/layer/Layer.js +25 -4
- package/lib/js/layer/XYZ.d.ts +0 -1
- package/lib/js/quadTree/Node.d.ts +21 -3
- package/lib/js/quadTree/Node.js +173 -62
- package/lib/js/renderer/Renderer.d.ts +0 -1
- package/lib/js/renderer/Renderer.js +22 -44
- package/lib/js/renderer/RendererEvents.d.ts +1 -0
- package/lib/js/renderer/RendererEvents.js +5 -7
- package/lib/js/scene/Planet.d.ts +33 -4
- package/lib/js/scene/Planet.js +206 -84
- package/lib/js/segment/Segment.d.ts +7 -1
- package/lib/js/segment/Segment.js +40 -12
- package/lib/js/shaders/drawnode.js +21 -2
- package/lib/js/shaders/geoObject.js +26 -18
- package/lib/js/terrain/GlobusTerrain.d.ts +3 -0
- package/lib/js/terrain/GlobusTerrain.js +15 -3
- package/lib/js/terrain/MapboxTerrain.js +29 -29
- package/lib/js/ui/Dialog.js +1 -1
- package/lib/js/utils/TerrainWorker.js +1 -1
- package/lib/js/utils/shared.d.ts +3 -1
- package/lib/js/utils/shared.js +22 -3
- package/package.json +2 -2
- package/lib/js/shaders/pickingMask.d.ts +0 -2
- package/lib/js/shaders/pickingMask.js +0 -22
package/lib/js/Globe.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ interface IGlobeParams {
|
|
|
29
29
|
quadTreeStrategyPrototype?: any;
|
|
30
30
|
maxLoadingRequests?: number;
|
|
31
31
|
atmosphereEnabled?: boolean;
|
|
32
|
+
transitionOpacityEnabled?: boolean;
|
|
32
33
|
terrain?: EmptyTerrain;
|
|
33
34
|
controls?: Control[];
|
|
34
35
|
useEarthNavigation?: boolean;
|
|
@@ -92,6 +93,7 @@ interface IGlobeParams {
|
|
|
92
93
|
* @param {number} [options.msaa=0] - MSAA antialiasing parameter: 2,4,8,16. Default is 0.
|
|
93
94
|
* @param {number} [options.dpi] - Device pixel ratio. Default is current screen DPI.
|
|
94
95
|
* @param {boolean} [options.atmosphereEnabled] - Enables atmosphere effect.
|
|
96
|
+
* @param {boolean} [options.transtitionOpacityEnabled] - Enables terrain smooth opacity transition effect.
|
|
95
97
|
*/
|
|
96
98
|
declare class Globe {
|
|
97
99
|
static __counter__: number;
|
package/lib/js/Globe.js
CHANGED
|
@@ -66,6 +66,7 @@ const PLANET_NAME_PREFIX = "globus_planet_";
|
|
|
66
66
|
* @param {number} [options.msaa=0] - MSAA antialiasing parameter: 2,4,8,16. Default is 0.
|
|
67
67
|
* @param {number} [options.dpi] - Device pixel ratio. Default is current screen DPI.
|
|
68
68
|
* @param {boolean} [options.atmosphereEnabled] - Enables atmosphere effect.
|
|
69
|
+
* @param {boolean} [options.transtitionOpacityEnabled] - Enables terrain smooth opacity transition effect.
|
|
69
70
|
*/
|
|
70
71
|
class Globe {
|
|
71
72
|
constructor(options) {
|
|
@@ -146,7 +147,8 @@ class Globe {
|
|
|
146
147
|
minEqualZoomCameraSlope: options.minEqualZoomCameraSlope,
|
|
147
148
|
quadTreeStrategyPrototype: options.quadTreeStrategyPrototype,
|
|
148
149
|
maxLoadingRequests: options.maxLoadingRequests,
|
|
149
|
-
atmosphereEnabled: options.atmosphereEnabled
|
|
150
|
+
atmosphereEnabled: options.atmosphereEnabled,
|
|
151
|
+
transitionOpacityEnabled: options.transitionOpacityEnabled
|
|
150
152
|
});
|
|
151
153
|
// Attach terrain provider (can be one object or array)
|
|
152
154
|
if (options.terrain) {
|
|
@@ -137,7 +137,7 @@ declare class PlanetCamera extends Camera {
|
|
|
137
137
|
* @param {Number} height - Camera height
|
|
138
138
|
* @returns {Vec3}
|
|
139
139
|
*/
|
|
140
|
-
getExtentPosition(extent: Extent, height?: number): Vec3;
|
|
140
|
+
getExtentPosition(extent: Extent, height?: number | null): Vec3;
|
|
141
141
|
/**
|
|
142
142
|
* View current extent.
|
|
143
143
|
* @public
|
|
@@ -156,7 +156,7 @@ declare class PlanetCamera extends Camera {
|
|
|
156
156
|
* @param {Function} [startCallback] - Callback that calls before the flying begins.
|
|
157
157
|
* @param {Function} [frameCallback] - Each frame callback
|
|
158
158
|
*/
|
|
159
|
-
flyExtent(extent: Extent, height?: number, up?: Vec3, ampl?: number, completeCallback?: Function, startCallback?: Function, frameCallback?: Function): void;
|
|
159
|
+
flyExtent(extent: Extent, height?: number | null, up?: Vec3 | null, ampl?: number | null, completeCallback?: Function | null, startCallback?: Function | null, frameCallback?: Function | null): void;
|
|
160
160
|
viewDistance(cartesian: Vec3, distance?: number): void;
|
|
161
161
|
flyDistance(cartesian: Vec3, distance?: number, ampl?: number, completeCallback?: Function, startCallback?: Function, frameCallback?: Function): void;
|
|
162
162
|
/**
|
|
@@ -133,7 +133,8 @@ class PlanetCamera extends Camera {
|
|
|
133
133
|
* @param {Number} height - Camera height
|
|
134
134
|
* @returns {Vec3}
|
|
135
135
|
*/
|
|
136
|
-
getExtentPosition(extent, height
|
|
136
|
+
getExtentPosition(extent, height) {
|
|
137
|
+
height = height || 0;
|
|
137
138
|
let north = extent.getNorth();
|
|
138
139
|
let south = extent.getSouth();
|
|
139
140
|
let east = extent.getEast();
|
|
@@ -196,7 +197,7 @@ class PlanetCamera extends Camera {
|
|
|
196
197
|
* @param {Function} [frameCallback] - Each frame callback
|
|
197
198
|
*/
|
|
198
199
|
flyExtent(extent, height, up, ampl, completeCallback, startCallback, frameCallback) {
|
|
199
|
-
this.flyCartesian(this.getExtentPosition(extent, height), Vec3.ZERO, up, ampl, completeCallback, startCallback, frameCallback);
|
|
200
|
+
this.flyCartesian(this.getExtentPosition(extent, height), Vec3.ZERO, up, ampl == null ? 1 : ampl, completeCallback, startCallback, frameCallback);
|
|
200
201
|
}
|
|
201
202
|
viewDistance(cartesian, distance = 10000.0) {
|
|
202
203
|
let p0 = this.eye.add(this.getForward().scaleTo(distance));
|
|
@@ -78,6 +78,7 @@ export class DebugInfo extends Control {
|
|
|
78
78
|
this._canvasTiles = new CanvasTiles("Tile grid", {
|
|
79
79
|
visibility: true,
|
|
80
80
|
isBaseLayer: false,
|
|
81
|
+
hideInLayerSwitcher: true,
|
|
81
82
|
drawTile: function (material, applyCanvas) {
|
|
82
83
|
//
|
|
83
84
|
// This is important create canvas here!
|
|
@@ -159,6 +160,10 @@ export class DebugInfo extends Control {
|
|
|
159
160
|
label: "Nodes count",
|
|
160
161
|
frame: () => p._renderedNodes.length
|
|
161
162
|
},
|
|
163
|
+
{
|
|
164
|
+
label: "Planet._fadingNodes",
|
|
165
|
+
frame: () => p._fadingNodes.size
|
|
166
|
+
},
|
|
162
167
|
{
|
|
163
168
|
label: "createdNodes",
|
|
164
169
|
frame: () => p._createdNodesCount
|
|
@@ -51,8 +51,8 @@ export class EarthCoordinates extends Control {
|
|
|
51
51
|
else {
|
|
52
52
|
this._lonSideEl.innerHTML = 'W';
|
|
53
53
|
}
|
|
54
|
-
this._latValEl.innerHTML = Math.abs(lat).toFixed(
|
|
55
|
-
this._lonValEl.innerHTML = Math.abs(lon).toFixed(
|
|
54
|
+
this._latValEl.innerHTML = Math.abs(lat).toFixed(7) + '°';
|
|
55
|
+
this._lonValEl.innerHTML = Math.abs(lon).toFixed(7) + '°';
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
_SHOW_DEGREE(ll) {
|
|
@@ -2,18 +2,33 @@ import { Control, IControlParams } from "./Control";
|
|
|
2
2
|
import { Dialog } from "../ui/Dialog";
|
|
3
3
|
import { Layer } from "../layer/Layer";
|
|
4
4
|
import { ToggleButton } from "../ui/ToggleButton";
|
|
5
|
+
import { IViewParams, View } from "../ui/View";
|
|
5
6
|
interface ILayerSwitcherParams extends IControlParams {
|
|
6
7
|
}
|
|
8
|
+
declare class LayerButtonView extends View<Layer> {
|
|
9
|
+
constructor(params: IViewParams);
|
|
10
|
+
render(params?: any): this;
|
|
11
|
+
protected _onVisibilityChange: (layer: Layer) => void;
|
|
12
|
+
protected _onClick: () => void;
|
|
13
|
+
protected _onDblClick: () => void;
|
|
14
|
+
remove(): void;
|
|
15
|
+
}
|
|
7
16
|
/**
|
|
8
17
|
* Advanced :) layer switcher, includes base layers, overlays, geo images etc. groups.
|
|
9
18
|
* Double click for zoom, drag-and-drop to change zIndex
|
|
10
19
|
*/
|
|
11
20
|
export declare class LayerSwitcher extends Control {
|
|
12
|
-
|
|
13
|
-
protected
|
|
21
|
+
protected _dialog: Dialog<null>;
|
|
22
|
+
protected _toggleBtn: ToggleButton;
|
|
23
|
+
protected _panel: View<null>;
|
|
24
|
+
$baseLayers: HTMLElement | null;
|
|
25
|
+
$overlays: HTMLElement | null;
|
|
26
|
+
_layerViews: LayerButtonView[];
|
|
14
27
|
constructor(options?: ILayerSwitcherParams);
|
|
15
28
|
oninit(): void;
|
|
16
|
-
|
|
29
|
+
protected _initLayers(): void;
|
|
30
|
+
protected _createLayerButton(layer: Layer): LayerButtonView;
|
|
31
|
+
addLayer: (layer: Layer) => void;
|
|
17
32
|
removeLayer: (layer: Layer) => void;
|
|
18
33
|
onactivate(): void;
|
|
19
34
|
ondeactivate(): void;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Control } from "./Control";
|
|
2
2
|
import { Dialog } from "../ui/Dialog";
|
|
3
3
|
import { ToggleButton } from "../ui/ToggleButton";
|
|
4
|
+
import { View } from "../ui/View";
|
|
5
|
+
import { stringTemplate } from "../utils/shared";
|
|
4
6
|
const ICON_BUTTON_SVG = `<?xml version="1.0" encoding="utf-8"?>
|
|
5
7
|
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
|
|
6
8
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
@@ -8,6 +10,60 @@ const ICON_BUTTON_SVG = `<?xml version="1.0" encoding="utf-8"?>
|
|
|
8
10
|
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
|
|
9
11
|
<g><path d="M500,573.5c-3.2,0-6.5-0.6-9.5-1.9L25,375.6c-9.1-3.8-15-12.7-15-22.6s5.9-18.8,15-22.6l465.5-196c6.1-2.5,12.9-2.5,19,0l465.5,196c9.1,3.8,15,12.7,15,22.6s-5.9,18.8-15,22.6l-465.5,196C506.5,572.9,503.2,573.5,500,573.5L500,573.5z M97.6,353L500,522.4L902.4,353L500,183.6L97.6,353L97.6,353z"/><path d="M500,720.5c-3.2,0-6.5-0.6-9.5-1.9L25,522.6c-12.4-5.2-18.3-19.6-13.1-32.1c5.2-12.5,19.6-18.3,32.1-13.1l456,192l456-192c12.4-5.2,26.9,0.6,32.1,13.1s-0.6,26.9-13.1,32.1l-465.5,196C506.5,719.9,503.2,720.5,500,720.5L500,720.5z"/><path d="M500,867.5c-3.2,0-6.5-0.6-9.5-1.9L25,669.6c-12.4-5.2-18.3-19.6-13.1-32.1c5.2-12.5,19.6-18.3,32.1-13.1l456,192l456-192c12.4-5.2,26.9,0.6,32.1,13.1c5.2,12.5-0.6,26.8-13.1,32.1l-465.5,196C506.5,866.9,503.2,867.5,500,867.5L500,867.5z"/></g>
|
|
10
12
|
</svg>`;
|
|
13
|
+
const TEMPLATE = `<div class="og-layerSwitcher">
|
|
14
|
+
<div class="og-layerSwitcher__title">Base Layers</div>
|
|
15
|
+
<div class="og-layerSwitcher__list og-layerSwitcher__baseLayers"></div>
|
|
16
|
+
|
|
17
|
+
<div class="og-layerSwitcher__title">Overlays</div>
|
|
18
|
+
<div class="og-layerSwitcher__list og-layerSwitcher__overlays"></div>
|
|
19
|
+
|
|
20
|
+
</div>`;
|
|
21
|
+
const LAYER_BUTTON_TEMPLATE = `<button title={title} class="og-layerSwitcher__layerButton">{icon}<div class="og-layerSwitcher__name">{name}</div></button>`;
|
|
22
|
+
class LayerButtonView extends View {
|
|
23
|
+
constructor(params) {
|
|
24
|
+
super({
|
|
25
|
+
template: stringTemplate(LAYER_BUTTON_TEMPLATE, {
|
|
26
|
+
title: params.model.name,
|
|
27
|
+
name: params.model.name,
|
|
28
|
+
icon: params.model.iconSrc ? `<img src="${params.model.iconSrc}" />` : ""
|
|
29
|
+
}),
|
|
30
|
+
...params
|
|
31
|
+
});
|
|
32
|
+
this._onVisibilityChange = (layer) => {
|
|
33
|
+
if (this.el) {
|
|
34
|
+
if (this.model.getVisibility()) {
|
|
35
|
+
this.el.classList.add("og-layerSwitcher__visible");
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.el.classList.remove("og-layerSwitcher__visible");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
this._onClick = () => {
|
|
43
|
+
if (this.model.isBaseLayer()) {
|
|
44
|
+
this.model.setVisibility(true);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.model.setVisibility(!this.model.getVisibility());
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
this._onDblClick = () => {
|
|
51
|
+
this.model.flyExtent();
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
render(params) {
|
|
55
|
+
super.render(params);
|
|
56
|
+
this.model.events.on("visibilitychange", this._onVisibilityChange);
|
|
57
|
+
this._onVisibilityChange(this.model);
|
|
58
|
+
this.el.addEventListener("click", this._onClick);
|
|
59
|
+
this.el.addEventListener("dblclick", this._onDblClick);
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
remove() {
|
|
63
|
+
super.remove();
|
|
64
|
+
this.model.events.off("visibilitychange", this._onVisibilityChange);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
11
67
|
/**
|
|
12
68
|
* Advanced :) layer switcher, includes base layers, overlays, geo images etc. groups.
|
|
13
69
|
* Double click for zoom, drag-and-drop to change zIndex
|
|
@@ -18,34 +74,78 @@ export class LayerSwitcher extends Control {
|
|
|
18
74
|
name: "LayerSwitcher",
|
|
19
75
|
...options
|
|
20
76
|
});
|
|
21
|
-
this.
|
|
77
|
+
this.addLayer = (layer) => {
|
|
78
|
+
if (!layer.hideInLayerSwitcher) {
|
|
79
|
+
let layerView = this._createLayerButton(layer);
|
|
80
|
+
this._layerViews.push(layerView);
|
|
81
|
+
if (layer.isBaseLayer()) {
|
|
82
|
+
layerView.appendTo(this.$baseLayers);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
layerView.appendTo(this.$overlays);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
22
88
|
};
|
|
23
89
|
this.removeLayer = (layer) => {
|
|
90
|
+
for (let i = 0; i < this._layerViews.length; i++) {
|
|
91
|
+
let li = this._layerViews[i];
|
|
92
|
+
if (li.model.isEqual(layer)) {
|
|
93
|
+
li.remove();
|
|
94
|
+
this._layerViews.splice(i, 1);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
24
98
|
};
|
|
25
|
-
this.
|
|
99
|
+
this._dialog = new Dialog({
|
|
26
100
|
title: "Layer Switcher",
|
|
27
101
|
top: 15,
|
|
28
102
|
useHide: true,
|
|
29
103
|
visible: false,
|
|
30
|
-
width:
|
|
104
|
+
width: 300,
|
|
105
|
+
maxHeight: 500
|
|
31
106
|
});
|
|
32
|
-
this.
|
|
33
|
-
|
|
107
|
+
this._panel = new View({
|
|
108
|
+
template: TEMPLATE
|
|
109
|
+
});
|
|
110
|
+
this._toggleBtn = new ToggleButton({
|
|
111
|
+
classList: ["og-map-button", "og-layerSwitcher_button"],
|
|
34
112
|
icon: ICON_BUTTON_SVG
|
|
35
113
|
});
|
|
114
|
+
this.$baseLayers = null;
|
|
115
|
+
this.$overlays = null;
|
|
116
|
+
this._layerViews = [];
|
|
36
117
|
}
|
|
37
118
|
oninit() {
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
41
|
-
|
|
119
|
+
this._toggleBtn.appendTo(this.renderer.div);
|
|
120
|
+
this._dialog.appendTo(this.planet.renderer.div);
|
|
121
|
+
this._panel.appendTo(this._dialog.container);
|
|
122
|
+
this.$baseLayers = this._panel.el.querySelector(".og-layerSwitcher__baseLayers");
|
|
123
|
+
this.$overlays = this._panel.el.querySelector(".og-layerSwitcher__overlays");
|
|
124
|
+
this._dialog.setPosition(this.planet.renderer.div.clientWidth - this._dialog.width - 67);
|
|
125
|
+
this._dialog.events.on("visibility", (v) => {
|
|
126
|
+
this._toggleBtn.setActive(v);
|
|
127
|
+
});
|
|
128
|
+
this._toggleBtn.events.on("change", (isActive) => {
|
|
129
|
+
this._dialog.setVisibility(isActive);
|
|
42
130
|
});
|
|
43
|
-
this.planet.events.on("layeradd", this.
|
|
131
|
+
this.planet.events.on("layeradd", this.addLayer, this);
|
|
44
132
|
this.planet.events.on("layerremove", this.removeLayer, this);
|
|
133
|
+
this._initLayers();
|
|
134
|
+
}
|
|
135
|
+
_initLayers() {
|
|
136
|
+
let layers = this.planet.layers;
|
|
137
|
+
for (let i = 0; i < layers.length; i++) {
|
|
138
|
+
this.addLayer(layers[i]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
_createLayerButton(layer) {
|
|
142
|
+
return new LayerButtonView({
|
|
143
|
+
model: layer
|
|
144
|
+
});
|
|
45
145
|
}
|
|
46
146
|
onactivate() {
|
|
47
147
|
}
|
|
48
148
|
ondeactivate() {
|
|
49
|
-
this.
|
|
149
|
+
this._dialog.hide();
|
|
50
150
|
}
|
|
51
151
|
}
|
|
@@ -176,9 +176,7 @@ export class MouseNavigation extends Control {
|
|
|
176
176
|
this.planet.stopFlying();
|
|
177
177
|
this.stopRotation();
|
|
178
178
|
this._deactivate = true;
|
|
179
|
-
this.
|
|
180
|
-
//this.planet!.terrainLock.lock(this._keyLock);
|
|
181
|
-
this.planet._normalMapCreator.lock(this._keyLock);
|
|
179
|
+
this.lockPlanet(true);
|
|
182
180
|
this.stepsForward = MouseNavigation.getMovePointsFromPixelTerrain(this.planet.camera, this.planet, this.stepsCount, this.distDiff, e.pos, e.wheelDelta > 0, e.direction) || null;
|
|
183
181
|
this._wheelDirection = e.wheelDelta;
|
|
184
182
|
if (this.stepsForward) {
|
|
@@ -227,9 +225,7 @@ export class MouseNavigation extends Control {
|
|
|
227
225
|
}
|
|
228
226
|
stopRotation() {
|
|
229
227
|
this.qRot.clear();
|
|
230
|
-
this.
|
|
231
|
-
this.planet.terrainLock.free(this._keyLock);
|
|
232
|
-
this.planet._normalMapCreator.free(this._keyLock);
|
|
228
|
+
this.freePlanet();
|
|
233
229
|
}
|
|
234
230
|
onMouseLeftButtonUp(e) {
|
|
235
231
|
this.renderer.handler.canvas.classList.remove("ogGrabbingPoiner");
|
|
@@ -322,9 +318,7 @@ export class MouseNavigation extends Control {
|
|
|
322
318
|
else {
|
|
323
319
|
if (this._deactivate) {
|
|
324
320
|
this._deactivate = false;
|
|
325
|
-
this.
|
|
326
|
-
this.planet.terrainLock.free(this._keyLock);
|
|
327
|
-
this.planet._normalMapCreator.free(this._keyLock);
|
|
321
|
+
this.freePlanet();
|
|
328
322
|
}
|
|
329
323
|
}
|
|
330
324
|
if (r.events.mouseState.leftButtonDown || !this.scaleRot) {
|
|
@@ -348,15 +342,21 @@ export class MouseNavigation extends Control {
|
|
|
348
342
|
cam._b = rot.mulVec3(cam._b);
|
|
349
343
|
}
|
|
350
344
|
if (cam.eye.distance(prevEye) / cam.getAltitude() > 0.01) {
|
|
351
|
-
this.
|
|
352
|
-
this.planet.terrainLock.lock(this._keyLock);
|
|
353
|
-
this.planet._normalMapCreator.lock(this._keyLock);
|
|
345
|
+
this.lockPlanet();
|
|
354
346
|
}
|
|
355
347
|
else {
|
|
356
|
-
this.
|
|
357
|
-
this.planet.terrainLock.free(this._keyLock);
|
|
358
|
-
this.planet._normalMapCreator.free(this._keyLock);
|
|
348
|
+
this.freePlanet();
|
|
359
349
|
}
|
|
360
350
|
}
|
|
361
351
|
}
|
|
352
|
+
lockPlanet(skipTerrain) {
|
|
353
|
+
this.planet.layerLock.lock(this._keyLock);
|
|
354
|
+
!skipTerrain && this.planet.terrainLock.lock(this._keyLock);
|
|
355
|
+
this.planet._normalMapCreator.lock(this._keyLock);
|
|
356
|
+
}
|
|
357
|
+
freePlanet() {
|
|
358
|
+
this.planet.layerLock.free(this._keyLock);
|
|
359
|
+
this.planet.terrainLock.free(this._keyLock);
|
|
360
|
+
this.planet._normalMapCreator.free(this._keyLock);
|
|
361
|
+
}
|
|
362
362
|
}
|
|
@@ -2,60 +2,76 @@ import { EventsHandler } from '../../Events';
|
|
|
2
2
|
import { Vec3 } from "../../math/Vec3";
|
|
3
3
|
import { Planet } from "../../scene/Planet";
|
|
4
4
|
import { LonLat } from "../../LonLat";
|
|
5
|
-
interface ElevationProfileParams {
|
|
6
|
-
planet
|
|
5
|
+
export interface ElevationProfileParams {
|
|
6
|
+
planet?: Planet;
|
|
7
7
|
}
|
|
8
|
-
interface IProfileData {
|
|
8
|
+
export interface IProfileData {
|
|
9
9
|
dist: number;
|
|
10
10
|
minY: number;
|
|
11
11
|
maxY: number;
|
|
12
|
-
trackCoords:
|
|
13
|
-
groundCoords:
|
|
12
|
+
trackCoords: TrackItem[];
|
|
13
|
+
groundCoords: GroundItem[];
|
|
14
14
|
}
|
|
15
|
-
type
|
|
15
|
+
export type ElevationProfileDrawData = [TrackItem[], GroundItem[]];
|
|
16
|
+
type ElevationProfileEventsList = ["startcollecting", "profilecollected", "clear"];
|
|
16
17
|
/**
|
|
17
18
|
* Point types
|
|
18
19
|
*/
|
|
19
|
-
declare const SAFE = 0;
|
|
20
|
-
declare const WARNING = 1;
|
|
21
|
-
declare const COLLISION = 2;
|
|
22
|
-
|
|
20
|
+
export declare const SAFE = 0;
|
|
21
|
+
export declare const WARNING = 1;
|
|
22
|
+
export declare const COLLISION = 2;
|
|
23
|
+
type WarningLevel = typeof SAFE | typeof WARNING | typeof COLLISION;
|
|
24
|
+
/**
|
|
25
|
+
* 0 - distance, 1 - elevation, 2 - related ground point index
|
|
26
|
+
*/
|
|
27
|
+
export type TrackItem = [number, number, number];
|
|
28
|
+
/**
|
|
29
|
+
* 0 - distance, 1 - elevation, 2 - warning level, 3 - ..., 4 - related track point index
|
|
30
|
+
*/
|
|
31
|
+
export type GroundItem = [number, number, WarningLevel, number, number];
|
|
32
|
+
export declare class ElevationProfile {
|
|
23
33
|
events: EventsHandler<ElevationProfileEventsList>;
|
|
24
|
-
planet: Planet;
|
|
34
|
+
planet: Planet | null;
|
|
25
35
|
protected _warningHeightLevel: number;
|
|
26
36
|
protected _pointsReady: boolean;
|
|
27
37
|
protected _isWarning: boolean;
|
|
38
|
+
protected _planeDistance: number;
|
|
28
39
|
protected _minX: number;
|
|
29
40
|
protected _maxX: number;
|
|
30
41
|
protected _minY: number;
|
|
31
42
|
protected _maxY: number;
|
|
32
|
-
protected _drawData:
|
|
43
|
+
protected _drawData: ElevationProfileDrawData;
|
|
33
44
|
protected _promiseArr: Promise<void | number>[];
|
|
34
45
|
protected _promiseCounter: number;
|
|
35
46
|
protected _pMaxY: number;
|
|
36
47
|
protected _pMinY: number;
|
|
37
48
|
protected _pDist: number;
|
|
38
|
-
protected _pTrackCoords:
|
|
39
|
-
protected _pGroundCoords:
|
|
49
|
+
protected _pTrackCoords: TrackItem[];
|
|
50
|
+
protected _pGroundCoords: GroundItem[];
|
|
40
51
|
protected _pIndex: number;
|
|
41
|
-
constructor(options
|
|
52
|
+
constructor(options?: ElevationProfileParams);
|
|
53
|
+
bindPlanet(planet: Planet): void;
|
|
42
54
|
setWarningHeightLevel(warningHeight?: number): void;
|
|
43
|
-
setRange(minX: number, maxX: number, minY
|
|
44
|
-
protected _getHeightAsync(ll: LonLat, pIndex: number): Promise<number>;
|
|
45
|
-
protected _collectCoordsBetweenTwoTrackPoints(internalPoints: number, scaleFactor: number, p0: Vec3, trackDir: Vec3): void;
|
|
46
|
-
protected _collectAllPoints(pointsLonLat: LonLat[]): void;
|
|
47
|
-
protected _getGroundElevation(lonLat: LonLat): void;
|
|
48
|
-
protected
|
|
49
|
-
protected _calcPointsAsync(pointsLonLat: LonLat[]): Promise<IProfileData>;
|
|
55
|
+
setRange(minX: number, maxX: number, minY?: number, maxY?: number): void;
|
|
56
|
+
protected _getHeightAsync(ll: LonLat, pIndex: number, promiseCounter: number): Promise<number>;
|
|
57
|
+
protected _collectCoordsBetweenTwoTrackPoints(index: number, internalPoints: number, scaleFactor: number, p0: Vec3, trackDir: Vec3, promiseCounter: number): void;
|
|
58
|
+
protected _collectAllPoints(pointsLonLat: LonLat[], promiseCounter: number): void;
|
|
59
|
+
protected _getGroundElevation(lonLat: LonLat, index: number, promiseCounter: number): void;
|
|
60
|
+
protected _calcPointsAsync(pointsLonLat: LonLat[], promiseCounter: number): Promise<IProfileData>;
|
|
50
61
|
get minX(): number;
|
|
62
|
+
get planeDistance(): number;
|
|
51
63
|
get maxX(): number;
|
|
52
64
|
get minY(): number;
|
|
53
65
|
get maxY(): number;
|
|
54
66
|
get pointsReady(): boolean;
|
|
55
67
|
get isWarningOrCollision(): boolean;
|
|
56
|
-
|
|
57
|
-
|
|
68
|
+
get drawData(): ElevationProfileDrawData;
|
|
69
|
+
collectProfile(pointsLonLat: LonLat[]): Promise<ElevationProfileDrawData>;
|
|
70
|
+
protected _updatePointType(pIndex: number): void;
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated
|
|
73
|
+
*/
|
|
58
74
|
protected _setPointsType(): void;
|
|
59
75
|
clear(): void;
|
|
60
76
|
}
|
|
61
|
-
export {
|
|
77
|
+
export {};
|