@pirireis/webglobeplugins 0.9.9 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +190 -0
  4. package/Math/constants.js +9 -0
  5. package/Math/frustum/camera.js +24 -0
  6. package/Math/frustum/from-globeinfo.js +48 -0
  7. package/Math/frustum/types.js +2 -0
  8. package/Math/globe-util/horizon-plane.js +112 -0
  9. package/Math/index.js +1 -0
  10. package/Math/juction/arc-plane.js +83 -0
  11. package/Math/juction/line-sphere.js +25 -0
  12. package/Math/juction/plane-plane.js +58 -0
  13. package/Math/line.js +58 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +206 -0
  16. package/Math/plane.js +62 -0
  17. package/Math/quaternion.js +108 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +129 -0
  21. package/algorithms/search-binary.js +19 -0
  22. package/altitude-locator/adaptors.js +1 -0
  23. package/altitude-locator/draw-subset-obj.js +19 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +357 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +15 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +89 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +474 -0
  32. package/circle-line-chain/chain-list-map.js +211 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +449 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +247 -0
  37. package/compass-rose/compass-text-writer.js +161 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +300 -0
  40. package/compassrose/index.js +8 -0
  41. package/globe-types.js +1 -0
  42. package/heatwave/index.js +10 -0
  43. package/heatwave/isobar/objectarraylabels.js +206 -0
  44. package/heatwave/isobar/plugin.js +362 -0
  45. package/heatwave/isobar/quadtreecontours.js +316 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +224 -0
  47. package/index.js +11 -11
  48. package/jest.config.js +7 -0
  49. package/package.json +4 -4
  50. package/partialrings/buffer-manager.js +113 -0
  51. package/partialrings/index.js +41 -0
  52. package/partialrings/plugin.js +171 -0
  53. package/partialrings/program.js +197 -0
  54. package/pin/pin-object-array.js +308 -0
  55. package/pin/pin-point-totem.js +61 -0
  56. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  57. package/point-heat-map/index.js +1 -0
  58. package/point-heat-map/plugin-webworker.js +131 -0
  59. package/point-heat-map/point-to-heat-map-flow.js +129 -0
  60. package/point-tracks/key-methods.js +5 -0
  61. package/point-tracks/plugin.js +353 -0
  62. package/programs/arrowfield/index.js +7 -0
  63. package/programs/arrowfield/logic.js +149 -0
  64. package/programs/arrowfield/object.js +68 -0
  65. package/programs/data2legend/density-to-legend.js +77 -0
  66. package/programs/data2legend/point-to-density-texture.js +75 -0
  67. package/programs/float2legendwithratio/index.js +8 -0
  68. package/programs/float2legendwithratio/logic.js +125 -0
  69. package/programs/float2legendwithratio/object.js +113 -0
  70. package/programs/globe-util/is-globe-moved.js +22 -0
  71. package/programs/globeshell/index.js +8 -0
  72. package/programs/globeshell/noise/noises.js +1 -0
  73. package/programs/globeshell/wiggle/index.js +8 -0
  74. package/programs/globeshell/wiggle/logic.js +252 -0
  75. package/programs/globeshell/wiggle/object.js +74 -0
  76. package/programs/helpers/blender/index.js +1 -0
  77. package/programs/helpers/blender/program.js +62 -0
  78. package/programs/helpers/fadeaway/index.js +7 -0
  79. package/programs/helpers/fadeaway/logic.js +50 -0
  80. package/programs/helpers/fadeaway/object.js +21 -0
  81. package/programs/helpers/index.js +8 -0
  82. package/programs/index.js +58 -0
  83. package/programs/interface.js +1 -0
  84. package/programs/line-on-globe/angled-line.js +117 -0
  85. package/programs/line-on-globe/circle-accurate-3d.js +91 -0
  86. package/programs/line-on-globe/circle-accurate-flat.js +158 -0
  87. package/programs/line-on-globe/circle-accurate.js +108 -0
  88. package/programs/line-on-globe/circle.js +102 -0
  89. package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
  90. package/programs/line-on-globe/index.js +1 -0
  91. package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
  92. package/programs/line-on-globe/linestrip.js +110 -0
  93. package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
  94. package/programs/line-on-globe/to-the-surface.js +82 -0
  95. package/programs/line-on-globe/util.js +8 -0
  96. package/programs/picking/pickable-renderer.js +104 -0
  97. package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
  98. package/programs/point-on-globe/element-point-glow.js +85 -0
  99. package/programs/point-on-globe/square-pixel-point.js +125 -0
  100. package/programs/programcache.js +131 -0
  101. package/programs/rings/distancering/circleflatprogram.js +114 -0
  102. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
  103. package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
  104. package/programs/rings/distancering/index.js +14 -0
  105. package/programs/rings/distancering/paddyflatprogram.js +119 -0
  106. package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
  107. package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
  108. package/programs/rings/distancering/shader.js +1 -0
  109. package/programs/rings/index.js +17 -0
  110. package/programs/rings/partial-ring/piece-of-pie.js +173 -0
  111. package/programs/totems/camerauniformblock.js +147 -0
  112. package/programs/totems/canvas-webglobe-info.js +102 -0
  113. package/programs/totems/gpu-selection-uniform-block.js +104 -0
  114. package/programs/totems/index.js +40 -0
  115. package/programs/two-d/pixel-circle.js +1 -0
  116. package/programs/two-d/pixel-padding-for-compass.js +101 -0
  117. package/programs/util.js +18 -0
  118. package/programs/vectorfields/index.js +23 -0
  119. package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
  120. package/programs/vectorfields/logics/index.js +12 -0
  121. package/programs/vectorfields/logics/pixelbased.js +86 -0
  122. package/programs/vectorfields/logics/ubo.js +57 -0
  123. package/programs/vectorfields/pingpongbuffermanager.js +80 -0
  124. package/rangerings/enum.js +5 -0
  125. package/rangerings/index.js +15 -0
  126. package/rangerings/plugin.js +610 -0
  127. package/rangerings/rangeringangletext.js +341 -0
  128. package/rangerings/ring-account.js +134 -0
  129. package/shaders/fragment-toy/firework.js +4 -0
  130. package/shaders/fragment-toy/singularity.js +5 -0
  131. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  132. package/timetracks/adaptors-line-strip.js +82 -0
  133. package/timetracks/adaptors.js +136 -0
  134. package/timetracks/index.js +19 -0
  135. package/timetracks/plugin-line-strip.js +254 -0
  136. package/timetracks/plugin.js +262 -0
  137. package/timetracks/program-line-strip.js +418 -0
  138. package/timetracks/program.js +466 -0
  139. package/timetracks/programpoint-line-strip.js +101 -0
  140. package/timetracks/programpoint.js +101 -0
  141. package/types.js +15 -0
  142. package/util/account/bufferoffsetmanager.js +202 -0
  143. package/util/account/index.js +23 -0
  144. package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
  145. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
  146. package/util/account/single-attribute-buffer-management/index.js +9 -0
  147. package/util/account/single-attribute-buffer-management/object-store.js +53 -0
  148. package/util/account/single-attribute-buffer-management/types.js +2 -0
  149. package/util/account/util.js +24 -0
  150. package/util/algorithms/index.js +1 -0
  151. package/util/algorithms/search-binary.js +28 -0
  152. package/util/check/get.js +18 -0
  153. package/util/check/index.js +1 -0
  154. package/util/check/typecheck.js +51 -0
  155. package/util/geometry/index.js +53 -0
  156. package/util/gl-util/buffer/attribute-loader.js +81 -0
  157. package/util/gl-util/buffer/index.js +6 -0
  158. package/util/gl-util/buffer/types.js +1 -0
  159. package/util/gl-util/draw-options/methods.js +38 -0
  160. package/util/gl-util/draw-options/types.js +15 -0
  161. package/util/gl-util/uniform-block/manager.js +168 -0
  162. package/util/gl-util/uniform-block/shader.js +1 -0
  163. package/util/gl-util/uniform-block/types.js +8 -0
  164. package/util/heatwavedatamanager/datamanager.js +212 -0
  165. package/util/heatwavedatamanager/index.js +10 -0
  166. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
  167. package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
  168. package/util/index.js +57 -0
  169. package/util/interpolation/index.js +1 -0
  170. package/util/interpolation/timetrack/index.js +5 -0
  171. package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
  172. package/util/interpolation/timetrack/web-worker-str.js +5 -0
  173. package/util/interpolation/timetrack/web-worker.js +48 -0
  174. package/util/jshelpers/data-filler.js +20 -0
  175. package/util/jshelpers/equality.js +20 -0
  176. package/util/jshelpers/index.js +37 -0
  177. package/util/jshelpers/timefilters.js +32 -0
  178. package/util/picking/fence.js +46 -0
  179. package/util/picking/picker-displayer.js +145 -0
  180. package/util/programs/draw-texture-on-canvas.js +71 -0
  181. package/util/programs/index.js +17 -0
  182. package/util/programs/shapesonglobe.js +174 -0
  183. package/util/programs/supersampletotextures.js +107 -0
  184. package/util/programs/texturetoglobe.js +132 -0
  185. package/util/shaderfunctions/geometrytransformations.js +45 -0
  186. package/util/shaderfunctions/index.js +18 -0
  187. package/util/shaderfunctions/nodata.js +5 -0
  188. package/util/shaderfunctions/noisefunctions.js +13 -0
  189. package/util/surface-line-data/arc-bboxes.js +25 -0
  190. package/util/surface-line-data/arcs-to-cuts.js +53 -0
  191. package/util/surface-line-data/cut-arc.js +1 -0
  192. package/util/surface-line-data/flow.js +28 -0
  193. package/util/surface-line-data/rbush-manager.js +1 -0
  194. package/util/surface-line-data/types.js +1 -0
  195. package/util/surface-line-data/web-worker.js +1 -0
  196. package/util/webglobe/gldefaultstates.js +7 -0
  197. package/util/webglobe/index.js +18 -0
  198. package/util/webglobe/rasteroverlay.js +80 -0
  199. package/util/webglobjectbuilders.js +393 -0
  200. package/util/webglobjectbuilders1.js +238 -0
  201. package/waveparticles/adaptor.js +18 -0
  202. package/waveparticles/index.js +10 -0
  203. package/waveparticles/plugin.js +271 -0
  204. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  205. package/wind/index.js +14 -0
  206. package/wind/plugin.js +724 -0
  207. package/wind/vectorfieldimage.js +25 -0
  208. package/write-text/attached-text-writer.js +93 -0
  209. package/write-text/context-text.js +105 -0
  210. package/write-text/context-text3.js +160 -0
  211. package/write-text/index.js +5 -0
  212. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,610 @@
