@pirireis/webglobeplugins 0.17.1 → 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 (272) 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 -113
  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.js → tiles.ts} +162 -128
  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 -481
  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 -394
  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 -685
  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 -146
  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 -298
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -523
  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/investigation-tools/draw/tiles/adapters.js +0 -67
  249. package/programs/line-on-globe/linestrip/data.js +0 -4
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -328
  251. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -268
  252. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -114
  253. package/programs/vectorfields/logics/drawrectangleparticles1.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/vectorfield/waveparticles/plugin.js +0 -290
  272. package/write-text/context-text3.js +0 -167
@@ -1,60 +1,77 @@
1
- "use strict";
2
- /**
3
- * This class registered as globe plugin one for each globe. to the head of plugin call stack.
4
- */
5
- class PinPointTotem {
6
- constructor(globe) {
7
- this.objectArrayMap = new Map();
8
- }
9
- /**
10
- * objectArray
11
- * callbacks ={
12
- * mouseDown,
13
- * mouseMove,
14
- * mouseUp,
15
- * mouseClick,
16
- * mouseDbClick,
17
- * keyDown,
18
- * keyUp
19
- * }
20
- */
21
- registerPinMap(objectArray, callbacks) {
22
- this.objectArrayMap.set(objectArray, callbacks);
23
- }
24
- unregisterPinMap(objectArray) {
25
- if (this.objectArrayMap.has(objectArray)) {
26
- this.objectArrayMap.delete(objectArray);
27
- }
28
- else {
29
- console.warn('PinPointTotem objectArrayMap does not contain the objectArray');
30
- }
31
- }
32
- // GlobeMethods
33
- // haritada sol butona basıldığında çağrılır
34
- mouseDown(x, y, event) {
35
- return false;
36
- }
37
- // mouse'a basılıp hareket ettirildiğinde, mouseDown'dan true dönmüşse çağrılır
38
- mouseMove(x, y, event) {
39
- }
40
- // mouse up'ın left'i mouseDown'dan true dönmüşse çağrılır, edit mode içindir
41
- // right'i ise sağ tıka basılıp bırakıldığında çağrılır
42
- mouseUp(x, y, event) {
43
- }
44
- // harita üzerinde tıklandığında çağrılır
45
- mouseClick(x, y, event) {
46
- return false;
47
- }
48
- // harita üzerinde çift tıklandığında çağrılır
49
- mouseDblClick(x, y, event) {
50
- return false;
51
- }
52
- // klavyeden bir tuşa basıldığı anda ve tuşa basılı kalınmaya devam edildiği durumlarda çalışır
53
- keyDown(event) {
54
- return false;
55
- }
56
- // klavyedeki bir tuştan parmak çekildiği anda çalışır
57
- keyUp(event) {
58
- return false;
59
- }
60
- }
1
+ /**
2
+ * This class registered as globe plugin one for each globe. to the head of plugin call stack.
3
+ */
4
+
5
+ class PinPointTotem {
6
+ constructor(globe) {
7
+
8
+ this.objectArrayMap = new Map()
9
+ }
10
+
11
+
12
+ /**
13
+ * objectArray
14
+ * callbacks ={
15
+ * mouseDown,
16
+ * mouseMove,
17
+ * mouseUp,
18
+ * mouseClick,
19
+ * mouseDbClick,
20
+ * keyDown,
21
+ * keyUp
22
+ * }
23
+ */
24
+ registerPinMap(objectArray, callbacks) {
25
+ this.objectArrayMap.set(objectArray, callbacks);
26
+ }
27
+
28
+ unregisterPinMap(objectArray) {
29
+ if (this.objectArrayMap.has(objectArray)) {
30
+ this.objectArrayMap.delete(objectArray);
31
+ } else {
32
+ console.warn('PinPointTotem objectArrayMap does not contain the objectArray')
33
+ }
34
+ }
35
+
36
+
37
+ // GlobeMethods
38
+ // haritada sol butona basıldığında çağrılır
39
+ mouseDown(x, y, event) {
40
+
41
+ return false
42
+ }
43
+
44
+ // mouse'a basılıp hareket ettirildiğinde, mouseDown'dan true dönmüşse çağrılır
45
+ mouseMove(x, y, event) {
46
+
47
+ }
48
+
49
+ // mouse up'ın left'i mouseDown'dan true dönmüşse çağrılır, edit mode içindir
50
+ // right'i ise sağ tıka basılıp bırakıldığında çağrılır
51
+ mouseUp(x, y, event) {
52
+
53
+ }
54
+
55
+ // harita üzerinde tıklandığında çağrılır
56
+ mouseClick(x, y, event) {
57
+
58
+ return false
59
+ }
60
+
61
+ // harita üzerinde çift tıklandığında çağrılır
62
+ mouseDblClick(x, y, event) {
63
+ return false
64
+ }
65
+
66
+ // klavyeden bir tuşa basıldığı anda ve tuşa basılı kalınmaya devam edildiği durumlarda çalışır
67
+ keyDown(event) {
68
+ return false
69
+ }
70
+
71
+ // klavyedeki bir tuştan parmak çekildiği anda çalışır
72
+ keyUp(event) {
73
+
74
+ return false
75
+ }
76
+
77
+ }
@@ -1,60 +1,89 @@
1
- // this contains vao, drawCount, ArrowBufferBlock, vao,
2
- // how to, where to set instanced parameters
3
- // the vectorfield buffer should be managed outside, since it can be static or dynamic.
4
- import Logic from './logic';
5
- import { globeProgramCache } from '../programcache';
6
- import { longlatbbox2normalbbox } from "../util";
7
- export class ArrowField {
8
- constructor(gl, globe, { minLon = -180, maxLon = 180, minLat = -90, maxLat = 90, height = 0, opacity = 1, color = [0.04, 0.2, 0.8], targetWidth = 100, targetHeight = 100, dataWidth = null, dataHeight = null, tailLengthRatio = 1, wingLengthRatio = 0.5, noDataValue = null,
9
- // maxMagnitude = null
10
- } = {}) {
11
- this.gl = gl;
12
- this.globe = globe;
13
- this.program = globeProgramCache.getProgram(globe, Logic);
14
- this.arrowBlockManager = this.program.getArrowBlockBufferManager();
15
- this.instanceCount = targetWidth * targetHeight;
16
- this.arrowBlockManager.update({ resolution: [targetWidth, targetHeight] });
17
- this.textureManager = this.program.getTextureManager(dataWidth, dataHeight);
18
- this.setBBox({ minLon, maxLon, minLat, maxLat });
19
- this.update({ height, opacity, color, tailLengthRatio, wingLengthRatio, noDataValue });
20
- }
21
- setBBox({ minLon = -180, maxLon = 180, minLat = -90, maxLat = 90 } = {}) {
22
- this.bbox = { minLon, maxLon, minLat, maxLat };
23
- const { bboxSizeRad, bboxOffsetRad } = longlatbbox2normalbbox(this.bbox);
24
- this.arrowBlockManager.update({ bboxSizeRad, bboxOffsetRad });
25
- this.globe.DrawRender();
26
- }
27
- update({ height, opacity, color, resolution, tailLengthRatio, wingLengthRatio, noDataValue } = {}) {
28
- if (resolution) {
29
- this.instanceCount = resolution[0] * resolution[1];
30
- }
31
- this.arrowBlockManager.update({
32
- color,
33
- resolution,
34
- height,
35
- opacity,
36
- tailLengthRatio,
37
- wingLengthRatio,
38
- noDataValue,
39
- });
40
- this.globe.DrawRender();
41
- }
42
- setTargetResolution(width, height) {
43
- this.instanceCount = width * height;
44
- this.arrowBlockManager.update({ resolution: [width, height] });
45
- this.globe.DrawRender();
46
- }
47
- draw() {
48
- const { program, arrowBlockManager, textureManager, instanceCount } = this;
49
- program.draw(arrowBlockManager, textureManager, instanceCount);
50
- }
51
- setData(rotation) {
52
- this.textureManager.setData(rotation);
53
- this.globe.DrawRender();
54
- }
55
- free() {
56
- this.arrowBlockManager.free();
57
- this.textureManager.free();
58
- globeProgramCache.releaseProgram(this.gl, Logic);
59
- }
60
- }
1
+ // this contains vao, drawCount, ArrowBufferBlock, vao,
2
+ // how to, where to set instanced parameters
3
+ // the vectorfield buffer should be managed outside, since it can be static or dynamic.
4
+
5
+ import Logic from './logic';
6
+ import { globeProgramCache } from '../programcache';
7
+ import { longlatbbox2normalbbox } from "../util";
8
+
9
+ export class ArrowField {
10
+ constructor(gl, globe, {
11
+ minLon = -180,
12
+ maxLon = 180,
13
+ minLat = -90,
14
+ maxLat = 90,
15
+ height = 0,
16
+ opacity = 1,
17
+ color = [0.04, 0.2, 0.8],
18
+ targetWidth = 100,
19
+ targetHeight = 100,
20
+ dataWidth = null,
21
+ dataHeight = null,
22
+ tailLengthRatio = 1,
23
+ wingLengthRatio = 0.5,
24
+ noDataValue = null,
25
+ // maxMagnitude = null
26
+ } = {}) {
27
+ this.gl = gl;
28
+ this.globe = globe;
29
+
30
+ this.program = globeProgramCache.getProgram(globe, Logic);
31
+ this.arrowBlockManager = this.program.getArrowBlockBufferManager();
32
+ this.instanceCount = targetWidth * targetHeight;
33
+ this.arrowBlockManager.update({ resolution: [targetWidth, targetHeight] });
34
+ this.textureManager = this.program.getTextureManager(dataWidth, dataHeight);
35
+ this.setBBox({ minLon, maxLon, minLat, maxLat });
36
+ this.update({ height, opacity, color, tailLengthRatio, wingLengthRatio, noDataValue });
37
+ }
38
+
39
+
40
+ setBBox({ minLon = -180, maxLon = 180, minLat = -90, maxLat = 90 } = {}) {
41
+ this.bbox = { minLon, maxLon, minLat, maxLat };
42
+ const { bboxSizeRad, bboxOffsetRad } = longlatbbox2normalbbox(this.bbox);
43
+ this.arrowBlockManager.update({ bboxSizeRad, bboxOffsetRad });
44
+ this.globe.DrawRender();
45
+ }
46
+
47
+
48
+ update({ height, opacity, color, resolution, tailLengthRatio, wingLengthRatio, noDataValue } = {}) {
49
+ if (resolution) {
50
+ this.instanceCount = resolution[0] * resolution[1];
51
+ }
52
+ this.arrowBlockManager.update({
53
+ color,
54
+ resolution,
55
+ height,
56
+ opacity,
57
+ tailLengthRatio,
58
+ wingLengthRatio,
59
+ noDataValue,
60
+ });
61
+ this.globe.DrawRender();
62
+ }
63
+
64
+ setTargetResolution(width, height) {
65
+ this.instanceCount = width * height;
66
+ this.arrowBlockManager.update({ resolution: [width, height] });
67
+
68
+ this.globe.DrawRender();
69
+ }
70
+
71
+ draw() {
72
+ const { program, arrowBlockManager, textureManager, instanceCount } = this;
73
+ program.draw(arrowBlockManager, textureManager, instanceCount);
74
+ }
75
+
76
+
77
+ setData(rotation) {
78
+ this.textureManager.setData(rotation);
79
+ this.globe.DrawRender();
80
+ }
81
+
82
+
83
+ free() {
84
+ this.arrowBlockManager.free();
85
+ this.textureManager.free();
86
+ globeProgramCache.releaseProgram(this.gl, Logic);
87
+ }
88
+ }
89
+
@@ -1,6 +1,7 @@
1
- import { createProgram } from "../../util/webglobjectbuilders";
2
- import { globeProgramCache } from "../programcache";
3
- import { CameraUniformBlockTotem } from "../totems";
1
+ import { createProgram } from "../../util/webglobjectbuilders";
2
+ import { globeProgramCache } from "../programcache";
3
+ import { CameraUniformBlockTotem } from "../totems";
4
+
4
5
  const arrowVertexShader = `#version 300 es
5
6
  #define R 6378.137
6
7
  #define PI 3.1415926535897932384626433832795
@@ -106,7 +107,9 @@ void main() {
106
107
  v_color = u_color;
107
108
  gl_PointSize = 4.0;
108
109
  }
109
- `;
110
+ `;
111
+
112
+
110
113
  const arrowFragmentShader = `#version 300 es
