@pirireis/webglobeplugins 0.9.9 → 0.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +188 -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 +56 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +201 -0
  16. package/Math/plane.js +60 -0
  17. package/Math/quaternion.js +104 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +126 -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 +18 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +341 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +14 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +86 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +449 -0
  32. package/circle-line-chain/chain-list-map.js +205 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +424 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +225 -0
  37. package/compass-rose/compass-text-writer.js +153 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +296 -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 +202 -0
  44. package/heatwave/isobar/plugin.js +343 -0
  45. package/heatwave/isobar/quadtreecontours.js +300 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +206 -0
  47. package/jest.config.js +7 -0
  48. package/package.json +4 -4
  49. package/partialrings/buffer-manager.js +81 -0
  50. package/partialrings/index.js +41 -0
  51. package/partialrings/plugin.js +135 -0
  52. package/partialrings/program.js +286 -0
  53. package/pin/pin-object-array.js +305 -0
  54. package/pin/pin-point-totem.js +60 -0
  55. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  56. package/point-heat-map/index.js +1 -0
  57. package/point-heat-map/plugin-webworker.js +126 -0
  58. package/point-heat-map/point-to-heat-map-flow.js +127 -0
  59. package/point-tracks/key-methods.js +5 -0
  60. package/point-tracks/plugin.js +338 -0
  61. package/programs/arrowfield/index.js +7 -0
  62. package/programs/arrowfield/logic.js +257 -0
  63. package/programs/arrowfield/object.js +66 -0
  64. package/programs/data2legend/density-to-legend.js +101 -0
  65. package/programs/data2legend/point-to-density-texture.js +100 -0
  66. package/programs/float2legendwithratio/index.js +8 -0
  67. package/programs/float2legendwithratio/logic.js +171 -0
  68. package/programs/float2legendwithratio/object.js +110 -0
  69. package/programs/globe-util/is-globe-moved.js +21 -0
  70. package/programs/globeshell/index.js +8 -0
  71. package/programs/globeshell/noise/noises.js +1 -0
  72. package/programs/globeshell/wiggle/index.js +8 -0
  73. package/programs/globeshell/wiggle/logic.js +345 -0
  74. package/programs/globeshell/wiggle/object.js +72 -0
  75. package/programs/helpers/blender/index.js +1 -0
  76. package/programs/helpers/blender/program.js +79 -0
  77. package/programs/helpers/fadeaway/index.js +7 -0
  78. package/programs/helpers/fadeaway/logic.js +72 -0
  79. package/programs/helpers/fadeaway/object.js +20 -0
  80. package/programs/helpers/index.js +8 -0
  81. package/programs/index.js +58 -0
  82. package/programs/interface.js +1 -0
  83. package/programs/line-on-globe/angled-line.js +176 -0
  84. package/programs/line-on-globe/circle-accurate-3d.js +141 -0
  85. package/programs/line-on-globe/circle-accurate-flat.js +216 -0
  86. package/programs/line-on-globe/circle-accurate.js +178 -0
  87. package/programs/line-on-globe/circle.js +167 -0
  88. package/programs/line-on-globe/degree-padding-around-circle-3d.js +159 -0
  89. package/programs/line-on-globe/index.js +1 -0
  90. package/programs/line-on-globe/lines-color-instanced-flat.js +136 -0
  91. package/programs/line-on-globe/linestrip.js +171 -0
  92. package/programs/line-on-globe/naive-accurate-flexible.js +195 -0
  93. package/programs/line-on-globe/to-the-surface.js +111 -0
  94. package/programs/line-on-globe/util.js +8 -0
  95. package/programs/picking/pickable-renderer.js +188 -0
  96. package/programs/point-on-globe/element-globe-surface-glow.js +142 -0
  97. package/programs/point-on-globe/element-point-glow.js +153 -0
  98. package/programs/point-on-globe/square-pixel-point.js +174 -0
  99. package/programs/programcache.js +131 -0
  100. package/programs/rings/distancering/circleflatprogram.js +156 -0
  101. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +369 -0
  102. package/programs/rings/distancering/circlepaddysharedbuffer.js +357 -0
  103. package/programs/rings/distancering/index.js +14 -0
  104. package/programs/rings/distancering/paddyflatprogram.js +172 -0
  105. package/programs/rings/distancering/paddyflatprogram2d.js +174 -0
  106. package/programs/rings/distancering/paddyflatprogram3d.js +172 -0
  107. package/programs/rings/distancering/shader.js +1 -0
  108. package/programs/rings/index.js +17 -0
  109. package/programs/rings/partial-ring/piece-of-pie.js +275 -0
  110. package/programs/totems/camerauniformblock.js +160 -0
  111. package/programs/totems/canvas-webglobe-info.js +110 -0
  112. package/programs/totems/gpu-selection-uniform-block.js +108 -0
  113. package/programs/totems/index.js +40 -0
  114. package/programs/two-d/pixel-circle.js +1 -0
  115. package/programs/two-d/pixel-padding-for-compass.js +162 -0
  116. package/programs/util.js +17 -0
  117. package/programs/vectorfields/index.js +23 -0
  118. package/programs/vectorfields/logics/drawrectangleparticles.js +107 -0
  119. package/programs/vectorfields/logics/index.js +12 -0
  120. package/programs/vectorfields/logics/pixelbased.js +142 -0
  121. package/programs/vectorfields/logics/ubo.js +63 -0
  122. package/programs/vectorfields/pingpongbuffermanager.js +76 -0
  123. package/rangerings/enum.js +5 -0
  124. package/rangerings/index.js +15 -0
  125. package/rangerings/plugin.js +560 -0
  126. package/rangerings/rangeringangletext.js +329 -0
  127. package/rangerings/ring-account.js +117 -0
  128. package/shaders/fragment-toy/firework.js +58 -0
  129. package/shaders/fragment-toy/singularity.js +59 -0
  130. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  131. package/timetracks/adaptors-line-strip.js +71 -0
  132. package/timetracks/adaptors.js +122 -0
  133. package/timetracks/index.js +19 -0
  134. package/timetracks/plugin-line-strip.js +250 -0
  135. package/timetracks/plugin.js +258 -0
  136. package/timetracks/program-line-strip.js +611 -0
  137. package/timetracks/program.js +772 -0
  138. package/timetracks/programpoint-line-strip.js +154 -0
  139. package/timetracks/programpoint.js +147 -0
  140. package/types.js +15 -0
  141. package/util/account/bufferoffsetmanager.js +179 -0
  142. package/util/account/index.js +23 -0
  143. package/util/account/single-attribute-buffer-management/buffer-manager.js +108 -0
  144. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +150 -0
  145. package/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/util/account/single-attribute-buffer-management/object-store.js +51 -0
  147. package/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/util/account/util.js +22 -0
  149. package/util/algorithms/index.js +1 -0
  150. package/util/algorithms/search-binary.js +28 -0
  151. package/util/check/get.js +18 -0
  152. package/util/check/index.js +1 -0
  153. package/util/check/typecheck.js +49 -0
  154. package/util/geometry/index.js +51 -0
  155. package/util/gl-util/buffer/attribute-loader.js +69 -0
  156. package/util/gl-util/buffer/index.js +6 -0
  157. package/util/gl-util/buffer/types.js +1 -0
  158. package/util/gl-util/draw-options/methods.js +38 -0
  159. package/util/gl-util/draw-options/types.js +15 -0
  160. package/util/gl-util/uniform-block/manager.js +156 -0
  161. package/util/gl-util/uniform-block/shader.js +1 -0
  162. package/util/gl-util/uniform-block/types.js +8 -0
  163. package/util/heatwavedatamanager/datamanager.js +152 -0
  164. package/util/heatwavedatamanager/index.js +10 -0
  165. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -0
  166. package/util/heatwavedatamanager/pointcoordsmeta.js +20 -0
  167. package/util/index.js +57 -0
  168. package/util/interpolation/index.js +1 -0
  169. package/util/interpolation/timetrack/index.js +5 -0
  170. package/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
  171. package/util/interpolation/timetrack/web-worker-str.js +183 -0
  172. package/util/interpolation/timetrack/web-worker.js +48 -0
  173. package/util/jshelpers/data-filler.js +20 -0
  174. package/util/jshelpers/equality.js +20 -0
  175. package/util/jshelpers/index.js +37 -0
  176. package/util/jshelpers/timefilters.js +32 -0
  177. package/util/picking/fence.js +46 -0
  178. package/util/picking/picker-displayer.js +139 -0
  179. package/util/programs/draw-texture-on-canvas.js +89 -0
  180. package/util/programs/index.js +17 -0
  181. package/util/programs/shapesonglobe.js +214 -0
  182. package/util/programs/supersampletotextures.js +113 -0
  183. package/util/programs/texturetoglobe.js +182 -0
  184. package/util/shaderfunctions/geometrytransformations.js +340 -0
  185. package/util/shaderfunctions/index.js +18 -0
  186. package/util/shaderfunctions/nodata.js +11 -0
  187. package/util/shaderfunctions/noisefunctions.js +43 -0
  188. package/util/surface-line-data/arc-bboxes.js +25 -0
  189. package/util/surface-line-data/arcs-to-cuts.js +50 -0
  190. package/util/surface-line-data/cut-arc.js +1 -0
  191. package/util/surface-line-data/flow.js +28 -0
  192. package/util/surface-line-data/rbush-manager.js +1 -0
  193. package/util/surface-line-data/types.js +1 -0
  194. package/util/surface-line-data/web-worker.js +1 -0
  195. package/util/webglobe/gldefaultstates.js +7 -0
  196. package/util/webglobe/index.js +18 -0
  197. package/util/webglobe/rasteroverlay.js +78 -0
  198. package/util/webglobjectbuilders.js +388 -0
  199. package/util/webglobjectbuilders1.js +237 -0
  200. package/waveparticles/adaptor.js +17 -0
  201. package/waveparticles/index.js +10 -0
  202. package/waveparticles/plugin.js +266 -0
  203. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  204. package/wind/index.js +14 -0
  205. package/wind/plugin.js +926 -0
  206. package/wind/vectorfieldimage.js +25 -0
  207. package/write-text/attached-text-writer.js +91 -0
  208. package/write-text/context-text.js +98 -0
  209. package/write-text/context-text3.js +155 -0
  210. package/write-text/index.js +5 -0
  211. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircleLineChainPlugin = void 0;
