@pirireis/webglobeplugins 0.17.0 → 1.0.2

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 (274) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -107
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/tiles.ts +162 -0
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -472
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -393
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -671
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -145
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -56
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -516
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/programs/line-on-globe/linestrip/data.js +0 -4
  249. package/programs/polygon-on-globe/partial-tesselation.js +0 -1
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -204
  251. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -118
  252. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -236
  253. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/util/webglobe/rasteroverlay.js +0 -76
  272. package/vectorfield/waveparticles/plugin.js +0 -290
  273. package/write-text/attached-text-writer.js +0 -95
  274. package/write-text/context-text3.js +0 -167
@@ -1,41 +1,50 @@
1
- export var StaticDynamicState;
2
- (function (StaticDynamicState) {
3
- StaticDynamicState["STATIC"] = "STATIC";
4
- StaticDynamicState["DYNAMIC"] = "DYNAMIC";
5
- StaticDynamicState["TO_STATIC"] = "TO_STATIC"; // TODO: Change this not bidirectional, go to static
6
- })(StaticDynamicState || (StaticDynamicState = {}));
7
- export class StaticDynamicStrategy {
8
- globe;
9
- _staticDynamicState = StaticDynamicState.DYNAMIC;
10
- _transitionLevel = 8; // Default transition level
11
- _lastStaticDynamicState = StaticDynamicState.STATIC;
12
- _lastGeometry = null;
13
- _toStatic;
14
- constructor(globe, transitionLevel = 8, toStatic) {
15
- this.globe = globe;
16
- this._transitionLevel = transitionLevel;
17
- this._toStatic = toStatic;
18
- this.updateState();
19
- }
20
- updateState() {
21
- const currentLOD = this.globe.api_GetCurrentLODWithDecimal();
22
- const state = currentLOD < this._transitionLevel ? StaticDynamicState.STATIC : StaticDynamicState.DYNAMIC;
23
- const currentGeometry = this.globe.api_GetCurrentGeometry();
24
- if (this._lastStaticDynamicState === StaticDynamicState.DYNAMIC && state === StaticDynamicState.STATIC) {
25
- this._staticDynamicState = StaticDynamicState.TO_STATIC;
26
- this._toStatic();
27
- }
28
- else if ((currentGeometry !== this._lastGeometry) && state === StaticDynamicState.STATIC) {
29
- this._staticDynamicState = StaticDynamicState.TO_STATIC;
30
- this._toStatic();
31
- }
32
- else {
33
- this._staticDynamicState = state;
34
- }
35
- this._lastStaticDynamicState = this._staticDynamicState;
36
- this._lastGeometry = currentGeometry;
37
- }
38
- getState() {
39
- return this._staticDynamicState;
40
- }
41
- }
1
+ import { Globe } from '../../types';
2
+
3
+ export enum StaticDynamicState {
4
+ STATIC = "STATIC",
5
+ DYNAMIC = "DYNAMIC",
6
+ TO_STATIC = "TO_STATIC" // TODO: Change this not bidirectional, go to static
7
+
8
+ }
9
+
10
+
11
+ export class StaticDynamicStrategy {
12
+ globe: Globe;
13
+ private _staticDynamicState: StaticDynamicState = StaticDynamicState.DYNAMIC;
14
+ private _transitionLevel: number = 8; // Default transition level
15
+ private _lastStaticDynamicState: StaticDynamicState = StaticDynamicState.STATIC;
16
+ private _lastGeometry: 0 | 1 = null!
17
+ private _toStatic: () => void;
18
+ constructor(globe: Globe, transitionLevel: number = 8, toStatic: () => void) {
19
+ this.globe = globe;
20
+ this._transitionLevel = transitionLevel;
21
+ this._toStatic = toStatic;
22
+
23
+ this.updateState();
24
+ }
25
+
26
+ updateState() {
27
+ const currentLOD = this.globe.api_GetCurrentLODWithDecimal();
28
+ const state = currentLOD < this._transitionLevel ? StaticDynamicState.STATIC : StaticDynamicState.DYNAMIC;
29
+ const currentGeometry = this.globe.api_GetCurrentGeometry();
30
+ if (this._lastStaticDynamicState === StaticDynamicState.DYNAMIC && state === StaticDynamicState.STATIC) {
31
+ this._staticDynamicState = StaticDynamicState.TO_STATIC;
32
+ this._toStatic();
33
+ } else if ((currentGeometry !== this._lastGeometry) && state === StaticDynamicState.STATIC) {
34
+ this._staticDynamicState = StaticDynamicState.TO_STATIC;
35
+ this._toStatic();
36
+ } else {
37
+ this._staticDynamicState = state;
38
+ }
39
+ this._lastStaticDynamicState = this._staticDynamicState;
40
+ this._lastGeometry = currentGeometry;
41
+ }
42
+
43
+
44
+
45
+
46
+ getState(): StaticDynamicState {
47
+ return this._staticDynamicState;
48
+ }
49
+
50
+ }
@@ -1 +0,0 @@
1
- "use strict";
@@ -0,0 +1,74 @@
1
+ // Generic
2
+
3
+ import { Color } from "../../types";
4
+
5
+ interface TextFont {
6
+ name: string;
7
+ textColor: string;
8
+ hollowColor: string;
9
+ size: number;
10
+ bold: boolean;
11
+ italic: boolean;
12
+ }
13
+
14
+ const doesOwnProperties = (properties: string[], errorMessage: string) => {
15
+ return (object: Record<string, any>): void => {
16
+ properties.forEach(element => {
17
+ if (!object.hasOwnProperty(element)) throw new TypeError(errorMessage + ':' + element);
18
+ });
19
+ }
20
+ }
21
+
22
+ export const isHexColor = (hexColor: string): boolean => /^#[0-9A-F]{6}$/i.test(hexColor);
23
+ export const isHexColorWithOpacity = (hexColor: string): boolean => /^#[0-9A-F]{6}[0-9a-f]{0,2}$/i.test(hexColor);
24
+
25
+ export const colorCheck = (color: Color): void => {
26
+ if (Array.isArray(color)) {
27
+ if (color.length !== 4) throw new TypeError("Color must be an array 4 numbers RGBA");
28
+ color.forEach(c => {
29
+ if (typeof c !== "number") throw new TypeError("Color array must contain only numbers");
30
+ if (c < 0 || c > 1) throw new RangeError("Color values must be between 0 and 1");
31
+ });
32
+ }
33
+ }
34
+
35
+ export const opacityCheck = (opacity: number | any): void => {
36
+ if (typeof opacity !== "number") throw new TypeError("style.opacity must a number");
37
+ if (opacity < 0 || 1 < opacity) throw new RangeError("Opacity Range Must be 0-1");
38
+ }
39
+
40
+ // Text Related
41
+
42
+ const fontCheckTypes = doesOwnProperties(["name", "textColor", "hollowColor", "size", "bold", "italic"], "font does not have");
43
+ const fontCheckColors = (textColor: string, hollowColor: string): boolean => isHexColor(textColor) && isHexColor(hollowColor);
44
+
45
+ export const isTextFont = (textFont: TextFont): void => {
46
+ fontCheckTypes(textFont);
47
+ fontCheckColors(textFont.textColor, textFont.hollowColor);
48
+ if (typeof textFont.size !== "number") throw new TypeError("textFont size is not a number");
49
+ }
50
+
51
+ export const constraintFloat = (x: number, lowerBound: number | null = null, upperBound: number | null = null): void => {
52
+ if (typeof x !== "number") throw new Error("type must be numberic");
53
+ if (lowerBound === null && upperBound === null) return;
54
+ if (lowerBound !== null && lowerBound > x) throw new Error(`input must be greater than ${lowerBound}`);
55
+ if (upperBound !== null && x > upperBound) throw new Error(`input must be less than ${upperBound}`);
56
+ }
57
+
58
+ export const isBoolean = (x: any): void => {
59
+ if (typeof x !== "boolean") throw new TypeError("type must be boolean");
60
+ }
61
+
62
+
63
+ export const mapGetOrThrow = (errorNote: string) => {
64
+ return (mapInstance: Map<string, any>, ids: string[]) => {
65
+ if (!ids) throw new Error("There is no map keys to get");
66
+ const result = [];
67
+ for (let i = 0; i < ids.length; i++) {
68
+ const e = mapInstance.get(ids[i]);
69
+ if (e === undefined) throw new Error(errorNote + " " + ids[i]);
70
+ result.push(e);
71
+ }
72
+ return result;
73
+ }
74
+ }
@@ -1,84 +1,99 @@
1
- import { CameraUniformBlockTotemCache } from "../programs/totems/camerauniformblock";
2
- export class FrameCounterTrigger {
3
- globe;
4
- count = 0;
5
- threshold;
6
- timeoutMs;
7
- timeoutId = null;
8
- accumulatedChanges = {
9
- geometry: false,
10
- look: false,
11
- lod: false,
12
- lod2DWheel: false,
13
- elevationScale: false,
14
- screenMoved: false
15
- };
16
- cameraBlockTotem;
17
- updateCallback;
18
- constructor(globe, threshold, timeoutMs, updateCallback) {
19
- this.threshold = threshold;
20
- this.timeoutMs = timeoutMs;
21
- this.updateCallback = updateCallback;
22
- this.globe = globe;
23
- this.cameraBlockTotem = CameraUniformBlockTotemCache.get(globe);
24
- }
25
- trigger(level = null) {
26
- const globeChanges = this.cameraBlockTotem.getGlobeChanges();
27
- if (!globeChanges.screenMoved)
28
- return;
29
- this.setChanges(globeChanges);
30
- if (globeChanges.geometry || globeChanges.elevationScale || globeChanges.lod2DWheel) {
31
- this.triggerUpdate();
32
- return;
33
- }
34
- this.count++;
35
- if (this.count === 1) {
36
- this.startTimeout();
37
- }
38
- if (this.count >= this.threshold) {
39
- this.triggerUpdate();
40
- }
41
- }
42
- startTimeout() {
43
- this.clearTimeout();
44
- this.timeoutId = setTimeout(() => {
45
- this.triggerUpdate();
46
- }, this.timeoutMs);
47
- }
48
- triggerUpdate() {
49
- this.clearTimeout();
50
- this.updateCallback(this.accumulatedChanges);
51
- this.reset();
52
- }
53
- clearTimeout() {
54
- if (this.timeoutId) {
55
- clearTimeout(this.timeoutId);
56
- this.timeoutId = null;
57
- }
58
- }
59
- setChanges(changes) {
60
- // accumulate true states until reset
61
- this.accumulatedChanges.geometry = this.accumulatedChanges.geometry || changes.geometry;
62
- this.accumulatedChanges.look = this.accumulatedChanges.look || changes.look;
63
- this.accumulatedChanges.lod = this.accumulatedChanges.lod || changes.lod;
64
- this.accumulatedChanges.elevationScale = this.accumulatedChanges.elevationScale || changes.elevationScale;
65
- this.accumulatedChanges.screenMoved = this.accumulatedChanges.screenMoved || changes.screenMoved;
66
- this.accumulatedChanges.lod2DWheel = this.accumulatedChanges.lod2DWheel || changes.lod2DWheel;
67
- }
68
- getLevel() {
69
- return this.accumulatedChanges;
70
- }
71
- reset() {
72
- this.count = 0;
73
- this.accumulatedChanges.geometry = false;
74
- this.accumulatedChanges.look = false;
75
- this.accumulatedChanges.lod = false;
76
- this.accumulatedChanges.lod2DWheel = false;
77
- this.accumulatedChanges.elevationScale = false;
78
- this.accumulatedChanges.screenMoved = false;
79
- this.clearTimeout();
80
- }
81
- free() {
82
- CameraUniformBlockTotemCache.release(this.globe);
83
- }
84
- }
1
+ import { CameraUniformBlockTotemCache, CameraUniformBlockTotem } from "../programs/totems/camerauniformblock";
2
+ import { Globe, GlobeChanges } from "../types";
3
+
4
+ type UpdateCallback = (globeChanges: GlobeChanges) => void;
5
+
6
+ export class FrameCounterTrigger {
7
+ private globe: Globe;
8
+ private count: number = 0;
9
+ private threshold: number;
10
+ private timeoutMs: number;
11
+ private timeoutId: ReturnType<typeof setTimeout> | null = null;
12
+ readonly accumulatedChanges: GlobeChanges = {
13
+ geometry: false,
14
+ look: false,
15
+ lod: false,
16
+ lod2DWheel: false,
17
+ elevationScale: false,
18
+ screenMoved: false
19
+ };
20
+ private cameraBlockTotem: CameraUniformBlockTotem;
21
+ private updateCallback: UpdateCallback;
22
+
23
+ constructor(globe: Globe, threshold: number, timeoutMs: number, updateCallback: UpdateCallback) {
24
+ this.threshold = threshold;
25
+ this.timeoutMs = timeoutMs;
26
+ this.updateCallback = updateCallback;
27
+ this.globe = globe;
28
+ this.cameraBlockTotem = CameraUniformBlockTotemCache.get(globe);
29
+
30
+ }
31
+
32
+ trigger(level: number | null = null) {
33
+ const globeChanges = this.cameraBlockTotem.getGlobeChanges();
34
+ if (!globeChanges.screenMoved) return;
35
+ this.setChanges(globeChanges);
36
+ if (globeChanges.geometry || globeChanges.elevationScale || globeChanges.lod2DWheel) {
37
+ this.triggerUpdate();
38
+ return;
39
+ }
40
+
41
+ this.count++;
42
+ if (this.count === 1) {
43
+ this.startTimeout();
44
+ }
45
+ if (this.count >= this.threshold) {
46
+ this.triggerUpdate();
47
+ }
48
+ }
49
+
50
+ private startTimeout() {
51
+ this.clearTimeout();
52
+ this.timeoutId = setTimeout(() => {
53
+ this.triggerUpdate();
54
+ }, this.timeoutMs);
55
+ }
56
+
57
+ private triggerUpdate() {
58
+ this.clearTimeout();
59
+ this.updateCallback(this.accumulatedChanges);
60
+ this.reset();
61
+ }
62
+
63
+ private clearTimeout() {
64
+ if (this.timeoutId) {
65
+ clearTimeout(this.timeoutId);
66
+ this.timeoutId = null;
67
+ }
68
+ }
69
+
70
+ private setChanges(changes: GlobeChanges) {
71
+ // accumulate true states until reset
72
+ this.accumulatedChanges.geometry = this.accumulatedChanges.geometry || changes.geometry;
73
+ this.accumulatedChanges.look = this.accumulatedChanges.look || changes.look;
74
+ this.accumulatedChanges.lod = this.accumulatedChanges.lod || changes.lod;
75
+ this.accumulatedChanges.elevationScale = this.accumulatedChanges.elevationScale || changes.elevationScale;
76
+ this.accumulatedChanges.screenMoved = this.accumulatedChanges.screenMoved || changes.screenMoved;
77
+ this.accumulatedChanges.lod2DWheel = this.accumulatedChanges.lod2DWheel || changes.lod2DWheel;
78
+ }
79
+
80
+
81
+ getLevel() {
82
+ return this.accumulatedChanges;
83
+ }
84
+
85
+ reset() {
86
+ this.count = 0;
87
+ this.accumulatedChanges.geometry = false;
88
+ this.accumulatedChanges.look = false;
89
+ this.accumulatedChanges.lod = false;
90
+ this.accumulatedChanges.lod2DWheel = false;
91
+ this.accumulatedChanges.elevationScale = false;
92
+ this.accumulatedChanges.screenMoved = false;
93
+ this.clearTimeout();
94
+ }
95
+
96
+ free() {
97
+ CameraUniformBlockTotemCache.release(this.globe);
98
+ }
99
+ }
@@ -1,121 +1,155 @@
1
- import { GLOBE_DEFAULT_MIN_LOD, GLOBE_DEFAULT_MAX_LOD, POLE2 } from "../../constants";
2
- function latLongToPixelXY(latitude, longitude) {
3
- return {
4
- x: (longitude + 180) / 360,
5
- y: (90 - latitude) / 180
6
- };
7
- }
8
- /**
9
- * createBBoxMatrix( minX, maxX, minY, maxY)
10
- * use this matrix to transform a point from 0 to 1 range to the bounding box
11
- * for example: Transform image coordinates to map coordinates
12
- * glsl`vec3 pos = u_bbox_matrix * vec3(v_particle_pos.x, v_particle_pos.y, 1.0);`
13
- */
14
- function createBBoxMatrix(minX, maxX, minY, maxY) {
15
- return new Float32Array([
16
- maxX - minX, 0, 0,
17
- 0, maxY - minY, 0,
18
- minX, minY, 1
19
- ]);
20
- }
21
- function latLongBboxtoPixelXYBbox(minX, minY, maxX, maxY) {
22
- const minXY = latLongToPixelXY(minY, minX);
23
- const maxXY = latLongToPixelXY(maxY, maxX);
24
- return createBBoxMatrix(minXY.x, maxXY.x, minXY.y, maxXY.y);
25
- }
26
- /**
27
- *
28
- * @param array - The array to normalize
29
- * @param newLength - The target length for the normalized array
30
- * @returns Normalized Float32Array
31
- */
32
- function normalize(array, newLength = 1) {
33
- let total = 0;
34
- for (let i = 0; i < array.length; i++) {
35
- total += array[i] * array[i];
36
- }
37
- const len = newLength / Math.sqrt(total);
38
- const result = new Float32Array(array.length);
39
- for (let i = 0; i < array.length; i++) {
40
- result[i] = array[i] * len;
41
- }
42
- return result;
43
- }
44
- // TODO carry the usefull content to math module.
45
- function sphereCoord(long, lat, globe, height = 0) {
46
- return normalize(globe.api_GetCartesian3DPoint(long, lat, 0, false), 6378.137 + height);
47
- }
48
- function clamp(value, min, max) {
49
- return Math.min(Math.max(value, min), max);
50
- }
51
- function _flatZoomLevel(globe) {
52
- const { width, height } = globe.api_GetCurrentWorldWH();
53
- const curLod = Math.log(POLE2 / Math.min(width, height)) / Math.LN2 + GLOBE_DEFAULT_MIN_LOD;
54
- return curLod;
55
- }
56
- function _sphereZoomLevel(globe) {
57
- // Sorted array of [lod, altitude]
58
- const altitudesAsMeterByLod = [
59
- [25, 39.97],
60
- [24, 39.97],
61
- [23, 39.97],
62
- [22, 39.97],
63
- [21, 84.84],
64
- [20, 169.95],
65
- [19, 335.87],
66
- [18, 672.80],
67
- [17, 1352.01],
68
- [16, 2688.90],
69
- [15, 5386.31],
70
- [14, 10611.02],
71
- [13, 21526.80],
72
- [12, 43121.77],
73
- [11, 86927.14],
74
- [10, 171201.96],
75
- [9, 336039.90],
76
- [8, 678769.05],
77
- [7, 1379009.96],
78
- [6, 2770920.56],
79
- [5, 5837640.93],
80
- [4, 12408290.88],
81
- [3, 25512546.06],
82
- [2, 25512546.06],
83
- [1, 25512546.06],
84
- [0, 25512546.06]
85
- ];
86
- const { Distance: altitude } = globe.api_GetCurrentLookInfo();
87
- const defMinLod = GLOBE_DEFAULT_MIN_LOD;
88
- const defMaxLod = GLOBE_DEFAULT_MAX_LOD;
89
- // Binary search for correct LOD
90
- let left = 0, right = altitudesAsMeterByLod.length - 1;
91
- if (altitude > altitudesAsMeterByLod[right][1]) {
92
- return clamp(0, defMinLod, defMaxLod);
93
- }
94
- if (altitude < altitudesAsMeterByLod[0][1]) {
95
- return clamp(25, defMinLod, defMaxLod);
96
- }
97
- while (left < right) {
98
- let mid = Math.floor((left + right) / 2);
99
- let currAlt = altitudesAsMeterByLod[mid][1];
100
- let nextAlt = altitudesAsMeterByLod[mid + 1][1];
101
- if (altitude >= currAlt && altitude <= nextAlt) {
102
- let lod = altitudesAsMeterByLod[mid][0];
103
- if (currAlt === nextAlt) {
104
- return clamp(lod, defMinLod, defMaxLod);
105
- }
106
- return clamp(lod + (-currAlt + altitude) / (-currAlt + nextAlt), defMinLod, defMaxLod);
107
- }
108
- if (altitude > nextAlt) {
109
- left = mid + 1;
110
- }
111
- else {
112
- right = mid;
113
- }
114
- }
115
- return GLOBE_DEFAULT_MIN_LOD;
116
- }
117
- function approximatedZoomLevel(globe) {
118
- const is3D = globe.api_GetCurrentGeometry() === 0;
119
- return is3D ? _sphereZoomLevel(globe) : _flatZoomLevel(globe);
120
- }
121
- export { createBBoxMatrix, latLongToPixelXY, latLongBboxtoPixelXYBbox, sphereCoord, normalize, approximatedZoomLevel };
1
+ import { Globe } from "../../types";
2
+ import {GLOBE_DEFAULT_MIN_LOD,GLOBE_DEFAULT_MAX_LOD, POLE2} from "../../constants";
3
+
4
+
5
+
6
+ interface PixelXY {
7
+ x: number;
8
+ y: number;
9
+ }
10
+
11
+
12
+
13
+ function latLongToPixelXY(latitude: number, longitude: number): PixelXY {
14
+ return {
15
+ x: (longitude + 180) / 360,
16
+ y: (90 - latitude) / 180
17
+ };
18
+ }
19
+
20
+ /**
21
+ * createBBoxMatrix( minX, maxX, minY, maxY)
22
+ * use this matrix to transform a point from 0 to 1 range to the bounding box
23
+ * for example: Transform image coordinates to map coordinates
24
+ * glsl`vec3 pos = u_bbox_matrix * vec3(v_particle_pos.x, v_particle_pos.y, 1.0);`
25
+ */
26
+ function createBBoxMatrix(minX: number, maxX: number, minY: number, maxY: number): Float32Array {
27
+ return new Float32Array([
28
+ maxX - minX, 0, 0,
29
+ 0, maxY - minY, 0,
30
+ minX, minY, 1
31
+ ])
32
+ }
33
+
34
+ function latLongBboxtoPixelXYBbox(minX: number, minY: number, maxX: number, maxY: number): Float32Array {
35
+ const minXY = latLongToPixelXY(minY, minX);
36
+ const maxXY = latLongToPixelXY(maxY, maxX);
37
+ return createBBoxMatrix(minXY.x, maxXY.x, minXY.y, maxXY.y);
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param array - The array to normalize
43
+ * @param newLength - The target length for the normalized array
44
+ * @returns Normalized Float32Array
45
+ */
46
+ function normalize(array: ArrayLike<number>, newLength: number = 1): Float32Array {
47
+ let total = 0;
48
+ for (let i = 0; i < array.length; i++) {
49
+ total += array[i] * array[i];
50
+ }
51
+ const len = newLength / Math.sqrt(total);
52
+ const result = new Float32Array(array.length);
53
+ for (let i = 0; i < array.length; i++) {
54
+ result[i] = array[i] * len;
55
+ }
56
+ return result;
57
+ }
58
+
59
+
60
+ // TODO carry the usefull content to math module.
61
+ function sphereCoord(long: number, lat: number, globe: Globe, height: number = 0): Float32Array {
62
+ return normalize(globe.api_GetCartesian3DPoint(long, lat, 0, false), 6378.137 + height);
63
+ }
64
+
65
+
66
+
67
+
68
+ function clamp(value: number, min: number, max: number): number {
69
+ return Math.min(Math.max(value, min), max);
70
+ }
71
+
72
+ function _flatZoomLevel(globe: Globe): number {
73
+ const {width, height} = globe.api_GetCurrentWorldWH();
74
+ const curLod = Math.log(POLE2 / Math.min(width, height)) / Math.LN2 + GLOBE_DEFAULT_MIN_LOD
75
+ return curLod
76
+ }
77
+
78
+
79
+ function _sphereZoomLevel(globe: Globe): number {
80
+ // Sorted array of [lod, altitude]
81
+ const altitudesAsMeterByLod = [
82
+ [25, 39.97],
83
+ [24, 39.97],
84
+ [23, 39.97],
85
+ [22, 39.97],
86
+ [21, 84.84],
87
+ [20, 169.95],
88
+ [19, 335.87],
89
+ [18, 672.80],
90
+ [17, 1352.01],
91
+ [16, 2688.90],
92
+ [15, 5386.31],
93
+ [14, 10611.02],
94
+ [13, 21526.80],
95
+ [12, 43121.77],
96
+ [11, 86927.14],
97
+ [10, 171201.96],
98
+ [9, 336039.90],
99
+ [8, 678769.05],
100
+ [7, 1379009.96],
101
+ [6, 2770920.56],
102
+ [5, 5837640.93],
103
+ [4, 12408290.88],
104
+ [3, 25512546.06],
105
+ [2, 25512546.06],
106
+ [1, 25512546.06],
107
+ [0, 25512546.06]
108
+ ];
109
+
110
+ const { Distance: altitude } = globe.api_GetCurrentLookInfo();
111
+ const defMinLod = GLOBE_DEFAULT_MIN_LOD;
112
+ const defMaxLod = GLOBE_DEFAULT_MAX_LOD;
113
+
114
+ // Binary search for correct LOD
115
+ let left = 0, right = altitudesAsMeterByLod.length - 1;
116
+ if (altitude > altitudesAsMeterByLod[right][1]) {
117
+ return clamp(0, defMinLod, defMaxLod);
118
+ }
119
+ if (altitude < altitudesAsMeterByLod[0][1]) {
120
+ return clamp(25, defMinLod, defMaxLod);
121
+ }
122
+ while (left < right) {
123
+ let mid = Math.floor((left + right) / 2);
124
+ let currAlt = altitudesAsMeterByLod[mid][1];
125
+ let nextAlt = altitudesAsMeterByLod[mid + 1][1];
126
+ if (altitude >= currAlt && altitude <= nextAlt) {
127
+ let lod = altitudesAsMeterByLod[mid][0];
128
+ if (currAlt === nextAlt) {
129
+ return clamp(lod, defMinLod, defMaxLod);
130
+ }
131
+ return clamp(
132
+ lod + ( - currAlt + altitude) / ( -currAlt + nextAlt),
133
+ defMinLod, defMaxLod
134
+ );
135
+ }
136
+ if (altitude > nextAlt) {
137
+ left = mid + 1;
138
+ } else {
139
+ right = mid;
140
+ }
141
+ }
142
+ return GLOBE_DEFAULT_MIN_LOD;
143
+ }
144
+
145
+
146
+
147
+ function approximatedZoomLevel(globe: Globe): number {
148
+ const is3D = globe.api_GetCurrentGeometry() === 0;
149
+ return is3D ? _sphereZoomLevel(globe) : _flatZoomLevel(globe);
150
+ }
151
+
152
+
153
+
154
+ export { createBBoxMatrix, latLongToPixelXY, latLongBboxtoPixelXYBbox, sphereCoord, normalize, approximatedZoomLevel };
155
+ export type { PixelXY, Globe };