@pirireis/webglobeplugins 0.6.28-c → 0.6.30-c
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/bearing-line/plugin copy.js +542 -0
- package/bearing-line/plugin.js +59 -67
- package/package.json +1 -1
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +20 -13
- package/programs/line-on-globe/lines-color-instanced-flat.js +7 -8
- package/programs/line-on-globe/util.js +8 -0
- package/programs/util.js +4 -1
- package/rangerings/plugin.js +228 -234
- package/util/check/get.js +1 -0
- package/write-text/context-text3.js +8 -0
package/rangerings/plugin.js
CHANGED
|
@@ -53,242 +53,32 @@ import { populateFloat32Array } from "../util/jshelpers/data-filler";
|
|
|
53
53
|
import { RingAccount, ringKeyMethod, ringBigPaddingKeyMethod } from "./ring-account";
|
|
54
54
|
import { CirclePadding3DCache } from "../programs/line-on-globe/degree-padding-around-circle-3d";
|
|
55
55
|
import { LineOnGlobeCache } from '../programs/line-on-globe/naive-accurate';
|
|
56
|
-
|
|
57
56
|
import RangeRingAngleText from "./rangeringangletext";
|
|
57
|
+
import { Z_ALPHA_MODE } from "../programs/line-on-globe/util";
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
* Programs:
|
|
61
|
-
*
|
|
62
|
-
* circle3d circle2d padding3d padding2d
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* */
|
|
59
|
+
const CIRCLE_FLAT_EDGE_COUNT = 362; // 360 + 2 for closing the circle and a cutting point
|
|
66
60
|
|
|
67
61
|
|
|
68
|
-
/**
|
|
69
|
-
* [+] Draw circles
|
|
70
|
-
* [+] BUG BUFFER OVERFLOW
|
|
71
|
-
* [+] Draw one degree paddings 2d
|
|
72
|
-
* [+] Create a program for accurate padding 3d
|
|
73
|
-
* [+] Draw one degree paddings 3d
|
|
74
|
-
* [+] Draw big paddings
|
|
75
|
-
* [+] DrawText
|
|
76
|
-
* [+] big paddings does not remove
|
|
77
|
-
*/
|
|
78
62
|
|
|
79
|
-
// TODO make long,lat -> long, lat
|
|
80
63
|
|
|
81
64
|
class RangeRings {
|
|
82
|
-
constructor(id, { oneDegreePadding = true, showNumbers = true, numbersStyle = null, opacity = 1 } = {}) {
|
|
65
|
+
constructor(id, { oneDegreePadding = true, showNumbers = true, numbersStyle = null, opacity = 1, zAlphaOnDegreePadding = Z_ALPHA_MODE.ON } = {}) {
|
|
83
66
|
|
|
84
67
|
this.id = id;
|
|
85
68
|
|
|
86
69
|
this._oneDegreePadding = oneDegreePadding;
|
|
70
|
+
this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
|
|
87
71
|
this._showNumbers = showNumbers;
|
|
88
72
|
this._numbersStyle = numbersStyle;
|
|
89
73
|
this._opacity = opacity;
|
|
90
|
-
this._circleFlatEdgeCount = 362;
|
|
91
74
|
this._ringAccount = new RingAccount();
|
|
92
75
|
|
|
93
76
|
}
|
|
94
77
|
|
|
95
78
|
|
|
96
|
-
init(globe, gl) {
|
|
97
|
-
this.globe = globe;
|
|
98
|
-
this.gl = gl;
|
|
99
|
-
this._initPrograms();
|
|
100
|
-
this._initBufferManagers();
|
|
101
|
-
if (this._showNumbers) {
|
|
102
|
-
this.textPlugin = new RangeRingAngleText(globe, this.id + "text", { flatCompassMode: this.compass, style: this._numbersStyle, opacity: this._opacity });
|
|
103
|
-
delete this._numbersStyle;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
_initPrograms() {
|
|
109
|
-
const { globe } = this;
|
|
110
|
-
this._circleProgram2D = CircleCache2D.get(globe);
|
|
111
|
-
this._circleProgram3D = CircleCache3D.get(globe);
|
|
112
|
-
this._padding2dProgram = LinesColorInstancedFlatCache.get(globe);
|
|
113
|
-
this._padding3dProgram = CirclePadding3DCache.get(globe);
|
|
114
|
-
this._bigPadding3dFlatProgram = LineOnGlobeCache.get(globe);
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
_initBufferManagers() {
|
|
120
|
-
const { globe, gl, _circleFlatEdgeCount } = this;
|
|
121
|
-
|
|
122
|
-
const initialCapacity = 10;
|
|
123
|
-
const bufferType = "DYNAMIC_DRAW";
|
|
124
|
-
// circle2d, circle3d, 1 degree paddings,
|
|
125
|
-
this.bufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity });
|
|
126
|
-
|
|
127
|
-
this.bufferManagersCompMap = new Map(
|
|
128
|
-
[
|
|
129
|
-
// circle 3D
|
|
130
|
-
["centerCoords3d", {
|
|
131
|
-
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
132
|
-
'adaptor': (item) => new Float32Array(item.centerCoords3d),
|
|
133
|
-
}],
|
|
134
|
-
["rgba", {
|
|
135
|
-
'bufferManager': new BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
136
|
-
'adaptor': (item) => new Float32Array(item.hide === 1 ? [0, 0, 0, 0] : item.rgba)
|
|
137
|
-
}],
|
|
138
|
-
["radius3d", {
|
|
139
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
140
|
-
'adaptor': (item) => new Float32Array([item.radius])
|
|
141
|
-
}],
|
|
142
|
-
["radius3dsmall", {
|
|
143
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
144
|
-
'adaptor': (item) => new Float32Array([item.radius - item.padding / 3])
|
|
145
|
-
}],
|
|
146
|
-
["circleDashAngle", {
|
|
147
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
148
|
-
'adaptor': (item) => new Float32Array([1]),
|
|
149
|
-
}],
|
|
150
|
-
["dashOpacity", {
|
|
151
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
152
|
-
'adaptor': (item) => new Float32Array([1]),
|
|
153
|
-
}],
|
|
154
|
-
|
|
155
|
-
// circle 2D
|
|
156
|
-
["centerCoords2dflatForPadding", {
|
|
157
|
-
'bufferManager': new BufferManager(gl, _circleFlatEdgeCount * 2, { bufferType, initialCapacity }),
|
|
158
|
-
'adaptor': (item) => item.centerCoords2dflatForPadding,
|
|
159
|
-
}],
|
|
160
|
-
["centerCoords2dflat", {
|
|
161
|
-
'bufferManager': new BufferManager(gl, _circleFlatEdgeCount * 2, { bufferType, initialCapacity }),
|
|
162
|
-
'adaptor': (item) => item.centerCoords2dflat,
|
|
163
|
-
}],
|
|
164
|
-
["rgbaMercator", {
|
|
165
|
-
'bufferManager': new BufferManager(gl, 4 * _circleFlatEdgeCount, { bufferType, initialCapacity }),
|
|
166
|
-
'adaptor': (item) => populateFloat32Array.fillWithListData(_circleFlatEdgeCount, item.hide === 1 ? [0, 0, 0, 0] : item.rgba),
|
|
167
|
-
}],
|
|
168
|
-
["circleDashAngleMercator", {
|
|
169
|
-
'bufferManager': new BufferManager(gl, _circleFlatEdgeCount, { bufferType, initialCapacity }),
|
|
170
|
-
'adaptor': (item) => populateFloat32Array.fillFloat32Array(_circleFlatEdgeCount, 1),
|
|
171
|
-
}],
|
|
172
|
-
["dashOpacityMercator", {
|
|
173
|
-
'bufferManager': new BufferManager(gl, _circleFlatEdgeCount, { bufferType, initialCapacity }),
|
|
174
|
-
'adaptor': (item) => populateFloat32Array.fillFloat32Array(_circleFlatEdgeCount, 1),
|
|
175
|
-
}],
|
|
176
|
-
]
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
const obj = function (bufferManagerComp, divisor = 1) {
|
|
180
|
-
return { 'buffer': bufferManagerComp.bufferManager.buffer, 'stride': 0, 'offset': 0, divisor }
|
|
181
|
-
|
|
182
|
-
};
|
|
183
|
-
this.circle2DVao = this._circleProgram2D.createVAO(
|
|
184
|
-
...["centerCoords2dflat", "rgbaMercator", "circleDashAngleMercator", "dashOpacityMercator"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
185
|
-
);
|
|
186
|
-
this.circle3DVao = this._circleProgram3D.createVAO(
|
|
187
|
-
...["centerCoords3d", "radius3d", "rgba", "circleDashAngle", "dashOpacity"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
this.oneDegreePaddingVao = this._padding2dProgram.createVAO(
|
|
191
|
-
{ buffer: this.bufferManagersCompMap.get("centerCoords2dflat").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
|
|
192
|
-
{ buffer: this.bufferManagersCompMap.get("centerCoords2dflatForPadding").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
|
|
193
|
-
{ buffer: this.bufferManagersCompMap.get("rgbaMercator").bufferManager.buffer, size: 4, stride: 0, offset: 0 },
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
// PADDING
|
|
197
|
-
// this one needs glue to assosiate rings and their big paddings since the count for center is not fixed
|
|
198
|
-
this.paddingBufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity });
|
|
199
|
-
this.bufferManagersCompMapPadding = new Map(
|
|
200
|
-
[
|
|
201
|
-
["circlePoint", {
|
|
202
|
-
'bufferManager': new BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
203
|
-
'adaptor': (item) => item.circlePoint,
|
|
204
|
-
}],
|
|
205
|
-
["paddingPoint", {
|
|
206
|
-
'bufferManager': new BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
207
|
-
'adaptor': (item) => item.paddingPoint,
|
|
208
|
-
}],
|
|
209
|
-
["circlePoint3d", {
|
|
210
|
-
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
211
|
-
'adaptor': (item) => item.circlePoint3d
|
|
212
|
-
}],
|
|
213
|
-
["paddingPoint3d", {
|
|
214
|
-
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
215
|
-
'adaptor': (item) => item.paddingPoint3d
|
|
216
|
-
}],
|
|
217
|
-
["rgba", {
|
|
218
|
-
'bufferManager': new BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
219
|
-
'adaptor': (item) => new Float32Array(item.rgba)
|
|
220
|
-
}],
|
|
221
|
-
|
|
222
|
-
["dashOpacity", {
|
|
223
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
224
|
-
'adaptor': (item) => new Float32Array([1]),
|
|
225
|
-
}],
|
|
226
|
-
["dashRatio", {
|
|
227
|
-
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
228
|
-
'adaptor': (item) => new Float32Array([1]),
|
|
229
|
-
}],
|
|
230
|
-
]
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
this._bigPadding3dFlatVAO = this._bigPadding3dFlatProgram.createVAO(
|
|
234
|
-
...["circlePoint", "circlePoint3d", "paddingPoint", "paddingPoint3d", "dashRatio", "dashOpacity", "rgba",].map(key => obj(this.bufferManagersCompMapPadding.get(key)))
|
|
235
|
-
);
|
|
236
|
-
|
|
237
|
-
this._padding3dOneDegreeVao = this._padding3dProgram.createVAO(
|
|
238
|
-
...["centerCoords3d", "radius3d", "radius3dsmall", "rgba"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
// GLOBE API
|
|
245
|
-
|
|
246
|
-
draw3D() {
|
|
247
|
-
const {
|
|
248
|
-
globe, gl,
|
|
249
|
-
_circleProgram2D, _circleProgram3D, _padding2dProgram, _padding3dProgram, _bigPadding3dFlatProgram,
|
|
250
|
-
circle2DVao, circle3DVao, oneDegreePaddingVao, _padding3dOneDegreeVao, _bigPadding3dFlatVAO,
|
|
251
|
-
bufferOrchestrator, paddingBufferOrchestrator,
|
|
252
|
-
_circleFlatEdgeCount, _opacity, _oneDegreePadding } = this;
|
|
253
|
-
gl.disable(gl.DEPTH_TEST);
|
|
254
|
-
const is3D = globe.api_GetCurrentGeometry() === 0;
|
|
255
|
-
// const lod = globe.api_GetCurrentLOD();
|
|
256
|
-
if (is3D) {
|
|
257
|
-
_circleProgram3D.draw(circle3DVao, bufferOrchestrator.length, _opacity);
|
|
258
|
-
if (_oneDegreePadding) _padding3dProgram.draw(_padding3dOneDegreeVao, bufferOrchestrator.length, 360, 1, _opacity);
|
|
259
|
-
} else {
|
|
260
|
-
_circleProgram2D.draw(circle2DVao, bufferOrchestrator.length, _circleFlatEdgeCount, _opacity);
|
|
261
|
-
// _padding2dProgram.draw(bigPaddingVAO, paddingBufferOrchestrator.length, _opacity);
|
|
262
|
-
if (_oneDegreePadding) _padding2dProgram.draw(oneDegreePaddingVao, bufferOrchestrator.length * _circleFlatEdgeCount, _opacity);
|
|
263
|
-
}
|
|
264
|
-
_bigPadding3dFlatProgram.draw(_bigPadding3dFlatVAO, paddingBufferOrchestrator.length, _opacity);
|
|
265
|
-
gl.enable(gl.DEPTH_TEST);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
free() {
|
|
269
|
-
if (this._isFreed) return;
|
|
270
|
-
const { globe } = this;
|
|
271
|
-
this.bufferManagersCompMap.forEach(({ bufferManager }) => bufferManager.free());
|
|
272
|
-
this.bufferManagersCompMapPadding.forEach(({ bufferManager }) => bufferManager.free());
|
|
273
|
-
// delete vaos
|
|
274
|
-
this.gl.deleteVertexArray(this.circle2DVao);
|
|
275
|
-
this.gl.deleteVertexArray(this.circle3DVao);
|
|
276
|
-
this.gl.deleteVertexArray(this.oneDegreePaddingVao);
|
|
277
|
-
this.gl.deleteVertexArray(this._padding3dOneDegreeVao);
|
|
278
|
-
this.gl.deleteVertexArray(this._bigPadding3dFlatVAO);
|
|
279
|
-
// delete programs
|
|
280
|
-
CircleCache2D.release(globe);
|
|
281
|
-
CircleCache3D.release(globe);
|
|
282
|
-
LinesColorInstancedFlatCache.release(globe);
|
|
283
|
-
CirclePadding3DCache.release(globe);
|
|
284
|
-
LineOnGlobeCache.release(globe);
|
|
285
|
-
this.textPlugin?.free();
|
|
286
|
-
|
|
287
|
-
this._isFreed = true;
|
|
288
|
-
}
|
|
289
79
|
|
|
290
80
|
|
|
291
|
-
// API
|
|
81
|
+
// USER API
|
|
292
82
|
|
|
293
83
|
/**
|
|
294
84
|
* @method updateCentersCoordinate @param { Array < { centerID, long,lat } >} items
|
|
@@ -354,10 +144,8 @@ class RangeRings {
|
|
|
354
144
|
const paddingDatas = this.__reconstructCentralRingsBigPaddings(item.centerID);
|
|
355
145
|
paddingBufferOrchestrator.insertBulk(paddingDatas, bufferManagersCompMapPadding);
|
|
356
146
|
}
|
|
357
|
-
|
|
358
147
|
this.textPlugin?.insertBulk(items);
|
|
359
148
|
globe.DrawRender();
|
|
360
|
-
|
|
361
149
|
}
|
|
362
150
|
|
|
363
151
|
|
|
@@ -458,7 +246,6 @@ class RangeRings {
|
|
|
458
246
|
* @method setOpacity @param { number } opacity
|
|
459
247
|
*/
|
|
460
248
|
setOpacity(opacity) {
|
|
461
|
-
console.log("opacity", opacity, typeof opacity);
|
|
462
249
|
if (typeof opacity !== "number" || opacity < 0 || opacity > 1) throw new Error("Invalid opacity value");
|
|
463
250
|
this._opacity = opacity;
|
|
464
251
|
this.textPlugin?.setOpacity(opacity);
|
|
@@ -470,25 +257,163 @@ class RangeRings {
|
|
|
470
257
|
* @method setOneDegreePaddingOn // performance consuming, might be removed
|
|
471
258
|
*/
|
|
472
259
|
setOneDegreePaddingOn(isOneDegreePaddingOn) {
|
|
473
|
-
|
|
260
|
+
if (typeof isOneDegreePaddingOn !== "boolean") throw new Error("Invalid value for one degree padding");
|
|
474
261
|
if (this._oneDegreePadding === isOneDegreePaddingOn) return;
|
|
475
262
|
this._oneDegreePadding = isOneDegreePaddingOn;
|
|
263
|
+
this.globe.DrawRender();
|
|
264
|
+
}
|
|
476
265
|
|
|
477
|
-
// Complicated
|
|
478
|
-
// if (isOneDegreePaddingOn) {
|
|
479
|
-
// // fill the Coordinate Buffer for 1 degree Padding
|
|
480
|
-
// // Use orchastrator to create data for all rings
|
|
481
266
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
267
|
+
setZAlphaOnDegreePadding(zAlphaOnDegreePadding) {
|
|
268
|
+
if (zAlphaOnDegreePadding !== 0 && zAlphaOnDegreePadding !== 1) throw new Error("Invalid value for zAlphaOnDegreePadding");
|
|
269
|
+
if (this._zAlphaOnDegreePadding === zAlphaOnDegreePadding) return;
|
|
270
|
+
this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
|
|
271
|
+
this.globe.DrawRender();
|
|
485
272
|
}
|
|
486
273
|
|
|
274
|
+
|
|
275
|
+
// PRIVATE METHODS
|
|
276
|
+
|
|
277
|
+
_initPrograms() {
|
|
278
|
+
const { globe } = this;
|
|
279
|
+
this._circleProgram2D = CircleCache2D.get(globe);
|
|
280
|
+
this._circleProgram3D = CircleCache3D.get(globe);
|
|
281
|
+
this._padding2dProgram = LinesColorInstancedFlatCache.get(globe);
|
|
282
|
+
this._padding3dProgram = CirclePadding3DCache.get(globe);
|
|
283
|
+
this._bigPadding3dFlatProgram = LineOnGlobeCache.get(globe);
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
_initBufferManagers() {
|
|
289
|
+
const { gl } = this;
|
|
290
|
+
|
|
291
|
+
const initialCapacity = 10;
|
|
292
|
+
const bufferType = "DYNAMIC_DRAW";
|
|
293
|
+
// circle2d, circle3d, 1 degree paddings,
|
|
294
|
+
this.bufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity });
|
|
295
|
+
|
|
296
|
+
this.bufferManagersCompMap = new Map(
|
|
297
|
+
[
|
|
298
|
+
// circle 3D
|
|
299
|
+
["centerCoords3d", {
|
|
300
|
+
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
301
|
+
'adaptor': (item) => new Float32Array(item.centerCoords3d),
|
|
302
|
+
}],
|
|
303
|
+
["rgba", {
|
|
304
|
+
'bufferManager': new BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
305
|
+
'adaptor': (item) => new Float32Array(item.hide === 1 ? [0, 0, 0, 0] : item.rgba)
|
|
306
|
+
}],
|
|
307
|
+
["radius3d", {
|
|
308
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
309
|
+
'adaptor': (item) => new Float32Array([item.radius])
|
|
310
|
+
}],
|
|
311
|
+
["radius3dsmall", {
|
|
312
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
313
|
+
'adaptor': (item) => new Float32Array([item.radius - item.padding / 3])
|
|
314
|
+
}],
|
|
315
|
+
["circleDashAngle", {
|
|
316
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
317
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
318
|
+
}],
|
|
319
|
+
["dashOpacity", {
|
|
320
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
321
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
322
|
+
}],
|
|
323
|
+
|
|
324
|
+
// circle 2D
|
|
325
|
+
["centerCoords2dflatForPadding", {
|
|
326
|
+
'bufferManager': new BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType, initialCapacity }),
|
|
327
|
+
'adaptor': (item) => item.centerCoords2dflatForPadding,
|
|
328
|
+
}],
|
|
329
|
+
["centerCoords2dflat", {
|
|
330
|
+
'bufferManager': new BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType, initialCapacity }),
|
|
331
|
+
'adaptor': (item) => item.centerCoords2dflat,
|
|
332
|
+
}],
|
|
333
|
+
["rgbaMercator", {
|
|
334
|
+
'bufferManager': new BufferManager(gl, 4 * CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
335
|
+
'adaptor': (item) => populateFloat32Array.fillWithListData(CIRCLE_FLAT_EDGE_COUNT, item.hide === 1 ? [0, 0, 0, 0] : item.rgba),
|
|
336
|
+
}],
|
|
337
|
+
["circleDashAngleMercator", {
|
|
338
|
+
'bufferManager': new BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
339
|
+
'adaptor': (item) => populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1),
|
|
340
|
+
}],
|
|
341
|
+
["dashOpacityMercator", {
|
|
342
|
+
'bufferManager': new BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
343
|
+
'adaptor': (item) => populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1),
|
|
344
|
+
}],
|
|
345
|
+
]
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
const obj = function (bufferManagerComp, divisor = 1) {
|
|
349
|
+
return { 'buffer': bufferManagerComp.bufferManager.buffer, 'stride': 0, 'offset': 0, divisor }
|
|
350
|
+
|
|
351
|
+
};
|
|
352
|
+
this._circle2DVao = this._circleProgram2D.createVAO(
|
|
353
|
+
...["centerCoords2dflat", "rgbaMercator", "circleDashAngleMercator", "dashOpacityMercator"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
354
|
+
);
|
|
355
|
+
this._circle3DVao = this._circleProgram3D.createVAO(
|
|
356
|
+
...["centerCoords3d", "radius3d", "rgba", "circleDashAngle", "dashOpacity"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
357
|
+
);
|
|
358
|
+
|
|
359
|
+
this._oneDegreePaddingVao = this._padding2dProgram.createVAO(
|
|
360
|
+
{ buffer: this.bufferManagersCompMap.get("centerCoords2dflat").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
|
|
361
|
+
{ buffer: this.bufferManagersCompMap.get("centerCoords2dflatForPadding").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
|
|
362
|
+
{ buffer: this.bufferManagersCompMap.get("rgbaMercator").bufferManager.buffer, size: 4, stride: 0, offset: 0 },
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
// PADDING
|
|
366
|
+
// this one needs glue to assosiate rings and their big paddings since the count for center is not fixed
|
|
367
|
+
this.paddingBufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity });
|
|
368
|
+
this.bufferManagersCompMapPadding = new Map(
|
|
369
|
+
[
|
|
370
|
+
["circlePoint", {
|
|
371
|
+
'bufferManager': new BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
372
|
+
'adaptor': (item) => item.circlePoint,
|
|
373
|
+
}],
|
|
374
|
+
["paddingPoint", {
|
|
375
|
+
'bufferManager': new BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
376
|
+
'adaptor': (item) => item.paddingPoint,
|
|
377
|
+
}],
|
|
378
|
+
["circlePoint3d", {
|
|
379
|
+
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
380
|
+
'adaptor': (item) => item.circlePoint3d
|
|
381
|
+
}],
|
|
382
|
+
["paddingPoint3d", {
|
|
383
|
+
'bufferManager': new BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
384
|
+
'adaptor': (item) => item.paddingPoint3d
|
|
385
|
+
}],
|
|
386
|
+
["rgba", {
|
|
387
|
+
'bufferManager': new BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
388
|
+
'adaptor': (item) => new Float32Array(item.rgba)
|
|
389
|
+
}],
|
|
390
|
+
|
|
391
|
+
["dashOpacity", {
|
|
392
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
393
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
394
|
+
}],
|
|
395
|
+
["dashRatio", {
|
|
396
|
+
'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
397
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
398
|
+
}],
|
|
399
|
+
]
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
this._bigPadding3dFlatVAO = this._bigPadding3dFlatProgram.createVAO(
|
|
403
|
+
...["circlePoint", "circlePoint3d", "paddingPoint", "paddingPoint3d", "dashRatio", "dashOpacity", "rgba",].map(key => obj(this.bufferManagersCompMapPadding.get(key)))
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
this._padding3dOneDegreeVao = this._padding3dProgram.createVAO(
|
|
407
|
+
...["centerCoords3d", "radius3d", "radius3dsmall", "rgba"].map(key => obj(this.bufferManagersCompMap.get(key)))
|
|
408
|
+
);
|
|
409
|
+
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
|
|
487
413
|
__reconstructCentralRingsBigPaddings(centerID) {
|
|
488
|
-
const { globe
|
|
414
|
+
const { globe } = this;
|
|
489
415
|
const centerItem = this._ringAccount.getCenter(centerID);
|
|
490
416
|
if (centerItem === undefined) throw new Error("Center not found");
|
|
491
|
-
const findPointByPolar = globe.Math.FindPointByPolar;
|
|
492
417
|
const { long, lat, stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
|
|
493
418
|
const result = [];
|
|
494
419
|
const color = hide === 1 ? new Float32Array([0, 0, 0, 0]) : new Float32Array(rgba)
|
|
@@ -514,20 +439,22 @@ class RangeRings {
|
|
|
514
439
|
return result;
|
|
515
440
|
}
|
|
516
441
|
|
|
442
|
+
// IMPLICIT METHODS
|
|
443
|
+
|
|
517
444
|
__reconstructCentralRings(centerID) {
|
|
518
|
-
const { globe
|
|
445
|
+
const { globe } = this;
|
|
519
446
|
const centerItem = this._ringAccount.getCenter(centerID);
|
|
520
447
|
if (centerItem === undefined) throw new Error("Center not found");
|
|
521
448
|
|
|
522
|
-
const { long, lat,
|
|
449
|
+
const { long, lat, rgba, rings, hide = 0, textHide = 0 } = centerItem;
|
|
523
450
|
const centerCoords3d = globe.api_GetCartesian3DPoint(long, lat, 0, 0);
|
|
524
451
|
|
|
525
452
|
const result = [];
|
|
526
453
|
|
|
527
454
|
for (const { ringID, radius, padding } of rings) {
|
|
528
455
|
const key = ringKeyMethod(centerID, ringID);
|
|
529
|
-
const centerCoords2dflat = centerCoords2dflatDataCreatorWithRadius(globe, long, lat, radius, { edgeCount:
|
|
530
|
-
const centerCoords2dflatForPadding = centerCoords2dflatDataCreatorWithRadius(globe, long, lat, radius - padding / 3, { edgeCount:
|
|
456
|
+
const centerCoords2dflat = centerCoords2dflatDataCreatorWithRadius(globe, long, lat, radius, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
|
|
457
|
+
const centerCoords2dflatForPadding = centerCoords2dflatDataCreatorWithRadius(globe, long, lat, radius - padding / 3, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
|
|
531
458
|
result.push({
|
|
532
459
|
key,
|
|
533
460
|
centerCoords3d,
|
|
@@ -547,7 +474,7 @@ class RangeRings {
|
|
|
547
474
|
__reconstructCentralPaddingProperties(centerID) {
|
|
548
475
|
const centerItem = this._ringAccount.getCenter(centerID);
|
|
549
476
|
if (centerItem === undefined) throw new Error("Center not found");
|
|
550
|
-
const {
|
|
477
|
+
const { stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
|
|
551
478
|
const result = [];
|
|
552
479
|
for (const { ringID, } of rings) {
|
|
553
480
|
let angle = 0;
|
|
@@ -578,7 +505,74 @@ class RangeRings {
|
|
|
578
505
|
}
|
|
579
506
|
return result;
|
|
580
507
|
}
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
// GLOBE API
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
init(globe, gl) {
|
|
515
|
+
this.globe = globe;
|
|
516
|
+
this.gl = gl;
|
|
517
|
+
this._initPrograms();
|
|
518
|
+
this._initBufferManagers();
|
|
519
|
+
if (this._showNumbers) {
|
|
520
|
+
this.textPlugin = new RangeRingAngleText(globe, this.id + "text", { flatCompassMode: this.compass, style: this._numbersStyle, opacity: this._opacity });
|
|
521
|
+
delete this._numbersStyle;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
draw3D() {
|
|
528
|
+
const {
|
|
529
|
+
globe, gl,
|
|
530
|
+
_circleProgram2D, _circleProgram3D, _padding2dProgram, _padding3dProgram, _bigPadding3dFlatProgram,
|
|
531
|
+
_circle2DVao, _circle3DVao, _oneDegreePaddingVao, _padding3dOneDegreeVao, _bigPadding3dFlatVAO,
|
|
532
|
+
bufferOrchestrator, paddingBufferOrchestrator,
|
|
533
|
+
_opacity, _oneDegreePadding, _zAlphaOnDegreePadding } = this;
|
|
534
|
+
gl.disable(gl.DEPTH_TEST);
|
|
535
|
+
const is3D = globe.api_GetCurrentGeometry() === 0;
|
|
536
|
+
// const lod = globe.api_GetCurrentLOD();
|
|
537
|
+
if (is3D) {
|
|
538
|
+
_circleProgram3D.draw(_circle3DVao, bufferOrchestrator.length, _opacity);
|
|
539
|
+
if (_oneDegreePadding) _padding3dProgram.draw(_padding3dOneDegreeVao, bufferOrchestrator.length, 360, 1, _opacity, _zAlphaOnDegreePadding);
|
|
540
|
+
} else {
|
|
541
|
+
_circleProgram2D.draw(_circle2DVao, bufferOrchestrator.length, CIRCLE_FLAT_EDGE_COUNT, _opacity);
|
|
542
|
+
// _padding2dProgram.draw(bigPaddingVAO, paddingBufferOrchestrator.length, _opacity);
|
|
543
|
+
if (_oneDegreePadding) _padding2dProgram.draw(_oneDegreePaddingVao, bufferOrchestrator.length * CIRCLE_FLAT_EDGE_COUNT, _opacity, _zAlphaOnDegreePadding);
|
|
544
|
+
}
|
|
545
|
+
_bigPadding3dFlatProgram.draw(_bigPadding3dFlatVAO, paddingBufferOrchestrator.length, _opacity);
|
|
546
|
+
gl.enable(gl.DEPTH_TEST);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
free() {
|
|
550
|
+
if (this._isFreed) return;
|
|
551
|
+
const { globe } = this;
|
|
552
|
+
this.bufferManagersCompMap.forEach(({ bufferManager }) => bufferManager.free());
|
|
553
|
+
this.bufferManagersCompMapPadding.forEach(({ bufferManager }) => bufferManager.free());
|
|
554
|
+
// delete vaos
|
|
555
|
+
this.gl.deleteVertexArray(this._circle2DVao);
|
|
556
|
+
this.gl.deleteVertexArray(this._circle3DVao);
|
|
557
|
+
this.gl.deleteVertexArray(this._oneDegreePaddingVao);
|
|
558
|
+
this.gl.deleteVertexArray(this._padding3dOneDegreeVao);
|
|
559
|
+
this.gl.deleteVertexArray(this._bigPadding3dFlatVAO);
|
|
560
|
+
// delete programs
|
|
561
|
+
CircleCache2D.release(globe);
|
|
562
|
+
CircleCache3D.release(globe);
|
|
563
|
+
LinesColorInstancedFlatCache.release(globe);
|
|
564
|
+
CirclePadding3DCache.release(globe);
|
|
565
|
+
LineOnGlobeCache.release(globe);
|
|
566
|
+
this._circleProgram2D = null;
|
|
567
|
+
this._circleProgram3D = null;
|
|
568
|
+
this._padding2dProgram = null;
|
|
569
|
+
this._padding3dProgram = null;
|
|
570
|
+
this._bigPadding3dFlatProgram = null;
|
|
571
|
+
this.textPlugin?.free();
|
|
572
|
+
this._isFreed = true;
|
|
573
|
+
}
|
|
574
|
+
|
|
581
575
|
}
|
|
582
576
|
|
|
583
577
|
|
|
584
|
-
export { RangeRings };
|
|
578
|
+
export { RangeRings, Z_ALPHA_MODE };
|
package/util/check/get.js
CHANGED
|
@@ -159,6 +159,14 @@ export class ContextTextWriter3 {
|
|
|
159
159
|
this.itemMap.set(key, { long: coords.long, lat: coords.lat, text, opacity, angle, payload: item, position });
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
|
|
163
|
+
updateText() {
|
|
164
|
+
this.itemMap.forEach((v, k, m) => {
|
|
165
|
+
const { payload } = v;
|
|
166
|
+
this.insertText(payload, 0, m, payload);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
162
170
|
clear() {
|
|
163
171
|
this.itemMap.clear();
|
|
164
172
|
}
|