111
114
  precision highp float;
112
115
  in vec4 v_color;
@@ -115,140 +118,169 @@ out vec4 outColor;
115
118
  void main() {
116
119
  outColor = v_color;
117
120
  }
118
- `;
119
- export default class ArrowFieldLogic {
120
- constructor() {
121
- this.gl = null;
122
- this.globe = null;
123
- this.cameraUniformBlockTotem = null;
124
- this.program = null;
125
- this.cameraBlockBindingPoint = 0;
126
- this.arrayBlockBindingPoint = 1;
127
- }
128
- init(globe, gl) {
129
- this.gl = gl;
130
- this.globe = globe;
131
- this.cameraUniformBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
132
- this.program = this._createProgram();
133
- }
134
- _createProgram() {
135
- const gl = this.gl;
136
- const program = createProgram(gl, arrowVertexShader, arrowFragmentShader);
137
- const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraBlock");
138
- gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
139
- const arrowBlockIndex = gl.getUniformBlockIndex(program, "ArrowBlock");
140
- gl.uniformBlockBinding(program, arrowBlockIndex, this.arrayBlockBindingPoint);
141
- this.textureLocations = {
142
- rotationLocation: gl.getUniformLocation(program, "rotation"),
143
- };
144
- return program;
145
- }
146
- getArrowBlockBufferManager() {
147
- return new ArrowBlockBufferManager(this.gl, this.arrayBlockBindingPoint);
148
- }
149
- // initial load type is static.
150
- // after that, it is dynamic.
151
- getTextureManager(width, height) {
152
- return new TextureManager(this.gl, width, height, this.textureLocations);
153
- }
154
- draw(arrowBlockManager, textureManager, instanceCount) {
155
- const { gl, cameraBlockBindingPoint, cameraUniformBlockTotem } = this;
156
- gl.useProgram(this.program);
157
- arrowBlockManager.bind();
158
- textureManager.activate();
159
- cameraUniformBlockTotem.bind(cameraBlockBindingPoint);
160
- gl.drawArraysInstanced(gl.LINES, 0, 6, instanceCount);
161
- // gl.drawArraysInstanced(gl.POINTS, 0, 4, instanceCount);
162
- cameraUniformBlockTotem.unbind(cameraBlockBindingPoint);
163
- arrowBlockManager.unbind();
164
- }
165
- free() {
166
- const { gl, program } = this;
167
- gl.deleteProgram(program);
168
- globeProgramCache.releaseProgram(this.globe, CameraUniformBlockTotem);
169
- }
170
- }
171
- class ArrowBlockBufferManager {
172
- constructor(gl, bindingPoint) {
173
- this.gl = gl;
174
- this.bindingPoint = bindingPoint;
175
- this.ubo = gl.createBuffer();
176
- gl.bindBuffer(gl.UNIFORM_BUFFER, this.ubo);
177
- // 4 + 2+ 2 + 2 + 1 +1 +1 +1+1= 15 ~= 16
178
- gl.bufferData(gl.UNIFORM_BUFFER, 56, gl.DYNAMIC_DRAW);
179
- gl.bindBuffer(gl.UNIFORM_BUFFER, null);
180
- }
181
- update({ color = null, bboxOffsetRad = null, bboxSizeRad = null, resolution = null, tailLengthRatio = null, wingLengthRatio = null, height = null, opacity = null, noDataValue = null, } = {}) {
182
- const { gl, ubo } = this;
183
- gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
184
- if (color !== null)
185
- gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(color));
186
- if (opacity !== null)
187
- gl.bufferSubData(gl.UNIFORM_BUFFER, 12, new Float32Array([opacity]));
188
- if (bboxOffsetRad !== null)
189
- gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array(bboxOffsetRad));
190
- if (bboxSizeRad !== null)
191
- gl.bufferSubData(gl.UNIFORM_BUFFER, 24, new Float32Array(bboxSizeRad));
192
- if (resolution !== null)
193
- gl.bufferSubData(gl.UNIFORM_BUFFER, 32, new Float32Array(resolution));
194
- if (tailLengthRatio !== null)
195
- gl.bufferSubData(gl.UNIFORM_BUFFER, 40, new Float32Array([tailLengthRatio]));
196
- if (wingLengthRatio !== null)
197
- gl.bufferSubData(gl.UNIFORM_BUFFER, 44, new Float32Array([wingLengthRatio]));
198
- if (height !== null)
199
- gl.bufferSubData(gl.UNIFORM_BUFFER, 48, new Float32Array([height]));
200
- if (noDataValue !== null)
201
- gl.bufferSubData(gl.UNIFORM_BUFFER, 52, new Float32Array([noDataValue]));
202
- gl.bindBuffer(gl.UNIFORM_BUFFER, null);
203
- }
204
- bind() {
205
- const { gl, ubo, bindingPoint } = this;
206
- gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
207
- }
208
- unbind() {
209
- const { gl, bindingPoint } = this;
210
- gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
211
- }
212
- free() {
213
- const { gl, ubo } = this;
214
- gl.deleteBuffer(ubo);
215
- }
216
- }
217
- class TextureManager {
218
- constructor(gl, width, height, { rotationLocation }) {
219
- this.gl = gl;
220
- this.width = width;
221
- this.height = height;
222
- this.rotationLocation = rotationLocation;
223
- this.rotationTexture = this._createFloatTexture();
224
- }
225
- _createFloatTexture() {
226
- const { gl, width, height } = this;
227
- const texture = gl.createTexture();
228
- gl.bindTexture(gl.TEXTURE_2D, texture);
229
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
230
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
231
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, null);
232
- gl.bindTexture(gl.TEXTURE_2D, null);
233
- return texture;
234
- }
235
- setData(rotation) {
236
- const { gl, rotationTexture, width, height } = this;
237
- // gl flip y axis
238
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
239
- gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
240
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, rotation);
241
- gl.bindTexture(gl.TEXTURE_2D, null);
242
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
243
- }
244
- activate() {
245
- const { gl, rotationTexture } = this;
246
- gl.activeTexture(gl.TEXTURE0);
247
- gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
248
- gl.uniform1i(this.rotationLocation, 0);
249
- }
250
- free() {
251
- const { gl, rotationTexture } = this;
252
- gl.deleteTexture(rotationTexture);
253
- }
254
- }
121
+ `;
122
+
123
+
124
+ export default class ArrowFieldLogic {
125
+
126
+ constructor() {
127
+ this.gl = null;
128
+ this.globe = null;
129
+ this.cameraUniformBlockTotem = null;
130
+ this.program = null;
131
+ this.cameraBlockBindingPoint = 0;
132
+ this.arrayBlockBindingPoint = 1;
133
+ }
134
+
135
+ init(globe, gl) {
136
+ this.gl = gl;
137
+ this.globe = globe;
138
+ this.cameraUniformBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
139
+ this.program = this._createProgram();
140
+ }
141
+
142
+ _createProgram() {
143
+ const gl = this.gl;
144
+ const program = createProgram(gl, arrowVertexShader, arrowFragmentShader);
145
+
146
+ const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraBlock");
147
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
148
+
149
+
150
+
151
+ const arrowBlockIndex = gl.getUniformBlockIndex(program, "ArrowBlock");
152
+ gl.uniformBlockBinding(program, arrowBlockIndex, this.arrayBlockBindingPoint);
153
+
154
+ this.textureLocations = {
155
+ rotationLocation: gl.getUniformLocation(program, "rotation"),
156
+ }
157
+
158
+ return program;
159
+ }
160
+
161
+ getArrowBlockBufferManager() {
162
+ return new ArrowBlockBufferManager(this.gl, this.arrayBlockBindingPoint);
163
+ }
164
+
165
+ // initial load type is static.
166
+ // after that, it is dynamic.
167
+ getTextureManager(width, height) {
168
+ return new TextureManager(this.gl, width, height, this.textureLocations);
169
+ }
170
+
171
+ draw(arrowBlockManager, textureManager, instanceCount) {
172
+ const { gl, cameraBlockBindingPoint, cameraUniformBlockTotem } = this;
173
+ gl.useProgram(this.program);
174
+ arrowBlockManager.bind();
175
+ textureManager.activate();
176
+ cameraUniformBlockTotem.bind(cameraBlockBindingPoint);
177
+ gl.drawArraysInstanced(gl.LINES, 0, 6, instanceCount);
178
+ // gl.drawArraysInstanced(gl.POINTS, 0, 4, instanceCount);
179
+ cameraUniformBlockTotem.unbind(cameraBlockBindingPoint);
180
+ arrowBlockManager.unbind();
181
+ }
182
+
183
+ free() {
184
+ const { gl, program } = this;
185
+ gl.deleteProgram(program);
186
+ globeProgramCache.releaseProgram(this.globe, CameraUniformBlockTotem);
187
+ }
188
+ }
189
+
190
+
191
+ class ArrowBlockBufferManager {
192
+ constructor(gl, bindingPoint) {
193
+ this.gl = gl;
194
+ this.bindingPoint = bindingPoint;
195
+ this.ubo = gl.createBuffer();
196
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.ubo);
197
+ // 4 + 2+ 2 + 2 + 1 +1 +1 +1+1= 15 ~= 16
198
+ gl.bufferData(gl.UNIFORM_BUFFER, 56, gl.DYNAMIC_DRAW);
199
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
200
+ }
201
+
202
+ update({
203
+ color = null,
204
+ bboxOffsetRad = null,
205
+ bboxSizeRad = null,
206
+ resolution = null,
207
+ tailLengthRatio = null,
208
+ wingLengthRatio = null,
209
+ height = null,
210
+ opacity = null,
211
+ noDataValue = null,
212
+ } = {}) {
213
+ const { gl, ubo } = this;
214
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
215
+ if (color !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(color));
216
+ if (opacity !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 12, new Float32Array([opacity]));
217
+ if (bboxOffsetRad !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array(bboxOffsetRad));
218
+ if (bboxSizeRad !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 24, new Float32Array(bboxSizeRad));
219
+ if (resolution !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 32, new Float32Array(resolution));
220
+ if (tailLengthRatio !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 40, new Float32Array([tailLengthRatio]));
221
+ if (wingLengthRatio !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 44, new Float32Array([wingLengthRatio]));
222
+ if (height !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 48, new Float32Array([height]));
223
+ if (noDataValue !== null) gl.bufferSubData(gl.UNIFORM_BUFFER, 52, new Float32Array([noDataValue]));
224
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
225
+ }
226
+
227
+ bind() {
228
+ const { gl, ubo, bindingPoint } = this;
229
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
230
+ }
231
+
232
+ unbind() {
233
+ const { gl, bindingPoint } = this;
234
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
235
+ }
236
+
237
+ free() {
238
+ const { gl, ubo } = this;
239
+ gl.deleteBuffer(ubo);
240
+ }
241
+ }
242
+
243
+ class TextureManager {
244
+
245
+ constructor(gl, width, height, { rotationLocation }) {
246
+ this.gl = gl;
247
+ this.width = width;
248
+ this.height = height;
249
+ this.rotationLocation = rotationLocation;
250
+ this.rotationTexture = this._createFloatTexture();
251
+ }
252
+
253
+ _createFloatTexture() {
254
+ const { gl, width, height } = this;
255
+ const texture = gl.createTexture();
256
+ gl.bindTexture(gl.TEXTURE_2D, texture);
257
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
258
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
259
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, null);
260
+ gl.bindTexture(gl.TEXTURE_2D, null);
261
+ return texture;
262
+ }
263
+
264
+ setData(rotation) {
265
+ const { gl, rotationTexture, width, height } = this;
266
+ // gl flip y axis
267
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
268
+ gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
269
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, rotation);
270
+ gl.bindTexture(gl.TEXTURE_2D, null);
271
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
272
+ }
273
+
274
+ activate() {
275
+ const { gl, rotationTexture } = this;
276
+
277
+ gl.activeTexture(gl.TEXTURE0);
278
+ gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
279
+ gl.uniform1i(this.rotationLocation, 0);
280
+ }
281
+
282
+ free() {
283
+ const { gl, rotationTexture } = this;
284
+ gl.deleteTexture(rotationTexture);
285
+ }
286
+ }