1
+ "use strict";
2
+ /**
3
+ * @typedef RangeRingData
4
+ * @property {number} centerX
5
+ * @property {number} centerY
6
+ * @property {Array<Ring>} rings
7
+ *
8
+ * @typedef Ring
9
+ * @property {number} radius
10
+ * @property {number} padding
11
+ * @property {[number, number, number]} color
12
+ *
13
+ *
14
+ * @method insertBulk
15
+ * @typedef {Array<{ringID, radius, padding}>} rings
16
+ * @param {Array<centerID:string, x:number, y:number, stepAngle:number, rgba:[4 numbers], rings:rings} items
17
+
18
+ * @method updateCentersCoordinate @param {Array<{centerID, long,lat}>} items
19
+ * @method updateCentersColor @param {Array<{centerID, rgba:[4 numbers]}>} centerColors
20
+ *
21
+ * @method updateCentersHide @param {Array<{centerID, hide, textHide}>} centerHides
22
+ * @method removeCenters @param {Array<{centerID}>} centerIds
23
+ * @method setOpacity @param {number} opacity
24
+ *
25
+ * @method setOneDegreePaddingOn // performance consuming, might be removed
26
+ *
27
+ */
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.Z_ALPHA_MODE = exports.RangeRings = void 0;
33
+ var circle_accurate_flat_1 = require("../programs/line-on-globe/circle-accurate-flat");
34
+ var circle_accurate_3d_1 = require("../programs/line-on-globe/circle-accurate-3d");
35
+ var lines_color_instanced_flat_1 = require("../programs/line-on-globe/lines-color-instanced-flat");
36
+ var account_1 = require("../util/account");
37
+ var get_1 = require("../util/check/get");
38
+ var data_filler_1 = require("../util/jshelpers/data-filler");
39
+ var ring_account_1 = require("./ring-account");
40
+ var degree_padding_around_circle_3d_1 = require("../programs/line-on-globe/degree-padding-around-circle-3d");
41
+ var naive_accurate_flexible_1 = require("../programs/line-on-globe/naive-accurate-flexible");
42
+ var rangeringangletext_1 = __importDefault(require("./rangeringangletext"));
43
+ var util_1 = require("../programs/line-on-globe/util");
44
+ Object.defineProperty(exports, "Z_ALPHA_MODE", { enumerable: true, get: function () { return util_1.Z_ALPHA_MODE; } });
45
+ var enum_1 = require("./enum");
46
+ var typecheck_1 = require("../util/check/typecheck");
47
+ var geometry_1 = require("../util/geometry");
48
+ var CIRCLE_FLAT_EDGE_COUNT = 362; // 360 + 2 for closing the circle and a cutting point
49
+ var coordOnSphere = function (long, lat, globe, altitude) {
50
+ if (altitude === void 0) { altitude = 0; }
51
+ var coord = globe.api_GetCartesian3DPoint(long, lat, 0, 0);
52
+ return (0, geometry_1.normalize)(coord, 6378.137 + altitude);
53
+ };
54
+ /**
55
+ *
56
+ *
57
+ * @typedef {string} centerID
58
+ *
59
+ * @typedef {Object} RangeRing
60
+ * @property {string} ringID
61
+ * @property {number} radius in range meters
62
+ * @property {number} padding badding range in meter
63
+ *
64
+ *
65
+ * Array < centerID: string, long: number, lat: number, stepAngle: number, rgba: [4 numbers], rings: rings, hide, textHide
66
+ * @typedef {Object} RangeRingsItem
67
+ * @property {centerID} centerID
68
+ * @property {number} long
69
+ * @property {number} lat
70
+ * @property {number} stepAngle
71
+ * @property {number} altitude
72
+ * @property {number} hide
73
+ * @property {number} textHide
74
+ * @property {number} rgba
75
+ * @property {Array<RangeRing>} rings
76
+ */
77
+ var RangeRings = /** @class */ (function () {
78
+ function RangeRings(id, _a, _b) {
79
+ var _c = _a === void 0 ? {} : _a, _d = _c.oneDegreePadding, oneDegreePadding = _d === void 0 ? true : _d, _e = _c.showNumbers, showNumbers = _e === void 0 ? true : _e, _f = _c.numbersStyle, numbersStyle = _f === void 0 ? null : _f, _g = _c.opacity, opacity = _g === void 0 ? 1 : _g, _h = _c.zAlphaOnDegreePadding, zAlphaOnDegreePadding = _h === void 0 ? util_1.Z_ALPHA_MODE.ON : _h;
80
+ var _j = _b === void 0 ? {} : _b, _k = _j.textDataPreAdaptor, textDataPreAdaptor = _k === void 0 ? null : _k, _l = _j.textWritersMap, textWritersMap = _l === void 0 ? new Map() : _l;
81
+ this.id = id;
82
+ this._oneDegreePadding = oneDegreePadding;
83
+ this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
84
+ this._showNumbers = showNumbers;
85
+ this._numbersStyle = numbersStyle;
86
+ this._opacity = opacity;
87
+ this._ringAccount = new ring_account_1.RingAccount();
88
+ this._textWritersMap = textWritersMap;
89
+ this._textDataPreAdaptor = textDataPreAdaptor;
90
+ this._textWritersMap.forEach(function (textWriter) { return textWriter.setKeyAdaptor(function (item) { return item.__identity__; }); });
91
+ }
92
+ // USER API
93
+ /**
94
+ * @method updateCentersCoordinate @param { Array < { centerID, long,lat } >} items
95
+ */
96
+ RangeRings.prototype.updateCentersCoordinate = function (items, _a) {
97
+ // Algorithm
98
+ /**
99
+ * 1. ask centerRingAccount for existing rings COORDINATE RELATED KEYS
100
+ * 2. update centers
101
+ * 3. update buffer orchestators
102
+ */
103
+ var _b;
104
+ var _c = _a === void 0 ? {} : _a, _d = _c.textWriterIDs, textWriterIDs = _d === void 0 ? [] : _d;
105
+ this._ringAccount.updateCentersCoordinate(items);
106
+ var _e = this, globe = _e.globe, bufferOrchestrator = _e.bufferOrchestrator, bufferManagersCompMap = _e.bufferManagersCompMap, paddingBufferOrchestrator = _e.paddingBufferOrchestrator, bufferManagersCompMapPadding = _e.bufferManagersCompMapPadding;
107
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
108
+ var centerID = items_1[_i].centerID;
109
+ var datas = this.__reconstructCentralRings(centerID);
110
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["centerCoords3d", "centerCoords2dflat", "targetCoords3d", "centerCoords2dflatForPadding"]);
111
+ var paddingDatas = this.__reconstructCentralRingsBigPaddings(centerID);
112
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["circlePoint2d", "paddingPoint2d", "circlePoint3d", "paddingPoint3d"]);
113
+ }
114
+ (_b = this.paddingTextPlugin) === null || _b === void 0 ? void 0 : _b.updateCentersXY(items);
115
+ this.__contextTextWriterUpdate(items.map(function (_a) {
116
+ var centerID = _a.centerID;
117
+ return centerID;
118
+ }), textWriterIDs);
119
+ globe.DrawRender();
120
+ };
121
+ /**
122
+ * @method insertBulk
123
+ * @param { Array < RangeRingsItem> } items
124
+ */
125
+ RangeRings.prototype.insertBulk = function (items, _a) {
126
+ var _b;
127
+ var _c = _a === void 0 ? {} : _a, _d = _c.textWriterIDs, textWriterIDs = _d === void 0 ? [] : _d;
128
+ // Algorithm
129
+ /**
130
+ * 1 ask centerRingAccount for existing rings
131
+ * 2. delete all existing keys with buffer orchestators
132
+ * 3. insert new centerRings to centerRingAccount
133
+ * 4. insert new keys with buffer orchestators
134
+ */
135
+ var _e = this, globe = _e.globe, _ringAccount = _e._ringAccount, bufferOrchestrator = _e.bufferOrchestrator, bufferManagersCompMap = _e.bufferManagersCompMap, paddingBufferOrchestrator = _e.paddingBufferOrchestrator, bufferManagersCompMapPadding = _e.bufferManagersCompMapPadding;
136
+ for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
137
+ var item = items_2[_i];
138
+ var existingKeys = _ringAccount.ringKeys(item.centerID);
139
+ if (existingKeys.length) {
140
+ bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
141
+ }
142
+ var paddingKeys = _ringAccount.ringBigPaddingKeys(item.centerID);
143
+ if (paddingKeys.length) {
144
+ paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
145
+ }
146
+ }
147
+ for (var _f = 0, items_3 = items; _f < items_3.length; _f++) {
148
+ var item = items_3[_f];
149
+ _ringAccount.insertCenter(item);
150
+ var datas = this.__reconstructCentralRings(item.centerID);
151
+ bufferOrchestrator.insertBulk(datas, bufferManagersCompMap);
152
+ var paddingDatas = this.__reconstructCentralRingsBigPaddings(item.centerID);
153
+ paddingBufferOrchestrator.insertBulk(paddingDatas, bufferManagersCompMapPadding);
154
+ }
155
+ (_b = this.paddingTextPlugin) === null || _b === void 0 ? void 0 : _b.insertBulk(items);
156
+ this.__contextTextWriterUpdate(items.map(function (_a) {
157
+ var centerID = _a.centerID;
158
+ return centerID;
159
+ }), textWriterIDs);
160
+ globe.DrawRender();
161
+ };
162
+ /**
163
+ * @method updateCentersColor @param { Array < { centerID, rgba: [4 numbers] } >} centerColors
164
+ */
165
+ RangeRings.prototype.updateCentersColor = function (centerColors, _a) {
166
+ var _b = _a === void 0 ? {} : _a, _c = _b.textWriterIDs, textWriterIDs = _c === void 0 ? [] : _c;
167
+ // Algorithm
168
+ /**
169
+ * 1. ask centerRingAccount for existing rings COLOR KEYS
170
+ * 2. update centers
171
+ * 3. update buffer orchestators
172
+ */
173
+ this._ringAccount.updateCentersColor(centerColors);
174
+ var _d = this, globe = _d.globe, bufferOrchestrator = _d.bufferOrchestrator, bufferManagersCompMap = _d.bufferManagersCompMap, paddingBufferOrchestrator = _d.paddingBufferOrchestrator, bufferManagersCompMapPadding = _d.bufferManagersCompMapPadding;
175
+ for (var _i = 0, centerColors_1 = centerColors; _i < centerColors_1.length; _i++) {
176
+ var centerID = centerColors_1[_i].centerID;
177
+ var datas = this.__reconstructCentralProperties(centerID);
178
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
179
+ var paddingDatas = this.__reconstructCentralPaddingProperties(centerID);
180
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
181
+ }
182
+ this.__contextTextWriterUpdate(centerColors.map(function (_a) {
183
+ var centerID = _a.centerID;
184
+ return centerID;
185
+ }), textWriterIDs);
186
+ globe.DrawRender();
187
+ };
188
+ /**
189
+ *
190
+ * @method updateCentersHide @param { Array < { centerID, hide, textHide } >} centerHides
191
+ */
192
+ RangeRings.prototype.updateCentersHide = function (centerHides, _a) {
193
+ var _b;
194
+ var _c = _a === void 0 ? {} : _a, _d = _c.textWriterIDs, textWriterIDs = _d === void 0 ? [] : _d;
195
+ // Algorithm
196
+ /**
197
+ * Simple
198
+ * 1. update centers
199
+ * 2. reconstruct data,
200
+ * 3. update color buffer
201
+ * */
202
+ this._ringAccount.updateCentersHide(centerHides);
203
+ var _e = this, globe = _e.globe, bufferOrchestrator = _e.bufferOrchestrator, bufferManagersCompMap = _e.bufferManagersCompMap, paddingBufferOrchestrator = _e.paddingBufferOrchestrator, bufferManagersCompMapPadding = _e.bufferManagersCompMapPadding;
204
+ for (var _i = 0, centerHides_1 = centerHides; _i < centerHides_1.length; _i++) {
205
+ var centerID = centerHides_1[_i].centerID;
206
+ var datas = this.__reconstructCentralProperties(centerID);
207
+ bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
208
+ var paddingDatas0 = this.__reconstructCentralRings(centerID);
209
+ bufferOrchestrator.updateBulk(paddingDatas0, bufferManagersCompMap, ["radius3dsmall", "centerCoords2dflatForPadding"]);
210
+ var paddingDatas = this.__reconstructCentralPaddingProperties(centerID);
211
+ paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
212
+ }
213
+ (_b = this.paddingTextPlugin) === null || _b === void 0 ? void 0 : _b.updateCentersHide(centerHides);
214
+ this.__contextTextWriterUpdate(centerHides.map(function (_a) {
215
+ var centerID = _a.centerID;
216
+ return centerID;
217
+ }), textWriterIDs);
218
+ globe.DrawRender();
219
+ /**
220
+ * Complicated
221
+ * 1. ask centerRingAccount for existing rings HIDE KEYS
222
+ * 2. delete from buffer orchestators
223
+ * 3. mark centers as hidden
224
+ */
225
+ };
226
+ /**
227
+ * @param {Array<string>} textWriterIDs textWritersMap keys to be used for writing text.
228
+ * @param {Array<string>} itemKeys if empty, all texts will be updated. Use {@link ringKeyMethod} method to get keys
229
+ */
230
+ RangeRings.prototype.updateText = function (textWriterIDs, itemKeys) {
231
+ var _this = this;
232
+ if (textWriterIDs === void 0) { textWriterIDs = []; }
233
+ if (itemKeys === void 0) { itemKeys = null; }
234
+ var textWritersMap = textWriterGetOrThrow(this._textWritersMap, textWriterIDs);
235
+ if (itemKeys === null) {
236
+ this._ringAccount.updateAllText(textWritersMap, this._textDataPreAdaptor);
237
+ this.globe.DrawRender();
238
+ }
239
+ else {
240
+ itemKeys.forEach(function (key) {
241
+ var item = _this._ringAccount.getCenter(key);
242
+ if (item === undefined)
243
+ throw new Error("Center not found");
244
+ var textData = _this._textDataPreAdaptor(item);
245
+ textWritersMap.forEach(function (textWriter) { return textWriter.insertText(textData); });
246
+ });
247
+ }
248
+ this.globe.DrawRender();
249
+ };
250
+ /**
251
+ * @method removeCenters @param { Array < { centerID } >} centerIDs
252
+ */
253
+ RangeRings.prototype.removeCenters = function (centerIDs) {
254
+ var _a;
255
+ var _b = this, globe = _b.globe, bufferOrchestrator = _b.bufferOrchestrator, bufferManagersCompMap = _b.bufferManagersCompMap, paddingBufferOrchestrator = _b.paddingBufferOrchestrator, bufferManagersCompMapPadding = _b.bufferManagersCompMapPadding, _ringAccount = _b._ringAccount;
256
+ var _loop_1 = function (centerID) {
257
+ var existingKeys = _ringAccount.ringKeys(centerID);
258
+ if (existingKeys.length) {
259
+ bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
260
+ this_1._textWritersMap.forEach(function (textWriter) { return textWriter.deleteTextBulk(existingKeys); });
261
+ }
262
+ };
263
+ var this_1 = this;
264
+ for (var _i = 0, centerIDs_1 = centerIDs; _i < centerIDs_1.length; _i++) {
265
+ var centerID = centerIDs_1[_i];
266
+ _loop_1(centerID);
267
+ }
268
+ for (var _c = 0, centerIDs_2 = centerIDs; _c < centerIDs_2.length; _c++) {
269
+ var centerID = centerIDs_2[_c];
270
+ var paddingKeys = _ringAccount.ringBigPaddingKeys(centerID);
271
+ if (paddingKeys.length) {
272
+ paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
273
+ }
274
+ }
275
+ (_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.removeCenters(centerIDs);
276
+ this._ringAccount.removeCenters(centerIDs);
277
+ globe.DrawRender();
278
+ };
279
+ /**
280
+ * @method setOpacity @param { number } opacity
281
+ */
282
+ RangeRings.prototype.setOpacity = function (opacity) {
283
+ var _a;
284
+ (0, typecheck_1.opacityCheck)(opacity);
285
+ this._opacity = opacity;
286
+ (_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.setOpacity(opacity);
287
+ this._textWritersMap.forEach(function (writer) { return writer.setOpacity(opacity); });
288
+ this.globe.DrawRender();
289
+ };
290
+ /**
291
+ * @method setOneDegreePaddingOn // performance consuming, might be removed
292
+ */
293
+ RangeRings.prototype.setOneDegreePaddingOn = function (isOneDegreePaddingOn) {
294
+ if (typeof isOneDegreePaddingOn !== "boolean")
295
+ throw new Error("Invalid value for one degree padding");
296
+ if (this._oneDegreePadding === isOneDegreePaddingOn)
297
+ return;
298
+ this._oneDegreePadding = isOneDegreePaddingOn;
299
+ this.globe.DrawRender();
300
+ };
301
+ RangeRings.prototype.setZAlphaOnDegreePadding = function (zAlphaOnDegreePadding) {
302
+ if (zAlphaOnDegreePadding !== 0 && zAlphaOnDegreePadding !== 1)
303
+ throw new Error("Invalid value for zAlphaOnDegreePadding");
304
+ if (this._zAlphaOnDegreePadding === zAlphaOnDegreePadding)
305
+ return;
306
+ this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
307
+ this.globe.DrawRender();
308
+ };
309
+ // PRIVATE METHODS
310
+ RangeRings.prototype._initPrograms = function () {
311
+ var globe = this.globe;
312
+ this._circleProgram2D = circle_accurate_flat_1.CircleCache.get(globe);
313
+ this._circleProgram3D = circle_accurate_3d_1.CircleCache.get(globe);
314
+ this._padding2dProgram = lines_color_instanced_flat_1.LinesColorInstancedFlatCache.get(globe);
315
+ this._padding3dProgram = degree_padding_around_circle_3d_1.CirclePadding3DCache.get(globe);
316
+ this._lineOnGlobe_bigPadding = naive_accurate_flexible_1.LineOnGlobeCache.get(globe);
317
+ };
318
+ RangeRings.prototype._initBufferManagers = function () {
319
+ var _a, _b, _c, _d;
320
+ var _this = this;
321
+ var gl = this.gl;
322
+ var initialCapacity = 10;
323
+ var bufferType = "DYNAMIC_DRAW";
324
+ // circle2d, circle3d, 1 degree paddings,
325
+ this.bufferOrchestrator = new account_1.BufferOrchestrator({ capacity: initialCapacity });
326
+ this.bufferManagersCompMap = new Map([
327
+ // circle 3D
328
+ ["centerCoords3d", {
329
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType: bufferType, initialCapacity: initialCapacity }),
330
+ 'adaptor': function (item) { return new Float32Array(item.centerCoords3d); },
331
+ }],
332
+ ["targetCoords3d", {
333
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType: bufferType, initialCapacity: initialCapacity }),
334
+ 'adaptor': function (item) { return new Float32Array(item.targetCoords3d); },
335
+ }],
336
+ ["rgba", {
337
+ 'bufferManager': new account_1.BufferManager(gl, 4, { bufferType: bufferType, initialCapacity: initialCapacity }),
338
+ 'adaptor': function (item) { return new Float32Array(item.hide === enum_1.ENUM_HIDE.HIDE ? [0, 0, 0, 0] : item.rgba); }
339
+ }],
340
+ ["radius3d", {
341
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType: bufferType, initialCapacity: initialCapacity }),
342
+ 'adaptor': function (item) { return new Float32Array([item.radius]); }
343
+ }],
344
+ ["radius3dsmall", {
345
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType: bufferType, initialCapacity: initialCapacity }),
346
+ 'adaptor': function (item) {
347
+ if (item.hide === enum_1.ENUM_HIDE.HIDE_1_DEGREE_PADDINGS)
348
+ return new Float32Array([item.radius]);
349
+ return new Float32Array([item.radius - item.padding / 3]);
350
+ }
351
+ }],
352
+ ["circleDashAngle", {
353
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType: bufferType, initialCapacity: initialCapacity }),
354
+ 'adaptor': function (item) { return new Float32Array([1]); },
355
+ }],
356
+ ["dashOpacity", {
357
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType: bufferType, initialCapacity: initialCapacity }),
358
+ 'adaptor': function (item) { return new Float32Array([1]); },
359
+ }],
360
+ // circle 2D
361
+ ["centerCoords2dflatForPadding", {
362
+ 'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType: bufferType, initialCapacity: initialCapacity }),
363
+ 'adaptor': function (item) { return item.centerCoords2dflatForPadding; },
364
+ }],
365
+ ["centerCoords2dflat", {
366
+ 'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType: bufferType, initialCapacity: initialCapacity }),
367
+ 'adaptor': function (item) { return item.centerCoords2dflat; },
368
+ }],
369
+ ["rgbaMercator", {
370
+ 'bufferManager': new account_1.BufferManager(gl, 4 * CIRCLE_FLAT_EDGE_COUNT, { bufferType: bufferType, initialCapacity: initialCapacity }),
371
+ 'adaptor': function (item) { return data_filler_1.populateFloat32Array.fillWithListData(CIRCLE_FLAT_EDGE_COUNT, item.hide === enum_1.ENUM_HIDE.HIDE ? [0, 0, 0, 0] : item.rgba); },
372
+ }],
373
+ ["circleDashAngleMercator", {
374
+ 'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType: bufferType, initialCapacity: initialCapacity }),
375
+ 'adaptor': function (item) { return data_filler_1.populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1); },
376
+ }],
377
+ ["dashOpacityMercator", {
378
+ 'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType: bufferType, initialCapacity: initialCapacity }),
379
+ 'adaptor': function (item) { return data_filler_1.populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1); },
380
+ }],
381
+ ]);
382
+ var obj = function (bufferManagerComp, divisor) {
383
+ if (divisor === void 0) { divisor = 1; }
384
+ if (bufferManagerComp === null)
385
+ return null;
386
+ return { 'buffer': bufferManagerComp.bufferManager.buffer, 'stride': 0, 'offset': 0, divisor: divisor };
387
+ };
388
+ this._circle2DVao = (_a = this._circleProgram2D).createVAO.apply(_a, ["centerCoords2dflat", "rgbaMercator", "circleDashAngleMercator", "dashOpacityMercator"].map(function (key) { return obj(_this.bufferManagersCompMap.get(key)); }));
389
+ this._circle3DVao = (_b = this._circleProgram3D).createVAO.apply(_b, ["centerCoords3d", "targetCoords3d", "rgba", "circleDashAngle", "dashOpacity"].map(function (key) { return obj(_this.bufferManagersCompMap.get(key)); }));
390
+ this._oneDegree2DPaddingVao = this._padding2dProgram.createVAO({ buffer: this.bufferManagersCompMap.get("centerCoords2dflat").bufferManager.buffer, size: 2, stride: 0, offset: 0 }, { buffer: this.bufferManagersCompMap.get("centerCoords2dflatForPadding").bufferManager.buffer, size: 2, stride: 0, offset: 0 }, { buffer: this.bufferManagersCompMap.get("rgbaMercator").bufferManager.buffer, size: 4, stride: 0, offset: 0 });
391
+ // PADDING
392
+ // this one needs glue to assosiate rings and their big paddings since the count for center is not fixed
393
+ this.paddingBufferOrchestrator = new account_1.BufferOrchestrator({ capacity: initialCapacity });
394
+ this.bufferManagersCompMapPadding = new Map([
395
+ ["circlePoint2d", {
396
+ 'bufferManager': new account_1.BufferManager(gl, 2, { bufferType: bufferType, initialCapacity: initialCapacity }),
397
+ 'adaptor': function (item) { return item.circlePoint2d; },
398
+ }],
399
+ ["paddingPoint2d", {
400
+ 'bufferManager': new account_1.BufferManager(gl, 2, { bufferType: bufferType, initialCapacity: initialCapacity }),
401
+ 'adaptor': function (item) { return item.paddingPoint2d; },
402
+ }],
403
+ ["circlePoint3d", {
404
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType: bufferType, initialCapacity: initialCapacity }),
405
+ 'adaptor': function (item) { return item.circlePoint3d; }
406
+ }],
407
+ ["paddingPoint3d", {
408
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType: bufferType, initialCapacity: initialCapacity }),
409
+ 'adaptor': function (item) { return item.paddingPoint3d; }
410
+ }],
411
+ ["rgba", {
412
+ 'bufferManager': new account_1.BufferManager(gl, 4, { bufferType: bufferType, initialCapacity: initialCapacity }),
413
+ 'adaptor': function (item) { return new Float32Array(item.rgba); }
414
+ }],
415
+ // ["dashOpacity", {
416
+ // 'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
417
+ // 'adaptor': (item) => new Float32Array([1]),
418
+ // }],
419
+ // ["dashRatio", {
420
+ // 'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
421
+ // 'adaptor': (item) => new Float32Array([1]),
422
+ // }],
423
+ ]);
424
+ this._bigPadding3dFlatVAO = (_c = this._lineOnGlobe_bigPadding).createVAO.apply(_c, ["circlePoint2d", "circlePoint3d", "paddingPoint2d", "paddingPoint3d", null, null, "rgba",].map(function (key) {
425
+ return (key === null) ? null : obj(_this.bufferManagersCompMapPadding.get(key));
426
+ }));
427
+ this._padding3dOneDegreeVao = (_d = this._padding3dProgram).createVAO.apply(_d, ["centerCoords3d", "radius3d", "radius3dsmall", "rgba"].map(function (key) { return obj(_this.bufferManagersCompMap.get(key)); }));
428
+ };
429
+ // IMPLICIT METHODS
430
+ RangeRings.prototype.__reconstructCentralRingsBigPaddings = function (centerID) {
431
+ var globe = this.globe;
432
+ var centerItem = this._ringAccount.getCenter(centerID);
433
+ if (centerItem === undefined)
434
+ throw new Error("Center not found");
435
+ var long = centerItem.long, lat = centerItem.lat, stepAngle = centerItem.stepAngle, rgba = centerItem.rgba, rings = centerItem.rings, _a = centerItem.hide, hide = _a === void 0 ? 0 : _a, _b = centerItem.textHide, textHide = _b === void 0 ? 0 : _b, _c = centerItem.altitude, centerAltitude = _c === void 0 ? 0 : _c;
436
+ var result = [];
437
+ var color = hide === 1 ? new Float32Array([0, 0, 0, 0]) : new Float32Array(rgba);
438
+ for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
439
+ var _d = rings_1[_i], ringID = _d.ringID, radius = _d.radius, padding = _d.padding, _e = _d.altitude, altitude = _e === void 0 ? centerAltitude : _e;
440
+ var azimuthAngle = 0;
441
+ while (azimuthAngle < 360) {
442
+ var circlePoint = globe.Math.FindPointByPolar(long, lat, radius, azimuthAngle); // long lat
443
+ var paddingPoint = globe.Math.FindPointByPolar(long, lat, radius - padding, azimuthAngle); // long lat
444
+ result.push({
445
+ key: (0, ring_account_1.ringBigPaddingKeyMethod)(centerID, ringID, azimuthAngle),
446
+ circlePoint2d: new Float32Array(globe.api_GetMercator2DPoint(circlePoint.long, circlePoint.lat)),
447
+ paddingPoint2d: new Float32Array(globe.api_GetMercator2DPoint(paddingPoint.long, paddingPoint.lat)),
448
+ circlePoint3d: coordOnSphere(circlePoint.long, circlePoint.lat, globe, altitude / 1000),
449
+ paddingPoint3d: coordOnSphere(paddingPoint.long, paddingPoint.lat, globe, altitude / 1000),
450
+ rgba: color,
451
+ hide: hide,
452
+ textHide: textHide
453
+ });
454
+ azimuthAngle += stepAngle;
455
+ }
456
+ }
457
+ return result;
458
+ };
459
+ RangeRings.prototype.__reconstructCentralRings = function (centerID) {
460
+ var globe = this.globe;
461
+ var centerItem = this._ringAccount.getCenter(centerID);
462
+ if (centerItem === undefined)
463
+ throw new Error("Center not found");
464
+ var long = centerItem.long, lat = centerItem.lat, rgba = centerItem.rgba, rings = centerItem.rings, _a = centerItem.hide, hide = _a === void 0 ? 0 : _a, _b = centerItem.textHide, textHide = _b === void 0 ? 0 : _b, _c = centerItem.altitude, centralAltitude = _c === void 0 ? 0 : _c;
465
+ var centerCoords3d = coordOnSphere(long, lat, globe, centralAltitude / 1000);
466
+ var result = [];
467
+ for (var _i = 0, rings_2 = rings; _i < rings_2.length; _i++) {
468
+ var _d = rings_2[_i], ringID = _d.ringID, radius = _d.radius, padding = _d.padding, __identity__ = _d.__identity__, _e = _d.altitude, altitude = _e === void 0 ? centralAltitude : _e;
469
+ var key = __identity__;
470
+ var centerCoords2dflat = (0, circle_accurate_flat_1.centerCoords2dflatDataCreatorWithRadius)(globe, long, lat, radius, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
471
+ var radiusPadding = hide === enum_1.ENUM_HIDE.HIDE_1_DEGREE_PADDINGS ? radius : radius - padding / 3;
472
+ var targetPoint = globe.Math.FindPointByPolar(long, lat, radius, 0); // long lat
473
+ var targetCoords3d = coordOnSphere(targetPoint.long, targetPoint.lat, globe, altitude / 1000);
474
+ var centerCoords2dflatForPadding = (0, circle_accurate_flat_1.centerCoords2dflatDataCreatorWithRadius)(globe, long, lat, radiusPadding, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
475
+ result.push({
476
+ key: key,
477
+ centerCoords3d: centerCoords3d,
478
+ targetCoords3d: targetCoords3d,
479
+ centerCoords2dflat: centerCoords2dflat,
480
+ radius: radius,
481
+ padding: padding,
482
+ rgba: rgba,
483
+ centerCoords2dflatForPadding: centerCoords2dflatForPadding,
484
+ hide: hide,
485
+ textHide: textHide
486
+ });
487
+ }
488
+ return result;
489
+ };
490
+ RangeRings.prototype.__reconstructCentralPaddingProperties = function (centerID) {
491
+ var centerItem = this._ringAccount.getCenter(centerID);
492
+ if (centerItem === undefined)
493
+ throw new Error("Center not found");
494
+ var stepAngle = centerItem.stepAngle, rgba = centerItem.rgba, rings = centerItem.rings, _a = centerItem.hide, hide = _a === void 0 ? 0 : _a, _b = centerItem.textHide, textHide = _b === void 0 ? 0 : _b;
495
+ var result = [];
496
+ for (var _i = 0, rings_3 = rings; _i < rings_3.length; _i++) {
497
+ var ringID = rings_3[_i].ringID;
498
+ var angle = 0;
499
+ while (angle < 360) {
500
+ result.push({
501
+ key: (0, ring_account_1.ringBigPaddingKeyMethod)(centerID, ringID, angle),
502
+ rgba: hide === 1 ? new Float32Array([0, 0, 0, 0]) : rgba,
503
+ textHide: textHide
504
+ });
505
+ angle += stepAngle;
506
+ }
507
+ }
508
+ return result;
509
+ };
510
+ RangeRings.prototype.__reconstructCentralProperties = function (centerID) {
511
+ var centerItem = this._ringAccount.getCenter(centerID);
512
+ if (centerItem === undefined)
513
+ throw new Error("Center not found");
514
+ var rgba = centerItem.rgba, rings = centerItem.rings, _a = centerItem.hide, hide = _a === void 0 ? 0 : _a, _b = centerItem.textHide, textHide = _b === void 0 ? 0 : _b;
515
+ var result = [];
516
+ for (var _i = 0, rings_4 = rings; _i < rings_4.length; _i++) {
517
+ var _c = rings_4[_i], ringID = _c.ringID, __identity__ = _c.__identity__;
518
+ var key = __identity__;
519
+ result.push({
520
+ key: key,
521
+ rgba: hide === enum_1.ENUM_HIDE.HIDE ? new Float32Array([0, 0, 0, 0]) : rgba,
522
+ textHide: textHide
523
+ });
524
+ }
525
+ return result;
526
+ };
527
+ // GLOBE API
528
+ RangeRings.prototype.init = function (globe, gl) {
529
+ this.globe = globe;
530
+ this.gl = gl;
531
+ this._initPrograms();
532
+ this._initBufferManagers();
533
+ if (this._showNumbers) {
534
+ this.paddingTextPlugin = new rangeringangletext_1.default(globe, this.id + "text", { style: this._numbersStyle, opacity: this._opacity });
535
+ delete this._numbersStyle;
536
+ }
537
+ };
538
+ RangeRings.prototype.draw3D = function () {
539
+ var _a = this, globe = _a.globe, gl = _a.gl, _circleProgram2D = _a._circleProgram2D, _circleProgram3D = _a._circleProgram3D, _padding2dProgram = _a._padding2dProgram, _padding3dProgram = _a._padding3dProgram, _lineOnGlobe_bigPadding = _a._lineOnGlobe_bigPadding, _circle2DVao = _a._circle2DVao, _circle3DVao = _a._circle3DVao, _oneDegree2DPaddingVao = _a._oneDegree2DPaddingVao, _padding3dOneDegreeVao = _a._padding3dOneDegreeVao, _bigPadding3dFlatVAO = _a._bigPadding3dFlatVAO, bufferOrchestrator = _a.bufferOrchestrator, paddingBufferOrchestrator = _a.paddingBufferOrchestrator, _opacity = _a._opacity, _oneDegreePadding = _a._oneDegreePadding, _zAlphaOnDegreePadding = _a._zAlphaOnDegreePadding;
540
+ gl.disable(gl.DEPTH_TEST);
541
+ var is3D = globe.api_GetCurrentGeometry() === 0;
542
+ // const lod = globe.api_GetCurrentLOD();
543
+ if (is3D) {
544
+ _circleProgram3D.draw(_circle3DVao, bufferOrchestrator.length, _opacity);
545
+ if (_oneDegreePadding)
546
+ _padding3dProgram.draw(_padding3dOneDegreeVao, bufferOrchestrator.length, 360, 1, _opacity, _zAlphaOnDegreePadding);
547
+ }
548
+ else {
549
+ _circleProgram2D.draw(_circle2DVao, bufferOrchestrator.length, CIRCLE_FLAT_EDGE_COUNT, _opacity);
550
+ // _padding2dProgram.draw(bigPaddingVAO, paddingBufferOrchestrator.length, _opacity);
551
+ if (_oneDegreePadding)
552
+ _padding2dProgram.draw(_oneDegree2DPaddingVao, bufferOrchestrator.length * CIRCLE_FLAT_EDGE_COUNT, _opacity, _zAlphaOnDegreePadding);
553
+ }
554
+ var drawOptions = { drawRange: { first: 0, count: paddingBufferOrchestrator.length } };
555
+ _lineOnGlobe_bigPadding.draw(_bigPadding3dFlatVAO, drawOptions, _opacity);
556
+ this._textWritersMap.forEach(function (textWriter) { return textWriter.draw(); });
557
+ gl.enable(gl.DEPTH_TEST);
558
+ };
559
+ RangeRings.prototype.free = function () {
560
+ var _a;
561
+ if (this._isFreed)
562
+ return;
563
+ var globe = this.globe;
564
+ this.bufferManagersCompMap.forEach(function (_a) {
565
+ var bufferManager = _a.bufferManager;
566
+ return bufferManager.free();
567
+ });
568
+ this.bufferManagersCompMapPadding.forEach(function (_a) {
569
+ var bufferManager = _a.bufferManager;
570
+ return bufferManager.free();
571
+ });
572
+ // delete vaos
573
+ this.gl.deleteVertexArray(this._circle2DVao);
574
+ this.gl.deleteVertexArray(this._circle3DVao);
575
+ this.gl.deleteVertexArray(this._oneDegree2DPaddingVao);
576
+ this.gl.deleteVertexArray(this._padding3dOneDegreeVao);
577
+ this.gl.deleteVertexArray(this._bigPadding3dFlatVAO);
578
+ // delete programs
579
+ circle_accurate_flat_1.CircleCache.release(globe);
580
+ circle_accurate_3d_1.CircleCache.release(globe);
581
+ lines_color_instanced_flat_1.LinesColorInstancedFlatCache.release(globe);
582
+ degree_padding_around_circle_3d_1.CirclePadding3DCache.release(globe);
583
+ naive_accurate_flexible_1.LineOnGlobeCache.release(globe);
584
+ this._circleProgram2D = null;
585
+ this._circleProgram3D = null;
586
+ this._padding2dProgram = null;
587
+ this._padding3dProgram = null;
588
+ this._lineOnGlobe_bigPadding = null;
589
+ (_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.free();
590
+ this._isFreed = true;
591
+ };
592
+ RangeRings.prototype.__contextTextWriterUpdate = function (centerIDs, textWriterIDs) {
593
+ var _this = this;
594
+ if (textWriterIDs === void 0) { textWriterIDs = null; }
595
+ var textWriters = null;
596
+ if (textWriterIDs === null) {
597
+ textWriters = Array.from(this._textWritersMap.values());
598
+ }
599
+ else if (textWriterIDs.length === 0) {
600
+ return;
601
+ }
602
+ else {
603
+ textWriters = textWriterGetOrThrow(this._textWritersMap, textWriterIDs);
604
+ }
605
+ centerIDs.forEach(function (centerID) { _this._ringAccount.textUpdate(centerID, textWriters, _this._textDataPreAdaptor); });
606
+ };
607
+ return RangeRings;
608
+ }());
609
+ exports.RangeRings = RangeRings;
610
+ var textWriterGetOrThrow = (0, get_1.mapGetOrThrow)("textWriterIDs is invalid");