@pirireis/webglobeplugins 0.9.6 → 0.9.8

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