@pirireis/webglobeplugins 1.0.2 → 1.0.4

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 (277) hide show
  1. package/package.json +2 -2
  2. package/plugins/alarms/alarmFadeInFadeOutPlugin/AlarmTimeLineFadeInFadeOutPlugin.js +399 -0
  3. package/{Math/angle-calculation.ts → webglobeplugins/Math/angle-calculation.js} +14 -18
  4. package/{Math/arc-cdf-points.ts → webglobeplugins/Math/arc-cdf-points.js} +272 -329
  5. package/{Math/arc-generate-points-exponantial.ts → webglobeplugins/Math/arc-generate-points-exponantial.js} +254 -299
  6. package/{Math/arc.ts → webglobeplugins/Math/arc.js} +292 -421
  7. package/{Math → webglobeplugins/Math}/bounds/line-bbox.js +186 -225
  8. package/{Math/circle-cdf-points.ts → webglobeplugins/Math/circle-cdf-points.js} +78 -143
  9. package/{Math/circle.ts → webglobeplugins/Math/circle.js} +33 -49
  10. package/{Math/constants.ts → webglobeplugins/Math/constants.js} +4 -12
  11. package/{Math/contour/quadtreecontours.ts → webglobeplugins/Math/contour/quadtreecontours.js} +300 -371
  12. package/{Math → webglobeplugins/Math}/contour/quadtreecontours1.js +298 -336
  13. package/{Math/finite-line-2d.ts → webglobeplugins/Math/finite-line-2d.js} +58 -68
  14. package/{Math/haversine.ts → webglobeplugins/Math/haversine.js} +22 -33
  15. package/webglobeplugins/Math/index.js +1 -0
  16. package/{Math/juction/arc-plane.ts → webglobeplugins/Math/juction/arc-plane.js} +143 -203
  17. package/{Math/juction/line-sphere.ts → webglobeplugins/Math/juction/line-sphere.js} +22 -32
  18. package/{Math/juction/plane-plane.ts → webglobeplugins/Math/juction/plane-plane.js} +53 -62
  19. package/{Math/line.ts → webglobeplugins/Math/line.js} +52 -84
  20. package/webglobeplugins/Math/matrix4.js +1 -0
  21. package/{Math/methods.ts → webglobeplugins/Math/methods.js} +126 -182
  22. package/{Math/plane.ts → webglobeplugins/Math/plane.js} +56 -92
  23. package/{Math/quaternion.ts → webglobeplugins/Math/quaternion.js} +106 -128
  24. package/{Math/templete-shapes/grid-visually-equal.ts → webglobeplugins/Math/templete-shapes/grid-visually-equal.js} +65 -118
  25. package/webglobeplugins/Math/tessellation/constants.js +1 -0
  26. package/{Math/tessellation/methods.ts → webglobeplugins/Math/tessellation/methods.js} +49 -79
  27. package/{Math/tessellation/nearest-value-padding.ts → webglobeplugins/Math/tessellation/nearest-value-padding.js} +112 -147
  28. package/{Math/tessellation/spherical-triangle-area.ts → webglobeplugins/Math/tessellation/spherical-triangle-area.js} +99 -127
  29. package/{Math/tessellation/tile-merger.ts → webglobeplugins/Math/tessellation/tile-merger.js} +429 -578
  30. package/{Math/tessellation/triangle-tessellation.ts → webglobeplugins/Math/tessellation/triangle-tessellation.js} +464 -533
  31. package/webglobeplugins/Math/tessellation/types.js +1 -0
  32. package/webglobeplugins/Math/types.js +1 -0
  33. package/{Math → webglobeplugins/Math}/utils.js +2 -3
  34. package/{Math/vec3.ts → webglobeplugins/Math/vec3.js} +155 -227
  35. package/{Math/xyz-tile.ts → webglobeplugins/Math/xyz-tile.js} +18 -26
  36. package/{algorithms → webglobeplugins/algorithms}/search-binary.js +16 -14
  37. package/webglobeplugins/altitude-locator/adaptors.js +1 -0
  38. package/webglobeplugins/altitude-locator/keymethod.js +1 -0
  39. package/{altitude-locator → webglobeplugins/altitude-locator}/plugin.js +344 -445
  40. package/{altitude-locator → webglobeplugins/altitude-locator}/types.js +21 -26
  41. package/{compass-rose → webglobeplugins/compass-rose}/compass-rose-padding-flat.js +230 -274
  42. package/{compass-rose/compass-text-writer.ts → webglobeplugins/compass-rose/compass-text-writer.js} +155 -210
  43. package/{compass-rose → webglobeplugins/compass-rose}/index.js +3 -3
  44. package/{constants.ts → webglobeplugins/constants.js} +6 -8
  45. package/{heatwave → webglobeplugins/heatwave}/datamanager.js +149 -168
  46. package/{heatwave → webglobeplugins/heatwave}/heatwave.js +206 -261
  47. package/{heatwave → webglobeplugins/heatwave}/index.js +5 -5
  48. package/{heatwave → webglobeplugins/heatwave}/isobar.js +306 -340
  49. package/{heatwave/texture-point-sampler.ts → webglobeplugins/heatwave/texture-point-sampler.js} +187 -220
  50. package/webglobeplugins/investigation-tools/draw/tiles/adapters.js +67 -0
  51. package/{investigation-tools/draw/tiles/tiles.ts → webglobeplugins/investigation-tools/draw/tiles/tiles.js} +128 -162
  52. package/{jest.config.js → webglobeplugins/jest.config.js} +7 -6
  53. package/{pin → webglobeplugins/pin}/pin-object-array1.js +300 -381
  54. package/{pin → webglobeplugins/pin}/pin-point-totem1.js +60 -77
  55. package/{programs → webglobeplugins/programs}/arrowfield/arrow-field.js +60 -89
  56. package/{programs → webglobeplugins/programs}/arrowfield/logic.js +141 -173
  57. package/{programs → webglobeplugins/programs}/data2legend/density-to-legend.js +68 -86
  58. package/{programs → webglobeplugins/programs}/data2legend/point-to-density-texture.js +67 -84
  59. package/{programs → webglobeplugins/programs}/float2legendwithratio/index.js +2 -3
  60. package/{programs → webglobeplugins/programs}/float2legendwithratio/logic.js +118 -144
  61. package/{programs → webglobeplugins/programs}/float2legendwithratio/object.js +104 -141
  62. package/{programs → webglobeplugins/programs}/helpers/blender.js +58 -73
  63. package/{programs/helpers/fadeaway.ts → webglobeplugins/programs/helpers/fadeaway.js} +60 -73
  64. package/{programs → webglobeplugins/programs}/index.js +20 -19
  65. package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-3d.js +85 -112
  66. package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-flat.js +148 -200
  67. package/{programs → webglobeplugins/programs}/line-on-globe/degree-padding-around-circle-3d.js +102 -134
  68. package/webglobeplugins/programs/line-on-globe/index.js +1 -0
  69. package/{programs → webglobeplugins/programs}/line-on-globe/lines-color-instanced-flat.js +80 -99
  70. package/webglobeplugins/programs/line-on-globe/linestrip/data.js +4 -0
  71. package/{programs/line-on-globe/linestrip/linestrip.ts → webglobeplugins/programs/line-on-globe/linestrip/linestrip.js} +93 -152
  72. package/{programs/line-on-globe/naive-accurate-flexible.ts → webglobeplugins/programs/line-on-globe/naive-accurate-flexible.js} +126 -175
  73. package/{programs → webglobeplugins/programs}/line-on-globe/util.js +5 -8
  74. package/{programs → webglobeplugins/programs}/picking/pickable-polygon-renderer.js +98 -129
  75. package/{programs → webglobeplugins/programs}/picking/pickable-renderer.js +98 -130
  76. package/{programs → webglobeplugins/programs}/point-on-globe/element-globe-surface-glow.js +93 -122
  77. package/{programs → webglobeplugins/programs}/point-on-globe/element-point-glow.js +80 -114
  78. package/{programs → webglobeplugins/programs}/point-on-globe/square-pixel-point.js +121 -139
  79. package/{programs/polygon-on-globe/texture-dem-triangles.ts → webglobeplugins/programs/polygon-on-globe/texture-dem-triangles.js} +178 -209
  80. package/{programs/programcache.ts → webglobeplugins/programs/programcache.js} +126 -134
  81. package/webglobeplugins/programs/rings/index.js +1 -0
  82. package/{programs/rings/partial-ring/piece-of-pie.ts → webglobeplugins/programs/rings/partial-ring/piece-of-pie.js} +152 -222
  83. package/webglobeplugins/programs/totems/attachments/adaptive-opacity.js +131 -0
  84. package/{programs/totems/dem-textures-manager.ts → webglobeplugins/programs/totems/attachments/dem-textures-manager.js} +263 -360
  85. package/webglobeplugins/programs/totems/camera-totem-attactment-interface.js +1 -0
  86. package/{programs/totems/camerauniformblock.ts → webglobeplugins/programs/totems/camerauniformblock.js} +225 -310
  87. package/{programs/totems/canvas-webglobe-info.ts → webglobeplugins/programs/totems/canvas-webglobe-info.js} +132 -147
  88. package/{programs/totems/globe-changes.ts → webglobeplugins/programs/totems/globe-changes.js} +59 -79
  89. package/{programs → webglobeplugins/programs}/totems/gpu-selection-uniform-block.js +99 -127
  90. package/{programs/totems/index.ts → webglobeplugins/programs/totems/index.js} +2 -2
  91. package/{programs → webglobeplugins/programs}/two-d/pixel-padding-for-compass.js +87 -101
  92. package/{programs → webglobeplugins/programs}/util.js +14 -19
  93. package/{programs/vectorfields/logics/constants.ts → webglobeplugins/programs/vectorfields/logics/constants.js} +4 -5
  94. package/{programs/vectorfields/logics/drawrectangleparticles.ts → webglobeplugins/programs/vectorfields/logics/drawrectangleparticles.js} +107 -136
  95. package/{programs → webglobeplugins/programs}/vectorfields/logics/index.js +2 -4
  96. package/webglobeplugins/programs/vectorfields/logics/particle-ubo.js +19 -0
  97. package/{programs/vectorfields/logics/pixelbased.ts → webglobeplugins/programs/vectorfields/logics/pixelbased.js} +89 -122
  98. package/{programs → webglobeplugins/programs}/vectorfields/logics/ubo.js +51 -57
  99. package/{programs/vectorfields/pingpongbuffermanager.ts → webglobeplugins/programs/vectorfields/pingpongbuffermanager.js} +99 -113
  100. package/{range-tools-on-terrain/bearing-line/adapters.ts → webglobeplugins/range-tools-on-terrain/bearing-line/adapters.js} +114 -154
  101. package/{range-tools-on-terrain/bearing-line/plugin.ts → webglobeplugins/range-tools-on-terrain/bearing-line/plugin.js} +457 -569
  102. package/webglobeplugins/range-tools-on-terrain/bearing-line/types.js +1 -0
  103. package/{range-tools-on-terrain/circle-line-chain/adapters.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/adapters.js} +85 -104
  104. package/{range-tools-on-terrain/circle-line-chain/chain-list-map.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/chain-list-map.js} +382 -446
  105. package/{range-tools-on-terrain/circle-line-chain/plugin.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/plugin.js} +464 -607
  106. package/webglobeplugins/range-tools-on-terrain/circle-line-chain/types.js +1 -0
  107. package/{range-tools-on-terrain/range-ring/adapters.ts → webglobeplugins/range-tools-on-terrain/range-ring/adapters.js} +93 -114
  108. package/{range-tools-on-terrain/range-ring/enum.ts → webglobeplugins/range-tools-on-terrain/range-ring/enum.js} +2 -2
  109. package/{range-tools-on-terrain/range-ring/plugin.ts → webglobeplugins/range-tools-on-terrain/range-ring/plugin.js} +377 -444
  110. package/webglobeplugins/range-tools-on-terrain/range-ring/rangeringangletext.js +331 -0
  111. package/webglobeplugins/range-tools-on-terrain/range-ring/types.js +9 -0
  112. package/webglobeplugins/semiplugins/interface.js +1 -0
  113. package/{semiplugins/lightweight/line-plugin.ts → webglobeplugins/semiplugins/lightweight/line-plugin.js} +221 -342
  114. package/{semiplugins/lightweight/piece-of-pie-plugin.ts → webglobeplugins/semiplugins/lightweight/piece-of-pie-plugin.js} +200 -275
  115. package/{semiplugins/shape-on-terrain/arc-plugin.ts → webglobeplugins/semiplugins/shape-on-terrain/arc-plugin.js} +481 -616
  116. package/{semiplugins/shape-on-terrain/circle-plugin.ts → webglobeplugins/semiplugins/shape-on-terrain/circle-plugin.js} +444 -588
  117. package/{semiplugins/shape-on-terrain/padding-1-degree.ts → webglobeplugins/semiplugins/shape-on-terrain/padding-1-degree.js} +539 -713
  118. package/{semiplugins/shape-on-terrain/terrain-polygon/adapters.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/adapters.js} +55 -69
  119. package/{semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/cache.js} +104 -149
  120. package/{semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.js} +45 -58
  121. package/{semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/manager.js} +4 -4
  122. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +241 -0
  123. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +76 -0
  124. package/{semiplugins/shape-on-terrain/terrain-polygon/data/random.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/random.js} +121 -165
  125. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/types.js +1 -0
  126. package/{semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.js} +64 -81
  127. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +162 -0
  128. package/{semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.js} +282 -265
  129. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/test-records.js +14 -0
  130. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/types.js +8 -0
  131. package/webglobeplugins/semiplugins/shell/bbox-renderer/index.js +2 -0
  132. package/{semiplugins/shell/bbox-renderer/logic.ts → webglobeplugins/semiplugins/shell/bbox-renderer/logic.js} +209 -273
  133. package/webglobeplugins/semiplugins/shell/bbox-renderer/object.js +78 -0
  134. package/webglobeplugins/semiplugins/type.js +1 -0
  135. package/{semiplugins/utility/container-plugin.ts → webglobeplugins/semiplugins/utility/container-plugin.js} +94 -126
  136. package/{semiplugins/utility/object-pass-container-plugin.ts → webglobeplugins/semiplugins/utility/object-pass-container-plugin.js} +80 -101
  137. package/{shaders → webglobeplugins/shaders}/fragment-toy/firework.js +1 -1
  138. package/{shaders → webglobeplugins/shaders}/fragment-toy/singularity.js +2 -5
  139. package/{tracks → webglobeplugins/tracks}/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -78
  140. package/webglobeplugins/tracks/point-heat-map/index.js +1 -0
  141. package/{tracks → webglobeplugins/tracks}/point-heat-map/plugin-webworker.js +121 -148
  142. package/{tracks → webglobeplugins/tracks}/point-heat-map/point-to-heat-map-flow.js +121 -150
  143. package/{tracks → webglobeplugins/tracks}/point-tracks/key-methods.js +2 -3
  144. package/{tracks → webglobeplugins/tracks}/point-tracks/plugin.js +401 -487
  145. package/{tracks → webglobeplugins/tracks}/timetracks/adaptors-line-strip.js +65 -79
  146. package/{tracks → webglobeplugins/tracks}/timetracks/plugin-line-strip.js +240 -295
  147. package/{tracks → webglobeplugins/tracks}/timetracks/program-line-strip.js +413 -495
  148. package/{tracks → webglobeplugins/tracks}/timetracks/programpoint-line-strip.js +109 -137
  149. package/webglobeplugins/types.js +19 -0
  150. package/{util → webglobeplugins/util}/account/bufferoffsetmanager.js +176 -209
  151. package/webglobeplugins/util/account/create-buffermap-orchastration.js +39 -0
  152. package/{util → webglobeplugins/util}/account/index.js +3 -6
  153. package/{util/account/single-attribute-buffer-management/buffer-manager.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-manager.js} +119 -151
  154. package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +212 -238
  155. package/{util/account/single-attribute-buffer-management/buffer-orchestrator1.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-orchestrator1.js} +159 -184
  156. package/{util/account/single-attribute-buffer-management/index.ts → webglobeplugins/util/account/single-attribute-buffer-management/index.js} +4 -11
  157. package/{util/account/single-attribute-buffer-management/object-store.ts → webglobeplugins/util/account/single-attribute-buffer-management/object-store.js} +55 -76
  158. package/webglobeplugins/util/account/single-attribute-buffer-management/types.js +1 -0
  159. package/{util → webglobeplugins/util}/account/util.js +18 -22
  160. package/webglobeplugins/util/algorithms/index.js +1 -0
  161. package/{util → webglobeplugins/util}/algorithms/search-binary.js +25 -26
  162. package/{util/build-strategy/static-dynamic.ts → webglobeplugins/util/build-strategy/static-dynamic.js} +41 -50
  163. package/webglobeplugins/util/check/index.js +1 -0
  164. package/webglobeplugins/util/check/typecheck.js +66 -0
  165. package/{util/frame-counter-trigger.ts → webglobeplugins/util/frame-counter-trigger.js} +84 -99
  166. package/{util/geometry/index.ts → webglobeplugins/util/geometry/index.js} +121 -155
  167. package/webglobeplugins/util/gl-util/buffer/attribute-loader.js +74 -0
  168. package/{util/gl-util/buffer/index.ts → webglobeplugins/util/gl-util/buffer/index.js} +3 -6
  169. package/{util/gl-util/draw-options/methods.ts → webglobeplugins/util/gl-util/draw-options/methods.js} +32 -47
  170. package/{util/gl-util/uniform-block/manager.ts → webglobeplugins/util/gl-util/uniform-block/manager.js} +209 -232
  171. package/{util/globe-default-gl-states.ts → webglobeplugins/util/globe-default-gl-states.js} +4 -5
  172. package/{util/helper-methods.ts → webglobeplugins/util/helper-methods.js} +8 -9
  173. package/{util → webglobeplugins/util}/index.js +10 -9
  174. package/webglobeplugins/util/interpolation/index.js +1 -0
  175. package/webglobeplugins/util/interpolation/timetrack/index.js +2 -0
  176. package/{util → webglobeplugins/util}/interpolation/timetrack/timetrack-interpolator.js +79 -94
  177. package/{util → webglobeplugins/util}/interpolation/timetrack/web-worker.js +46 -51
  178. package/{util/picking/fence.ts → webglobeplugins/util/picking/fence.js} +43 -47
  179. package/{util/picking/picker-displayer.ts → webglobeplugins/util/picking/picker-displayer.js} +176 -226
  180. package/{util → webglobeplugins/util}/programs/draw-from-pixel-coords.js +164 -201
  181. package/{util/programs/draw-texture-on-canvas.ts → webglobeplugins/util/programs/draw-texture-on-canvas.js} +69 -91
  182. package/{util → webglobeplugins/util}/programs/supersampletotextures.js +97 -130
  183. package/{util/programs/texturetoglobe.js → webglobeplugins/util/programs/texturetoglobe_delete.js} +128 -153
  184. package/{util/shaderfunctions/geometrytransformations.ts → webglobeplugins/util/shaderfunctions/geometrytransformations.js} +44 -106
  185. package/{util → webglobeplugins/util}/shaderfunctions/index.js +2 -2
  186. package/{util → webglobeplugins/util}/shaderfunctions/nodata.js +2 -4
  187. package/{util → webglobeplugins/util}/shaderfunctions/noisefunctions.js +7 -10
  188. package/{util/webglobjectbuilders.ts → webglobeplugins/util/webglobjectbuilders.js} +358 -446
  189. package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/adaptor.js +11 -11
  190. package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/index.js +3 -3
  191. package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/plugin.js +83 -128
  192. package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/adaptor.js +15 -16
  193. package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/index.js +3 -3
  194. package/{vectorfield/waveparticles/plugin.ts → webglobeplugins/vectorfield/waveparticles/plugin.js} +455 -506
  195. package/webglobeplugins/vectorfield/wind/adapters/image-to-fields.js +92 -0
  196. package/webglobeplugins/vectorfield/wind/adapters/types.js +1 -0
  197. package/{vectorfield/wind/imagetovectorfieldandmagnitude.ts → webglobeplugins/vectorfield/wind/imagetovectorfieldandmagnitude.js} +53 -78
  198. package/{vectorfield → webglobeplugins/vectorfield}/wind/index.js +5 -5
  199. package/{vectorfield/wind/plugin-persistant.ts → webglobeplugins/vectorfield/wind/plugin-persistant.js} +390 -483
  200. package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin.js +685 -883
  201. package/{vectorfield → webglobeplugins/vectorfield}/wind/vectorfieldimage.js +23 -27
  202. package/{write-text/context-text-bulk.ts → webglobeplugins/write-text/context-text-bulk.js} +200 -285
  203. package/webglobeplugins/write-text/context-text3.js +167 -0
  204. package/{write-text/context-text4.ts → webglobeplugins/write-text/context-text4.js} +146 -231
  205. package/{write-text → webglobeplugins/write-text}/context-textDELETE.js +94 -125
  206. package/{write-text/objectarraylabels/index.ts → webglobeplugins/write-text/objectarraylabels/index.js} +2 -2
  207. package/{write-text → webglobeplugins/write-text}/objectarraylabels/objectarraylabels.js +200 -247
  208. package/Math/index.js +0 -0
  209. package/Math/matrix4.ts +0 -0
  210. package/Math/mesh/mapbox-delaunay.d.ts +0 -74
  211. package/Math/roadmap.md +0 -10
  212. package/Math/tessellation/constants.ts +0 -1
  213. package/Math/tessellation/roadmap.md +0 -48
  214. package/Math/tessellation/types.ts +0 -1
  215. package/Math/types.ts +0 -68
  216. package/altitude-locator/adaptors.js +0 -0
  217. package/altitude-locator/keymethod.js +0 -0
  218. package/investigation-tools/draw/tiles/adapters.ts +0 -133
  219. package/programs/line-on-globe/index.js +0 -0
  220. package/programs/line-on-globe/linestrip/data.ts +0 -29
  221. package/programs/polygon-on-globe/roadmap.md +0 -8
  222. package/programs/rings/index.js +0 -1
  223. package/programs/totems/camera-totem-attactment-interface.ts +0 -4
  224. package/programs/vectorfields/logics/particle-ubo.ts +0 -23
  225. package/publish.bat +0 -62
  226. package/range-tools-on-terrain/bearing-line/types.ts +0 -65
  227. package/range-tools-on-terrain/circle-line-chain/types.ts +0 -43
  228. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +0 -396
  229. package/range-tools-on-terrain/range-ring/types.ts +0 -30
  230. package/semiplugins/interface.ts +0 -14
  231. package/semiplugins/shape-on-terrain/goal.md +0 -12
  232. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +0 -20
  233. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +0 -196
  234. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +0 -209
  235. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +0 -144
  236. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +0 -5
  237. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +0 -37
  238. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +0 -146
  239. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +0 -90
  240. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +0 -69
  241. package/semiplugins/shell/bbox-renderer/index.ts +0 -2
  242. package/semiplugins/shell/bbox-renderer/object.ts +0 -129
  243. package/semiplugins/type.ts +0 -8
  244. package/terrain-plugin.mmd +0 -83
  245. package/tests/Math/arc-sampling-test.js +0 -367
  246. package/tests/Math/arc-sampling-test.ts +0 -429
  247. package/tests/Math/arc.test.ts +0 -77
  248. package/tests/Math/junction/arc-limit.test.ts +0 -7
  249. package/tests/Math/junction/arc-plane-points.test.ts +0 -196
  250. package/tests/Math/junction/arc-plane.test.ts +0 -172
  251. package/tests/Math/junction/line-sphere.test.ts +0 -127
  252. package/tests/Math/junction/plane-plane.test.ts +0 -91
  253. package/tests/Math/plane-test.ts +0 -17
  254. package/tests/Math/plane.test.ts +0 -43
  255. package/tests/Math/vec3.test.ts +0 -33
  256. package/tracks/point-heat-map/index.js +0 -0
  257. package/tracks/point-heat-map/readme.md +0 -15
  258. package/tracks/timetracks/readme.md +0 -1
  259. package/tsconfig.json +0 -22
  260. package/types/@pirireis/webglobe.d.ts +0 -102
  261. package/types/delaunator.d.ts +0 -40
  262. package/types/earcut.d.ts +0 -11
  263. package/types/rbush.d.ts +0 -57
  264. package/types.ts +0 -319
  265. package/util/account/create-buffermap-orchastration.ts +0 -85
  266. package/util/account/single-attribute-buffer-management/types.ts +0 -43
  267. package/util/algorithms/index.js +0 -0
  268. package/util/check/index.js +0 -0
  269. package/util/check/typecheck.ts +0 -74
  270. package/util/gl-util/buffer/attribute-loader.ts +0 -84
  271. package/util/interpolation/index.js +0 -0
  272. package/util/interpolation/timetrack/index.js +0 -9
  273. package/vectorfield/wind/adapters/image-to-fields.ts +0 -74
  274. package/vectorfield/wind/adapters/types.ts +0 -12
  275. package/vectorfield/wind/plugin-persistant copy.ts +0 -461
  276. package/write-text/context-text3.ts +0 -252
  277. package/write-text/objectarraylabels/objectarraylabels.d.ts +0 -72
