@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
@@ -0,0 +1,129 @@
1
+ import { BBOXGlobeShellProgramCache } from './logic';
2
+ import { BBOXGlobeShellProgram, ShellBlockManager } from './logic';
3
+ import { Globe } from '../../../types';
4
+
5
+ interface BBOXConfig {
6
+ minLon?: number;
7
+ maxLon?: number;
8
+ minLat?: number;
9
+ maxLat?: number;
10
+ }
11
+
12
+ interface WiggleConfig {
13
+ wiggleSpeed?: number | null;
14
+ wiggleInKM?: number | null;
15
+ }
16
+
17
+ interface BBOXGlobeShellOptions {
18
+ minLon?: number;
19
+ maxLon?: number;
20
+ minLat?: number;
21
+ maxLat?: number;
22
+ height?: number;
23
+ u_opacity?: number;
24
+ wiggleInKM?: number;
25
+ wiggleSpeed?: number;
26
+ }
27
+
28
+ export class BBOXGlobeShell {
29
+ public readonly gl: WebGL2RenderingContext;
30
+ public readonly globe: Globe;
31
+ public readonly program: BBOXGlobeShellProgram;
32
+ public readonly shellBlockManager: ShellBlockManager;
33
+ public readonly update: ShellBlockManager['update'];
34
+
35
+ private innerTime: number;
36
+ private texture!: WebGLTexture;
37
+ private bbox!: Required<BBOXConfig>;
38
+ private wiggleInKM: number;
39
+ private wiggleSpeed: number;
40
+
41
+ constructor(
42
+ gl: WebGL2RenderingContext,
43
+ globe: Globe,
44
+ {
45
+ minLon = -180,
46
+ maxLon = 180,
47
+ minLat = -90,
48
+ maxLat = 90,
49
+ height = 0,
50
+ u_opacity = 1,
51
+ wiggleInKM = 0,
52
+ wiggleSpeed = 0,
53
+ }: BBOXGlobeShellOptions = {}
54
+ ) {
55
+ this.gl = gl;
56
+ this.globe = globe;
57
+ this.program = BBOXGlobeShellProgramCache.get(globe);
58
+ this.shellBlockManager = this.program.getShellBlockBufferManager();
59
+ this.update = this.shellBlockManager.update.bind(this.shellBlockManager);
60
+ this.innerTime = 0;
61
+ this.wiggleInKM = wiggleInKM;
62
+ this.wiggleSpeed = wiggleSpeed;
63
+ this.setBBox({ minLon, maxLon, minLat, maxLat });
64
+ this.setOpacity(u_opacity);
65
+ this.setHeight(height);
66
+ this.setWiggle({ wiggleSpeed, wiggleInKM });
67
+ }
68
+
69
+ public setTexture(texture: WebGLTexture): void {
70
+ this.texture = texture;
71
+ this.globe.DrawRender();
72
+ }
73
+
74
+ public setHeight(height: number): void {
75
+ this.shellBlockManager.update({ height });
76
+ this.globe.DrawRender();
77
+ }
78
+
79
+ public setOpacity(opacity: number): void {
80
+ this.shellBlockManager.update({ opacity });
81
+ this.globe.DrawRender();
82
+ }
83
+
84
+ public setBBox({ minLon = -180, maxLon = 180, minLat = -90, maxLat = 90 }: BBOXConfig = {}): void {
85
+ this.bbox = { minLon, maxLon, minLat, maxLat };
86
+ // x
87
+ const horOffset = (minLon) * Math.PI / 180;
88
+ const horSize = (maxLon - minLon) * Math.PI / 180;
89
+ // y
90
+ const vertOffset = (90 - maxLat) * Math.PI / 180;
91
+ const vertSize = (maxLat - minLat) * Math.PI / 180;
92
+
93
+
94
+ this.shellBlockManager.update(
95
+ {
96
+ gridSizeRad: [horSize, vertSize],
97
+ gridOffsetRad: [horOffset, vertOffset]
98
+ });
99
+ this.globe.DrawRender();
100
+ }
101
+
102
+ public setWiggle({ wiggleSpeed = null, wiggleInKM = null }: WiggleConfig): void {
103
+ if (wiggleInKM !== null) this.wiggleInKM = wiggleInKM;
104
+ if (wiggleSpeed !== null) this.wiggleSpeed = wiggleSpeed;
105
+ this.shellBlockManager.update({ wiggleInKM });
106
+ }
107
+
108
+ /**
109
+ * @param csRenderPass - modelView, projection, translate, mapWH, scrWH, should be set before calling this function
110
+ */
111
+ public draw(csRenderPass?: any): void {
112
+ this.program.draw(
113
+ this.texture,
114
+ this.shellBlockManager,
115
+ false,
116
+ csRenderPass
117
+ );
118
+ if (this.wiggleInKM > 0 && this.wiggleSpeed > 0) {
119
+ this.innerTime += this.wiggleSpeed;
120
+ this.shellBlockManager.update({ innerTime: this.innerTime });
121
+ this.globe.DrawRender();
122
+ }
123
+ }
124
+
125
+ public free(): void {
126
+ BBOXGlobeShellProgramCache.release(this.globe);
127
+ this.shellBlockManager.free();
128
+ }
129
+ }
@@ -0,0 +1,8 @@
1
+ import { Color } from "../types";
2
+
3
+ export type PluginStyleOptions = {
4
+ variativeColorsOn?: boolean; // If true, the color will be variative based on the circle's radius.
5
+ defaultColor: Color;
6
+ defaultHeightFromGroundIn3D?: number; // Default height from ground in 3D mode.
7
+
8
+ }
@@ -1,94 +1,126 @@
1
- import { CSRenderPassPluginKeys } from "../../constants";
2
- export class ContainerPlugin {
3
- id;
4
- container = new Map();
5
- active = true;
6
- globe = null;
7
- /**
8
- * Asagidaki degerleri false yapmak ufak performans kazanclari saglar.
9
- * Örneğin containera atılan pluginlerin sadece normal passda cizim yapmasi isteniyorsa
10
- * supportSelectedPass ve supportEditingPass false yapilabilir.
11
- */
12
- supportNormalPass = true;
13
- supportSelectedPass = true;
14
- supportEditingPass = true;
15
- constructor(id, container) {
16
- this.id = id;
17
- this.container = container;
18
- }
19
- init(globe, gl) {
20
- this.globe = globe;
21
- this.container.forEach((plugin) => {
22
- plugin.init(globe, gl);
23
- });
24
- }
25
- setActive(active) {
26
- this.active = active;
27
- this.globe?.DrawRender();
28
- }
29
- draw3D(projectionMatrix, modelViewMatrix, transPosition, csRenderPass) {
30
- if (!this.active)
31
- return;
32
- const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
33
- for (const plugin of this.container.values()) {
34
- if (plugin[passSupportKey] === false) {
35
- continue;
36
- }
37
- if (plugin.draw3D) {
38
- plugin.draw3D(projectionMatrix, modelViewMatrix, transPosition, csRenderPass);
39
- }
40
- }
41
- }
42
- draw2D(csRenderPass) {
43
- if (!this.active)
44
- return;
45
- const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
46
- for (const plugin of this.container.values()) {
47
- if (plugin[passSupportKey] === false) {
48
- continue;
49
- }
50
- if (plugin.draw2D) {
51
- plugin.draw2D(csRenderPass);
52
- }
53
- }
54
- }
55
- free() {
56
- for (const plugin of this.container.values()) {
57
- plugin.free();
58
- }
59
- this.container.clear();
60
- }
61
- _forwardMouseEvent(eventName, x, y, event, csRenderPass) {
62
- if (!this.active)
63
- return false;
64
- const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
65
- for (const plugin of this.container.values()) {
66
- if (plugin[passSupportKey] === false) {
67
- continue;
68
- }
69
- const handler = plugin[eventName];
70
- if (handler) {
71
- const result = handler.call(plugin, x, y, event, csRenderPass);
72
- if (result === true) {
73
- return true;
74
- }
75
- }
76
- }
77
- return false;
78
- }
79
- mouseClick(x, y, event, csRenderPass) {
80
- return this._forwardMouseEvent('mouseClick', x, y, event, csRenderPass);
81
- }
82
- mouseDblClick(x, y, event, csRenderPass) {
83
- return this._forwardMouseEvent('mouseDblClick', x, y, event, csRenderPass);
84
- }
85
- mouseDown(x, y, event, csRenderPass) {
86
- return this._forwardMouseEvent('mouseDown', x, y, event, csRenderPass);
87
- }
88
- mouseMove(x, y, event, csRenderPass) {
89
- return this._forwardMouseEvent('mouseMove', x, y, event, csRenderPass);
90
- }
91
- mouseUp(x, y, event, csRenderPass) {
92
- return this._forwardMouseEvent('mouseUp', x, y, event, csRenderPass);
93
- }
94
- }
1
+ import { PluginInterface, CSRenderPass, Globe } from "../../types";
2
+ import { CSRenderPassPluginKeys } from "../../constants";
3
+
4
+ export class ContainerPlugin implements PluginInterface {
5
+ id: string;
6
+ container: Map<string, PluginInterface> = new Map();
7
+ active: boolean = true;
8
+ globe: Globe | null = null;
9
+
10
+ /**
11
+ * Asagidaki degerleri false yapmak ufak performans kazanclari saglar.
12
+ * Örneğin containera atılan pluginlerin sadece normal passda cizim yapmasi isteniyorsa
13
+ * supportSelectedPass ve supportEditingPass false yapilabilir.
14
+ */
15
+ supportNormalPass: boolean = true;
16
+ supportSelectedPass: boolean = true;
17
+ supportEditingPass: boolean = true;
18
+
19
+ constructor(id: string, container: Map<string, PluginInterface>) {
20
+ this.id = id;
21
+ this.container = container;
22
+ }
23
+
24
+
25
+ init(globe: Globe, gl: WebGL2RenderingContext): void {
26
+ this.globe = globe;
27
+ this.container.forEach((plugin) => {
28
+ plugin.init(globe, gl);
29
+ }
30
+ );
31
+ }
32
+
33
+ setActive(active: boolean): void {
34
+ this.active = active;
35
+ this.globe?.DrawRender();
36
+ }
37
+
38
+
39
+ draw3D(projectionMatrix: Float32Array, modelViewMatrix: Float32Array, transPosition: { x: number; y: number; z: number; }, csRenderPass: CSRenderPass): void {
40
+ if (!this.active) return;
41
+ const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
42
+ for (const plugin of this.container.values()) {
43
+ if (plugin[passSupportKey] === false) {
44
+ continue;
45
+ }
46
+ if (plugin.draw3D) {
47
+ plugin.draw3D(projectionMatrix, modelViewMatrix, transPosition, csRenderPass);
48
+ }
49
+ }
50
+ }
51
+
52
+
53
+ draw2D(csRenderPass: CSRenderPass): void {
54
+ if (!this.active) return;
55
+ const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
56
+ for (const plugin of this.container.values()) {
57
+ if (plugin[passSupportKey] === false) {
58
+ continue;
59
+ }
60
+ if (plugin.draw2D) {
61
+ plugin.draw2D(csRenderPass);
62
+ }
63
+ }
64
+ }
65
+
66
+
67
+ free(): void {
68
+ for (const plugin of this.container.values()) {
69
+ plugin.free();
70
+ }
71
+ this.container.clear()
72
+ }
73
+
74
+
75
+ private _forwardMouseEvent(
76
+ eventName: 'mouseClick' | 'mouseDblClick' | 'mouseDown' | 'mouseMove' | 'mouseUp',
77
+ x: number,
78
+ y: number,
79
+ event: MouseEvent,
80
+ csRenderPass: CSRenderPass
81
+ ): boolean {
82
+ if (!this.active) return false;
83
+
84
+ const passSupportKey = CSRenderPassPluginKeys[csRenderPass];
85
+
86
+ for (const plugin of this.container.values()) {
87
+ if (plugin[passSupportKey] === false) {
88
+ continue;
89
+ }
90
+
91
+ const handler = plugin[eventName];
92
+ if (handler) {
93
+ const result = handler.call(plugin, x, y, event, csRenderPass);
94
+ if (result === true) {
95
+ return true;
96
+ }
97
+ }
98
+ }
99
+ return false;
100
+ }
101
+
102
+
103
+ mouseClick(x: number, y: number, event: MouseEvent, csRenderPass: CSRenderPass): boolean {
104
+ return this._forwardMouseEvent('mouseClick', x, y, event, csRenderPass);
105
+ }
106
+
107
+
108
+ mouseDblClick(x: number, y: number, event: MouseEvent, csRenderPass: CSRenderPass): boolean {
109
+ return this._forwardMouseEvent('mouseDblClick', x, y, event, csRenderPass);
110
+ }
111
+
112
+
113
+ mouseDown(x: number, y: number, event: MouseEvent, csRenderPass: CSRenderPass): boolean {
114
+ return this._forwardMouseEvent('mouseDown', x, y, event, csRenderPass);
115
+ }
116
+
117
+ mouseMove(x: number, y: number, event: MouseEvent, csRenderPass: CSRenderPass): boolean {
118
+ return this._forwardMouseEvent('mouseMove', x, y, event, csRenderPass);
119
+ }
120
+
121
+ mouseUp(x: number, y: number, event: MouseEvent, csRenderPass: CSRenderPass): boolean {
122
+ return this._forwardMouseEvent('mouseUp', x, y, event, csRenderPass);
123
+ }
124
+
125
+ }
126
+
@@ -1,80 +1,101 @@
1
- /**
2
- * object-pass-plugin.ts
3
- * Manages object pass between instances of same plugin with different configurations
4
- */
5
- import { ContainerPlugin } from "./container-plugin";
6
- export class ObjectPassContainerPlugin extends ContainerPlugin {
7
- keyMethod;
8
- insertMethod;
9
- removeMethod;
10
- objectContainer;
11
- constructor(id, container, keyMethod, insertMethod, removeMethod) {
12
- super(id, container);
13
- this.keyMethod = keyMethod;
14
- this.insertMethod = insertMethod;
15
- this.removeMethod = removeMethod;
16
- this.objectContainer = new Map();
17
- }
18
- passObjects(keys, extraParameters, toPluginId) {
19
- const toPlugin = this.container.get(toPluginId);
20
- if (!toPlugin) {
21
- throw new Error(`Plugin with id ${toPluginId} not found in plugin container`);
22
- }
23
- const itemsToPass = [];
24
- for (const key of keys) {
25
- const entry = this.objectContainer.get(key);
26
- if (!entry) {
27
- console.warn(`Object with key ${key} not found in object container`);
28
- continue;
29
- }
30
- const [pluginId, item] = entry;
31
- if (pluginId === toPluginId) {
32
- console.warn(`Object with key ${key} is already in the target plugin ${toPluginId}`);
33
- continue;
34
- }
35
- itemsToPass.push(item);
36
- const fromPlugin = this.container.get(pluginId);
37
- if (!fromPlugin) {
38
- throw new Error(`Plugin with id ${pluginId} not found in plugin container`);
39
- }
40
- entry[0] = toPluginId; // update plugin id in the container
41
- this.removeMethod(key, extraParameters, fromPlugin);
42
- }
43
- if (this.insertMethod) {
44
- this.insertMethod(itemsToPass, extraParameters, toPlugin);
45
- }
46
- }
47
- insertObjects(items, extraParameters, toPluginId) {
48
- const toPlugin = this.container.get(toPluginId);
49
- if (!toPlugin) {
50
- throw new Error(`Plugin with id ${toPluginId} not found in plugin container`);
51
- }
52
- for (const item of items) {
53
- const key = this.keyMethod(item);
54
- this.objectContainer.set(key, [toPluginId, item]);
55
- }
56
- if (this.insertMethod) {
57
- this.insertMethod(items, extraParameters, toPlugin);
58
- }
59
- }
60
- removeObjects(keys, extraParameters) {
61
- for (const key of keys) {
62
- const entry = this.objectContainer.get(key);
63
- if (!entry) {
64
- console.warn(`Object with key ${key} not found in object container`);
65
- continue;
66
- }
67
- const [pluginId, item] = entry;
68
- const fromPlugin = this.container.get(pluginId);
69
- if (!fromPlugin) {
70
- throw new Error(`Plugin with id ${pluginId} not found in plugin container`);
71
- }
72
- this.removeMethod(key, extraParameters, fromPlugin);
73
- this.objectContainer.delete(key);
74
- }
75
- }
76
- passAllObjects(extraParameters, toPluginId) {
77
- const keys = Array.from(this.objectContainer.keys());
78
- this.passObjects(keys, extraParameters, toPluginId);
79
- }
80
- }
1
+ /**
2
+ * object-pass-plugin.ts
3
+ * Manages object pass between instances of same plugin with different configurations
4
+ */
5
+
6
+ import { PluginInterface } from "../../types";
7
+ import { ContainerPlugin } from "./container-plugin";
8
+
9
+
10
+
11
+ export class ObjectPassContainerPlugin extends ContainerPlugin {
12
+ private keyMethod: (object: any) => string;
13
+ private insertMethod: (items: Array<any>, extraParameters: any, toPlugin: PluginInterface) => void;
14
+ private removeMethod: (key: string, extraParameters: any, fromPlugin: PluginInterface) => void;
15
+ private objectContainer: Map<string, [string, any]>
16
+ constructor(id: string,
17
+ container: Map<string, PluginInterface>,
18
+ keyMethod: (object: any) => string,
19
+ insertMethod: (items: Array<any>, extraParameters: any, toPlugin: PluginInterface) => void,
20
+ removeMethod: (key: string, extraParameters: any, fromPlugin: PluginInterface) => void,
21
+ ) {
22
+ super(id, container);
23
+ this.keyMethod = keyMethod;
24
+ this.insertMethod = insertMethod;
25
+ this.removeMethod = removeMethod;
26
+ this.objectContainer = new Map<string, [string, any]>();
27
+ }
28
+
29
+
30
+ passObjects(keys: string[], extraParameters: any, toPluginId: string,): void {
31
+
32
+ const toPlugin = this.container.get(toPluginId);
33
+ if (!toPlugin) {
34
+ throw new Error(`Plugin with id ${toPluginId} not found in plugin container`);
35
+ }
36
+
37
+ const itemsToPass: any[] = [];
38
+ for (const key of keys) {
39
+ const entry = this.objectContainer.get(key);
40
+ if (!entry) {
41
+ console.warn(`Object with key ${key} not found in object container`);
42
+ continue;
43
+ }
44
+ const [pluginId, item] = entry;
45
+ if (pluginId === toPluginId) {
46
+ console.warn(`Object with key ${key} is already in the target plugin ${toPluginId}`);
47
+ continue;
48
+ }
49
+ itemsToPass.push(item);
50
+ const fromPlugin = this.container.get(pluginId);
51
+ if (!fromPlugin) {
52
+ throw new Error(`Plugin with id ${pluginId} not found in plugin container`);
53
+ }
54
+ entry[0] = toPluginId; // update plugin id in the container
55
+ this.removeMethod(key, extraParameters, fromPlugin);
56
+ }
57
+
58
+ if (this.insertMethod) {
59
+ this.insertMethod(itemsToPass, extraParameters, toPlugin);
60
+ }
61
+ }
62
+
63
+
64
+ insertObjects(items: Array<any>, extraParameters: any, toPluginId: string): void {
65
+ const toPlugin = this.container.get(toPluginId);
66
+ if (!toPlugin) {
67
+ throw new Error(`Plugin with id ${toPluginId} not found in plugin container`);
68
+ }
69
+ for (const item of items) {
70
+ const key = this.keyMethod(item);
71
+ this.objectContainer.set(key, [toPluginId, item]);
72
+ }
73
+ if (this.insertMethod) {
74
+ this.insertMethod(items, extraParameters, toPlugin);
75
+ }
76
+ }
77
+
78
+
79
+ removeObjects(keys: string[], extraParameters: any): void {
80
+ for (const key of keys) {
81
+ const entry = this.objectContainer.get(key);
82
+ if (!entry) {
83
+ console.warn(`Object with key ${key} not found in object container`);
84
+ continue;
85
+ }
86
+ const [pluginId, item] = entry;
87
+ const fromPlugin = this.container.get(pluginId);
88
+ if (!fromPlugin) {
89
+ throw new Error(`Plugin with id ${pluginId} not found in plugin container`);
90
+ }
91
+ this.removeMethod(key, extraParameters, fromPlugin);
92
+ this.objectContainer.delete(key);
93
+ }
94
+ }
95
+
96
+
97
+ passAllObjects(extraParameters: any, toPluginId: string): void {
98
+ const keys = Array.from(this.objectContainer.keys());
99
+ this.passObjects(keys, extraParameters, toPluginId);
100
+ }
101
+ }
@@ -52,4 +52,4 @@ float firework(vec2 point_coord, float phase) {
52
52
  float alpha = sum * 2.5;
53
53
  return clamp(alpha, 0.0, 1.0);
54
54
  }