4
+ const naive_accurate_flexible_1 = require("../programs/line-on-globe/naive-accurate-flexible");
5
+ const circle_accurate_flat_1 = require("../programs/line-on-globe/circle-accurate-flat");
6
+ const circle_accurate_3d_1 = require("../programs/line-on-globe/circle-accurate-3d");
7
+ const account_1 = require("../util/account");
8
+ const chain_list_map_1 = require("./chain-list-map");
9
+ const get_1 = require("../util/check/get");
10
+ const util_1 = require("./util");
11
+ const data_filler_1 = require("../util/jshelpers/data-filler");
12
+ const context_text3_1 = require("../write-text/context-text3");
13
+ const typecheck_1 = require("../util/check/typecheck");
14
+ const attribute_loader_1 = require("../util/gl-util/buffer/attribute-loader");
15
+ const index_1 = require("../util/geometry/index");
16
+ /**
17
+ * Insert info to chain list map (nodes and properties)
18
+ *
19
+ * ask chain list map for text data
20
+ * ask chain list map for buffer data
21
+ *
22
+ *
23
+ * addNode
24
+ * insertBulk
25
+ * deleteChain
26
+ * deleteNodes
27
+ * updateCoordinates()
28
+ * updateChainProperties
29
+ */
30
+ /**
31
+ *
32
+ *
33
+ * @typedef chain
34
+ * @property {string} chainKey
35
+ * @property {StyleProperties} chainProperties
36
+ *
37
+ * @typedef {Object} Node
38
+ * @property {string} key
39
+ * @property {number} long
40
+ * @property {number} lat
41
+ * @property {number} altitude
42
+ * @property {StyleProperties} circleProperties
43
+ *
44
+ * @typedef {Object} Node
45
+ * @property {string} key
46
+ * @property {number} long
47
+ * @property {number} lat
48
+ *
49
+ * @typedef StyleProperties
50
+ * @property {Array<number>} rgba 0-1
51
+ * @property { number} dashOpacity 0-1
52
+ * @property { number} dashRatio 0-1
53
+ * @property { number } circleDashAngle 0-360
54
+ * @property { number} altitude
55
+ *
56
+ * //property {Array<Node>} nodes
57
+ */
58
+ const textWriterGetOrThrow = (0, get_1.mapGetOrThrow)("textWriterIDs is invalid");
59
+ class CircleLineChainPlugin {
60
+ /**
61
+ *
62
+ * @param {*} id
63
+ * @param {Map<[key, ContextTextWriter3]} textWritersMap //import { ContextTextWriter3 } from "@pirireis/webglobeplugins/write-text/context-text3";
64
+ */
65
+ constructor(id, { drawCircleOn = true, textWritersMap = new Map(), textDataPreAdaptor = null, circleFlatEdgeCount = circle_accurate_flat_1.EDGE_COUNT - 2 } = {}) {
66
+ this.id = id;
67
+ this._checktextWritersMap(textWritersMap);
68
+ this._textWritersMap = textWritersMap;
69
+ this._textWritersMap.forEach((writer) => writer.setKeyAdaptor((v, i, c, properties) => v.__identity__));
70
+ this._opacity = 1;
71
+ this._chainListMap = new chain_list_map_1.ChainListMap(util_1.keyMethod);
72
+ this.bufferOrchestrator = new account_1.BufferOrchestrator({ capacity: 10 });
73
+ this._drawCircleOn = drawCircleOn;
74
+ this._textDataPreAdaptor = textDataPreAdaptor;
75
+ this._circleFlatEdgeCount = circleFlatEdgeCount + 2;
76
+ }
77
+ // init
78
+ // API
79
+ setDrawCircleOn(bool) {
80
+ if (typeof bool !== 'boolean')
81
+ throw new Error("setDrawCircleOn parameter must be a boolean");
82
+ this._drawCircleOn = bool;
83
+ this.globe.DrawRender();
84
+ }
85
+ // ---- updateBulk
86
+ /**
87
+ * @param {Array<chain>} data
88
+ * @typedef chain
89
+ * @property {string} chainKey
90
+ * @property {Array<Node>} nodes
91
+
92
+ */
93
+ updateCoordinatesBulk(data, { textWriterIDs = [] } = {}) {
94
+ // update implicit data structure
95
+ // find keys to update.. (inserted data and the radius of "from")
96
+ // updateBuffers
97
+ // update text
98
+ const chainKeys = [];
99
+ for (const chain of data) {
100
+ chainKeys.push(chain.chainKey);
101
+ chain.nodes.forEach((node) => {
102
+ this._chainListMap.updateCoordsinatesOfNode(node, chain.chainKey);
103
+ });
104
+ }
105
+ this._reconstructChains(chainKeys);
106
+ this._updateTexts(chainKeys, textWriterIDs);
107
+ }
108
+ /**
109
+ * @param {*} chainKey
110
+ * @param {Array<{nodeKey, circleProperties:Map[propertyName ,value], lineProperties:Map[propertyName ,value] }} propertyMap
111
+ */
112
+ updateNodesProperties(chainKey, nodesAndPropertyMap, { textWriterIDs = [] } = {}) {
113
+ this._chainListMap.updateNodesProperties(chainKey, nodesAndPropertyMap);
114
+ this._reconstructChains([chainKey]);
115
+ this._updateTexts([chainKey], textWriterIDs);
116
+ this.globe.DrawRender();
117
+ }
118
+ /**
119
+ * @param {*} chainKey
120
+ * @param {Map<propertyName ,value} propertyMap
121
+ */
122
+ updateChainProperties(chainKey, propertyMap, { textWriterIDs = [] } = {}) {
123
+ this._chainListMap.updateChainProperties(chainKey, propertyMap);
124
+ this._reconstructChains([chainKey]);
125
+ if (textWriterIDs)
126
+ this._updateTexts([chainKey], textWriterIDs);
127
+ }
128
+ updateNodeCoordinates(node, chainKey, { textWriterIDs = [] } = {}) {
129
+ this._chainListMap.updateCoordsinatesOfNode(node, chainKey);
130
+ if (textWriterIDs)
131
+ this._updateTexts([chainKey], textWriterIDs);
132
+ this._reconstructChains([chainKey]);
133
+ this.globe.DrawRender();
134
+ }
135
+ /**
136
+ *
137
+
138
+ /**
139
+ * @param {Array<string>} textWriterIDs | textWritersMap keys to be used for writing text.
140
+ * @param {Array<string>} chainKeys | if empty, all texts will be updated
141
+ */
142
+ updateText(textWriterIDs = [], chainKeys = null) {
143
+ if (chainKeys === null)
144
+ chainKeys = this._chainListMap.getAllChainKeysIterator();
145
+ this._updateTexts(chainKeys, textWriterIDs);
146
+ this.globe.DrawRender();
147
+ }
148
+ // ---- insertBulk
149
+ /**
150
+ *
151
+ * @param {Array<chain>} data
152
+ */
153
+ insertBulk(data, { textWriterIDs = [] } = {}) {
154
+ // first insert everything to implicit structure,
155
+ // then iterate over data again to update text
156
+ // let _reconstractChainBufferData method interact with data and bufferOrchestrator.
157
+ const chainKeysToConstruct = [];
158
+ for (const { chainKey, chainProperties, nodes } of data) {
159
+ this._chainListMap.setChain(chainKey, nodes);
160
+ this._chainListMap.setChainProperties(chainKey, chainProperties);
161
+ chainKeysToConstruct.push(chainKey);
162
+ }
163
+ this._reconstructChains(chainKeysToConstruct);
164
+ if (textWriterIDs)
165
+ this._updateTexts(chainKeysToConstruct, textWriterIDs);
166
+ this.globe.DrawRender();
167
+ }
168
+ /**
169
+ * @param {Node} node
170
+ * @param {*} chainKey
171
+ * @param {*} theNodeKeyFront | node key of the next node, null places to the last
172
+ */
173
+ addNode(node, chainKey, { theNodeKeyFront = null, textWriterIDs = [] } = {}) {
174
+ this._chainListMap.addNode(node, chainKey, theNodeKeyFront);
175
+ if (textWriterIDs)
176
+ this._updateTexts([chainKey], textWriterIDs);
177
+ this._reconstructChains([chainKey]);
178
+ this.globe.DrawRender();
179
+ }
180
+ setOpacity(opacity) {
181
+ (0, typecheck_1.opacityCheck)(opacity);
182
+ this._textWritersMap.forEach((writer) => writer.setOpacity(opacity));
183
+ this._opacity = opacity;
184
+ this.globe.DrawRender();
185
+ }
186
+ getChain(chainKey) {
187
+ this._chainListMap.getChain(chainKey);
188
+ }
189
+ /**
190
+ *
191
+ * @param {*} chainKeys
192
+ */
193
+ deleteChains(chainKeys) {
194
+ const bufferKeys = [];
195
+ for (const chainKey of chainKeys) {
196
+ bufferKeys.push(...this._chainListMap.deleteChainAndReturnChainKeys(chainKey));
197
+ }
198
+ this._textWritersMap.forEach((writer) => writer.deleteTextBulk(bufferKeys));
199
+ this._updateTexts(chainKeys, this._textWritersMap.keys());
200
+ this.bufferOrchestrator.deleteBulk(bufferKeys, this.bufferManagersCompMap);
201
+ this.globe.DrawRender();
202
+ }
203
+ /**
204
+ *
205
+ * @param {Array<{chainKey, nodeKeys:[]} keysAndNodes
206
+ */
207
+ deleteNodes(keysAndNodes, { textWriterIDs = [] } = {}) {
208
+ const bufferKeys = [];
209
+ const chainKeysToReconstuct = [];
210
+ keysAndNodes.forEach(({ chainKey, nodeKeys }) => {
211
+ bufferKeys.push(...this._chainListMap.deleteNodesBelongToAChain(chainKey, nodeKeys));
212
+ chainKeysToReconstuct.push(chainKey);
213
+ });
214
+ this._textWritersMap.forEach((writer) => writer.deleteTextBulk(bufferKeys));
215
+ this.bufferOrchestrator.deleteBulk(bufferKeys, this.bufferManagersCompMap);
216
+ this._reconstructChains(chainKeysToReconstuct);
217
+ this._updateTexts(chainKeysToReconstuct, textWriterIDs);
218
+ this.globe.DrawRender();
219
+ }
220
+ init(globe, gl) {
221
+ this.gl = gl;
222
+ this.globe = globe;
223
+ this._initOrchestrations();
224
+ }
225
+ // implicit
226
+ _checktextWritersMap(textWritersMap) {
227
+ if (!(textWritersMap instanceof Map))
228
+ throw new Error("textWritersMap is not an instance of Map");
229
+ textWritersMap.forEach((v) => {
230
+ if (!(v instanceof context_text3_1.ContextTextWriter3))
231
+ throw new Error("textWritersMap element is not an instance of ContextTextWriter3");
232
+ });
233
+ }
234
+ _initOrchestrations() {
235
+ const { gl, globe } = this;
236
+ this.lineProgram = naive_accurate_flexible_1.LineOnGlobeCache.get(globe);
237
+ this.circleProgram2d = circle_accurate_flat_1.CircleCache.get(globe);
238
+ this.circle3DProgram = circle_accurate_3d_1.CircleCache.get(globe);
239
+ const _circleFlatEdgeCount = this._circleFlatEdgeCount;
240
+ {
241
+ // createBuffers
242
+ const bufferType = "DYNAMIC_DRAW";
243
+ const initialCapacity = this.bufferOrchestrator.capacity;
244
+ this.bufferManagersCompMap = new Map([
245
+ ["centerCoords2d", {
246
+ 'bufferManager': new account_1.BufferManager(gl, 2, { bufferType, initialCapacity }),
247
+ 'adaptor': (item) => new Float32Array(globe.api_GetMercator2DPoint(item.long, item.lat)),
248
+ }],
249
+ ["centerCoords3d", {
250
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
251
+ 'adaptor': (item) => (0, index_1.sphereCoord)(item.long, item.lat, globe, item.altitude),
252
+ }],
253
+ ["targetCoords2d", {
254
+ 'bufferManager': new account_1.BufferManager(gl, 2, { bufferType, initialCapacity }),
255
+ 'adaptor': (item) => new Float32Array(globe.api_GetMercator2DPoint(item.targetLong, item.targetLat)),
256
+ }],
257
+ ["targetCoords3d", {
258
+ 'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
259
+ 'adaptor': (item) => (0, index_1.sphereCoord)(item.targetLong, item.targetLat, globe, item.altitude),
260
+ }],
261
+ ["rgba", {
262
+ 'bufferManager': new account_1.BufferManager(gl, 4, { bufferType, initialCapacity }),
263
+ 'adaptor': (item) => {
264
+ var _a;
265
+ if ((_a = item.lineProperties) === null || _a === void 0 ? void 0 : _a.rgba)
266
+ return new Float32Array(item.lineProperties.rgba);
267
+ return new Float32Array(item.chainProperties.rgba);
268
+ }
269
+ }],
270
+ // ["bigRadius", {
271
+ // 'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
272
+ // 'adaptor': (item) => new Float32Array([item.bigRadius])
273
+ // }],
274
+ ["dashRatio", {
275
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
276
+ 'adaptor': (item) => new Float32Array([item.chainProperties.dashRatio])
277
+ }],
278
+ ["dashOpacity", {
279
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
280
+ 'adaptor': (item) => new Float32Array([item.chainProperties.dashOpacity])
281
+ }],
282
+ ["circleDashAngle", {
283
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
284
+ 'adaptor': (item) => {
285
+ var _a;
286
+ if ((_a = item.circleProperties) === null || _a === void 0 ? void 0 : _a.circleDashAngle)
287
+ return new Float32Array([item.circleProperties.circleDashAngle / 360]);
288
+ return new Float32Array([item.chainProperties.circleDashAngle / 360]);
289
+ }
290
+ }],
291
+ ["rgbaCircle", {
292
+ "bufferManager": new account_1.BufferManager(gl, 4, { bufferType, initialCapacity }),
293
+ "adaptor": (item) => {
294
+ var _a;
295
+ if ((_a = item.circleProperties) === null || _a === void 0 ? void 0 : _a.rgba)
296
+ return new Float32Array(item.circleProperties.rgba);
297
+ return new Float32Array(item.chainProperties.rgba);
298
+ }
299
+ }],
300
+ // Mercator buffers
301
+ ["circleDashAngleMercator", {
302
+ 'bufferManager': new account_1.BufferManager(gl, 1 * _circleFlatEdgeCount, { bufferType, initialCapacity }),
303
+ 'adaptor': (item) => {
304
+ var _a;
305
+ if ((_a = item.circleProperties) === null || _a === void 0 ? void 0 : _a.circleDashAngle)
306
+ return new Float32Array([item.circleProperties.circleDashAngle / 360]);
307
+ return data_filler_1.populateFloat32Array.fillFloat32Array(_circleFlatEdgeCount, item.chainProperties.circleDashAngle / 360);
308
+ }
309
+ }],
310
+ ["rgbaCircleMercator", {
311
+ "bufferManager": new account_1.BufferManager(gl, 4 * _circleFlatEdgeCount, { bufferType, initialCapacity }),
312
+ "adaptor": (item) => {
313
+ var _a;
314
+ if ((_a = item.circleProperties) === null || _a === void 0 ? void 0 : _a.rgba)
315
+ return data_filler_1.populateFloat32Array.fillWithListData(_circleFlatEdgeCount, item.circleProperties.rgba);
316
+ return data_filler_1.populateFloat32Array.fillWithListData(_circleFlatEdgeCount, item.chainProperties.rgba);
317
+ }
318
+ }],
319
+ ["dashOpacityMercator", {
320
+ 'bufferManager': new account_1.BufferManager(gl, 1 * _circleFlatEdgeCount, { bufferType, initialCapacity }),
321
+ 'adaptor': (item) => data_filler_1.populateFloat32Array.fillFloat32Array(_circleFlatEdgeCount, item.chainProperties.dashOpacity)
322
+ }],
323
+ ["centerCoords2dMercator", {
324
+ 'bufferManager': new account_1.BufferManager(gl, 2 * _circleFlatEdgeCount, { bufferType, initialCapacity }),
325
+ 'adaptor': (item) => item.centerCoords2dflat,
326
+ }],
327
+ ]);
328
+ const obj = (key) => (0, attribute_loader_1.createBufferAndReadInfo)(this.bufferManagersCompMap.get(key).bufferManager.buffer);
329
+ this.lineVao = this.lineProgram.createVAO(...['centerCoords2d', 'centerCoords3d', 'targetCoords2d', 'targetCoords3d', 'dashRatio', 'dashOpacity', 'rgba'
330
+ ].map(key => obj(key)));
331
+ this.circleVao2d = this.circleProgram2d.createVAO(...["centerCoords2dMercator", "rgbaCircleMercator", "circleDashAngleMercator", "dashOpacityMercator"
332
+ ].map(key => obj(key)));
333
+ this.circle3DVao = this.circle3DProgram.createVAO(...["centerCoords3d", "targetCoords3d", "rgbaCircle", "circleDashAngle", "dashOpacity"
334
+ ].map(key => obj(key)));
335
+ }
336
+ }
337
+ _updateTexts(chainKeys, textWriterIDs) {
338
+ if (textWriterIDs.length === 0)
339
+ return;
340
+ const textWriters = textWriterGetOrThrow(this._textWritersMap, textWriterIDs);
341
+ chainKeys.forEach((chainKey) => {
342
+ this._chainListMap.textUpdate(chainKey, textWriters, this._textDataPreAdaptor);
343
+ });
344
+ }
345
+ _reconstructChains(chainKeys) {
346
+ const { globe } = this;
347
+ // const radiusM = radiusMethod(globe);
348
+ const callback = (v, i, array, chainProperties) => {
349
+ var _a, _b;
350
+ if (i === array.length - 1)
351
+ return null;
352
+ const centerCoords2dflat = (0, circle_accurate_flat_1.centerCoords2dflatDataCreator)(globe, v.long, v.lat, array[i + 1].long, array[i + 1].lat, { edgeCount: this._circleFlatEdgeCount });
353
+ const altitude = ((_b = (_a = v.altitude) !== null && _a !== void 0 ? _a : chainProperties.altitude) !== null && _b !== void 0 ? _b : 0) / 1000;
354
+ return {
355
+ chainProperties: chainProperties,
356
+ // bigRadius: radiusM(v, i, array),
357
+ targetLong: array[i + 1].long,
358
+ targetLat: array[i + 1].lat,
359
+ altitude: altitude,
360
+ long: v.long,
361
+ lat: v.lat,
362
+ lineProperties: v.lineProperties,
363
+ circleProperties: v.circleProperties,
364
+ centerCoords2dflat,
365
+ key: v.__identity__
366
+ };
367
+ };
368
+ const bulkData = [];
369
+ chainKeys.forEach((k) => {
370
+ this._chainListMap.calculateBufferPropertiesChain(k, callback, bulkData);
371
+ });
372
+ this._insertBulk(bulkData);
373
+ }
374
+ _insertBulk(bulkData) {
375
+ this.bufferOrchestrator.insertBulk(bulkData, this.bufferManagersCompMap);
376
+ this.globe.DrawRender();
377
+ }
378
+ // GLOBE API
379
+ free() {
380
+ if (this.isFreed)
381
+ return;
382
+ this.bufferManagersCompMap.forEach(({ bufferManager }) => {
383
+ bufferManager.free();
384
+ });
385
+ naive_accurate_flexible_1.LineOnGlobeCache.release(this.globe);
386
+ circle_accurate_flat_1.CircleCache.release(this.globe);
387
+ circle_accurate_3d_1.CircleCache.release(this.globe);
388
+ // LineToTheOriginCache.release(this.globe);
389
+ this._textWritersMap.forEach((writer) => writer.free());
390
+ const { gl } = this;
391
+ gl.deleteVertexArray(this.lineVao);
392
+ gl.deleteVertexArray(this.circleVao2d);
393
+ gl.deleteVertexArray(this.circle3DVao);
394
+ this.lineProgram = null;
395
+ this.circleProgram2d = null;
396
+ this.isFreed = true;
397
+ }
398
+ draw3D() {
399
+ const { gl, globe } = this;
400
+ gl.disable(gl.DEPTH_TEST);
401
+ const drawOptions = {
402
+ drawRange: {
403
+ first: 0,
404
+ count: this.bufferOrchestrator.length
405
+ }
406
+ };
407
+ this.lineProgram.draw(this.lineVao, drawOptions, this._opacity);
408
+ this._textWritersMap.forEach((writer) => writer.draw());
409
+ const is3D = globe.api_GetCurrentGeometry() === 0;
410
+ if (this._drawCircleOn) {
411
+ if (is3D) {
412
+ this.circle3DProgram.draw(this.circle3DVao, this.bufferOrchestrator.length, this._opacity);
413
+ }
414
+ else {
415
+ this.circleProgram2d.draw(this.circleVao2d, this.bufferOrchestrator.length, this._circleFlatEdgeCount, this._opacity);
416
+ }
417
+ }
418
+ gl.enable(gl.DEPTH_TEST);
419
+ }
420
+ }
421
+ exports.CircleLineChainPlugin = CircleLineChainPlugin;
422
+ // const radiusMethod = (globe) => (v, i, array) => {
423
+ // return globe.Math.GetDist3D(v.long, v.lat, array[i + 1].long, array[i + 1].lat)
424
+ // }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keyMethod = void 0;
4
+ const keyMethod = (chainKey, nodeKey) => `${chainKey}_${nodeKey}`;
5
+ exports.keyMethod = keyMethod;
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixelPaddingCompassPlugin = void 0;
4
+ const pixel_padding_for_compass_1 = require("../programs/two-d/pixel-padding-for-compass");
5
+ const account_1 = require("../util/account");
6
+ const compass_text_writer_1 = require("./compass-text-writer");
7
+ const PaddingAngle = 30;
8
+ const textGapFit = 10;
9
+ class PixelPaddingCompassPlugin {
10
+ constructor(id, { opacity = 1, textAngleOn = true, defaultProperties = {
11
+ rgba: [1, 1, 1, 1],
12
+ pixelRadiusRatioBig: 0.8,
13
+ pixelRadiusRatioSmall: 0.6,
14
+ }, font = {
15
+ name: 'Arial',
16
+ textColor: '#FFFFFF',
17
+ hollowColor: '#000000',
18
+ size: 12, // piksel
19
+ hollow: true,
20
+ bold: true,
21
+ italic: false,
22
+ }, northFont = {
23
+ name: 'Arial',
24
+ textColor: '#BBAA00',
25
+ hollowColor: '#000000',
26
+ size: 14, // piksel
27
+ hollow: true,
28
+ bold: true,
29
+ italic: false,
30
+ } } = {}) {
31
+ this.id = id;
32
+ this.textAngleOn = textAngleOn;
33
+ this.defaultProperties = defaultProperties;
34
+ this.bufferOrchestrator = new account_1.BufferOrchestrator({ capacity: 10 });
35
+ this._font_hold = { font, northFont };
36
+ this.compassMap = new CompassMap(this);
37
+ this._opacity = opacity;
38
+ }
39
+ init(globe, gl) {
40
+ this.globe = globe;
41
+ this.resize();
42
+ this.gl = gl;
43
+ if (this.textAngleOn) {
44
+ this._createTextWriter();
45
+ }
46
+ this._initOrchestrations();
47
+ }
48
+ /**
49
+ * @param {string} key
50
+ * @param {number} long
51
+ * @param {number} lat
52
+ * @typedef properties
53
+ * @property {number} pixelRadiusRatioBig
54
+ * @property {number} pixelRadiusRatioSmall
55
+ * @property {[4 numbers between 0-1]} rgba
56
+ */
57
+ insert(key, long, lat, properties = null) {
58
+ this.__insertText(key, null, null, { properties, update: true });
59
+ this.compassMap.insert(key, long, lat, properties);
60
+ this.globe.DrawRender();
61
+ }
62
+ /**
63
+ *
64
+ * @param {string} key
65
+ */
66
+ delete(key) {
67
+ this.compassMap.delete(key);
68
+ this.globe.DrawRender();
69
+ }
70
+ setFont({ textFont = null, northFont = null } = {}) {
71
+ if (textFont)
72
+ this.writer.setFont(textFont);
73
+ if (northFont)
74
+ this.writer.setNorthFont(northFont);
75
+ this.globe.DrawRender();
76
+ }
77
+ setOpacity(opacity) {
78
+ var _a;
79
+ this._opacity = opacity;
80
+ (_a = this.writer) === null || _a === void 0 ? void 0 : _a.setOpacity(opacity);
81
+ this.globe.DrawRender();
82
+ }
83
+ getTextWriter() {
84
+ return this.writer;
85
+ }
86
+ _initOrchestrations() {
87
+ const { gl, globe } = this;
88
+ this.paddingProgram = pixel_padding_for_compass_1.PixelPaddingForFlatCompassCache.get(globe);
89
+ {
90
+ // createBuffers
91
+ const bufferType = "DYNAMIC_DRAW";
92
+ const initialCapacity = this.bufferOrchestrator.capacity;
93
+ this.bufferManagersCompMap = new Map([
94
+ ["screenCoordinates", {
95
+ 'bufferManager': new account_1.BufferManager(gl, 2, { bufferType, initialCapacity }),
96
+ 'adaptor': (item) => new Float32Array([item.x, item.y])
97
+ }],
98
+ ["pixelRadiusRatioSmall", {
99
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
100
+ 'adaptor': (item) => new Float32Array([item.properties.pixelRadiusRatioSmall])
101
+ }],
102
+ ["pixelRadiusRatioBig", {
103
+ 'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
104
+ 'adaptor': (item) => new Float32Array([item.properties.pixelRadiusRatioBig])
105
+ }],
106
+ ["rgba", {
107
+ 'bufferManager': new account_1.BufferManager(gl, 4, { bufferType, initialCapacity }),
108
+ 'adaptor': (item) => new Float32Array(item.properties.rgba)
109
+ }],
110
+ ]);
111
+ const obj = function (bufferManagerComp) {
112
+ return { 'buffer': bufferManagerComp.bufferManager.buffer, 'stride': 0, 'offset': 0 };
113
+ };
114
+ this.paddingVao = this.paddingProgram.createVAO(...['screenCoordinates', 'pixelRadiusRatioSmall', 'pixelRadiusRatioBig', 'rgba'].map(key => obj(this.bufferManagersCompMap.get(key))));
115
+ }
116
+ }
117
+ _createTextWriter() {
118
+ this.writer = new compass_text_writer_1.PixelPaddingCompassTextWriter(this.globe, { angle: PaddingAngle, ...this._font_hold });
119
+ }
120
+ resize() {
121
+ var _a;
122
+ (_a = this.writer) === null || _a === void 0 ? void 0 : _a.resize();
123
+ }
124
+ __insertText(key, x, y, { properties, update = false } = {}) {
125
+ if (!this.writer)
126
+ return;
127
+ if (update) {
128
+ let radius;
129
+ if (properties != null && properties.pixelRadiusRatioBig) {
130
+ radius = properties.pixelRadiusRatioBig * this.radiusMultiplier;
131
+ }
132
+ else {
133
+ radius = this.defaultProperties.pixelRadiusRatioBig * this.radiusMultiplier;
134
+ }
135
+ this.writer.insertTextItem(key, x, y, radius + textGapFit);
136
+ }
137
+ else {
138
+ this.writer.insertTextItem(key, x, y);
139
+ }
140
+ }
141
+ // Globe API interface methods
142
+ draw2D() {
143
+ var _a;
144
+ const { gl, globe, paddingProgram, paddingVao, bufferOrchestrator, bufferManagersCompMap } = this;
145
+ const is3D = globe.api_GetCurrentGeometry() === 0;
146
+ if (is3D)
147
+ return;
148
+ const items = this.compassMap.query(globe, this.writer);
149
+ if (items.length === 0)
150
+ return;
151
+ bufferOrchestrator.flush();
152
+ bufferOrchestrator.insertBulk(items, bufferManagersCompMap);
153
+ items.forEach((v) => {
154
+ this.__insertText(v.key, v.x, v.y);
155
+ });
156
+ gl.disable(gl.DEPTH_TEST);
157
+ paddingProgram.draw(paddingVao, bufferOrchestrator.length, this._opacity);
158
+ gl.enable(gl.DEPTH_TEST);
159
+ (_a = this.writer) === null || _a === void 0 ? void 0 : _a.draw();
160
+ }
161
+ free() {
162
+ this.compassMap.free();
163
+ const { globe, gl, paddingVao } = this;
164
+ gl.deleteVertexArray(paddingVao);
165
+ pixel_padding_for_compass_1.PixelPaddingForFlatCompassCache.release(globe);
166
+ this.bufferManagersCompMap.forEach(v => {
167
+ v.bufferManager.free();
168
+ });
169
+ }
170
+ resize() {
171
+ this.radiusMultiplier = this._shorterDimension() * 0.5;
172
+ this._reinsertAllText();
173
+ }
174
+ _reinsertAllText() {
175
+ this.compassMap.query(this.globe, this.writer).forEach((v) => {
176
+ this.__insertText(v.key, v.x, v.y, { properties: v.properties, update: true });
177
+ });
178
+ }
179
+ _shorterDimension() {
180
+ const globe = this.globe;
181
+ return Math.min(globe.api_ScrW(), globe.api_ScrH());
182
+ }
183
+ }
184
+ exports.PixelPaddingCompassPlugin = PixelPaddingCompassPlugin;
185
+ class CompassMap {
186
+ constructor(parent) {
187
+ this.coordsMemory = new Map();
188
+ this.propertyMemory = new Map();
189
+ this.parent = parent;
190
+ }
191
+ insert(key, long, lat, properties = null) {
192
+ this.coordsMemory.set(key, [long, lat]);
193
+ if (properties)
194
+ this.propertyMemory.set(key, properties);
195
+ }
196
+ delete(key) {
197
+ this.coordsMemory.delete(key);
198
+ this.propertyMemory.delete(key);
199
+ }
200
+ free() {
201
+ this.coordsMemory.clear();
202
+ this.propertyMemory.clear();
203
+ this.coordsMemory = null;
204
+ this.propertyMemory = null;
205
+ }
206
+ query(globe, writer) {
207
+ const { coordsMemory, propertyMemory } = this;
208
+ const defaultProperties = this.parent.defaultProperties;
209
+ const result = [];
210
+ coordsMemory.forEach((v, k, c) => {
211
+ const { x, y } = globe.api_GetScreenPointFromGeo({
212
+ long: v[0],
213
+ lat: v[1],
214
+ z: 0,
215
+ });
216
+ writer === null || writer === void 0 ? void 0 : writer.insertTextItem(k, x, y);
217
+ if (x !== null) {
218
+ const properties = { ...defaultProperties, ...propertyMemory.get(k) };
219
+ result.push({ key: k, x, y, properties });
220
+ }
221
+ });
222
+ return result;
223
+ }
224
+ }
225
+ function isOnTheScreen(globe, points) { }