@pirireis/webglobeplugins 0.6.22 → 0.6.24-a

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.
@@ -29,14 +29,553 @@
29
29
  * @property {[number, number, number]} color
30
30
  *
31
31
  *
32
- * @method setOpacity
33
- * @method insertBulk
34
- * @method updateCentersXY
35
- * @method updateCentersColor
36
- * @method removeCenters
37
- * @method updateCentersHide
32
+ * @method insertBulk
33
+ * @typedef {Array<{ringID, radius, padding}>} rings
34
+ * @param {Array<centerID:string, x:number, y:number, stepAngle:number, rgba:[4 numbers], rings:rings} items
35
+
36
+ * @method updateCentersXY @param {Array<{centerID, x, y}>} items
37
+ * @method updateCentersColor @param {Array<{centerID, rgba:[4 numbers]}>} centerColors
38
+ *
39
+ * @method updateCentersHide @param {Array<{centerID, hide, textHide}>} centerHides
40
+ * @method removeCenters @param {Array<{centerID}>} centerIds
41
+ * @method setOpacity @param {number} opacity
38
42
  *
39
43
  * @method setOneDegreePaddingOn // performance consuming, might be removed
40
44
  * @method setCompass // removed
41
45
  *
42
- */
46
+ */
47
+
48
+ import { centerCoords2dflatDataCreatorWithRadius, CircleCache as CircleCache2D } from "../programs/line-on-globe/circle-accurate-flat";
49
+ import { CircleCache as CircleCache3D } from "../programs/line-on-globe/circle-accurate-3d";
50
+ import { LinesColorInstancedFlatCache } from "../programs/line-on-globe/lines-color-instanced-flat";
51
+ import { BufferOrchestrator, BufferManager } from "../util/account";
52
+ import { populateFloat32Array } from "../util/jshelpers/data-filler";
53
+ import { RingAccount, ringKeyMethod, ringBigPaddingKeyMethod } from "./ring-account";
54
+ import { CirclePadding3DCache } from "../programs/line-on-globe/degree-padding-around-circle-3d";
55
+ import { LineOnGlobeCache } from '../programs/line-on-globe/naive-accurate';
56
+
57
+ import RangeRingAngleText from "./rangeringangletext";
58
+
59
+ /**
60
+ * Programs:
61
+ *
62
+ * circle3d circle2d padding3d padding2d
63
+ *
64
+ *
65
+ * */
66
+
67
+
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
+
79
+ // TODO make x, y -> long, lat
80
+
81
+ class RangeRings {
82
+ constructor(id, { oneDegreePadding = true, showNumbers = true, numbersStyle = null, opacity = 1 } = {}) {
83
+
84
+ this.id = id;
85
+
86
+ this._oneDegreePadding = oneDegreePadding;
87
+ this._showNumbers = showNumbers;
88
+ this._numbersStyle = numbersStyle;
89
+ this._opacity = opacity;
90
+ this._circleFlatEdgeCount = 362;
91
+ this._ringAccount = new RingAccount();
92
+
93
+ }
94
+
95
+
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
+ // this._padding3dProgram
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.bigPaddingVAO = this._padding2dProgram.createVAO(
234
+ // { buffer: this.bufferManagersCompMapPadding.get("circlePoint").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
235
+ // { buffer: this.bufferManagersCompMapPadding.get("paddingPoint").bufferManager.buffer, size: 2, stride: 0, offset: 0 },
236
+ // { buffer: this.bufferManagersCompMapPadding.get("rgba").bufferManager.buffer, size: 4, stride: 0, offset: 0 },
237
+ // );
238
+
239
+ this._bigPadding3dFlatVAO = this._bigPadding3dFlatProgram.createVAO(
240
+ ...["circlePoint", "circlePoint3d", "paddingPoint", "paddingPoint3d", "dashRatio", "dashOpacity", "rgba",].map(key => obj(this.bufferManagersCompMapPadding.get(key)))
241
+ );
242
+
243
+ this._padding3dOneDegreeVao = this._padding3dProgram.createVAO(
244
+ ...["centerCoords3d", "radius3d", "radius3dsmall", "rgba"].map(key => obj(this.bufferManagersCompMap.get(key)))
245
+ );
246
+
247
+ }
248
+
249
+
250
+ // GLOBE API
251
+
252
+ draw3D() {
253
+ const {
254
+ globe, gl,
255
+ _circleProgram2D, _circleProgram3D, _padding2dProgram, _padding3dProgram, _bigPadding3dFlatProgram,
256
+ circle2DVao, circle3DVao, oneDegreePaddingVao, _padding3dOneDegreeVao, _bigPadding3dFlatVAO,
257
+ bufferOrchestrator, paddingBufferOrchestrator,
258
+ _circleFlatEdgeCount, _opacity, _oneDegreePadding } = this;
259
+ gl.disable(gl.DEPTH_TEST);
260
+ const is3D = globe.api_GetCurrentGeometry() === 0;
261
+ // const lod = globe.api_GetCurrentLOD();
262
+ if (is3D) {
263
+ _circleProgram3D.draw(circle3DVao, bufferOrchestrator.length, _opacity);
264
+ if (_oneDegreePadding) _padding3dProgram.draw(_padding3dOneDegreeVao, bufferOrchestrator.length, 360, 1, _opacity);
265
+ } else {
266
+ _circleProgram2D.draw(circle2DVao, bufferOrchestrator.length, _circleFlatEdgeCount, _opacity);
267
+ // _padding2dProgram.draw(bigPaddingVAO, paddingBufferOrchestrator.length, _opacity);
268
+ if (_oneDegreePadding) _padding2dProgram.draw(oneDegreePaddingVao, bufferOrchestrator.length * _circleFlatEdgeCount, _opacity);
269
+ }
270
+ _bigPadding3dFlatProgram.draw(_bigPadding3dFlatVAO, paddingBufferOrchestrator.length, _opacity);
271
+ gl.enable(gl.DEPTH_TEST);
272
+ }
273
+
274
+ free() {
275
+ if (this._isFreed) return;
276
+ const { globe } = this;
277
+ CircleCache2D.release(globe);
278
+ CircleCache3D.release(globe);
279
+ this.textPlugin?.free();
280
+ // free buffer managers
281
+ this._isFreed = true;
282
+ }
283
+
284
+
285
+ // API
286
+
287
+ /**
288
+ * @method updateCentersXY @param { Array < { centerID, x, y } >} items
289
+ */
290
+ updateCentersXY(items) {
291
+ // Algorithm
292
+ /**
293
+ * 1. ask centerRingAccount for existing rings COORDINATE RELATED KEYS
294
+ * 2. update centers
295
+ * 3. update buffer orchestators
296
+ */
297
+
298
+ this._ringAccount.updateCentersXY(items);
299
+ const { globe,
300
+ bufferOrchestrator, bufferManagersCompMap,
301
+ paddingBufferOrchestrator, bufferManagersCompMapPadding
302
+ } = this;
303
+ for (const { centerID } of items) {
304
+ const datas = this.__reconstructCentralRings(centerID);
305
+ // TODO add big paddings when when implemented
306
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["centerCoords3d", "centerCoords2dflat", "centerCoords2dflatForPadding"]);
307
+ const paddingDatas = this.__reconstructCentralRingsBigPaddings(centerID);
308
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["circlePoint", "paddingPoint", "circlePoint3d", "paddingPoint3d"]);
309
+ }
310
+ this.textPlugin?.updateCentersXY(items);
311
+
312
+
313
+
314
+ globe.DrawRender();
315
+ }
316
+
317
+ /**
318
+ * @method insertBulk
319
+ * @typedef { Array < { ringID, radius, padding } >} rings
320
+ * @param { Array < centerID: string, x: number, y: number, stepAngle: number, rgba: [4 numbers], rings: rings, hide, textHide } items
321
+ */
322
+ insertBulk(items) {
323
+ // Algorithm
324
+ /**
325
+ * 1 ask centerRingAccount for existing rings
326
+ * presizely: TODO
327
+ * 2. delete all existing keys with buffer orchestators
328
+ * 3. insert new centerRings to centerRingAccount
329
+ * 4. insert new keys with buffer orchestators
330
+ */
331
+ const { globe, _ringAccount, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding } = this;
332
+ // TODO add delete existing for padding
333
+ for (const item of items) {
334
+ const existingKeys = _ringAccount.ringKeys(item.centerID);
335
+ if (existingKeys.length) {
336
+ bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
337
+ }
338
+ const paddingKeys = _ringAccount.ringBigPaddingKeys(item.centerID);
339
+ if (paddingKeys.length) {
340
+ paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
341
+ }
342
+ }
343
+
344
+ for (const item of items) {
345
+ _ringAccount.insertCenter(item);
346
+ const datas = this.__reconstructCentralRings(item.centerID);
347
+ bufferOrchestrator.insertBulk(datas, bufferManagersCompMap,);
348
+ const paddingDatas = this.__reconstructCentralRingsBigPaddings(item.centerID);
349
+ paddingBufferOrchestrator.insertBulk(paddingDatas, bufferManagersCompMapPadding);
350
+ }
351
+
352
+ this.textPlugin?.insertBulk(items);
353
+ globe.DrawRender();
354
+
355
+ }
356
+
357
+
358
+
359
+
360
+ /**
361
+ * @method updateCentersColor @param { Array < { centerID, rgba: [4 numbers] } >} centerColors
362
+ */
363
+ updateCentersColor(centerColors) {
364
+ // Algorithm
365
+ /**
366
+ * 1. ask centerRingAccount for existing rings COLOR KEYS
367
+ * 2. update centers
368
+ * 3. update buffer orchestators
369
+ */
370
+ this._ringAccount.updateCentersColor(centerColors);
371
+ const { globe,
372
+ bufferOrchestrator, bufferManagersCompMap,
373
+ paddingBufferOrchestrator, bufferManagersCompMapPadding
374
+ } = this;
375
+ for (const { centerID } of centerColors) {
376
+ const datas = this.__reconstructCentralProperties(centerID);
377
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
378
+ const paddingDatas = this.__reconstructCentralPaddingProperties(centerID)
379
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
380
+ }
381
+ globe.DrawRender();
382
+ }
383
+
384
+ /**
385
+ *
386
+ * @method updateCentersHide @param { Array < { centerID, hide, textHide } >} centerHides
387
+ */
388
+ updateCentersHide(centerHides) {
389
+ // Algorithm
390
+ /**
391
+ * Simple
392
+ * 1. update centers
393
+ * 2. reconstruct data,
394
+ * 3. update color buffer
395
+ * */
396
+ this._ringAccount.updateCentersHide(centerHides);
397
+ const { globe,
398
+ bufferOrchestrator, bufferManagersCompMap,
399
+ paddingBufferOrchestrator, bufferManagersCompMapPadding
400
+ } = this;
401
+
402
+ for (const { centerID } of centerHides) {
403
+ const datas = this.__reconstructCentralProperties(centerID);
404
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
405
+ const paddingDatas = this.__reconstructCentralPaddingProperties(centerID)
406
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
407
+ }
408
+
409
+ this.textPlugin?.updateCentersHide(centerHides);
410
+ globe.DrawRender();
411
+ /**
412
+ * Complicated
413
+ * 1. ask centerRingAccount for existing rings HIDE KEYS
414
+ * 2. delete from buffer orchestators
415
+ * 3. mark centers as hidden
416
+ */
417
+
418
+ }
419
+
420
+ /**
421
+ * @method removeCenters @param { Array < { centerID } >} centerIDs
422
+ */
423
+ removeCenters(centerIDs) {
424
+ // Algorithm
425
+ /**
426
+ * 1. ask centerRingAccount for existing rings
427
+ * 2. delete from buffer orchestators
428
+ * 3. delete from centerRingAccount
429
+ */
430
+ const { globe,
431
+ bufferOrchestrator, bufferManagersCompMap,
432
+ paddingBufferOrchestrator, bufferManagersCompMapPadding,
433
+ _ringAccount } = this;
434
+ for (const centerID of centerIDs) {
435
+ const existingKeys = _ringAccount.ringKeys(centerID);
436
+ if (existingKeys.length) {
437
+ bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
438
+ }
439
+ }
440
+
441
+ for (const centerID of centerIDs) {
442
+ const paddingKeys = _ringAccount.ringBigPaddingKeys(centerID);
443
+ if (paddingKeys.length) {
444
+ paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
445
+ }
446
+ }
447
+ this.textPlugin?.removeCenters(centerIDs);
448
+ globe.DrawRender();
449
+ }
450
+
451
+ /**
452
+ * @method setOpacity @param { number } opacity
453
+ */
454
+ setOpacity(opacity) {
455
+ console.log("opacity", opacity, typeof opacity);
456
+ if (typeof opacity !== "number" || opacity < 0 || opacity > 1) throw new Error("Invalid opacity value");
457
+ this._opacity = opacity;
458
+ this.textPlugin?.setOpacity(opacity);
459
+ this.globe.DrawRender();
460
+ }
461
+
462
+
463
+ /**
464
+ * @method setOneDegreePaddingOn // performance consuming, might be removed
465
+ */
466
+ setOneDegreePaddingOn(isOneDegreePaddingOn) {
467
+ // TODO
468
+ if (this._oneDegreePadding === isOneDegreePaddingOn) return;
469
+ this._oneDegreePadding = isOneDegreePaddingOn;
470
+
471
+ // Complicated
472
+ // if (isOneDegreePaddingOn) {
473
+ // // fill the Coordinate Buffer for 1 degree Padding
474
+ // // Use orchastrator to create data for all rings
475
+
476
+ // } else {
477
+ // // empty the Coordinate Buffer for 1 degree Padding
478
+ // }
479
+ }
480
+
481
+ __reconstructCentralRingsBigPaddings(centerID) {
482
+ const { globe, _circleFlatEdgeCount } = this;
483
+ const centerItem = this._ringAccount.getCenter(centerID);
484
+ if (centerItem === undefined) throw new Error("Center not found");
485
+ const findPointByPolar = globe.Math.FindPointByPolar;
486
+ const { x, y, stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
487
+ const result = [];
488
+ const color = hide === 1 ? new Float32Array([0, 0, 0, 0]) : new Float32Array(rgba)
489
+ for (const { ringID, radius, padding } of rings) {
490
+ let azimuthAngle = 0;
491
+ while (azimuthAngle < 360) {
492
+ const circlePoint = globe.Math.FindPointByPolar(x, y, radius, azimuthAngle); // long lat
493
+ const paddingPoint = globe.Math.FindPointByPolar(x, y, radius - padding, azimuthAngle); // long lat
494
+ result.push({
495
+ key: ringBigPaddingKeyMethod(centerID, ringID, azimuthAngle),
496
+ circlePoint: new Float32Array(globe.api_GetMercator2DPoint(circlePoint.long, circlePoint.lat)),
497
+ paddingPoint: new Float32Array(globe.api_GetMercator2DPoint(paddingPoint.long, paddingPoint.lat)),
498
+ circlePoint3d: new Float32Array(globe.api_GetCartesian3DPoint(circlePoint.long, circlePoint.lat, 0, 0)),
499
+ paddingPoint3d: new Float32Array(globe.api_GetCartesian3DPoint(paddingPoint.long, paddingPoint.lat, 0, 0)),
500
+ rgba: color,
501
+ hide,
502
+ textHide
503
+ });
504
+ azimuthAngle += stepAngle;
505
+
506
+ }
507
+ }
508
+ return result;
509
+ }
510
+
511
+ __reconstructCentralRings(centerID) {
512
+ const { globe, _circleFlatEdgeCount } = this;
513
+ const centerItem = this._ringAccount.getCenter(centerID);
514
+ if (centerItem === undefined) throw new Error("Center not found");
515
+
516
+ const { x, y, stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
517
+
518
+ const long = x;
519
+ const lat = y;
520
+ const centerCoords3d = globe.api_GetCartesian3DPoint(long, lat, 0, 0);
521
+
522
+ const result = [];
523
+
524
+ for (const { ringID, radius, padding } of rings) {
525
+ const key = ringKeyMethod(centerID, ringID);
526
+ const centerCoords2dflat = centerCoords2dflatDataCreatorWithRadius(globe, x, y, radius, { edgeCount: _circleFlatEdgeCount });
527
+ const centerCoords2dflatForPadding = centerCoords2dflatDataCreatorWithRadius(globe, x, y, radius - padding / 3, { edgeCount: _circleFlatEdgeCount });
528
+ result.push({
529
+ key,
530
+ centerCoords3d,
531
+ centerCoords2dflat,
532
+ radius,
533
+ padding,
534
+ rgba,
535
+ centerCoords2dflatForPadding,
536
+ hide,
537
+ textHide
538
+ });
539
+ }
540
+ return result;
541
+
542
+ }
543
+
544
+ __reconstructCentralPaddingProperties(centerID) {
545
+ const centerItem = this._ringAccount.getCenter(centerID);
546
+ if (centerItem === undefined) throw new Error("Center not found");
547
+ const { x, y, stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
548
+ const result = [];
549
+ for (const { ringID, } of rings) {
550
+ let angle = 0;
551
+ while (angle < 360) {
552
+ result.push({
553
+ key: ringBigPaddingKeyMethod(centerID, ringID, angle),
554
+ rgba: hide === 1 ? new Float32Array([0, 0, 0, 0]) : rgba,
555
+ textHide
556
+ });
557
+ angle += stepAngle;
558
+ }
559
+ }
560
+ return result;
561
+ }
562
+
563
+ __reconstructCentralProperties(centerID) {
564
+ const centerItem = this._ringAccount.getCenter(centerID);
565
+ if (centerItem === undefined) throw new Error("Center not found");
566
+ const { rgba, rings, hide = 0, textHide = 0 } = centerItem;
567
+ const result = [];
568
+ for (const { ringID } of rings) {
569
+ const key = ringKeyMethod(centerID, ringID);
570
+ result.push({
571
+ key,
572
+ rgba: hide === 1 ? new Float32Array([0, 0, 0, 0]) : rgba,
573
+ textHide
574
+ });
575
+ }
576
+ return result;
577
+ }
578
+ }
579
+
580
+
581
+ export { RangeRings };