@@ -1,487 +1,401 @@
1
- import { BufferOrchestrator, BufferManager, ObjectStore } from "../../util/account/index";
2
-
3
- import { PickerDisplayer } from "../../util/picking/picker-displayer";
4
- import { PointOnGlobeProgramCache } from "../../programs/point-on-globe/square-pixel-point";
5
- import { defaultblendfunction } from "../../util/globe-default-gl-states";
6
- import { wgs84ToCartesian3d, wgs84ToMercator } from "../../Math/methods";
7
-
8
-
9
- const _0vec3 = /* @__PURE__ */[0, 0, 0];
10
-
11
-
12
-
13
- /**
14
- * @typedef {number} long
15
- * @typedef {number} lat
16
- * @typedef {number} height
17
- * @typedef {string} ID
18
- * @typedef {string} trackID
19
- * @typedef {[number, number, number, number]} rgba 0-1
20
- * @typedef { long ,lat, height, ID } Point
21
- * @typedef {Array<Point>, rgba, trackID} Track
22
- */
23
- class PointTracksPlugin {
24
-
25
- constructor(id, {
26
- pointSize = 2,
27
- hoveredPointSize = 4,
28
- selectionPointFilling = 4,
29
- opacity = 1.0,
30
- objectStoreExtraParameters = ["long", "lat", "height"],
31
- initialCapacity = 1000
32
- } = {}) {
33
- this.id = id;
34
- this._isFreed = false;
35
- this._pointProgram = null
36
- this._vao = null;
37
- this._bufferManagersMap = null;
38
- this._bufferOrchestrator = null;
39
- this._pickerDisplayer = null
40
- this._selectedID = -1;
41
- this._selectedObj = null;
42
- this._tracksToPointsMap = new Map(); // one to many
43
- this._opacity = opacity ? opacity : 1.0;
44
- this.program = null
45
- this._lastWH = { w: 0, h: 0 };
46
- this._focusParams = { on: false, length: 0, elementBuffer: null, trackIDs: [] };
47
- this.pointSizes = {
48
- pointSize: pointSize ? pointSize : 2,
49
- selectionPointFilling: selectionPointFilling ? selectionPointFilling : 4,
50
- hoveredPointSize: hoveredPointSize ? hoveredPointSize : 4
51
- }
52
- this._objectStoreExtraParameters = objectStoreExtraParameters ? objectStoreExtraParameters : [];
53
- this._objectStoreExtraParametersFiltered = objectStoreExtraParameters.filter(param => {
54
- return !["long", "lat", "height", "ID", "trackID"].includes(param);
55
- });
56
- this._bufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity ? initialCapacity : 1000 });
57
-
58
- }
59
-
60
-
61
- init(globe, gl) {
62
-
63
- this.globe = globe;
64
- this.gl = gl;
65
- this._pickerDisplayer = new PickerDisplayer(globe);
66
- this._pointProgram = PointOnGlobeProgramCache.get(globe);
67
- this._focusParams.elementBuffer = gl.createBuffer();
68
- this._initBufferManagers();
69
- }
70
-
71
-
72
- _initBufferManagers() {
73
- const { gl } = this;
74
- const initialCapacity = this._bufferOrchestrator.capacity;
75
- const bufferType = "DYNAMIC_DRAW";
76
- this._bufferManagersMap = new Map(
77
- [
78
- ["pos3D", {
79
- bufferManager: new BufferManager(gl, 3, { bufferType, initialCapacity }),
80
- adaptor: (item) => {
81
- wgs84ToCartesian3d(_0vec3, item.long, item.lat, item.height / 1000); // height is in meters
82
- return new Float32Array(_0vec3) // height is in meters
83
- }
84
- }],
85
- ["pos2D", {
86
- bufferManager: new BufferManager(gl, 2, { bufferType, initialCapacity }),
87
- adaptor: (item) => new Float32Array(wgs84ToMercator(item.long, item.lat))
88
- }],
89
- ["rgba", {
90
- bufferManager: new BufferManager(gl, 4, { bufferType, initialCapacity, typedArrayConstructor: Float32Array }),
91
- // adaptor: (item) => new Uint8Array([
92
- // item.rgba[0] * 255,
93
- // item.rgba[1] * 255,
94
- // item.rgba[2] * 255,
95
- // item.rgba[3] * 255
96
- // ])
97
- adaptor: (item) => new Float32Array(item.rgba)
98
- }],
99
- ["objectStore", {
100
- bufferManager: new ObjectStore({ initialCapacity }),
101
- adaptor: (item) => {
102
- const result = {
103
- trackID: item.trackID,
104
- pointID: item.pointID,
105
- };
106
-
107
- // Add extra parameters specified in _objectStoreExtraParameters
108
- this._objectStoreExtraParameters.forEach(param => {
109
- if (item.hasOwnProperty(param)) {
110
- result[param] = item[param];
111
- }
112
- });
113
-
114
- return result;
115
- }
116
- }]
117
- ]
118
- );
119
-
120
- this._vao = this._pointProgram.createVAO(
121
- this._bufferManagersMap.get("pos3D").bufferManager.buffer,
122
- this._bufferManagersMap.get("pos2D").bufferManager.buffer,
123
- this._bufferManagersMap.get("rgba").bufferManager.buffer,
124
- );
125
- }
126
-
127
-
128
- setPointSize(size) {
129
- this.pointSizes.pointSize = size;
130
- this.globe?.DrawRender();
131
- }
132
-
133
- setSelectionPointFilling(size) {
134
- this.pointSizes.selectionPointFilling = size;
135
- this.globe?.DrawRender();
136
- }
137
-
138
- setHoveredPointSize(size) {
139
- this.pointSizes.hoveredPointSize = size;
140
- this.globe?.DrawRender();
141
- }
142
-
143
- setOpacity(opacity) {
144
- if (opacity < 0 || opacity > 1) return;
145
- this._opacity = opacity;
146
- this.globe?.DrawRender();
147
- }
148
-
149
- getCurrentSelection() {
150
- return this._selectedObj;
151
- }
152
-
153
-
154
- /**
155
- *
156
- * @param {*} x screen x
157
- * @param {*} y screen y
158
- * @param {*} callback callback on selection
159
- */
160
- screenSelection(x, y, callback) {
161
- const { pointSizes, _pickerDisplayer } = this;
162
- const objectStore = this._bufferManagersMap.get("objectStore").bufferManager;
163
- const wrapper = (selectedIDsSet) => {
164
- const selectedIDs = Array.from(selectedIDsSet);
165
- if (selectedIDs.length === 0) {
166
- this._selectedObj = null;
167
- this._selectedID = -1;
168
- callback([]);
169
- return;
170
- }
171
- const selectedPoints = [];
172
- for (let i = 0; i < selectedIDs.length; i++) {
173
- const id = selectedIDs[i];
174
- if (i === 0) {
175
- this._selectedID = id;
176
- this._selectedObj = objectStore.get(id);
177
- }
178
- const obj = objectStore.get(id);
179
- selectedPoints.push(obj);
180
- }
181
-
182
- callback(selectedPoints);
183
- }
184
- _pickerDisplayer.pickXY(x, y, pointSizes.selectionPointFilling, wrapper);
185
- }
186
-
187
-
188
- /**
189
- * @param {Array<Track>} tracks
190
- * @returns
191
- */
192
- insertBulk(tracks) {
193
- this._fillTracksToPointsMap(tracks);
194
- const flattenedPoints = tracks.map(track => trackToFlatPoints(track, this._objectStoreExtraParametersFiltered)).flat();
195
- const currentLoad = this._bufferOrchestrator.length;
196
- if (currentLoad + flattenedPoints.length >= 2147483647) {
197
- throw new Error("Too many points, Point count cannot exceed 2147483647");
198
- }
199
- const { _bufferManagersMap, _bufferOrchestrator } = this;
200
- _bufferOrchestrator.insertBulk(flattenedPoints, _bufferManagersMap);
201
- this._refillFocus();
202
-
203
- this.globe?.DrawRender();
204
-
205
- }
206
-
207
-
208
- flush() {
209
- const capacity = 100
210
- this._bufferOrchestrator?.flush({ capacity });
211
- this._bufferManagersMap.forEach(({ bufferManager }) => bufferManager.resetWithCapacity(capacity));
212
- this._turnOffFocus();
213
- this._tracksToPointsMap.clear();
214
- this.globe?.DrawRender();
215
- }
216
-
217
- /**
218
- * @param {string} trackID
219
- */
220
- deleteTrack(trackID) {
221
- const pointList = this._tracksToPointsMap.get(trackID);
222
- if (!pointList) {
223
- console.warn(`Track with ID ${trackID} does not exist.`);
224
- return;
225
- };
226
- const points = Array.from(pointList);
227
- const { _bufferOrchestrator, _bufferManagersMap } = this;
228
- _bufferOrchestrator.deleteBulk(
229
- points.map((pointID) => keyMethod(trackID, pointID)),
230
- _bufferManagersMap
231
- );
232
- this._tracksToPointsMap.delete(trackID);
233
- this._redraw = true;
234
- this._refillFocus();
235
-
236
- this.globe?.DrawRender();
237
- }
238
-
239
-
240
- /**
241
- * @param {string} trackID
242
- * @param {Array<string>} pointIDs
243
- */
244
- deletePoints(trackID, pointIDs) {
245
- const { _bufferOrchestrator, _bufferManagersMap } = this;
246
- _bufferOrchestrator.deleteBulk(
247
- pointIDs.map((pointID) => keyMethod(trackID, pointID)),
248
- _bufferManagersMap
249
- );
250
- this._deletePointsFromTracksMap(trackID, pointIDs);
251
- this._refillFocus();
252
- this.globe?.DrawRender();
253
- }
254
-
255
- focusTracks(trackIDs = null) {
256
- if (!this.globe) return;
257
- if (trackIDs === null) {
258
- this._focusParams.on = false;
259
- this.globe?.DrawRender();
260
- return;
261
- }
262
- this._focusParams.on = true;
263
- this._fillElementBuffer(trackIDs);
264
- if (!this._focusParams.on) {
265
- this._turnOffFocus();
266
- }
267
- this.globe.DrawRender();
268
- }
269
-
270
-
271
- updateTrackColor(trackID, rgba) {
272
- if (!this._tracksToPointsMap.has(trackID)) {
273
- console.warn(`Track with ID ${trackID} does not exist.`);
274
- return;
275
- }
276
- const pointList = this._tracksToPointsMap.get(trackID);
277
- const points = Array.from(pointList);
278
- const { _bufferOrchestrator, _bufferManagersMap } = this;
279
- _bufferOrchestrator.updateBulk(
280
- points.map((pointID) => {
281
- return {
282
- key: keyMethod(trackID, pointID),
283
- rgba: rgba
284
-
285
- };
286
- }),
287
- _bufferManagersMap,
288
- ["rgba"]
289
- );
290
- this._refillFocus();
291
- this.globe?.DrawRender();
292
- }
293
-
294
- // GLOBE API METHODS
295
-
296
- free() {
297
- if (this._isFreed) return;
298
- this._isFreed = true;
299
- this._pickerDisplayer.free();
300
- PointOnGlobeProgramCache.release(this.globe);
301
- this.gl.deleteBuffer(this._focusParams.elementBuffer);
302
- this._bufferManagersMap.forEach(
303
- ({ bufferManager, adaptor }) => bufferManager.free()
304
- );
305
- }
306
-
307
-
308
- draw3D() {
309
- const { gl, _pointProgram, _pickerDisplayer, _bufferOrchestrator, _vao } = this;
310
- if (!gl) {
311
- throw new Error("GL is not loaded, PointTracks Plugin")
312
- }
313
- if (this._isFreed) {
314
- throw new Error("Plugin is unregistered, PointTracks Plugin");
315
- }
316
- this.resize();
317
-
318
- _pickerDisplayer.bindFBO();
319
- _pickerDisplayer.clearTextures();
320
-
321
- if (this._focusParams.on) {
322
- _pointProgram.draw(_vao, this._focusParams.length,
323
- {
324
- hoveredID: this._selectedID,
325
- opacity: this._opacity,
326
- pointSize: this.pointSizes.pointSize,
327
- hoveredPointSize: this.pointSizes.hoveredPointSize,
328
- elementBuffer: this._focusParams.elementBuffer
329
- });
330
- } else {
331
- _pointProgram.draw(_vao, _bufferOrchestrator.length,
332
- {
333
- hoveredID: this._selectedID,
334
- opacity: this._opacity,
335
- pointSize: this.pointSizes.pointSize,
336
- hoveredPointSize: this.pointSizes.hoveredPointSize
337
- });
338
- }
339
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
340
- _pickerDisplayer.drawColorTexture();
341
-
342
- this._selfSelect();
343
- }
344
-
345
-
346
- resize() {
347
- const w = this.globe.api_ScrW();
348
- const h = this.globe.api_ScrH();
349
- if (w === this._lastWH.w && h === this._lastWH.h) return;
350
-
351
- this._lastWH.w = w;
352
- this._lastWH.h = h;
353
- this._pickerDisplayer.resize();
354
- this.globe?.DrawRender();
355
- }
356
-
357
- // IMPLICIT METHODS
358
-
359
- _fillTracksToPointsMap(tracks) {
360
- for (const track of tracks) {
361
- const trackID = track.trackID;
362
- const points = track.points;
363
- if (!this._tracksToPointsMap.has(trackID)) {
364
- this._tracksToPointsMap.set(trackID, new Set());
365
- }
366
- const pointSet = this._tracksToPointsMap.get(trackID);
367
- for (let p = 0; p < points.length; p++) {
368
- const pointID = points[p].ID;
369
- if (!pointSet.has(pointID)) {
370
- pointSet.add(pointID);
371
- } else {
372
- console.warn(`Point with ID ${pointID} already exists in track ${trackID}. Skipping duplicate.`);
373
- }
374
- }
375
- }
376
- }
377
-
378
- _refillFocus() {
379
- if (this._focusParams.on) {
380
- this.focusTracks(this._focusParams.trackIDs);
381
- }
382
- }
383
-
384
- _deletePointsFromTracksMap(trackID, pointIDs) {
385
- const trackIDs = this._tracksToPointsMap.get(trackID);
386
- if (trackIDs === undefined) {
387
- console.warn(`Track with ID ${trackID} not found.`);
388
- return;
389
- }
390
- for (const pointID of pointIDs) {
391
- if (!trackIDs.has(pointID)) {
392
- console.warn(`Point with ID ${pointID} not found in track ${trackID}.`);
393
- } else {
394
- trackIDs.delete(pointID);
395
- }
396
- }
397
- if (trackIDs.size === 0) {
398
- this._tracksToPointsMap.delete(trackID);
399
- }
400
- }
401
-
402
-
403
- _selfSelect() {
404
- const { globe } = this;
405
- const pos = globe.api_GetMousePos();
406
- const x = pos.canvasX;
407
- const y = globe.api_ScrH() - pos.canvasY;
408
- this.screenSelection(x, y, (selectedPoints) => {
409
- });
410
-
411
- }
412
-
413
- _turnOffFocus() {
414
- const { gl } = this;
415
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._focusParams.elementBuffer);
416
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array([]), gl.STATIC_DRAW);
417
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
418
- this._focusParams.length = 0;
419
- this._focusParams.on = false;
420
- }
421
-
422
- _fillElementBuffer(trackIDs) {
423
-
424
- let length = 0;
425
- const indexes = [];
426
- const foundTracks = []
427
- for (const trackID of trackIDs) {
428
- const pointList = this._tracksToPointsMap.get(trackID);
429
- if (!pointList) continue;
430
- foundTracks.push(trackID);
431
- for (const pointID of pointList) {
432
- const key = keyMethod(trackID, pointID);
433
- const index = this._bufferOrchestrator.offsetMap.get(key);
434
- if (index === undefined) {
435
- throw new Error(`Point with key ${key} not found in buffer orchestrator.`);
436
- }
437
- indexes.push(index);
438
- length++;
439
- }
440
- }
441
- this._focusParams.trackIDs = foundTracks;
442
- this._focusParams.length = length;
443
- if (length === 0) {
444
- return false;
445
- }
446
- const { gl } = this;
447
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._focusParams.elementBuffer);
448
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indexes), gl.STATIC_DRAW);
449
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
450
- return true;
451
- }
452
-
453
- }
454
-
455
-
456
- const trackToFlatPoints = (track, extraParameters) => {
457
-
458
- const trackID = track.trackID;
459
- const points = track.points;
460
- const rgba = new Float32Array(track.rgba);
461
- const flatPoints = [];
462
- for (const point of points) {
463
- flatPoints.push({
464
- key: keyMethod(trackID, point.ID),
465
- long: point.long,
466
- lat: point.lat,
467
- height: point.height,
468
- pointID: point.ID,
469
- rgba,
470
- trackID
471
- });
472
-
473
- for (let i = 0; i < extraParameters.length; i++) {
474
- const param = extraParameters[i];
475
- if (point.hasOwnProperty(param)) {
476
- flatPoints[flatPoints.length - 1][param] = point[param];
477
- }
478
- }
479
-
480
- }
481
- return flatPoints;
482
- }
483
-
484
- const keyMethod = (trackID, pointID) => `${trackID}_${pointID}`;
485
-
486
-
487
- export { PointTracksPlugin, keyMethod };
1
+ import { BufferOrchestrator, BufferManager, ObjectStore } from "../../util/account/index";
2
+ import { PickerDisplayer } from "../../util/picking/picker-displayer";
3
+ import { PointOnGlobeProgramCache } from "../../programs/point-on-globe/square-pixel-point";
4
+ import { defaultblendfunction } from "../../util/globe-default-gl-states";
5
+ import { wgs84ToCartesian3d, wgs84ToMercator } from "../../Math/methods";
6
+ const _0vec3 = /* @__PURE__ */ [0, 0, 0];
7
+ /**
8
+ * @typedef {number} long
9
+ * @typedef {number} lat
10
+ * @typedef {number} height
11
+ * @typedef {string} ID
12
+ * @typedef {string} trackID
13
+ * @typedef {[number, number, number, number]} rgba 0-1
14
+ * @typedef { long ,lat, height, ID } Point
15
+ * @typedef {Array<Point>, rgba, trackID} Track
16
+ */
17
+ class PointTracksPlugin {
18
+ constructor(id, { pointSize = 2, hoveredPointSize = 4, selectionPointFilling = 4, opacity = 1.0, objectStoreExtraParameters = ["long", "lat", "height"], initialCapacity = 1000 } = {}) {
19
+ this.id = id;
20
+ this._isFreed = false;
21
+ this._pointProgram = null;
22
+ this._vao = null;
23
+ this._bufferManagersMap = null;
24
+ this._bufferOrchestrator = null;
25
+ this._pickerDisplayer = null;
26
+ this._selectedID = -1;
27
+ this._selectedObj = null;
28
+ this._tracksToPointsMap = new Map(); // one to many
29
+ this._opacity = opacity ? opacity : 1.0;
30
+ this.program = null;
31
+ this._lastWH = { w: 0, h: 0 };
32
+ this._focusParams = { on: false, length: 0, elementBuffer: null, trackIDs: [] };
33
+ this.pointSizes = {
34
+ pointSize: pointSize ? pointSize : 2,
35
+ selectionPointFilling: selectionPointFilling ? selectionPointFilling : 4,
36
+ hoveredPointSize: hoveredPointSize ? hoveredPointSize : 4
37
+ };
38
+ this._objectStoreExtraParameters = objectStoreExtraParameters ? objectStoreExtraParameters : [];
39
+ this._objectStoreExtraParametersFiltered = objectStoreExtraParameters.filter(param => {
40
+ return !["long", "lat", "height", "ID", "trackID"].includes(param);
41
+ });
42
+ this._bufferOrchestrator = new BufferOrchestrator({ capacity: initialCapacity ? initialCapacity : 1000 });
43
+ }
44
+ init(globe, gl) {
45
+ this.globe = globe;
46
+ this.gl = gl;
47
+ this._pickerDisplayer = new PickerDisplayer(globe);
48
+ this._pointProgram = PointOnGlobeProgramCache.get(globe);
49
+ this._focusParams.elementBuffer = gl.createBuffer();
50
+ this._initBufferManagers();
51
+ }
52
+ _initBufferManagers() {
53
+ const { gl } = this;
54
+ const initialCapacity = this._bufferOrchestrator.capacity;
55
+ const bufferType = "DYNAMIC_DRAW";
56
+ this._bufferManagersMap = new Map([
57
+ ["pos3D", {
58
+ bufferManager: new BufferManager(gl, 3, { bufferType, initialCapacity }),
59
+ adaptor: (item) => {
60
+ wgs84ToCartesian3d(_0vec3, item.long, item.lat, item.height / 1000); // height is in meters
61
+ return new Float32Array(_0vec3); // height is in meters
62
+ }
63
+ }],
64
+ ["pos2D", {
65
+ bufferManager: new BufferManager(gl, 2, { bufferType, initialCapacity }),
66
+ adaptor: (item) => new Float32Array(wgs84ToMercator(item.long, item.lat))
67
+ }],
68
+ ["rgba", {
69
+ bufferManager: new BufferManager(gl, 4, { bufferType, initialCapacity, typedArrayConstructor: Float32Array }),
70
+ // adaptor: (item) => new Uint8Array([
71
+ // item.rgba[0] * 255,
72
+ // item.rgba[1] * 255,
73
+ // item.rgba[2] * 255,
74
+ // item.rgba[3] * 255
75
+ // ])
76
+ adaptor: (item) => new Float32Array(item.rgba)
77
+ }],
78
+ ["objectStore", {
79
+ bufferManager: new ObjectStore({ initialCapacity }),
80
+ adaptor: (item) => {
81
+ const result = {
82
+ trackID: item.trackID,
83
+ pointID: item.pointID,
84
+ };
85
+ // Add extra parameters specified in _objectStoreExtraParameters
86
+ this._objectStoreExtraParameters.forEach(param => {
87
+ if (item.hasOwnProperty(param)) {
88
+ result[param] = item[param];
89
+ }
90
+ });
91
+ return result;
92
+ }
93
+ }]
94
+ ]);
95
+ this._vao = this._pointProgram.createVAO(this._bufferManagersMap.get("pos3D").bufferManager.buffer, this._bufferManagersMap.get("pos2D").bufferManager.buffer, this._bufferManagersMap.get("rgba").bufferManager.buffer);
96
+ }
97
+ setPointSize(size) {
98
+ this.pointSizes.pointSize = size;
99
+ this.globe?.DrawRender();
100
+ }
101
+ setSelectionPointFilling(size) {
102
+ this.pointSizes.selectionPointFilling = size;
103
+ this.globe?.DrawRender();
104
+ }
105
+ setHoveredPointSize(size) {
106
+ this.pointSizes.hoveredPointSize = size;
107
+ this.globe?.DrawRender();
108
+ }
109
+ setOpacity(opacity) {
110
+ if (opacity < 0 || opacity > 1)
111
+ return;
112
+ this._opacity = opacity;
113
+ this.globe?.DrawRender();
114
+ }
115
+ getCurrentSelection() {
116
+ return this._selectedObj;
117
+ }
118
+ /**
119
+ *
120
+ * @param {*} x screen x
121
+ * @param {*} y screen y
122
+ * @param {*} callback callback on selection
123
+ */
124
+ screenSelection(x, y, callback) {
125
+ const { pointSizes, _pickerDisplayer } = this;
126
+ const objectStore = this._bufferManagersMap.get("objectStore").bufferManager;
127
+ const wrapper = (selectedIDsSet) => {
128
+ const selectedIDs = Array.from(selectedIDsSet);
129
+ if (selectedIDs.length === 0) {
130
+ this._selectedObj = null;
131
+ this._selectedID = -1;
132
+ callback([]);
133
+ return;
134
+ }
135
+ const selectedPoints = [];
136
+ for (let i = 0; i < selectedIDs.length; i++) {
137
+ const id = selectedIDs[i];
138
+ if (i === 0) {
139
+ this._selectedID = id;
140
+ this._selectedObj = objectStore.get(id);
141
+ }
142
+ const obj = objectStore.get(id);
143
+ selectedPoints.push(obj);
144
+ }
145
+ callback(selectedPoints);
146
+ };
147
+ _pickerDisplayer.pickXY(x, y, pointSizes.selectionPointFilling, wrapper);
148
+ }
149
+ /**
150
+ * @param {Array<Track>} tracks
151
+ * @returns
152
+ */
153
+ insertBulk(tracks) {
154
+ this._fillTracksToPointsMap(tracks);
155
+ const flattenedPoints = tracks.map(track => trackToFlatPoints(track, this._objectStoreExtraParametersFiltered)).flat();
156
+ const currentLoad = this._bufferOrchestrator.length;
157
+ if (currentLoad + flattenedPoints.length >= 2147483647) {
158
+ throw new Error("Too many points, Point count cannot exceed 2147483647");
159
+ }
160
+ const { _bufferManagersMap, _bufferOrchestrator } = this;
161
+ _bufferOrchestrator.insertBulk(flattenedPoints, _bufferManagersMap);
162
+ this._refillFocus();
163
+ this.globe?.DrawRender();
164
+ }
165
+ flush() {
166
+ const capacity = 100;
167
+ this._bufferOrchestrator?.flush({ capacity });
168
+ this._bufferManagersMap.forEach(({ bufferManager }) => bufferManager.resetWithCapacity(capacity));
169
+ this._turnOffFocus();
170
+ this._tracksToPointsMap.clear();
171
+ this.globe?.DrawRender();
172
+ }
173
+ /**
174
+ * @param {string} trackID
175
+ */
176
+ deleteTrack(trackID) {
177
+ const pointList = this._tracksToPointsMap.get(trackID);
178
+ if (!pointList) {
179
+ console.warn(`Track with ID ${trackID} does not exist.`);
180
+ return;
181
+ }
182
+ ;
183
+ const points = Array.from(pointList);
184
+ const { _bufferOrchestrator, _bufferManagersMap } = this;
185
+ _bufferOrchestrator.deleteBulk(points.map((pointID) => keyMethod(trackID, pointID)), _bufferManagersMap);
186
+ this._tracksToPointsMap.delete(trackID);
187
+ this._redraw = true;
188
+ this._refillFocus();
189
+ this.globe?.DrawRender();
190
+ }
191
+ /**
192
+ * @param {string} trackID
193
+ * @param {Array<string>} pointIDs
194
+ */
195
+ deletePoints(trackID, pointIDs) {
196
+ const { _bufferOrchestrator, _bufferManagersMap } = this;
197
+ _bufferOrchestrator.deleteBulk(pointIDs.map((pointID) => keyMethod(trackID, pointID)), _bufferManagersMap);
198
+ this._deletePointsFromTracksMap(trackID, pointIDs);
199
+ this._refillFocus();
200
+ this.globe?.DrawRender();
201
+ }
202
+ focusTracks(trackIDs = null) {
203
+ if (!this.globe)
204
+ return;
205
+ if (trackIDs === null) {
206
+ this._focusParams.on = false;
207
+ this.globe?.DrawRender();
208
+ return;
209
+ }
210
+ this._focusParams.on = true;
211
+ this._fillElementBuffer(trackIDs);
212
+ if (!this._focusParams.on) {
213
+ this._turnOffFocus();
214
+ }
215
+ this.globe.DrawRender();
216
+ }
217
+ updateTrackColor(trackID, rgba) {
218
+ if (!this._tracksToPointsMap.has(trackID)) {
219
+ console.warn(`Track with ID ${trackID} does not exist.`);
220
+ return;
221
+ }
222
+ const pointList = this._tracksToPointsMap.get(trackID);
223
+ const points = Array.from(pointList);
224
+ const { _bufferOrchestrator, _bufferManagersMap } = this;
225
+ _bufferOrchestrator.updateBulk(points.map((pointID) => {
226
+ return {
227
+ key: keyMethod(trackID, pointID),
228
+ rgba: rgba
229
+ };
230
+ }), _bufferManagersMap, ["rgba"]);
231
+ this._refillFocus();
232
+ this.globe?.DrawRender();
233
+ }
234
+ // GLOBE API METHODS
235
+ free() {
236
+ if (this._isFreed)
237
+ return;
238
+ this._isFreed = true;
239
+ this._pickerDisplayer.free();
240
+ PointOnGlobeProgramCache.release(this.globe);
241
+ this.gl.deleteBuffer(this._focusParams.elementBuffer);
242
+ this._bufferManagersMap.forEach(({ bufferManager, adaptor }) => bufferManager.free());
243
+ }
244
+ draw3D() {
245
+ const { gl, _pointProgram, _pickerDisplayer, _bufferOrchestrator, _vao } = this;
246
+ if (!gl) {
247
+ throw new Error("GL is not loaded, PointTracks Plugin");
248
+ }
249
+ if (this._isFreed) {
250
+ throw new Error("Plugin is unregistered, PointTracks Plugin");
251
+ }
252
+ this.resize();
253
+ _pickerDisplayer.bindFBO();
254
+ _pickerDisplayer.clearTextures();
255
+ if (this._focusParams.on) {
256
+ _pointProgram.draw(_vao, this._focusParams.length, {
257
+ hoveredID: this._selectedID,
258
+ opacity: this._opacity,
259
+ pointSize: this.pointSizes.pointSize,
260
+ hoveredPointSize: this.pointSizes.hoveredPointSize,
261
+ elementBuffer: this._focusParams.elementBuffer
262
+ });
263
+ }
264
+ else {
265
+ _pointProgram.draw(_vao, _bufferOrchestrator.length, {
266
+ hoveredID: this._selectedID,
267
+ opacity: this._opacity,
268
+ pointSize: this.pointSizes.pointSize,
269
+ hoveredPointSize: this.pointSizes.hoveredPointSize
270
+ });
271
+ }
272
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
273
+ _pickerDisplayer.drawColorTexture();
274
+ this._selfSelect();
275
+ }
276
+ resize() {
277
+ const w = this.globe.api_ScrW();
278
+ const h = this.globe.api_ScrH();
279
+ if (w === this._lastWH.w && h === this._lastWH.h)
280
+ return;
281
+ this._lastWH.w = w;
282
+ this._lastWH.h = h;
283
+ this._pickerDisplayer.resize();
284
+ this.globe?.DrawRender();
285
+ }
286
+ // IMPLICIT METHODS
287
+ _fillTracksToPointsMap(tracks) {
288
+ for (const track of tracks) {
289
+ const trackID = track.trackID;
290
+ const points = track.points;
291
+ if (!this._tracksToPointsMap.has(trackID)) {
292
+ this._tracksToPointsMap.set(trackID, new Set());
293
+ }
294
+ const pointSet = this._tracksToPointsMap.get(trackID);
295
+ for (let p = 0; p < points.length; p++) {
296
+ const pointID = points[p].ID;
297
+ if (!pointSet.has(pointID)) {
298
+ pointSet.add(pointID);
299
+ }
300
+ else {
301
+ console.warn(`Point with ID ${pointID} already exists in track ${trackID}. Skipping duplicate.`);
302
+ }
303
+ }
304
+ }
305
+ }
306
+ _refillFocus() {
307
+ if (this._focusParams.on) {
308
+ this.focusTracks(this._focusParams.trackIDs);
309
+ }
310
+ }
311
+ _deletePointsFromTracksMap(trackID, pointIDs) {
312
+ const trackIDs = this._tracksToPointsMap.get(trackID);
313
+ if (trackIDs === undefined) {
314
+ console.warn(`Track with ID ${trackID} not found.`);
315
+ return;
316
+ }
317
+ for (const pointID of pointIDs) {
318
+ if (!trackIDs.has(pointID)) {
319
+ console.warn(`Point with ID ${pointID} not found in track ${trackID}.`);
320
+ }
321
+ else {
322
+ trackIDs.delete(pointID);
323
+ }
324
+ }
325
+ if (trackIDs.size === 0) {
326
+ this._tracksToPointsMap.delete(trackID);
327
+ }
328
+ }
329
+ _selfSelect() {
330
+ const { globe } = this;
331
+ const pos = globe.api_GetMousePos();
332
+ const x = pos.canvasX;
333
+ const y = globe.api_ScrH() - pos.canvasY;
334
+ this.screenSelection(x, y, (selectedPoints) => {
335
+ });
336
+ }
337
+ _turnOffFocus() {
338
+ const { gl } = this;
339
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._focusParams.elementBuffer);
340
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array([]), gl.STATIC_DRAW);
341
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
342
+ this._focusParams.length = 0;
343
+ this._focusParams.on = false;
344
+ }
345
+ _fillElementBuffer(trackIDs) {
346
+ let length = 0;
347
+ const indexes = [];
348
+ const foundTracks = [];
349
+ for (const trackID of trackIDs) {
350
+ const pointList = this._tracksToPointsMap.get(trackID);
351
+ if (!pointList)
352
+ continue;
353
+ foundTracks.push(trackID);
354
+ for (const pointID of pointList) {
355
+ const key = keyMethod(trackID, pointID);
356
+ const index = this._bufferOrchestrator.offsetMap.get(key);
357
+ if (index === undefined) {
358
+ throw new Error(`Point with key ${key} not found in buffer orchestrator.`);
359
+ }
360
+ indexes.push(index);
361
+ length++;
362
+ }
363
+ }
364
+ this._focusParams.trackIDs = foundTracks;
365
+ this._focusParams.length = length;
366
+ if (length === 0) {
367
+ return false;
368
+ }
369
+ const { gl } = this;
370
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._focusParams.elementBuffer);
371
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indexes), gl.STATIC_DRAW);
372
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
373
+ return true;
374
+ }
375
+ }
376
+ const trackToFlatPoints = (track, extraParameters) => {
377
+ const trackID = track.trackID;
378
+ const points = track.points;
379
+ const rgba = new Float32Array(track.rgba);
380
+ const flatPoints = [];
381
+ for (const point of points) {
382
+ flatPoints.push({
383
+ key: keyMethod(trackID, point.ID),
384
+ long: point.long,
385
+ lat: point.lat,
386
+ height: point.height,
387
+ pointID: point.ID,
388
+ rgba,
389
+ trackID
390
+ });
391
+ for (let i = 0; i < extraParameters.length; i++) {
392
+ const param = extraParameters[i];
393
+ if (point.hasOwnProperty(param)) {
394
+ flatPoints[flatPoints.length - 1][param] = point[param];
395
+ }
396
+ }
397
+ }
398
+ return flatPoints;
399
+ };
400
+ const keyMethod = (trackID, pointID) => `${trackID}_${pointID}`;
401
+ export { PointTracksPlugin, keyMethod };