@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,73 +1,113 @@
1
- /**
2
- * Manages PingPong Buffers.
3
- * Updated positions are written to the target buffer.
4
- * Then source and target buffers are swapped.
5
- *
6
- * update coords and draw particles programs will use this class.
7
- */
8
- export class PingPongBufferManager {
9
- constructor(gl, particleCount, inPositionLocation = 0) {
10
- this.gl = gl;
11
- this._inPositionLocation = inPositionLocation;
12
- this._buffers = [gl.createBuffer(), gl.createBuffer()];
13
- this._tfs = this._createTransformFeedbacksAndBindBuffers();
14
- this._vaos = this._createVaos();
15
- this.setParticleCount(particleCount);
16
- this._index = 0;
17
- }
18
- setParticleCount(count) {
19
- const gl = this.gl;
20
- this.length = count;
21
- gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[0]);
22
- gl.bufferData(gl.ARRAY_BUFFER, randomNumbers(this.length * 2), gl.DYNAMIC_DRAW);
23
- gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[1]);
24
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.length * 2), gl.DYNAMIC_DRAW);
25
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
26
- this._index = 0;
27
- }
28
- _createTransformFeedbacksAndBindBuffers() {
29
- const gl = this.gl;
30
- const tfs = [gl.createTransformFeedback(), gl.createTransformFeedback()];
31
- tfs.forEach((tf, idx) => {
32
- gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tf);
33
- gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this._buffers[idx]);
34
- });
35
- gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);
36
- return tfs;
37
- }
38
- _createVaos() {
39
- const gl = this.gl;
40
- const vaos = [gl.createVertexArray(), gl.createVertexArray()];
41
- vaos.forEach((vao, idx) => {
42
- gl.bindVertexArray(vao);
43
- gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[idx]);
44
- gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
45
- gl.vertexAttribDivisor(0, 1);
46
- gl.enableVertexAttribArray(this._inPositionLocation);
47
- gl.bindVertexArray(null);
48
- });
49
- return vaos;
50
- }
51
- getSourceVao() { return this._vaos[this._index]; }
52
- getTargetVao() { return this._vaos[1 - this._index]; }
53
- sourceBuffer() { return this._buffers[this._index]; }
54
- targetBuffer() { return this._buffers[1 - this._index]; }
55
- getTargetTF() { return this._tfs[1 - this._index]; }
56
- swap() { this._index = 1 - this._index; }
57
- free() {
58
- this.gl.deleteBuffer(this._buffers[0]);
59
- this.gl.deleteBuffer(this._buffers[1]);
60
- this.gl.deleteTransformFeedback(this._tfs[0]);
61
- this.gl.deleteTransformFeedback(this._tfs[1]);
62
- this.gl.deleteVertexArray(this._vaos[0]);
63
- this.gl.deleteVertexArray(this._vaos[1]);
64
- }
65
- }
66
- function randomNumbers(count) {
67
- const result = new Float32Array(count);
68
- const random = Math.random;
69
- for (let i = 0; i < count; i++) {
70
- result[i] = random() * 2 - 1;
71
- }
72
- return result;
73
- }
1
+ /**
2
+ * Manages PingPong Buffers.
3
+ * Updated positions are written to the target buffer.
4
+ * Then source and target buffers are swapped.
5
+ *
6
+ * update coords and draw particles programs will use this class.
7
+ */
8
+
9
+ export class PingPongBufferManager {
10
+ public readonly gl: WebGL2RenderingContext;
11
+ public length: number;
12
+
13
+ private readonly _inPositionLocation: number;
14
+ private readonly _buffers: [WebGLBuffer, WebGLBuffer];
15
+ private readonly _tfs: [WebGLTransformFeedback, WebGLTransformFeedback];
16
+ private readonly _vaos: [WebGLVertexArrayObject, WebGLVertexArrayObject];
17
+ private _index: number;
18
+
19
+ constructor(gl: WebGL2RenderingContext, particleCount: number, inPositionLocation: number = 0) {
20
+ this.gl = gl;
21
+ this._inPositionLocation = inPositionLocation;
22
+ this._buffers = [gl.createBuffer()!, gl.createBuffer()!];
23
+ this._tfs = this._createTransformFeedbacksAndBindBuffers();
24
+ this._vaos = this._createVaos();
25
+ this.length = 0;
26
+ this.setParticleCount(particleCount);
27
+ this._index = 0;
28
+ }
29
+
30
+ public setParticleCount(count: number): void {
31
+ const gl = this.gl;
32
+ this.length = count;
33
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[0]);
34
+ gl.bufferData(gl.ARRAY_BUFFER, randomNumbers(this.length * 2), gl.DYNAMIC_DRAW);
35
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[1]);
36
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.length * 2), gl.DYNAMIC_DRAW);
37
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
38
+ this._index = 0;
39
+ }
40
+
41
+ private _createTransformFeedbacksAndBindBuffers(): [WebGLTransformFeedback, WebGLTransformFeedback] {
42
+ const gl = this.gl;
43
+ const tfs: [WebGLTransformFeedback, WebGLTransformFeedback] = [
44
+ gl.createTransformFeedback()!,
45
+ gl.createTransformFeedback()!
46
+ ];
47
+ tfs.forEach((tf, idx) => {
48
+ gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tf);
49
+ gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this._buffers[idx]);
50
+ });
51
+ gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);
52
+ return tfs;
53
+ }
54
+
55
+ private _createVaos(): [WebGLVertexArrayObject, WebGLVertexArrayObject] {
56
+ const gl = this.gl;
57
+ const vaos: [WebGLVertexArrayObject, WebGLVertexArrayObject] = [
58
+ gl.createVertexArray()!,
59
+ gl.createVertexArray()!
60
+ ];
61
+ vaos.forEach((vao, idx) => {
62
+ gl.bindVertexArray(vao);
63
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._buffers[idx]);
64
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
65
+ gl.vertexAttribDivisor(0, 1);
66
+ gl.enableVertexAttribArray(this._inPositionLocation);
67
+ gl.bindVertexArray(null);
68
+ });
69
+ return vaos;
70
+ }
71
+
72
+ public getSourceVao(): WebGLVertexArrayObject {
73
+ return this._vaos[this._index];
74
+ }
75
+
76
+ public getTargetVao(): WebGLVertexArrayObject {
77
+ return this._vaos[1 - this._index];
78
+ }
79
+
80
+ public sourceBuffer(): WebGLBuffer {
81
+ return this._buffers[this._index];
82
+ }
83
+
84
+ public targetBuffer(): WebGLBuffer {
85
+ return this._buffers[1 - this._index];
86
+ }
87
+
88
+ public getTargetTF(): WebGLTransformFeedback {
89
+ return this._tfs[1 - this._index];
90
+ }
91
+
92
+ public swap(): void {
93
+ this._index = 1 - this._index;
94
+ }
95
+
96
+ public free(): void {
97
+ this.gl.deleteBuffer(this._buffers[0]);
98
+ this.gl.deleteBuffer(this._buffers[1]);
99
+ this.gl.deleteTransformFeedback(this._tfs[0]);
100
+ this.gl.deleteTransformFeedback(this._tfs[1]);
101
+ this.gl.deleteVertexArray(this._vaos[0]);
102
+ this.gl.deleteVertexArray(this._vaos[1]);
103
+ }
104
+ }
105
+
106
+ function randomNumbers(count: number): Float32Array {
107
+ const result = new Float32Array(count);
108
+ const random = Math.random;
109
+ for (let i = 0; i < count; i++) {
110
+ result[i] = random() * 2 - 1;
111
+ }
112
+ return result;
113
+ }
package/publish.bat ADDED
@@ -0,0 +1,62 @@
1
+ @echo off
2
+ REM Define the source and destination directories
3
+ set SOURCE_DIR=D:\webglobeplugins\webglobePlugin\src\webglobeplugins
4
+ set DEST_DIR=D:\webglobeplugins\npmpub\webglobeplugins
5
+
6
+ REM --- Start: Prepare and Compile Package for Publishing ---
7
+
8
+ REM Check if the destination directory exists and clean it if it does
9
+ if exist "%DEST_DIR%" (
10
+ echo Cleaning temporary publication directory: "%DEST_DIR%"
11
+ rd /s /q "%DEST_DIR%"
12
+ )
13
+
14
+ REM Create the temporary destination directory if it doesn't exist
15
+ if not exist "%DEST_DIR%" (
16
+ echo Creating temporary publication directory: "%DEST_DIR%"
17
+ mkdir "%DEST_DIR%"
18
+ )
19
+
20
+ REM Copy the entire package folder (including package.json, tsconfig.json, source files)
21
+ REM to the temporary destination. /E copies directories and subdirectories, /I assumes DEST_DIR is a directory.
22
+ REM /Y suppresses prompts to confirm overwriting existing files.
23
+ echo Copying source files to temporary publication directory...
24
+ xcopy /E /I /Y "%SOURCE_DIR%" "%DEST_DIR%\"
25
+
26
+ REM Change to the temporary publication directory (this is the package root)
27
+ cd /d "%DEST_DIR%"
28
+
29
+ REM Install dependencies (this is crucial for TypeScript to be available for compilation)
30
+ REM Using 'call' ensures that control returns to the batch script after npm finishes.
31
+ echo Installing package dependencies for compilation...
32
+ call npm install
33
+
34
+ REM Compile TypeScript files into JavaScript
35
+ REM This assumes you have a "build" script in your package.json (e.g., "build": "tsc")
36
+ REM The compiled output (e.g., JS files) will typically go into a 'dist' folder inside %DEST_DIR%.
37
+ echo Compiling TypeScript files...
38
+ call npm run build
39
+ REM If there is an error during the build, exit the script
40
+ if %errorlevel% neq 0 (
41
+ echo Build failed. Exiting script.
42
+ exit /b %errorlevel%
43
+ )
44
+ REM --- End: Prepare and Compile Package for Publishing ---
45
+
46
+ REM COPY PACKAGE JSON TO DIST
47
+ xcopy /Y "%DEST_DIR%\package.json" "%DEST_DIR%\dist\"
48
+
49
+
50
+
51
+ REM Run npm publish from the package root directory (%DEST_DIR%).
52
+ REM Because package.json's "files" is set to ["dist"], only the compiled output will be published.
53
+ echo Running npm publish from the compiled package root...
54
+ cd /d "%DEST_DIR%\dist"
55
+ npm publish
56
+
57
+ REM Return to the original directory
58
+ cd /d "%SOURCE_DIR%"
59
+
60
+ echo Folder copied, compiled, and npm publish executed successfully.
61
+
62
+ set /p exitkey= "Press any key to continue..."
@@ -1,114 +1,154 @@
1
- const radian = (degree) => degree * Math.PI / 180;
2
- const calculateStartAngle = (long, lat, endLong, endLat) => {
3
- const dLat = (integralSec(endLat) - integralSec(lat)); // Because lines are strectes toward poles.
4
- const dLong = endLong - long;
5
- let angle = -Math.atan2(dLat, dLong);
6
- return angle;
7
- };
8
- const integralSec = (angle) => {
9
- return Math.log(Math.tan(angle / 2 + Math.PI / 4));
10
- };
11
- export const flatLinesInputAdapter = (bearingLine) => {
12
- const { long, lat, endLong, endLat, rgba } = bearingLine;
13
- return {
14
- key: bearingLine.key,
15
- start: [long, lat],
16
- end: [endLong, endLat],
17
- color: rgba,
18
- };
19
- };
20
- export const flatLinesBearingInputAdapter = (bearingLine) => {
21
- const { long, lat, rgba, key, bearingLat = 0, bearingLong = 0 } = bearingLine;
22
- return {
23
- key: key,
24
- start: [long, lat],
25
- end: [bearingLong, bearingLat],
26
- color: rgba,
27
- };
28
- };
29
- export const bearingLineToCircleInputAdapter = (globe) => (bearingLine) => {
30
- const { long, lat, endLong, endLat, rgba, altitude = 0, msl = null } = bearingLine;
31
- if (bearingLine.radius === undefined || bearingLine.radius === null) {
32
- const radius = globe.Math.GetDist2D(long, lat, endLong, endLat);
33
- bearingLine.radius = radius;
34
- }
35
- return {
36
- key: bearingLine.key,
37
- center: [long, lat],
38
- radius: bearingLine.radius,
39
- height: altitude,
40
- color: rgba,
41
- msl
42
- };
43
- };
44
- export const bearingLineToArcInputAdapter = (bearingLine) => {
45
- const { long, lat, endLong, endLat, rgba, altitude = 0, msl } = bearingLine;
46
- return {
47
- key: bearingLine.key,
48
- start: [long, lat],
49
- end: [endLong, endLat],
50
- height: altitude,
51
- color: rgba,
52
- msl: msl
53
- };
54
- };
55
- export const bearingLineToBearingArcInputAdapter = (globe, bearingLine) => {
56
- const { long, lat, bearingAngle, rgba, altitude = 0, key, msl } = bearingLine;
57
- if (bearingLine.radius === undefined || bearingLine.radius === null) {
58
- throw new Error("Bearing line radius is not defined. Please calculate it before converting to ArcInput.");
59
- }
60
- const { long: endLong, lat: endLat } = globe.Math.FindPointByPolar(long, lat, bearingLine.radius, bearingAngle);
61
- bearingLine.bearingLong = endLong;
62
- bearingLine.bearingLat = endLat;
63
- return {
64
- key: key,
65
- start: [long, lat],
66
- end: [endLong, endLat],
67
- height: altitude,
68
- color: rgba,
69
- msl,
70
- };
71
- };
72
- export const bearingLineToPieceOfPieInputAdapter = (globe, item) => {
73
- const lat = radian(item.lat);
74
- const long = radian(item.long);
75
- const endLat = radian(item.endLat);
76
- const endLong = radian(item.endLong);
77
- const altitude = (item.altitude ?? 0);
78
- const radius = item.radius ? item.radius * 0.2 : 10;
79
- // @ts-ignore
80
- const { long: bearingLong, lat: bearingLat } = globe.Math.FindPointByPolar(item.long, item.lat, item.radius, item.bearingAngle);
81
- const startAngle2d = calculateStartAngle(long, lat, endLong, endLat);
82
- const bearingAngle2d = calculateStartAngle(long, lat, radian(bearingLong), radian(bearingLat));
83
- let tailAngle2d = bearingAngle2d - startAngle2d;
84
- if (tailAngle2d > 0) {
85
- tailAngle2d -= Math.PI * 2;
86
- }
87
- const bearingAngle = radian(item.bearingAngle - 90);
88
- const startAngleReal = globe.Math.GetAzimuthAngle(item.long, item.lat, item.endLong, item.endLat); //startAngle2d * 180 / Math.PI;
89
- const startAngle3d = radian(startAngleReal - 90);
90
- let tailAngle3d = bearingAngle - startAngle3d;
91
- if (tailAngle3d > 0) {
92
- tailAngle3d -= Math.PI * 2;
93
- }
94
- return {
95
- key: item.key,
96
- center: [item.long, item.lat],
97
- radius: radius,
98
- altitude: altitude + 230,
99
- color: item.rgba,
100
- startAngle2D: startAngle2d * 180 / Math.PI,
101
- coverAngle2D: tailAngle2d * 180 / Math.PI,
102
- startAngle3D: startAngle3d * 180 / Math.PI,
103
- coverAngle3D: tailAngle3d * 180 / Math.PI,
104
- fillingMode: item.pieFillingMode ?? 1,
105
- };
106
- };
107
- export const pieceOfPieOpacityAdaptor = (lod, tiltAngle) => {
108
- const lodThreshold = 7.5;
109
- const lodFactor = Math.exp(-Math.max(0, lod - lodThreshold));
110
- tiltAngle += 5;
111
- const tiltFactor = Math.min(1, 1 / Math.tan(radian(tiltAngle)));
112
- const opacity = Math.max(Math.min(lodFactor * tiltFactor, 1), 0);
113
- return opacity < 0.1 ? 0 : opacity; // Ensure opacity is not less than 0.1
114
- };
1
+ import { ImplicitBearingLineInput } from './types';
2
+
3
+
4
+ import { LineInput } from "../../semiplugins/lightweight/line-plugin";
5
+ import { PieceOfPiePluginInput } from "../../semiplugins/lightweight/piece-of-pie-plugin";
6
+ import { CircleInput } from "../../semiplugins/shape-on-terrain/circle-plugin";
7
+ import { ArcInput } from "../../semiplugins/shape-on-terrain/arc-plugin";
8
+ import { Globe, Color } from "../../types";
9
+
10
+
11
+ const radian = (degree: number) => degree * Math.PI / 180;
12
+
13
+ const calculateStartAngle = (long: number, lat: number, endLong: number, endLat: number) => {
14
+ const dLat = (integralSec(endLat) - integralSec(lat)); // Because lines are strectes toward poles.
15
+ const dLong = endLong - long;
16
+ let angle = -Math.atan2(dLat, dLong);
17
+ return angle;
18
+ }
19
+
20
+ const integralSec = (angle: number) => {
21
+ return Math.log(Math.tan(angle / 2 + Math.PI / 4));
22
+ }
23
+
24
+
25
+ export const flatLinesInputAdapter = (bearingLine: ImplicitBearingLineInput): LineInput => {
26
+ const { long, lat, endLong, endLat, rgba } = bearingLine;
27
+ return {
28
+ key: bearingLine.key,
29
+ start: [long, lat],
30
+ end: [endLong, endLat],
31
+ color: rgba as Color,
32
+ };
33
+ }
34
+
35
+
36
+
37
+ export const flatLinesBearingInputAdapter = (bearingLine: ImplicitBearingLineInput): LineInput => {
38
+ const { long, lat, rgba, key, bearingLat = 0, bearingLong = 0 } = bearingLine;
39
+ return {
40
+ key: key,
41
+ start: [long, lat],
42
+ end: [bearingLong, bearingLat],
43
+ color: rgba as Color,
44
+ };
45
+ }
46
+
47
+
48
+
49
+ export const bearingLineToCircleInputAdapter = (globe: Globe) => (bearingLine: ImplicitBearingLineInput): CircleInput => {
50
+ const { long, lat, endLong, endLat, rgba, altitude = 0,
51
+ msl = null } = bearingLine;
52
+
53
+ if (bearingLine.radius === undefined || bearingLine.radius === null) {
54
+ const radius = globe.Math.GetDist2D(long, lat, endLong, endLat);
55
+ bearingLine.radius = radius;
56
+ }
57
+ return {
58
+ key: bearingLine.key,
59
+ center: [long, lat],
60
+ radius: bearingLine.radius,
61
+ height: altitude,
62
+ color: rgba,
63
+ msl
64
+ };
65
+ }
66
+
67
+
68
+
69
+ export const bearingLineToArcInputAdapter = (bearingLine: ImplicitBearingLineInput): ArcInput => {
70
+ const { long, lat, endLong, endLat, rgba, altitude = 0, msl } = bearingLine;
71
+ return {
72
+ key: bearingLine.key,
73
+ start: [long, lat],
74
+ end: [endLong, endLat],
75
+ height: altitude,
76
+ color: rgba as Color,
77
+ msl: msl
78
+ };
79
+ }
80
+
81
+
82
+
83
+ export const bearingLineToBearingArcInputAdapter = (globe: Globe, bearingLine: ImplicitBearingLineInput): ArcInput => {
84
+ const { long, lat, bearingAngle, rgba, altitude = 0, key, msl } = bearingLine;
85
+
86
+ if (bearingLine.radius === undefined || bearingLine.radius === null) {
87
+ throw new Error("Bearing line radius is not defined. Please calculate it before converting to ArcInput.");
88
+ }
89
+
90
+ const { long: endLong, lat: endLat } = globe.Math.FindPointByPolar(long, lat, bearingLine.radius, bearingAngle);
91
+
92
+ bearingLine.bearingLong = endLong;
93
+ bearingLine.bearingLat = endLat;
94
+
95
+ return {
96
+ key: key,
97
+ start: [long, lat],
98
+ end: [endLong, endLat],
99
+ height: altitude,
100
+ color: rgba as Color,
101
+ msl,
102
+ };
103
+ }
104
+
105
+
106
+
107
+ export const bearingLineToPieceOfPieInputAdapter = (globe: Globe, item: ImplicitBearingLineInput): PieceOfPiePluginInput => {
108
+ const lat = radian(item.lat)
109
+ const long = radian(item.long)
110
+ const endLat = radian(item.endLat)
111
+ const endLong = radian(item.endLong)
112
+ const altitude = (item.altitude ?? 0);
113
+ const radius = item.radius ? item.radius * 0.2 : 10;
114
+ // @ts-ignore
115
+ const { long: bearingLong, lat: bearingLat } = globe.Math.FindPointByPolar(item.long, item.lat, item.radius, item.bearingAngle)
116
+ const startAngle2d = calculateStartAngle(long, lat, endLong, endLat);
117
+ const bearingAngle2d = calculateStartAngle(long, lat, radian(bearingLong), radian(bearingLat))
118
+ let tailAngle2d = bearingAngle2d - startAngle2d;
119
+ if (tailAngle2d > 0) {
120
+ tailAngle2d -= Math.PI * 2;
121
+ }
122
+ const bearingAngle = radian(item.bearingAngle - 90);
123
+ const startAngleReal = globe.Math.GetAzimuthAngle(item.long, item.lat, item.endLong, item.endLat) //startAngle2d * 180 / Math.PI;
124
+ const startAngle3d = radian(startAngleReal - 90);
125
+ let tailAngle3d = bearingAngle - startAngle3d;
126
+ if (tailAngle3d > 0) {
127
+ tailAngle3d -= Math.PI * 2;
128
+ }
129
+ return {
130
+ key: item.key,
131
+ center: [item.long, item.lat],
132
+ radius: radius,
133
+ altitude: altitude + 230,
134
+ color: item.rgba,
135
+ startAngle2D: startAngle2d * 180 / Math.PI,
136
+ coverAngle2D: tailAngle2d * 180 / Math.PI,
137
+ startAngle3D: startAngle3d * 180 / Math.PI,
138
+ coverAngle3D: tailAngle3d * 180 / Math.PI,
139
+ fillingMode: item.pieFillingMode ?? 1,
140
+ };
141
+ }
142
+
143
+
144
+
145
+ export const pieceOfPieOpacityAdaptor = (lod: number, tiltAngle: number): number => {
146
+ const lodThreshold = 7.5;
147
+ const lodFactor = Math.exp(-Math.max(0, lod - lodThreshold));
148
+ tiltAngle += 5;
149
+ const tiltFactor = Math.min(1, 1 / Math.tan(radian(tiltAngle)));
150
+ const opacity = Math.max(Math.min(lodFactor * tiltFactor, 1), 0);
151
+ return opacity < 0.1 ? 0 : opacity; // Ensure opacity is not less than 0.1
152
+ }
153
+
154
+