@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.
Files changed (64) hide show
  1. package/README.md +19 -68
  2. package/css/og.css +308 -45
  3. package/lib/@openglobus/og.css +1 -1
  4. package/lib/@openglobus/og.esm.js +1 -1
  5. package/lib/@openglobus/og.esm.js.map +1 -1
  6. package/lib/@openglobus/og.umd.js +1 -1
  7. package/lib/@openglobus/og.umd.js.map +1 -1
  8. package/lib/js/Globe.d.ts +2 -0
  9. package/lib/js/Globe.js +3 -1
  10. package/lib/js/camera/PlanetCamera.d.ts +2 -2
  11. package/lib/js/camera/PlanetCamera.js +3 -2
  12. package/lib/js/control/DebugInfo.js +5 -0
  13. package/lib/js/control/EarthCoordinates.js +2 -2
  14. package/lib/js/control/LayerSwitcher.d.ts +18 -3
  15. package/lib/js/control/LayerSwitcher.js +111 -11
  16. package/lib/js/control/MouseNavigation.d.ts +2 -0
  17. package/lib/js/control/MouseNavigation.js +15 -15
  18. package/lib/js/control/elevationProfile/ElevationProfile.d.ts +41 -25
  19. package/lib/js/control/elevationProfile/ElevationProfile.js +106 -75
  20. package/lib/js/control/elevationProfile/ElevationProfileButtonsView.d.ts +14 -0
  21. package/lib/js/control/elevationProfile/ElevationProfileButtonsView.js +61 -0
  22. package/lib/js/control/elevationProfile/ElevationProfileControl.d.ts +33 -0
  23. package/lib/js/control/elevationProfile/ElevationProfileControl.js +153 -0
  24. package/lib/js/control/elevationProfile/ElevationProfileLegend.d.ts +20 -0
  25. package/lib/js/control/elevationProfile/ElevationProfileLegend.js +82 -0
  26. package/lib/js/control/elevationProfile/ElevationProfileScene.d.ts +80 -0
  27. package/lib/js/control/elevationProfile/ElevationProfileScene.js +539 -0
  28. package/lib/js/control/elevationProfile/ElevationProfileView.d.ts +63 -0
  29. package/lib/js/control/elevationProfile/ElevationProfileView.js +504 -0
  30. package/lib/js/control/elevationProfile/PointListDialog.d.ts +12 -0
  31. package/lib/js/control/elevationProfile/PointListDialog.js +57 -0
  32. package/lib/js/control/heightRuler/HeightRulerScene.js +1 -1
  33. package/lib/js/control/index.d.ts +2 -1
  34. package/lib/js/control/index.js +2 -1
  35. package/lib/js/control/ruler/RulerScene.js +3 -3
  36. package/lib/js/control/selection/SelectionScene.js +2 -2
  37. package/lib/js/entity/Entity.js +5 -1
  38. package/lib/js/entity/Polyline.js +1 -1
  39. package/lib/js/layer/GeoImage.js +3 -0
  40. package/lib/js/layer/Layer.d.ts +18 -4
  41. package/lib/js/layer/Layer.js +25 -4
  42. package/lib/js/layer/XYZ.d.ts +0 -1
  43. package/lib/js/quadTree/Node.d.ts +21 -3
  44. package/lib/js/quadTree/Node.js +173 -62
  45. package/lib/js/renderer/Renderer.d.ts +0 -1
  46. package/lib/js/renderer/Renderer.js +22 -44
  47. package/lib/js/renderer/RendererEvents.d.ts +1 -0
  48. package/lib/js/renderer/RendererEvents.js +5 -7
  49. package/lib/js/scene/Planet.d.ts +33 -4
  50. package/lib/js/scene/Planet.js +206 -84
  51. package/lib/js/segment/Segment.d.ts +7 -1
  52. package/lib/js/segment/Segment.js +40 -12
  53. package/lib/js/shaders/drawnode.js +21 -2
  54. package/lib/js/shaders/geoObject.js +26 -18
  55. package/lib/js/terrain/GlobusTerrain.d.ts +3 -0
  56. package/lib/js/terrain/GlobusTerrain.js +15 -3
  57. package/lib/js/terrain/MapboxTerrain.js +29 -29
  58. package/lib/js/ui/Dialog.js +1 -1
  59. package/lib/js/utils/TerrainWorker.js +1 -1
  60. package/lib/js/utils/shared.d.ts +3 -1
  61. package/lib/js/utils/shared.js +22 -3
  62. package/package.json +2 -2
  63. package/lib/js/shaders/pickingMask.d.ts +0 -2
  64. 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 = 0) {
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(5) + '°';
55
- this._lonValEl.innerHTML = Math.abs(lon).toFixed(5) + '°';
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
- dialog: Dialog<null>;
13
- protected _menuBtn: ToggleButton;
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
- addNewLayer: (layer: Layer) => void;
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.addNewLayer = (layer) => {
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.dialog = new Dialog({
99
+ this._dialog = new Dialog({
26
100
  title: "Layer Switcher",
27
101
  top: 15,
28
102
  useHide: true,
29
103
  visible: false,
30
- width: 200
104
+ width: 300,
105
+ maxHeight: 500
31
106
  });
32
- this._menuBtn = new ToggleButton({
33
- classList: ["og-map-button", "og-layerswitcher_button"],
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.dialog.appendTo(this.planet.renderer.div);
39
- this.dialog.setPosition(this.planet.renderer.div.clientWidth - this.dialog.width - 67);
40
- this.dialog.events.on("visibility", (v) => {
41
- this._menuBtn.setActive(v);
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.addNewLayer, 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.dialog.hide();
149
+ this._dialog.hide();
50
150
  }
51
151
  }
@@ -58,5 +58,7 @@ export declare class MouseNavigation extends Control {
58
58
  onShiftFree(): void;
59
59
  protected onMouseMove(e: IMouseState): void;
60
60
  protected onDraw(): void;
61
+ lockPlanet(skipTerrain?: boolean): void;
62
+ freePlanet(): void;
61
63
  }
62
64
  export {};
@@ -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.planet.layerLock.lock(this._keyLock);
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.planet.layerLock.free(this._keyLock);
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.planet.layerLock.free(this._keyLock);
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.planet.layerLock.lock(this._keyLock);
352
- this.planet.terrainLock.lock(this._keyLock);
353
- this.planet._normalMapCreator.lock(this._keyLock);
345
+ this.lockPlanet();
354
346
  }
355
347
  else {
356
- this.planet.layerLock.free(this._keyLock);
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: 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: number[][];
13
- groundCoords: number[][];
12
+ trackCoords: TrackItem[];
13
+ groundCoords: GroundItem[];
14
14
  }
15
- type ElevationProfileEventsList = ["profilecollected"];
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
- declare class ElevationProfile {
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: [number[][], number[][]];
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: number[][];
39
- protected _pGroundCoords: number[][];
49
+ protected _pTrackCoords: TrackItem[];
50
+ protected _pGroundCoords: GroundItem[];
40
51
  protected _pIndex: number;
41
- constructor(options: ElevationProfileParams);
52
+ constructor(options?: ElevationProfileParams);
53
+ bindPlanet(planet: Planet): void;
42
54
  setWarningHeightLevel(warningHeight?: number): void;
43
- setRange(minX: number, maxX: number, minY: number, maxY: number): void;
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 _collectPromise(resolve: (p: IProfileData) => void): void;
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
- collectProfile(pointsLonLat: LonLat[]): void;
57
- protected _setPointType(pIndex: number): void;
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 { COLLISION, SAFE, WARNING, type IProfileData, ElevationProfile, };
77
+ export {};