55
- `;
55
+ `
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  const singularity = `
2
4
 
3
5
  vec3 palette(float d){
@@ -52,5 +54,6 @@ vec4 singularity(vec2 pointCoord, float u_phase) {
52
54
  vec3 rd = normalize(uuv - ro);
53
55
 
54
56
  return rm(ro, rd);
55
- }`;
56
- export { singularity };
57
+ }`;
58
+
59
+ export { singularity };
@@ -0,0 +1,83 @@
1
+ ---
2
+ config:
3
+ theme: redux-dark
4
+ look: classic
5
+ layout: elk
6
+ id: 2d4fb98c-b970-4dea-8e25-51a30073b15d
7
+ ---
8
+ flowchart TB
9
+ subgraph subGraph0["Input Source"]
10
+ Client["Client / App Code"]
11
+ end
12
+ subgraph subGraph1["WebGL Resources"]
13
+ VAO["VAO"]
14
+ UBO["UBO Handler"]
15
+ end
16
+ subgraph subGraph2["TerrainPolygonSemiPlugin (Main Thread)"]
17
+ Init["init"]
18
+ Insert["insertBulk(polygons)"]
19
+ Delete["deleteBulk(keys)"]
20
+ SetBuffers["setBuffers(WorkerOutput)"]
21
+ Draw["draw3D()"]
22
+ subGraph1
23
+ end
24
+ subgraph subGraph3["Async Processing"]
25
+ WC["WorkerContact"]
26
+
27
+ subgraph WorkerContext ["Web Worker (worker.js)"]
28
+ OnMsg["onmessage"]
29
+
30
+ subgraph CacheSystem ["Cache System (cache.ts)"]
31
+ C_Insert["insert/remove"]
32
+ C_Tri["_entry (Triangulation)"]
33
+ C_RBush["RBush Index"]
34
+ C_Search["search(bboxes)"]
35
+ end
36
+
37
+ W_Loop["Loop Visible Triangles"]
38
+ W_Merge["Merge Buffers"]
39
+ end
40
+
41
+ Core["Tessellation Core\n(partialTessellation)"]
42
+ end
43
+ subgraph subGraph4["GPU Memory (WebGL)"]
44
+ ElemBuf["Element Array Buffer\n(Indices)"]
45
+ Vec3Buf["Vec3 Buffer\n(Positions)"]
46
+ MercBuf["Mercator XY Buffer\n(LongLats)"]
47
+ Shader["TextureDemTriangles Program"]
48
+ end
49
+ Client -- "1. Instantiate" --> Init
50
+ Init -- Create --> WC & VAO & UBO
51
+ Init -- Get Program --> Shader
52
+ Client -- "2. Input Data" --> Insert
53
+ Insert -- Delegate --> WC
54
+
55
+ %% Worker Flow
56
+ WC -- "postMessage({queue, bboxes})" --> OnMsg
57
+
58
+ %% Cache Operations
59
+ OnMsg -- "Process Queue" --> C_Insert
60
+ C_Insert -- "Triangulate" --> C_Tri
61
+ C_Tri -- "Store" --> C_RBush
62
+
63
+ %% Render Prep Flow
64
+ OnMsg -- "Update View" --> C_Search
65
+ C_Search -- "Query" --> C_RBush
66
+ C_RBush -- "Visible Triangles" --> W_Loop
67
+
68
+ %% Tessellation Loop
69
+ W_Loop -- "Meta + Zoom" --> Core
70
+ Core -- "Geometry" --> W_Loop
71
+ W_Loop -- "Accumulate" --> W_Merge
72
+
73
+ %% Return to Main
74
+ W_Merge -- "Transferables" --> WC
75
+ WC -- Callback --> SetBuffers
76
+
77
+ SetBuffers -- Upload Data --> ElemBuf & Vec3Buf & MercBuf
78
+ SetBuffers -- Request Render --> Client
79
+ Client -- "3. Render Loop" --> Draw
80
+ Draw -- Bind --> VAO
81
+ Draw -- Update --> UBO
82
+ Draw -- Execute --> Shader
83
+ Shader -- Read --> ElemBuf & Vec3Buf & MercBuf