@openglobus/og 0.13.8 → 0.13.10
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 +1 -1
- package/css/og.css +388 -129
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +20 -19
- package/src/og/Globe.js +15 -16
- package/src/og/Object3d.js +33 -0
- package/src/og/control/GeoImageDragControl.js +102 -75
- package/src/og/control/LayerAnimation.js +306 -38
- package/src/og/control/LayerSwitcher.js +506 -159
- package/src/og/control/Lighting.js +27 -27
- package/src/og/control/RulerSwitcher.js +69 -0
- package/src/og/control/UIhelpers.js +146 -0
- package/src/og/control/index.js +3 -1
- package/src/og/control/ruler/RulerScene.js +6 -2
- package/src/og/control/visibleExtent/Segment.js +2 -1
- package/src/og/ellipsoid/wgs84.js +1 -1
- package/src/og/entity/LabelHandler.js +5 -2
- package/src/og/entity/LabelWorker.js +38 -53
- package/src/og/layer/BaseGeoImage.js +347 -312
- package/src/og/layer/CanvasTiles.js +312 -290
- package/src/og/layer/GeoImage.js +222 -214
- package/src/og/layer/GeoVideo.js +291 -291
- package/src/og/layer/Layer.js +71 -30
- package/src/og/layer/Material.js +109 -109
- package/src/og/layer/Vector.js +1 -0
- package/src/og/layer/XYZ.js +20 -12
- package/src/og/light/LightSource.js +364 -363
- package/src/og/math.js +2 -2
- package/src/og/quadTree/Node.js +7 -5
- package/src/og/renderer/Renderer.js +1 -1
- package/src/og/scene/Planet.js +103 -42
- package/src/og/segment/Segment.js +34 -56
- package/src/og/segment/Slice.js +1 -1
- package/src/og/shaders/drawnode.js +1 -1
- package/src/og/terrain/GlobusTerrain.js +31 -20
- package/src/og/terrain/MapboxTerrain.js +1 -1
- package/src/og/utils/BaseWorker.js +46 -0
- package/src/og/utils/GeoImageCreator.js +164 -161
- package/src/og/utils/Loader.js +60 -33
- package/src/og/utils/NormalMapCreator.js +403 -412
- package/src/og/utils/PlainSegmentWorker.js +29 -55
- package/src/og/utils/TerrainWorker.js +572 -589
- package/src/og/utils/functionComposition.js +13 -0
- package/src/og/webgl/Handler.js +42 -41
- package/types/Object3d.d.ts +1 -0
- package/types/camera/PlanetCamera.d.ts +4 -0
- package/types/control/GeoImageDragControl.d.ts +2 -0
- package/types/control/LayerAnimation.d.ts +73 -0
- package/types/control/LayerSwitcher.d.ts +55 -11
- package/types/control/MouseNavigation.d.ts +1 -0
- package/types/control/MouseWheelZoomControl.d.ts +1 -0
- package/types/control/Sun.d.ts +1 -0
- package/types/control/TouchNavigation.d.ts +1 -0
- package/types/control/UIhelpers.d.ts +13 -0
- package/types/control/index.d.ts +2 -1
- package/types/entity/LabelHandler.d.ts +2 -0
- package/types/entity/LabelWorker.d.ts +5 -7
- package/types/layer/BaseGeoImage.d.ts +9 -1
- package/types/layer/CanvasTiles.d.ts +5 -1
- package/types/layer/GeoImage.d.ts +1 -0
- package/types/layer/GeoTexture2d.d.ts +1 -0
- package/types/layer/Layer.d.ts +5 -1
- package/types/layer/Vector.d.ts +7 -0
- package/types/layer/WMS.d.ts +1 -0
- package/types/layer/XYZ.d.ts +8 -6
- package/types/math.d.ts +1 -1
- package/types/quadTree/EntityCollectionNode.d.ts +7 -0
- package/types/quadTree/Node.d.ts +1 -2
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/renderer/RendererEvents.d.ts +16 -0
- package/types/scene/Planet.d.ts +19 -4
- package/types/segment/SegmentLonLat.d.ts +2 -0
- package/types/terrain/BilTerrain.d.ts +6 -0
- package/types/terrain/GlobusTerrain.d.ts +7 -0
- package/types/terrain/MapboxTerrain.d.ts +8 -0
- package/types/utils/BaseWorker.d.ts +14 -0
- package/types/utils/Loader.d.ts +3 -1
- package/types/utils/PlainSegmentWorker.d.ts +4 -6
- package/types/utils/TerrainWorker.d.ts +4 -6
- package/types/utils/functionComposition.d.ts +5 -0
- package/types/webgl/Handler.d.ts +4 -1
|
@@ -144,7 +144,7 @@ class Lighting extends Control {
|
|
|
144
144
|
this._selectedLayer = layer;
|
|
145
145
|
|
|
146
146
|
document.getElementById("opacity").value = layer.opacity;
|
|
147
|
-
document.querySelector(".og-value.opacity").
|
|
147
|
+
document.querySelector(".og-value.opacity").innerText = layer.opacity.toString();
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
oninit() {
|
|
@@ -166,15 +166,15 @@ class Lighting extends Control {
|
|
|
166
166
|
|
|
167
167
|
document.getElementById("gamma").addEventListener("input", function (e) {
|
|
168
168
|
_this.planet.renderer.gamma = Number(this.value);
|
|
169
|
-
document.querySelector(".og-value.gamma").
|
|
169
|
+
document.querySelector(".og-value.gamma").innerText = this.value;
|
|
170
170
|
});
|
|
171
171
|
document.getElementById("exposure").addEventListener("input", function (e) {
|
|
172
172
|
_this.planet.renderer.exposure = Number(this.value);
|
|
173
|
-
document.querySelector(".og-value.exposure").
|
|
173
|
+
document.querySelector(".og-value.exposure").innerText = this.value;
|
|
174
174
|
});
|
|
175
175
|
|
|
176
|
-
document.querySelector(".og-value.gamma").
|
|
177
|
-
document.querySelector(".og-value.exposure").
|
|
176
|
+
document.querySelector(".og-value.gamma").innerText = this.planet.renderer.gamma.toString();
|
|
177
|
+
document.querySelector(".og-value.exposure").innerText =
|
|
178
178
|
this.planet.renderer.exposure.toString();
|
|
179
179
|
|
|
180
180
|
document.getElementById("gamma").value = this.planet.renderer.gamma;
|
|
@@ -184,51 +184,51 @@ class Lighting extends Control {
|
|
|
184
184
|
if (_this._selectedLayer) {
|
|
185
185
|
_this._selectedLayer.opacity = Number(this.value);
|
|
186
186
|
}
|
|
187
|
-
document.querySelector(".og-value.opacity").
|
|
187
|
+
document.querySelector(".og-value.opacity").innerText = this.value;
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
document.getElementById("ambient-r").addEventListener("input", function (e) {
|
|
191
191
|
_this.planet._ambient[0] = Number(this.value);
|
|
192
|
-
document.querySelector(".og-value.ambient-r").
|
|
192
|
+
document.querySelector(".og-value.ambient-r").innerText = this.value;
|
|
193
193
|
});
|
|
194
194
|
document.getElementById("ambient-g").addEventListener("input", function (e) {
|
|
195
195
|
_this.planet._ambient[1] = Number(this.value);
|
|
196
|
-
document.querySelector(".og-value.ambient-g").
|
|
196
|
+
document.querySelector(".og-value.ambient-g").innerText = this.value;
|
|
197
197
|
});
|
|
198
198
|
document.getElementById("ambient-b").addEventListener("input", function (e) {
|
|
199
199
|
_this.planet._ambient[2] = Number(this.value);
|
|
200
|
-
document.querySelector(".og-value.ambient-b").
|
|
200
|
+
document.querySelector(".og-value.ambient-b").innerText = this.value;
|
|
201
201
|
});
|
|
202
202
|
|
|
203
203
|
document.getElementById("diffuse-r").addEventListener("input", function (e) {
|
|
204
204
|
_this.planet._diffuse[0] = Number(this.value);
|
|
205
|
-
document.querySelector(".og-value.diffuse-r").
|
|
205
|
+
document.querySelector(".og-value.diffuse-r").innerText = this.value;
|
|
206
206
|
});
|
|
207
207
|
document.getElementById("diffuse-g").addEventListener("input", function (e) {
|
|
208
208
|
_this.planet._diffuse[1] = Number(this.value);
|
|
209
|
-
document.querySelector(".og-value.diffuse-g").
|
|
209
|
+
document.querySelector(".og-value.diffuse-g").innerText = this.value;
|
|
210
210
|
});
|
|
211
211
|
document.getElementById("diffuse-b").addEventListener("input", function (e) {
|
|
212
212
|
_this.planet._diffuse[2] = Number(this.value);
|
|
213
|
-
document.querySelector(".og-value.diffuse-b").
|
|
213
|
+
document.querySelector(".og-value.diffuse-b").innerText = this.value;
|
|
214
214
|
});
|
|
215
215
|
|
|
216
216
|
document.getElementById("specular-r").addEventListener("input", function (e) {
|
|
217
217
|
_this.planet._specular[0] = Number(this.value);
|
|
218
|
-
document.querySelector(".og-value.specular-r").
|
|
218
|
+
document.querySelector(".og-value.specular-r").innerText = this.value;
|
|
219
219
|
});
|
|
220
220
|
document.getElementById("specular-g").addEventListener("input", function (e) {
|
|
221
221
|
_this.planet._specular[1] = Number(this.value);
|
|
222
|
-
document.querySelector(".og-value.specular-g").
|
|
222
|
+
document.querySelector(".og-value.specular-g").innerText = this.value;
|
|
223
223
|
});
|
|
224
224
|
document.getElementById("specular-b").addEventListener("input", function (e) {
|
|
225
225
|
_this.planet._specular[2] = Number(this.value);
|
|
226
|
-
document.querySelector(".og-value.specular-b").
|
|
226
|
+
document.querySelector(".og-value.specular-b").innerText = this.value;
|
|
227
227
|
});
|
|
228
228
|
|
|
229
229
|
document.getElementById("shininess").addEventListener("input", function (e) {
|
|
230
230
|
_this.planet._specular[3] = Number(this.value);
|
|
231
|
-
document.querySelector(".og-value.shininess").
|
|
231
|
+
document.querySelector(".og-value.shininess").innerText = this.value;
|
|
232
232
|
});
|
|
233
233
|
|
|
234
234
|
if (this.planet) {
|
|
@@ -248,18 +248,18 @@ class Lighting extends Control {
|
|
|
248
248
|
document.getElementById("specular-b").value = this.planet._specular[2];
|
|
249
249
|
document.getElementById("shininess").value = this.planet._specular[3];
|
|
250
250
|
|
|
251
|
-
document.querySelector(".og-value.ambient-r").
|
|
252
|
-
document.querySelector(".og-value.ambient-g").
|
|
253
|
-
document.querySelector(".og-value.ambient-b").
|
|
251
|
+
document.querySelector(".og-value.ambient-r").innerText = this.planet._ambient[0].toString();
|
|
252
|
+
document.querySelector(".og-value.ambient-g").innerText = this.planet._ambient[1].toString();
|
|
253
|
+
document.querySelector(".og-value.ambient-b").innerText = this.planet._ambient[2].toString();
|
|
254
254
|
|
|
255
|
-
document.querySelector(".og-value.diffuse-r").
|
|
256
|
-
document.querySelector(".og-value.diffuse-g").
|
|
257
|
-
document.querySelector(".og-value.diffuse-b").
|
|
255
|
+
document.querySelector(".og-value.diffuse-r").innerText = this.planet._diffuse[0].toString();
|
|
256
|
+
document.querySelector(".og-value.diffuse-g").innerText = this.planet._diffuse[1].toString();
|
|
257
|
+
document.querySelector(".og-value.diffuse-b").innerText = this.planet._diffuse[2].toString();
|
|
258
258
|
|
|
259
|
-
document.querySelector(".og-value.specular-r").
|
|
260
|
-
document.querySelector(".og-value.specular-g").
|
|
261
|
-
document.querySelector(".og-value.specular-b").
|
|
262
|
-
document.querySelector(".og-value.shininess").
|
|
259
|
+
document.querySelector(".og-value.specular-r").innerText = this.planet._specular[0].toString();
|
|
260
|
+
document.querySelector(".og-value.specular-g").innerText = this.planet._specular[1].toString();
|
|
261
|
+
document.querySelector(".og-value.specular-b").innerText = this.planet._specular[2].toString();
|
|
262
|
+
document.querySelector(".og-value.shininess").innerText = this.planet._specular[3].toString();
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
this._fetchLayers();
|
|
@@ -277,7 +277,7 @@ class Lighting extends Control {
|
|
|
277
277
|
this.bindLayer(e);
|
|
278
278
|
let opt = document.createElement("option");
|
|
279
279
|
opt.value = e.name;
|
|
280
|
-
opt.
|
|
280
|
+
opt.innerText = e.name;
|
|
281
281
|
document.getElementById("layers").appendChild(opt);
|
|
282
282
|
document.getElementById("layers").value = e.name;
|
|
283
283
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module og/control/Ruler
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
import { Control } from "./Control.js";
|
|
8
|
+
import { Ruler } from "./ruler/Ruler.js";
|
|
9
|
+
import { elementFactory, btnClickHandler } from "./UIhelpers.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Activate ruler
|
|
13
|
+
* @class
|
|
14
|
+
* @extends {Control}
|
|
15
|
+
* @param {Object} [options] - Control options.
|
|
16
|
+
*/
|
|
17
|
+
class RulerSwitcher extends Control {
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
super(options);
|
|
20
|
+
|
|
21
|
+
this.ruler = new Ruler({
|
|
22
|
+
ignoreTerrain: options.ignoreTerrain
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
oninit() {
|
|
27
|
+
this.planet.addControl(this.ruler);
|
|
28
|
+
this._createMenuBtn();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
onactivate() {
|
|
32
|
+
this.ruler.activate();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
ondeactivate() {
|
|
36
|
+
this.ruler.deactivate();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
_createMenuBtn() {
|
|
40
|
+
let btn = elementFactory(
|
|
41
|
+
'div',
|
|
42
|
+
{ id: 'og-ruler-menu-btn', class: 'og-ruler og-menu-btn og-OFF' },
|
|
43
|
+
elementFactory(
|
|
44
|
+
'div',
|
|
45
|
+
{ id: 'og-ruler-menu-icon', class: 'og-icon-holder' }
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
this.renderer.div.appendChild(btn);
|
|
50
|
+
|
|
51
|
+
btn.addEventListener('click', () => {
|
|
52
|
+
if (btn.classList.contains('og-OFF')) {
|
|
53
|
+
this.onactivate();
|
|
54
|
+
} else {
|
|
55
|
+
this.ondeactivate();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
btnClickHandler(
|
|
60
|
+
btn,
|
|
61
|
+
null,
|
|
62
|
+
null,
|
|
63
|
+
'#og-ruler-menu-icon'
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { RulerSwitcher };
|
|
69
|
+
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Helper functions for UI/UX
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Creates new DOM elements and assigns attributes
|
|
8
|
+
export function elementFactory(type, attributes, ...children) {
|
|
9
|
+
const el = document.createElement(type)
|
|
10
|
+
let key = null;
|
|
11
|
+
for (key in attributes) {
|
|
12
|
+
el.setAttribute(key, attributes[key])
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
children.forEach(child => {
|
|
16
|
+
if (typeof child === 'string') {
|
|
17
|
+
el.appendChild(document.createTextNode(child))
|
|
18
|
+
} else {
|
|
19
|
+
el.appendChild(child)
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
return el;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Appends array of children to parent
|
|
27
|
+
export function appendChildren(parent, childrenArray) {
|
|
28
|
+
childrenArray.forEach(child => parent.appendChild(child))
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Cycles an array of text and outputs next
|
|
32
|
+
export function toggleText(elementText, textArray) {
|
|
33
|
+
let textIndex = textArray.indexOf(elementText);
|
|
34
|
+
let nextIndex;
|
|
35
|
+
textIndex >= 0 && textIndex < textArray.length - 1 ?
|
|
36
|
+
nextIndex = textIndex + 1 :
|
|
37
|
+
nextIndex = 0;
|
|
38
|
+
return textArray[nextIndex];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Enables a movement of a DOM element. Also disables/enables mouse navigations for og-planet
|
|
42
|
+
export function enableElmovement(el, planet) {
|
|
43
|
+
|
|
44
|
+
let newPosX = 0,
|
|
45
|
+
newPosY = 0,
|
|
46
|
+
startPosX = 0,
|
|
47
|
+
startPosY = 0;
|
|
48
|
+
|
|
49
|
+
const behaviour = (e) => {
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
planet.renderer.controls.mouseNavigation.deactivate()
|
|
52
|
+
// get the starting position of the cursor
|
|
53
|
+
startPosX = e.clientX;
|
|
54
|
+
startPosY = e.clientY;
|
|
55
|
+
|
|
56
|
+
document.addEventListener('mousemove', mouseMove);
|
|
57
|
+
|
|
58
|
+
document.addEventListener('mouseup', function (e) {
|
|
59
|
+
document.removeEventListener('mousemove', mouseMove);
|
|
60
|
+
planet.renderer.controls.mouseNavigation.activate();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const mouseMove = (e) => {
|
|
65
|
+
// calculate the new position
|
|
66
|
+
newPosX = startPosX - e.clientX;
|
|
67
|
+
newPosY = startPosY - e.clientY;
|
|
68
|
+
|
|
69
|
+
// with each move we also want to update the start X and Y
|
|
70
|
+
startPosX = e.clientX;
|
|
71
|
+
startPosY = e.clientY;
|
|
72
|
+
|
|
73
|
+
// set the element's new position:
|
|
74
|
+
el.style.top = (el.offsetTop - newPosY) + "px";
|
|
75
|
+
el.style.left = (el.offsetLeft - newPosX) + "px";
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { behaviour, mouseMove }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Get all nodes of a class
|
|
82
|
+
export function getAllnodes(CSSclass) {
|
|
83
|
+
return document.querySelectorAll(CSSclass);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Convert nodelist to an Array
|
|
87
|
+
export function nodesToArray(nodeList) {
|
|
88
|
+
return Array.from(nodeList);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Adds a class to all elements selected
|
|
92
|
+
export function setAllCSSclass(CSSclass, nodeArray) {
|
|
93
|
+
return nodeArray.forEach(x => x.classList.add(CSSclass));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Sets all menu buttons to off
|
|
97
|
+
export function allMenuBtnOFF() {
|
|
98
|
+
setAllCSSclass('og-OFF', nodesToArray(getAllnodes('.og-menu-btn')));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Hides all dialoges of main menu
|
|
102
|
+
export function allDialogsHide() {
|
|
103
|
+
setAllCSSclass('og-hide', nodesToArray(getAllnodes('.og-dialog')));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function isString(v) {
|
|
107
|
+
return typeof v === 'string' || v instanceof String;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Handles the click inside/outside a dialog - closes dialog when click outside
|
|
111
|
+
export function btnClickHandler(btn_id, dialog_id, dialog_selector, btn_icon_id) {
|
|
112
|
+
let btn = isString(btn_id) ? document.getElementById(btn_id) : btn_id;
|
|
113
|
+
let dialog = document.getElementById(dialog_id);
|
|
114
|
+
btn.onclick = function (e) {
|
|
115
|
+
if (this.classList.contains('og-OFF')) {
|
|
116
|
+
// Turn to ON
|
|
117
|
+
allMenuBtnOFF();
|
|
118
|
+
allDialogsHide();
|
|
119
|
+
this.classList.remove('og-OFF');
|
|
120
|
+
if (dialog) {
|
|
121
|
+
dialog.classList.remove('og-hide');
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (this.classList.contains('og-has-dialog')) {
|
|
125
|
+
document.addEventListener('click', (e) => {
|
|
126
|
+
if (e.target.matches(dialog_selector) || e.target.matches(btn_icon_id)) { //inside
|
|
127
|
+
return;
|
|
128
|
+
} else {//outside
|
|
129
|
+
btn.classList.add('og-OFF');
|
|
130
|
+
if (dialog) {
|
|
131
|
+
dialog.classList.add('og-hide')
|
|
132
|
+
}
|
|
133
|
+
// TODO needs fix
|
|
134
|
+
// this.removeEventListener('click', arguments.callee);
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
// Turn to OFF
|
|
140
|
+
this.classList.add('og-OFF');
|
|
141
|
+
if (dialog) {
|
|
142
|
+
dialog.classList.add('og-hide');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
package/src/og/control/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { Sun } from "./Sun.js";
|
|
|
16
16
|
import { ZoomControl } from "./ZoomControl.js";
|
|
17
17
|
import { MouseWheelZoomControl } from "./MouseWheelZoomControl.js";
|
|
18
18
|
import { Lighting } from "./Lighting.js";
|
|
19
|
+
import { LayerAnimation } from "./LayerAnimation.js";
|
|
19
20
|
|
|
20
21
|
export {
|
|
21
22
|
Control,
|
|
@@ -35,5 +36,6 @@ export {
|
|
|
35
36
|
ZoomControl,
|
|
36
37
|
MouseWheelZoomControl,
|
|
37
38
|
Lighting,
|
|
38
|
-
Ruler
|
|
39
|
+
Ruler,
|
|
40
|
+
LayerAnimation
|
|
39
41
|
};
|
|
@@ -112,12 +112,14 @@ class RulerScene extends RenderNode {
|
|
|
112
112
|
entities: [this._trackEntity, this._propsLabel],
|
|
113
113
|
pickingEnabled: false,
|
|
114
114
|
polygonOffsetUnits: -1.0,
|
|
115
|
-
relativeToGround: true
|
|
115
|
+
relativeToGround: true,
|
|
116
|
+
displayInLayerSwitcher: false
|
|
116
117
|
});
|
|
117
118
|
|
|
118
119
|
this._cornersLayer = new Vector("corners", {
|
|
119
120
|
entities: [this._cornerEntity[0], this._cornerEntity[1]],
|
|
120
|
-
pickingEnabled: true
|
|
121
|
+
pickingEnabled: true,
|
|
122
|
+
displayInLayerSwitcher: false
|
|
121
123
|
});
|
|
122
124
|
}
|
|
123
125
|
|
|
@@ -141,6 +143,7 @@ class RulerScene extends RenderNode {
|
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
_activate() {
|
|
146
|
+
|
|
144
147
|
this._propsLabel.label.setVisibility(false);
|
|
145
148
|
this._onLclick_ = this._onLclick.bind(this);
|
|
146
149
|
this.renderer.events.on("lclick", this._onLclick_, this);
|
|
@@ -163,6 +166,7 @@ class RulerScene extends RenderNode {
|
|
|
163
166
|
|
|
164
167
|
this._planet.addLayer(this._trackLayer);
|
|
165
168
|
this._planet.addLayer(this._cornersLayer);
|
|
169
|
+
|
|
166
170
|
}
|
|
167
171
|
|
|
168
172
|
_deactivate() {
|
|
@@ -400,8 +400,9 @@ class Segment {
|
|
|
400
400
|
* @param {Float32Array} elevations - Elevation data.
|
|
401
401
|
*/
|
|
402
402
|
elevationsExists(elevations) {
|
|
403
|
+
const segment = this;
|
|
403
404
|
if (this.plainReady && this.terrainIsLoading) {
|
|
404
|
-
this.planet._terrainWorker.make(
|
|
405
|
+
this.planet._terrainWorker.make(segment, elevations);
|
|
405
406
|
|
|
406
407
|
this.plainVerticesHigh = null;
|
|
407
408
|
this.plainVerticesLow = null;
|
|
@@ -10,4 +10,4 @@ import { Ellipsoid } from "./Ellipsoid.js";
|
|
|
10
10
|
* WGS84 ellipsoid object.
|
|
11
11
|
* @type {Ellipsoid}
|
|
12
12
|
*/
|
|
13
|
-
export const wgs84 = new Ellipsoid(6378137.0, 6356752.3142);
|
|
13
|
+
export const wgs84 = new Ellipsoid(6378137.0, 6356752.3142); // Equitorial Radius (m), Polar Radius (m)
|
|
@@ -85,7 +85,8 @@ class LabelHandler extends BillboardHandler {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
_addLabelToArrays(label) {
|
|
88
|
-
this._renderer.labelWorker.make(
|
|
88
|
+
this._renderer.labelWorker.make(label);
|
|
89
|
+
console.time(`label${label.id}`)
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
assignFontAtlas(label) {
|
|
@@ -121,6 +122,8 @@ class LabelHandler extends BillboardHandler {
|
|
|
121
122
|
label.update();
|
|
122
123
|
|
|
123
124
|
this.refresh();
|
|
125
|
+
console.timeEnd(`label${label.id}`)
|
|
126
|
+
console.log(label)
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
|
|
@@ -386,7 +389,7 @@ class LabelHandler extends BillboardHandler {
|
|
|
386
389
|
if (isRTL) {
|
|
387
390
|
_rtl_ = RTL;
|
|
388
391
|
}
|
|
389
|
-
|
|
392
|
+
|
|
390
393
|
let offset = 0.0;
|
|
391
394
|
let kern = fa.kernings;
|
|
392
395
|
|
|
@@ -2,76 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
// import { QueueArray } from '../QueueArray.js';
|
|
4
4
|
|
|
5
|
+
import { BaseWorker } from "../utils/BaseWorker.js";
|
|
6
|
+
|
|
5
7
|
export const LOCK_UPDATE = -2;
|
|
6
8
|
export const LOCK_FREE = -1;
|
|
7
9
|
|
|
8
|
-
class LabelWorker {
|
|
10
|
+
class LabelWorker extends BaseWorker {
|
|
9
11
|
constructor(numWorkers = 4) {
|
|
10
|
-
|
|
11
|
-
this._source =
|
|
12
|
-
|
|
13
|
-
this._freeWorkerQueue = []; //new QueueArray(numWorkers);
|
|
14
|
-
var labelProgramm = new Blob([_programm], { type: "application/javascript" });
|
|
15
|
-
|
|
16
|
-
var that = this;
|
|
17
|
-
|
|
18
|
-
for (let i = 0; i < numWorkers; i++) {
|
|
19
|
-
var w = new Worker(URL.createObjectURL(labelProgramm));
|
|
20
|
-
w.onmessage = function (e) {
|
|
21
|
-
|
|
22
|
-
let s = that._source[e.data.id];
|
|
23
|
-
|
|
24
|
-
if (s.label._lockId === LOCK_UPDATE) {
|
|
25
|
-
that.make(s.handler, s.label);
|
|
26
|
-
} else {
|
|
27
|
-
s.handler.workerCallback(e.data, s.label);
|
|
28
|
-
}
|
|
12
|
+
super(numWorkers, _programm);
|
|
13
|
+
this._source = new Map();
|
|
14
|
+
}
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
delete that._source[e.data.id];
|
|
32
|
-
that._freeWorkerQueue.unshift(this);
|
|
16
|
+
_onMessage(e) {
|
|
33
17
|
|
|
34
|
-
|
|
35
|
-
};
|
|
18
|
+
let label = this._source.get(e.data.id);
|
|
36
19
|
|
|
37
|
-
|
|
20
|
+
if (label._lockId === LOCK_UPDATE) {
|
|
21
|
+
requestAnimationFrame(() => {
|
|
22
|
+
this.make(label);
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
label._handler.workerCallback(e.data, label);
|
|
38
26
|
}
|
|
39
27
|
|
|
40
|
-
this.
|
|
41
|
-
|
|
28
|
+
this._source.delete(e.data.id);
|
|
29
|
+
super._onMessage(e)
|
|
42
30
|
|
|
43
|
-
|
|
44
|
-
if (this._pendingQueue.length) {
|
|
45
|
-
var p = this._pendingQueue.pop();
|
|
46
|
-
this.make(p.handler, p.label);
|
|
47
|
-
}
|
|
31
|
+
this.check();
|
|
48
32
|
}
|
|
49
33
|
|
|
50
|
-
make(handler, label) {
|
|
51
34
|
|
|
35
|
+
make() {
|
|
36
|
+
const label = arguments[0],
|
|
37
|
+
handler = label._handler;
|
|
52
38
|
if (handler._entityCollection) {
|
|
53
|
-
let source = { handler: handler, label: label };
|
|
54
39
|
|
|
55
|
-
if (this.
|
|
56
|
-
var w = this.
|
|
40
|
+
if (this._workerQueue.length) {
|
|
41
|
+
var w = this._workerQueue.pop();
|
|
57
42
|
|
|
58
|
-
this._source
|
|
43
|
+
this._source.set(this._id, label);
|
|
59
44
|
|
|
60
45
|
let labelData = new Float32Array([
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
46
|
+
/*0*/this._id++,
|
|
47
|
+
/*1*/handler._maxLetters,
|
|
48
|
+
/*2*/label.getVisibility() ? 1 : 0,
|
|
49
|
+
/*3, 4, 5*/label._positionHigh.x, label._positionHigh.y, label._positionHigh.z,
|
|
50
|
+
/*6, 7, 8*/label._positionLow.x, label._positionLow.y, label._positionLow.z,
|
|
51
|
+
/*9*/label._size,
|
|
52
|
+
/*10, 11, 12*/label._offset.x, label._offset.y, label._offset.z,
|
|
53
|
+
/*13, 14, 15, 16*/label._color.x, label._color.y, label._color.z, label._color.w,
|
|
54
|
+
/*17*/label._rotation,
|
|
55
|
+
/*18, 19, 20*/label._alignedAxis.x, label._alignedAxis.y, label._alignedAxis.z,
|
|
56
|
+
/*21*/label._fontIndex,
|
|
57
|
+
/*22*/label._outline,
|
|
58
|
+
/*23, 24, 25, 26*/label._outlineColor.x, label._outlineColor.y, label._outlineColor.z, label._outlineColor.w,
|
|
59
|
+
/*27, 28, 29*/label._entity._pickingColor.x, label._entity._pickingColor.y, label._entity._pickingColor.z
|
|
75
60
|
]);
|
|
76
61
|
|
|
77
62
|
label._lockId = this._id;
|
|
@@ -82,7 +67,7 @@ class LabelWorker {
|
|
|
82
67
|
labelData.buffer,
|
|
83
68
|
]);
|
|
84
69
|
} else {
|
|
85
|
-
this._pendingQueue.push(
|
|
70
|
+
this._pendingQueue.push(label);
|
|
86
71
|
}
|
|
87
72
|
}
|
|
88
73
|
}
|