@pirireis/webglobeplugins 0.9.11 → 0.9.13
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/Math/angle-calculation.js +9 -11
- package/Math/arc.js +38 -41
- package/Math/bounds/line-bbox.js +79 -83
- package/Math/constants.js +4 -9
- package/Math/frustum/types.js +1 -2
- package/Math/juction/arc-plane.js +33 -36
- package/Math/juction/line-sphere.js +15 -18
- package/Math/juction/plane-plane.js +20 -23
- package/Math/line.js +42 -47
- package/Math/methods.js +69 -92
- package/Math/plane.js +33 -38
- package/Math/quaternion.js +48 -55
- package/Math/types.js +1 -2
- package/Math/utils.js +2 -4
- package/Math/vec3.js +46 -52
- package/algorithms/search-binary.js +5 -8
- package/altitude-locator/draw-subset-obj.js +8 -11
- package/altitude-locator/plugin.js +114 -133
- package/altitude-locator/types.js +1 -3
- package/arrowfield/adaptor.js +3 -7
- package/arrowfield/index.js +3 -10
- package/arrowfield/plugin.js +63 -69
- package/bearing-line/index.js +2 -8
- package/bearing-line/plugin.js +218 -248
- package/circle-line-chain/chain-list-map.js +82 -92
- package/circle-line-chain/plugin.js +147 -182
- package/circle-line-chain/util.js +1 -5
- package/compass-rose/compass-rose-padding-flat.js +111 -140
- package/compass-rose/compass-text-writer.js +63 -75
- package/compass-rose/index.js +3 -7
- package/compassrose/compassrose.js +50 -57
- package/compassrose/index.js +2 -8
- package/heatwave/index.js +3 -10
- package/heatwave/isobar/objectarraylabels.js +50 -56
- package/heatwave/isobar/plugin.js +111 -170
- package/heatwave/isobar/quadtreecontours.js +78 -96
- package/heatwave/plugins/heatwaveglobeshell.js +73 -94
- package/index.js +12 -58
- package/package.json +1 -1
- package/partialrings/buffer-manager.js +32 -70
- package/partialrings/index.js +2 -41
- package/partialrings/plugin.js +55 -98
- package/partialrings/program.js +141 -59
- package/pin/pin-object-array.js +89 -97
- package/pin/pin-point-totem.js +21 -22
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +11 -14
- package/point-heat-map/plugin-webworker.js +45 -53
- package/point-heat-map/point-to-heat-map-flow.js +46 -51
- package/point-tracks/key-methods.js +2 -5
- package/point-tracks/plugin.js +141 -170
- package/programs/arrowfield/index.js +2 -7
- package/programs/arrowfield/logic.js +172 -67
- package/programs/arrowfield/object.js +35 -43
- package/programs/data2legend/density-to-legend.js +47 -26
- package/programs/data2legend/point-to-density-texture.js +56 -34
- package/programs/float2legendwithratio/index.js +2 -8
- package/programs/float2legendwithratio/logic.js +88 -45
- package/programs/float2legendwithratio/object.js +45 -54
- package/programs/globe-util/is-globe-moved.js +10 -13
- package/programs/globeshell/index.js +2 -8
- package/programs/globeshell/wiggle/index.js +2 -8
- package/programs/globeshell/wiggle/logic.js +191 -101
- package/programs/globeshell/wiggle/object.js +35 -43
- package/programs/helpers/blender/program.js +36 -22
- package/programs/helpers/fadeaway/index.js +2 -7
- package/programs/helpers/fadeaway/logic.js +36 -17
- package/programs/helpers/fadeaway/object.js +11 -18
- package/programs/helpers/index.js +2 -8
- package/programs/index.js +9 -58
- package/programs/line-on-globe/angled-line.js +95 -39
- package/programs/line-on-globe/circle-accurate-3d.js +86 -39
- package/programs/line-on-globe/circle-accurate-flat.js +116 -64
- package/programs/line-on-globe/circle-accurate.js +113 -46
- package/programs/line-on-globe/circle.js +106 -44
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +89 -42
- package/programs/line-on-globe/lines-color-instanced-flat.js +84 -43
- package/programs/line-on-globe/linestrip.js +126 -63
- package/programs/line-on-globe/naive-accurate-flexible.js +126 -59
- package/programs/line-on-globe/to-the-surface.js +62 -35
- package/programs/line-on-globe/util.js +2 -5
- package/programs/picking/pickable-renderer.js +127 -46
- package/programs/point-on-globe/element-globe-surface-glow.js +83 -46
- package/programs/point-on-globe/element-point-glow.js +112 -47
- package/programs/point-on-globe/square-pixel-point.js +80 -34
- package/programs/programcache.js +14 -19
- package/programs/rings/distancering/circleflatprogram.js +76 -70
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +168 -194
- package/programs/rings/distancering/circlepaddysharedbuffer.js +121 -200
- package/programs/rings/distancering/index.js +5 -14
- package/programs/rings/distancering/paddyflatprogram.js +87 -70
- package/programs/rings/distancering/paddyflatprogram2d.js +89 -72
- package/programs/rings/distancering/paddyflatprogram3d.js +87 -70
- package/programs/rings/index.js +1 -17
- package/programs/rings/partial-ring/piece-of-pie.js +144 -44
- package/programs/totems/camerauniformblock.js +65 -56
- package/programs/totems/canvas-webglobe-info.js +49 -45
- package/programs/totems/gpu-selection-uniform-block.js +45 -45
- package/programs/totems/index.js +2 -40
- package/programs/two-d/pixel-padding-for-compass.js +94 -36
- package/programs/util.js +7 -10
- package/programs/vectorfields/index.js +3 -23
- package/programs/vectorfields/logics/drawrectangleparticles.js +73 -35
- package/programs/vectorfields/logics/index.js +4 -12
- package/programs/vectorfields/logics/pixelbased.js +94 -41
- package/programs/vectorfields/logics/ubo.js +32 -32
- package/programs/vectorfields/pingpongbuffermanager.js +30 -37
- package/rangerings/enum.js +2 -5
- package/rangerings/index.js +5 -15
- package/rangerings/plugin.js +223 -286
- package/rangerings/rangeringangletext.js +122 -137
- package/rangerings/ring-account.js +53 -75
- package/shaders/fragment-toy/firework.js +55 -4
- package/shaders/fragment-toy/singularity.js +56 -5
- package/timetracks/adaptors-line-strip.js +27 -44
- package/timetracks/adaptors.js +48 -67
- package/timetracks/index.js +5 -19
- package/timetracks/plugin-line-strip.js +65 -79
- package/timetracks/plugin.js +71 -85
- package/timetracks/program-line-strip.js +297 -107
- package/timetracks/program.js +421 -118
- package/timetracks/programpoint-line-strip.js +98 -48
- package/timetracks/programpoint.js +91 -48
- package/util/account/bufferoffsetmanager.js +72 -98
- package/util/account/index.js +3 -23
- package/util/account/single-attribute-buffer-management/buffer-manager.js +44 -48
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +68 -98
- package/util/account/single-attribute-buffer-management/index.js +4 -9
- package/util/account/single-attribute-buffer-management/object-store.js +29 -34
- package/util/account/single-attribute-buffer-management/types.js +1 -2
- package/util/account/util.js +2 -8
- package/util/algorithms/search-binary.js +5 -8
- package/util/check/get.js +5 -9
- package/util/check/typecheck.js +13 -24
- package/util/geometry/index.js +10 -18
- package/util/gl-util/buffer/attribute-loader.js +10 -26
- package/util/gl-util/buffer/index.js +2 -5
- package/util/gl-util/draw-options/methods.js +10 -15
- package/util/gl-util/uniform-block/manager.js +69 -72
- package/util/heatwavedatamanager/datamanager.js +56 -119
- package/util/heatwavedatamanager/index.js +3 -10
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +38 -47
- package/util/heatwavedatamanager/pointcoordsmeta.js +9 -13
- package/util/index.js +13 -57
- package/util/interpolation/timetrack/index.js +2 -5
- package/util/interpolation/timetrack/timetrack-interpolator.js +30 -36
- package/util/interpolation/timetrack/web-worker-str.js +180 -5
- package/util/interpolation/timetrack/web-worker.js +4 -6
- package/util/jshelpers/data-filler.js +8 -11
- package/util/jshelpers/equality.js +1 -3
- package/util/jshelpers/index.js +2 -37
- package/util/jshelpers/timefilters.js +8 -10
- package/util/picking/fence.js +8 -11
- package/util/picking/picker-displayer.js +49 -58
- package/util/programs/draw-texture-on-canvas.js +41 -26
- package/util/programs/index.js +1 -17
- package/util/programs/shapesonglobe.js +104 -68
- package/util/programs/supersampletotextures.js +45 -43
- package/util/programs/texturetoglobe.js +99 -52
- package/util/shaderfunctions/geometrytransformations.js +323 -35
- package/util/shaderfunctions/index.js +2 -18
- package/util/shaderfunctions/nodata.js +8 -5
- package/util/shaderfunctions/noisefunctions.js +40 -12
- package/util/surface-line-data/arcs-to-cuts.js +20 -23
- package/util/webglobe/gldefaultstates.js +1 -4
- package/util/webglobe/index.js +2 -18
- package/util/webglobe/rasteroverlay.js +36 -41
- package/util/webglobjectbuilders.js +70 -93
- package/util/webglobjectbuilders1.js +63 -82
- package/waveparticles/adaptor.js +7 -10
- package/waveparticles/index.js +3 -10
- package/waveparticles/plugin.js +82 -90
- package/wind/imagetovectorfieldandmagnitude.js +16 -19
- package/wind/index.js +5 -14
- package/wind/plugin.js +454 -291
- package/wind/vectorfieldimage.js +6 -8
- package/write-text/attached-text-writer.js +48 -54
- package/write-text/context-text.js +52 -63
- package/write-text/context-text3.js +71 -80
- package/write-text/index.js +1 -5
package/Math/vec3.js
CHANGED
|
@@ -1,56 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
Object.
|
|
3
|
-
|
|
4
|
-
var constants_1 = require("./constants");
|
|
5
|
-
exports.vec3 = Object.freeze({
|
|
6
|
-
create: function (x, y, z) {
|
|
7
|
-
if (x === void 0) { x = 0; }
|
|
8
|
-
if (y === void 0) { y = 0; }
|
|
9
|
-
if (z === void 0) { z = 1; }
|
|
1
|
+
import { EPSILON } from './constants';
|
|
2
|
+
export const vec3 = Object.freeze({
|
|
3
|
+
create(x = 0, y = 0, z = 1) {
|
|
10
4
|
return [x, y, z];
|
|
11
5
|
},
|
|
12
|
-
set
|
|
6
|
+
set(out, x, y, z) {
|
|
13
7
|
out[0] = x;
|
|
14
8
|
out[1] = y;
|
|
15
9
|
out[2] = z;
|
|
16
10
|
},
|
|
17
|
-
clone
|
|
11
|
+
clone(a) {
|
|
18
12
|
return [a[0], a[1], a[2]];
|
|
19
13
|
},
|
|
20
|
-
copy
|
|
14
|
+
copy(out, a) {
|
|
21
15
|
out[0] = a[0];
|
|
22
16
|
out[1] = a[1];
|
|
23
17
|
out[2] = a[2];
|
|
24
18
|
return out;
|
|
25
19
|
},
|
|
26
|
-
add
|
|
20
|
+
add(out, a, b) {
|
|
27
21
|
out[0] = a[0] + b[0];
|
|
28
22
|
out[1] = a[1] + b[1];
|
|
29
23
|
out[2] = a[2] + b[2];
|
|
30
24
|
return out;
|
|
31
25
|
},
|
|
32
|
-
subtract
|
|
26
|
+
subtract(out, a, b) {
|
|
33
27
|
out[0] = a[0] - b[0];
|
|
34
28
|
out[1] = a[1] - b[1];
|
|
35
29
|
out[2] = a[2] - b[2];
|
|
36
30
|
},
|
|
37
|
-
dot
|
|
31
|
+
dot(a, b) {
|
|
38
32
|
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
39
33
|
},
|
|
40
|
-
cross
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
34
|
+
cross(out, a, b) {
|
|
35
|
+
const x = a[1] * b[2] - a[2] * b[1];
|
|
36
|
+
const y = a[2] * b[0] - a[0] * b[2];
|
|
37
|
+
const z = a[0] * b[1] - a[1] * b[0];
|
|
44
38
|
out[0] = x;
|
|
45
39
|
out[1] = y;
|
|
46
40
|
out[2] = z;
|
|
47
41
|
},
|
|
48
|
-
multiplyScalar
|
|
42
|
+
multiplyScalar(out, a, b) {
|
|
49
43
|
out[0] = a[0] * b;
|
|
50
44
|
out[1] = a[1] * b;
|
|
51
45
|
out[2] = a[2] * b;
|
|
52
46
|
},
|
|
53
|
-
divideScalar
|
|
47
|
+
divideScalar(out, a, b) {
|
|
54
48
|
if (b === 0) {
|
|
55
49
|
throw new Error('Division by zero');
|
|
56
50
|
}
|
|
@@ -58,14 +52,14 @@ exports.vec3 = Object.freeze({
|
|
|
58
52
|
out[1] = a[1] / b;
|
|
59
53
|
out[2] = a[2] / b;
|
|
60
54
|
},
|
|
61
|
-
lengthSquared
|
|
55
|
+
lengthSquared(a) {
|
|
62
56
|
return a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
|
|
63
57
|
},
|
|
64
|
-
length
|
|
58
|
+
length(a) {
|
|
65
59
|
return Math.sqrt(this.lengthSquared(a));
|
|
66
60
|
},
|
|
67
|
-
normalize
|
|
68
|
-
|
|
61
|
+
normalize(outVec, inVec) {
|
|
62
|
+
const len = this.length(inVec);
|
|
69
63
|
if (len === 0) {
|
|
70
64
|
throw new Error('Cannot normalize a zero vector');
|
|
71
65
|
}
|
|
@@ -73,57 +67,57 @@ exports.vec3 = Object.freeze({
|
|
|
73
67
|
outVec[1] = inVec[1] / len;
|
|
74
68
|
outVec[2] = inVec[2] / len;
|
|
75
69
|
},
|
|
76
|
-
distanceSquared
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
distanceSquared(a, b) {
|
|
71
|
+
const dx = a[0] - b[0];
|
|
72
|
+
const dy = a[1] - b[1];
|
|
73
|
+
const dz = a[2] - b[2];
|
|
80
74
|
return dx * dx + dy * dy + dz * dz;
|
|
81
75
|
},
|
|
82
|
-
distance
|
|
76
|
+
distance(a, b) {
|
|
83
77
|
return Math.sqrt(this.distanceSquared(a, b));
|
|
84
78
|
},
|
|
85
|
-
equals
|
|
86
|
-
return (Math.abs(a[0] - b[0]) <
|
|
87
|
-
Math.abs(a[1] - b[1]) <
|
|
88
|
-
Math.abs(a[2] - b[2]) <
|
|
79
|
+
equals(a, b) {
|
|
80
|
+
return (Math.abs(a[0] - b[0]) < EPSILON &&
|
|
81
|
+
Math.abs(a[1] - b[1]) < EPSILON &&
|
|
82
|
+
Math.abs(a[2] - b[2]) < EPSILON);
|
|
89
83
|
},
|
|
90
|
-
toUnitVectorLongLat
|
|
91
|
-
|
|
84
|
+
toUnitVectorLongLat(out, a) {
|
|
85
|
+
const len = this.length(a); // TODO Might drop length check
|
|
92
86
|
if (len === 0) {
|
|
93
87
|
throw new Error('Cannot convert a zero vector to unit vector');
|
|
94
88
|
}
|
|
95
89
|
out[0] = Math.atan2(a[1], a[0]); // Longitude
|
|
96
90
|
out[1] = Math.asin(a[2] / len); // Latitude
|
|
97
91
|
},
|
|
98
|
-
fromUnitVectorLongLat
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
fromUnitVectorLongLat(out, longLat) {
|
|
93
|
+
const longitude = longLat[0];
|
|
94
|
+
const latitude = longLat[1];
|
|
95
|
+
const cosLat = Math.cos(latitude);
|
|
102
96
|
out[0] = cosLat * Math.cos(longitude);
|
|
103
97
|
out[1] = cosLat * Math.sin(longitude);
|
|
104
98
|
out[2] = Math.sin(latitude);
|
|
105
99
|
},
|
|
106
|
-
applyQuaternion
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
applyQuaternion(out, a, q) {
|
|
101
|
+
const x = a[0], y = a[1], z = a[2];
|
|
102
|
+
const qx = q[0], qy = q[1], qz = q[2], qw = q[3];
|
|
109
103
|
// Calculate the quaternion multiplication
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
const ix = qw * x + qy * z - qz * y;
|
|
105
|
+
const iy = qw * y + qz * x - qx * z;
|
|
106
|
+
const iz = qw * z + qx * y - qy * x;
|
|
107
|
+
const iw = -qx * x - qy * y - qz * z;
|
|
114
108
|
// Apply the quaternion to the vector
|
|
115
109
|
out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
|
116
110
|
out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
|
117
111
|
out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
|
118
112
|
},
|
|
119
|
-
randomUnit
|
|
120
|
-
|
|
121
|
-
|
|
113
|
+
randomUnit(out) {
|
|
114
|
+
const theta = Math.random() * 2 * Math.PI;
|
|
115
|
+
const phi = Math.acos(2 * Math.random() - 1);
|
|
122
116
|
out[0] = Math.sin(phi) * Math.cos(theta);
|
|
123
117
|
out[1] = Math.sin(phi) * Math.sin(theta);
|
|
124
118
|
out[2] = Math.cos(phi);
|
|
125
119
|
},
|
|
126
|
-
str
|
|
127
|
-
return
|
|
120
|
+
str(a) {
|
|
121
|
+
return `Vec3(${a[0].toFixed(2)}, ${a[1].toFixed(2)}, ${a[2].toFixed(2)})`;
|
|
128
122
|
}
|
|
129
123
|
});
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var start = 0;
|
|
6
|
-
var end = container.length - 1;
|
|
7
|
-
var mid = 0;
|
|
1
|
+
const findFirstIndexInRange = (container, value) => {
|
|
2
|
+
let start = 0;
|
|
3
|
+
let end = container.length - 1;
|
|
4
|
+
let mid = 0;
|
|
8
5
|
while (start <= end) {
|
|
9
6
|
mid = Math.floor((start + end) / 2);
|
|
10
7
|
if (container[mid] <= value && value <= container[mid + 1])
|
|
@@ -16,4 +13,4 @@ var findFirstIndexInRange = function (container, value) {
|
|
|
16
13
|
}
|
|
17
14
|
return null;
|
|
18
15
|
};
|
|
19
|
-
|
|
16
|
+
export { findFirstIndexInRange };
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("./types");
|
|
1
|
+
import "./types";
|
|
4
2
|
/**
|
|
5
3
|
* @param {DrawSubsetOptions} drawSubsetOptions
|
|
6
4
|
*/
|
|
7
5
|
// TODO: Draw all is an optional property for the target plugin, with this approach.
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
class DrawSubsetOptionRegistry {
|
|
7
|
+
constructor() {
|
|
10
8
|
this._drawSubsetOptions = new Map();
|
|
11
9
|
}
|
|
12
|
-
|
|
10
|
+
register(key, drawSubsetOptions) {
|
|
13
11
|
this._drawSubsetOptions.set(key, drawSubsetOptions);
|
|
14
|
-
}
|
|
15
|
-
|
|
12
|
+
}
|
|
13
|
+
unregister(key) {
|
|
16
14
|
this._drawSubsetOptions.delete(key);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
}());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -1,33 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
exports.PointGlowLineToEarthPlugin = void 0;
|
|
13
|
-
require("./types.js");
|
|
14
|
-
var pickable_renderer_js_1 = require("../programs/picking/pickable-renderer.js");
|
|
15
|
-
var element_point_glow_js_1 = require("../programs/point-on-globe/element-point-glow.js");
|
|
16
|
-
var element_globe_surface_glow_js_1 = require("../programs/point-on-globe/element-globe-surface-glow.js");
|
|
17
|
-
var naive_accurate_flexible_js_1 = require("../programs/line-on-globe/naive-accurate-flexible.js");
|
|
18
|
-
var account_1 = require("../util/account");
|
|
19
|
-
var picker_displayer_js_1 = require("../util/picking/picker-displayer.js");
|
|
20
|
-
var methods_js_1 = require("../Math/methods.js");
|
|
21
|
-
var typecheck_js_1 = require("../util/check/typecheck.js");
|
|
22
|
-
var attribute_loader_1 = require("../util/gl-util/buffer/attribute-loader");
|
|
23
|
-
var camerauniformblock_js_1 = require("../programs/totems/camerauniformblock.js");
|
|
1
|
+
import './types.js';
|
|
2
|
+
import { PickableRendererProgramCache } from '../programs/picking/pickable-renderer.js';
|
|
3
|
+
import { ElementPointGlowProgramCache } from '../programs/point-on-globe/element-point-glow.js';
|
|
4
|
+
import { ElementGlobeSufaceGlowCache } from '../programs/point-on-globe/element-globe-surface-glow.js';
|
|
5
|
+
import { LineOnGlobeCache } from '../programs/line-on-globe/naive-accurate-flexible.js';
|
|
6
|
+
import { BufferOrchestrator, BufferManager } from "../util/account";
|
|
7
|
+
import { PickerDisplayer } from '../util/picking/picker-displayer.js';
|
|
8
|
+
import { wgs84ToCartesian3d, wgs84ToMercator } from '../Math/methods.js';
|
|
9
|
+
import { constraintFloat, opacityCheck } from '../util/check/typecheck.js';
|
|
10
|
+
import { createBufferAndReadInfo } from '../util/gl-util/buffer/attribute-loader';
|
|
11
|
+
import { CameraUniformBlockTotemCache } from '../programs/totems/camerauniformblock.js';
|
|
24
12
|
/**
|
|
25
13
|
* is used with depth we can create a line from surface to the point.
|
|
26
14
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var _b = _a.isGlowPointOn, isGlowPointOn = _b === void 0 ? true : _b, _c = _a.isGlowSurfaceOn, isGlowSurfaceOn = _c === void 0 ? true : _c;
|
|
15
|
+
const glowOverSize = 1.35; // 1.25 is the default value in the shader
|
|
16
|
+
class PointGlowLineToEarthPlugin {
|
|
17
|
+
constructor({ isGlowPointOn = true, isGlowSurfaceOn = true }) {
|
|
31
18
|
this.globe = null;
|
|
32
19
|
this.gl = null;
|
|
33
20
|
this._pickableWrapper = {};
|
|
@@ -35,8 +22,8 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
35
22
|
this._glowSurfaceWrapper = {};
|
|
36
23
|
this._lineProgramWrapper = {};
|
|
37
24
|
this._modes = {
|
|
38
|
-
isGlowPointOn
|
|
39
|
-
isGlowSurfaceOn
|
|
25
|
+
isGlowPointOn,
|
|
26
|
+
isGlowSurfaceOn
|
|
40
27
|
};
|
|
41
28
|
this._hoveredObjectId = null;
|
|
42
29
|
this._lastWH = { w: 0, h: 0 };
|
|
@@ -50,47 +37,45 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
50
37
|
this._tickPhase = 0;
|
|
51
38
|
this._parametersChanged = false;
|
|
52
39
|
}
|
|
53
|
-
|
|
40
|
+
init(globe, gl) {
|
|
54
41
|
this.globe = globe;
|
|
55
42
|
this.gl = gl;
|
|
56
43
|
this._init();
|
|
57
|
-
this._cameraBlockTotem =
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
var initialCapacity = 50;
|
|
65
|
-
this._bufferOrchestrator = new account_1.BufferOrchestrator({ initialCapacity: initialCapacity });
|
|
44
|
+
this._cameraBlockTotem = CameraUniformBlockTotemCache.get(this.globe);
|
|
45
|
+
}
|
|
46
|
+
_init() {
|
|
47
|
+
const { globe, gl, _pickableWrapper, _glowPointWrapper, _glowSurfaceWrapper, _lineProgramWrapper } = this;
|
|
48
|
+
const bufferType = "STATIC_DRAW";
|
|
49
|
+
const initialCapacity = 50;
|
|
50
|
+
this._bufferOrchestrator = new BufferOrchestrator({ initialCapacity });
|
|
66
51
|
this._bufferManagersMap = new Map([
|
|
67
52
|
['pos3D', {
|
|
68
|
-
bufferManager: new
|
|
69
|
-
adaptor:
|
|
53
|
+
bufferManager: new BufferManager(gl, 6, { bufferType, initialCapacity }),
|
|
54
|
+
adaptor: (item) => new Float32Array([...wgs84ToCartesian3d(item.long, item.lat, item.altitude / 1000), ...wgs84ToCartesian3d(item.long, item.lat, 0 / 1000)])
|
|
70
55
|
}],
|
|
71
56
|
['pos2D', {
|
|
72
|
-
bufferManager: new
|
|
73
|
-
adaptor:
|
|
57
|
+
bufferManager: new BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
58
|
+
adaptor: (item) => new Float32Array(wgs84ToMercator(item.long, item.lat))
|
|
74
59
|
}],
|
|
75
60
|
['rgba', {
|
|
76
|
-
bufferManager: new
|
|
77
|
-
adaptor:
|
|
61
|
+
bufferManager: new BufferManager(gl, 8, { bufferType, initialCapacity }),
|
|
62
|
+
adaptor: (item) => new Float32Array([...item.color, ...item.color])
|
|
78
63
|
}],
|
|
79
64
|
['size', {
|
|
80
|
-
bufferManager: new
|
|
81
|
-
adaptor:
|
|
65
|
+
bufferManager: new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
66
|
+
adaptor: (item) => new Float32Array([item.size])
|
|
82
67
|
}],
|
|
83
68
|
]);
|
|
84
|
-
_pickableWrapper.program =
|
|
85
|
-
_glowPointWrapper.program =
|
|
86
|
-
_lineProgramWrapper.program =
|
|
87
|
-
this._pickerDisplayer = new
|
|
88
|
-
|
|
89
|
-
_pickableWrapper.vao = _pickableWrapper.program.createVAO(
|
|
90
|
-
_pickableWrapper.vaoLine =
|
|
91
|
-
_pickableWrapper.vaoHoverPoint = _pickableWrapper.program.createVAO(
|
|
92
|
-
_pickableWrapper.vaoHoverLine =
|
|
93
|
-
_glowPointWrapper.vao = _glowPointWrapper.program.createVAO(
|
|
69
|
+
_pickableWrapper.program = PickableRendererProgramCache.get(globe);
|
|
70
|
+
_glowPointWrapper.program = ElementPointGlowProgramCache.get(globe);
|
|
71
|
+
_lineProgramWrapper.program = LineOnGlobeCache.get(globe);
|
|
72
|
+
this._pickerDisplayer = new PickerDisplayer(globe);
|
|
73
|
+
const obj = (key) => key === null ? null : createBufferAndReadInfo(this._bufferManagersMap.get(key).bufferManager.buffer);
|
|
74
|
+
_pickableWrapper.vao = _pickableWrapper.program.createVAO(createBufferAndReadInfo(this._bufferManagersMap.get('pos3D').bufferManager.buffer, 6 * 4, 0), createBufferAndReadInfo(this._bufferManagersMap.get('pos2D').bufferManager.buffer), createBufferAndReadInfo(this._bufferManagersMap.get('rgba').bufferManager.buffer, 8 * 4, 0), createBufferAndReadInfo(this._bufferManagersMap.get('size').bufferManager.buffer));
|
|
75
|
+
_pickableWrapper.vaoLine = _pickableWrapper.program.createVAO(...['pos3D', 'pos2D', 'rgba', null].map(obj));
|
|
76
|
+
_pickableWrapper.vaoHoverPoint = _pickableWrapper.program.createVAO(createBufferAndReadInfo(this._bufferManagersMap.get('pos3D').bufferManager.buffer, 6 * 4, 0), createBufferAndReadInfo(this._bufferManagersMap.get('pos2D').bufferManager.buffer), null, createBufferAndReadInfo(this._bufferManagersMap.get('size').bufferManager.buffer));
|
|
77
|
+
_pickableWrapper.vaoHoverLine = _pickableWrapper.program.createVAO(...['pos3D', 'pos2D', null, null].map(obj));
|
|
78
|
+
_glowPointWrapper.vao = _glowPointWrapper.program.createVAO(createBufferAndReadInfo(this._bufferManagersMap.get('pos3D').bufferManager.buffer, 6 * 4, 0), createBufferAndReadInfo(this._bufferManagersMap.get('pos2D').bufferManager.buffer), null, createBufferAndReadInfo(this._bufferManagersMap.get('size').bufferManager.buffer));
|
|
94
79
|
// _lineProgramWrapper.vao = _lineProgramWrapper.program.createVAO(
|
|
95
80
|
// ...[null, 'pos3D', null, 'reverse3D', null, null, "rgba"].map(obj)
|
|
96
81
|
// );
|
|
@@ -154,38 +139,37 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
154
139
|
// }
|
|
155
140
|
// _glowPointWrapper.ubo.update(new Map([["u_phase", [_glowPointWrapper._phase]]]));
|
|
156
141
|
// }
|
|
157
|
-
}
|
|
142
|
+
}
|
|
158
143
|
/**
|
|
159
144
|
*
|
|
160
145
|
* @param {Array<PointGlowData>} data
|
|
161
146
|
*/
|
|
162
|
-
|
|
163
|
-
|
|
147
|
+
insertBulk(data) {
|
|
148
|
+
const { _bufferManagersMap, _bufferOrchestrator, globe } = this;
|
|
164
149
|
_bufferOrchestrator.insertBulk(data, _bufferManagersMap);
|
|
165
150
|
this._changed();
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
151
|
+
}
|
|
152
|
+
setPointSizeMultiplier(sizeMultiplier) {
|
|
153
|
+
constraintFloat(sizeMultiplier, 0.1, null);
|
|
169
154
|
this._pickableWrapper.ubo.update(new Map([["u_size_multiplier", [sizeMultiplier]]]));
|
|
170
155
|
this._glowPointWrapper.ubo.update(new Map([["u_size_multiplier", [sizeMultiplier * 1.25]]]));
|
|
171
156
|
this._changed();
|
|
172
|
-
}
|
|
157
|
+
}
|
|
173
158
|
/**
|
|
174
159
|
* @param {DrawRange} drawRange if null draws all
|
|
175
160
|
* @returns
|
|
176
161
|
*/
|
|
177
|
-
|
|
178
|
-
if (drawRange === void 0) { drawRange = null; }
|
|
162
|
+
setDrawRange(drawRange = null) {
|
|
179
163
|
this._drawRange = drawRange;
|
|
180
164
|
this._changed();
|
|
181
|
-
}
|
|
165
|
+
}
|
|
182
166
|
/**
|
|
183
167
|
*
|
|
184
168
|
* sophisticated setDrawRange,
|
|
185
169
|
* 3 concepts:
|
|
186
170
|
*/
|
|
187
|
-
|
|
188
|
-
|
|
171
|
+
setGlowIndexes(glowIndexes) {
|
|
172
|
+
const { gl } = this;
|
|
189
173
|
if (!this._elementBuffer) {
|
|
190
174
|
this._elementBuffer = gl.createBuffer();
|
|
191
175
|
}
|
|
@@ -193,24 +177,24 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
193
177
|
gl.bindElementArrayBuffer(this._elementBuffer);
|
|
194
178
|
this._parametersChanged = true;
|
|
195
179
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(glowIndexes), gl.DYNAMIC_DRAW);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
|
|
180
|
+
}
|
|
181
|
+
setOpacity(opacity) {
|
|
182
|
+
opacityCheck(opacity);
|
|
199
183
|
this._opacity = opacity;
|
|
200
184
|
this._pickableWrapper.ubo.update(new Map([["u_opacity", [opacity]]]));
|
|
201
185
|
this._pickableWrapper.uboLine.update(new Map([["u_opacity", [opacity]]]));
|
|
202
186
|
this._glowPointWrapper.ubo.update(new Map([["u_opacity", [opacity * glowOverSize]]]));
|
|
203
187
|
this._changed();
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
188
|
+
}
|
|
189
|
+
draw3D() {
|
|
190
|
+
const { _pickableWrapper, _bufferOrchestrator, _drawRange, _pickerDisplayer } = this;
|
|
191
|
+
const { globe, gl } = this;
|
|
208
192
|
this._hoverAgent();
|
|
209
193
|
this.resize();
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
drawRange
|
|
194
|
+
const is3D = globe.api_GetCurrentGeometry() == 0;
|
|
195
|
+
const drawRange = _drawRange || { first: 0, count: _bufferOrchestrator.length };
|
|
196
|
+
const drawOptionsPoint = {
|
|
197
|
+
drawRange,
|
|
214
198
|
};
|
|
215
199
|
this._doDraw(drawOptionsPoint, is3D, drawRange);
|
|
216
200
|
_pickerDisplayer.drawColorTexture();
|
|
@@ -219,8 +203,8 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
219
203
|
}
|
|
220
204
|
// hover draw
|
|
221
205
|
gl.disable(gl.DEPTH_TEST);
|
|
222
|
-
|
|
223
|
-
|
|
206
|
+
const { program, vaoHoverPoint, vaoHoverLine, uboLineGlow } = _pickableWrapper;
|
|
207
|
+
const drawOptionsHoveredPoint = {
|
|
224
208
|
drawRange: {
|
|
225
209
|
first: this._hoveredObjectId,
|
|
226
210
|
count: 1
|
|
@@ -228,15 +212,15 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
228
212
|
};
|
|
229
213
|
// program.draw(vaoHoverPoint, drawptionsHoveredPoint, ubo);
|
|
230
214
|
if (true || this._modes.isGlowPointOn) {
|
|
231
|
-
|
|
215
|
+
const { program, vao, ubo } = this._glowPointWrapper;
|
|
232
216
|
// this._glowPointWrapper.phaseTick();
|
|
233
|
-
|
|
217
|
+
program.draw(vao, drawOptionsHoveredPoint, ubo);
|
|
234
218
|
}
|
|
235
219
|
else {
|
|
236
220
|
}
|
|
237
221
|
this.globe.DrawRender();
|
|
238
222
|
if (is3D) {
|
|
239
|
-
|
|
223
|
+
const drawOptionsHoveredLine = {
|
|
240
224
|
drawRange: {
|
|
241
225
|
first: this._hoveredObjectId * 2,
|
|
242
226
|
count: 2
|
|
@@ -248,10 +232,10 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
248
232
|
}
|
|
249
233
|
this._phaseTick();
|
|
250
234
|
gl.enable(gl.DEPTH_TEST);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
235
|
+
}
|
|
236
|
+
_doDraw(drawOptionsPoint, is3D, drawRange) {
|
|
237
|
+
const { gl, _pickableWrapper, _pickerDisplayer } = this;
|
|
238
|
+
const { program, vao, ubo, uboLine, vaoLine } = _pickableWrapper;
|
|
255
239
|
if (this._doesChanged()) {
|
|
256
240
|
_pickerDisplayer.bindFBO();
|
|
257
241
|
_pickerDisplayer.clearTextures();
|
|
@@ -259,7 +243,7 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
259
243
|
program.draw(vao, drawOptionsPoint, ubo);
|
|
260
244
|
}
|
|
261
245
|
if (is3D) {
|
|
262
|
-
|
|
246
|
+
const drawOptionsLine = {
|
|
263
247
|
drawRange: {
|
|
264
248
|
first: drawRange.first * 2,
|
|
265
249
|
count: drawRange.count * 2
|
|
@@ -278,80 +262,77 @@ var PointGlowLineToEarthPlugin = /** @class */ (function () {
|
|
|
278
262
|
]));
|
|
279
263
|
program.draw(vaoLine, drawOptionsLine, uboLine);
|
|
280
264
|
}
|
|
281
|
-
}
|
|
282
|
-
|
|
265
|
+
}
|
|
266
|
+
getCurrentSelection() {
|
|
283
267
|
return this._hoveredObjectId;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
268
|
+
}
|
|
269
|
+
resize() {
|
|
270
|
+
const w = this.globe.api_ScrW();
|
|
271
|
+
const h = this.globe.api_ScrH();
|
|
288
272
|
if (w === this._lastWH.w && h === this._lastWH.h)
|
|
289
273
|
return;
|
|
290
274
|
this._lastWH.w = w;
|
|
291
275
|
this._lastWH.h = h;
|
|
292
276
|
this._pickerDisplayer.resize();
|
|
293
277
|
this._changed();
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
_this.gl.deleteVertexArray(vao);
|
|
278
|
+
}
|
|
279
|
+
free() {
|
|
280
|
+
const { _pickableWrapper, _glowPointWrapper, _glowSurfaceWrapper, _lineProgramWrapper } = this;
|
|
281
|
+
[_pickableWrapper, _glowPointWrapper, _glowSurfaceWrapper, _lineProgramWrapper].forEach((item) => {
|
|
282
|
+
const { vao, ubo } = item;
|
|
283
|
+
ubo?.free();
|
|
284
|
+
this.gl.deleteVertexArray(vao);
|
|
302
285
|
});
|
|
303
|
-
|
|
304
|
-
|
|
286
|
+
PickableRendererProgramCache.release(this.globe);
|
|
287
|
+
ElementPointGlowProgramCache.release(this.globe);
|
|
305
288
|
// ElementGlobeSufaceGlowCache.release(this.globe); // TODO: uncomment when needed
|
|
306
|
-
|
|
289
|
+
LineOnGlobeCache.release(this.globe);
|
|
307
290
|
if (this._elementBuffer)
|
|
308
291
|
this.gl.deleteBuffer(this._elementBuffer);
|
|
309
292
|
this._pickerDisplayer.free();
|
|
310
|
-
this._bufferManagersMap.forEach(
|
|
293
|
+
this._bufferManagersMap.forEach((item) => item.bufferManager.free());
|
|
311
294
|
this._bufferManagersMap.clear();
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
|
|
295
|
+
CameraUniformBlockTotemCache.release(this.globe);
|
|
296
|
+
}
|
|
297
|
+
_phaseTick() {
|
|
315
298
|
this._tickPhase += 0.003;
|
|
316
299
|
if (this._tickPhase > 1) {
|
|
317
300
|
this._tickPhase = 0;
|
|
318
301
|
}
|
|
319
302
|
this._glowPointWrapper.ubo.update(new Map([["u_phase", [this._tickPhase * 2]]]));
|
|
320
303
|
this._pickableWrapper.uboLineGlow.update(new Map([["u_dash_phase", [1 - this._tickPhase]]]));
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
var currentTime = new Date().getTime();
|
|
304
|
+
}
|
|
305
|
+
_hoverAgent() {
|
|
306
|
+
const { globe, _hoverAgentParams } = this;
|
|
307
|
+
const pos = globe.api_GetMousePos();
|
|
308
|
+
const currentTime = new Date().getTime();
|
|
327
309
|
if (_hoverAgentParams.stillPicking || _hoverAgentParams.timePass > currentTime) {
|
|
328
310
|
return;
|
|
329
311
|
}
|
|
330
312
|
;
|
|
331
313
|
_hoverAgentParams.timePass = currentTime + _hoverAgentParams.timeGap;
|
|
332
|
-
|
|
333
|
-
|
|
314
|
+
const x = pos.canvasX;
|
|
315
|
+
const y = globe.api_ScrH() - pos.canvasY;
|
|
334
316
|
_hoverAgentParams.stillPicking = true;
|
|
335
|
-
this._pickerDisplayer.pickXY(x, y, 1,
|
|
317
|
+
this._pickerDisplayer.pickXY(x, y, 1, (idSet) => {
|
|
336
318
|
_hoverAgentParams.stillPicking = false;
|
|
337
319
|
if (idSet.size === 0) {
|
|
338
|
-
|
|
320
|
+
this._hoveredObjectId = -1;
|
|
339
321
|
return;
|
|
340
322
|
}
|
|
341
|
-
|
|
342
|
-
if (index !==
|
|
343
|
-
|
|
344
|
-
|
|
323
|
+
const index = [...idSet][0];
|
|
324
|
+
if (index !== this._hoveredObjectId) {
|
|
325
|
+
this._hoveredObjectId = index;
|
|
326
|
+
this.globe.DrawRender();
|
|
345
327
|
}
|
|
346
328
|
});
|
|
347
|
-
}
|
|
348
|
-
|
|
329
|
+
}
|
|
330
|
+
_doesChanged() {
|
|
349
331
|
return this._cameraBlockTotem.isMoved() || this._parametersChanged; // TODO: implement
|
|
350
|
-
}
|
|
351
|
-
|
|
332
|
+
}
|
|
333
|
+
_changed() {
|
|
352
334
|
this._parametersChanged = true;
|
|
353
335
|
this.globe.DrawRender();
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
exports.PointGlowLineToEarthPlugin = PointGlowLineToEarthPlugin;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
export { PointGlowLineToEarthPlugin };
|
package/arrowfield/adaptor.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function centigradePlus90ToRadians(centigradeArray, noDataValue) {
|
|
5
|
-
if (noDataValue === void 0) { noDataValue = -9999; }
|
|
6
|
-
var radiansArray = new Float32Array(centigradeArray.length);
|
|
7
|
-
for (var i = 0; i < centigradeArray.length; i++) {
|
|
1
|
+
export function centigradePlus90ToRadians(centigradeArray, noDataValue = -9999) {
|
|
2
|
+
const radiansArray = new Float32Array(centigradeArray.length);
|
|
3
|
+
for (let i = 0; i < centigradeArray.length; i++) {
|
|
8
4
|
if (centigradeArray[i] === noDataValue) {
|
|
9
5
|
radiansArray[i] = noDataValue;
|
|
10
6
|
continue;
|