@pirireis/webglobeplugins 1.0.2 → 1.0.3

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 (259) hide show
  1. package/Math/{angle-calculation.ts → angle-calculation.js} +14 -18
  2. package/Math/{arc-cdf-points.ts → arc-cdf-points.js} +272 -329
  3. package/Math/{arc-generate-points-exponantial.ts → arc-generate-points-exponantial.js} +254 -299
  4. package/Math/{arc.ts → arc.js} +292 -421
  5. package/Math/bounds/line-bbox.js +186 -225
  6. package/Math/{circle-cdf-points.ts → circle-cdf-points.js} +78 -143
  7. package/Math/{circle.ts → circle.js} +33 -49
  8. package/Math/{constants.ts → constants.js} +4 -12
  9. package/Math/contour/{quadtreecontours.ts → quadtreecontours.js} +300 -371
  10. package/Math/contour/quadtreecontours1.js +298 -336
  11. package/Math/{finite-line-2d.ts → finite-line-2d.js} +58 -68
  12. package/Math/{haversine.ts → haversine.js} +22 -33
  13. package/Math/index.js +1 -0
  14. package/Math/juction/{arc-plane.ts → arc-plane.js} +143 -203
  15. package/Math/juction/{line-sphere.ts → line-sphere.js} +22 -32
  16. package/Math/juction/{plane-plane.ts → plane-plane.js} +53 -62
  17. package/Math/{line.ts → line.js} +52 -84
  18. package/Math/matrix4.js +1 -0
  19. package/Math/{methods.ts → methods.js} +126 -182
  20. package/Math/{plane.ts → plane.js} +56 -92
  21. package/Math/{quaternion.ts → quaternion.js} +106 -128
  22. package/Math/templete-shapes/{grid-visually-equal.ts → grid-visually-equal.js} +65 -118
  23. package/Math/tessellation/constants.js +1 -0
  24. package/Math/tessellation/{methods.ts → methods.js} +49 -79
  25. package/Math/tessellation/{nearest-value-padding.ts → nearest-value-padding.js} +112 -147
  26. package/Math/tessellation/{spherical-triangle-area.ts → spherical-triangle-area.js} +99 -127
  27. package/Math/tessellation/{tile-merger.ts → tile-merger.js} +429 -578
  28. package/Math/tessellation/{triangle-tessellation.ts → triangle-tessellation.js} +386 -533
  29. package/Math/tessellation/types.js +1 -0
  30. package/Math/types.js +1 -0
  31. package/Math/utils.js +2 -3
  32. package/Math/{vec3.ts → vec3.js} +155 -227
  33. package/Math/{xyz-tile.ts → xyz-tile.js} +18 -26
  34. package/algorithms/search-binary.js +16 -14
  35. package/altitude-locator/adaptors.js +1 -0
  36. package/altitude-locator/keymethod.js +1 -0
  37. package/altitude-locator/plugin.js +344 -445
  38. package/altitude-locator/types.js +21 -26
  39. package/compass-rose/compass-rose-padding-flat.js +230 -274
  40. package/compass-rose/{compass-text-writer.ts → compass-text-writer.js} +155 -210
  41. package/compass-rose/index.js +3 -3
  42. package/{constants.ts → constants.js} +6 -8
  43. package/heatwave/datamanager.js +149 -168
  44. package/heatwave/heatwave.js +206 -261
  45. package/heatwave/index.js +5 -5
  46. package/heatwave/isobar.js +303 -340
  47. package/heatwave/{texture-point-sampler.ts → texture-point-sampler.js} +187 -220
  48. package/investigation-tools/draw/tiles/adapters.js +67 -0
  49. package/investigation-tools/draw/tiles/{tiles.ts → tiles.js} +128 -162
  50. package/jest.config.js +7 -6
  51. package/package.json +1 -1
  52. package/pin/pin-object-array1.js +300 -381
  53. package/pin/pin-point-totem1.js +60 -77
  54. package/programs/arrowfield/arrow-field.js +60 -89
  55. package/programs/arrowfield/logic.js +141 -173
  56. package/programs/data2legend/density-to-legend.js +68 -86
  57. package/programs/data2legend/point-to-density-texture.js +67 -84
  58. package/programs/float2legendwithratio/index.js +2 -3
  59. package/programs/float2legendwithratio/logic.js +118 -144
  60. package/programs/float2legendwithratio/object.js +104 -141
  61. package/programs/helpers/blender.js +58 -73
  62. package/programs/helpers/{fadeaway.ts → fadeaway.js} +60 -73
  63. package/programs/index.js +20 -19
  64. package/programs/line-on-globe/circle-accurate-3d.js +85 -112
  65. package/programs/line-on-globe/circle-accurate-flat.js +148 -200
  66. package/programs/line-on-globe/degree-padding-around-circle-3d.js +102 -134
  67. package/programs/line-on-globe/index.js +1 -0
  68. package/programs/line-on-globe/lines-color-instanced-flat.js +80 -99
  69. package/programs/line-on-globe/linestrip/data.js +4 -0
  70. package/programs/line-on-globe/linestrip/{linestrip.ts → linestrip.js} +93 -152
  71. package/programs/line-on-globe/{naive-accurate-flexible.ts → naive-accurate-flexible.js} +126 -175
  72. package/programs/line-on-globe/util.js +5 -8
  73. package/programs/picking/pickable-polygon-renderer.js +98 -129
  74. package/programs/picking/pickable-renderer.js +98 -130
  75. package/programs/point-on-globe/element-globe-surface-glow.js +93 -122
  76. package/programs/point-on-globe/element-point-glow.js +80 -114
  77. package/programs/point-on-globe/square-pixel-point.js +121 -139
  78. package/programs/polygon-on-globe/{texture-dem-triangles.ts → texture-dem-triangles.js} +163 -207
  79. package/programs/{programcache.ts → programcache.js} +126 -134
  80. package/programs/rings/index.js +1 -1
  81. package/programs/rings/partial-ring/{piece-of-pie.ts → piece-of-pie.js} +152 -222
  82. package/programs/totems/camera-totem-attactment-interface.js +1 -0
  83. package/programs/totems/{camerauniformblock.ts → camerauniformblock.js} +225 -310
  84. package/programs/totems/{canvas-webglobe-info.ts → canvas-webglobe-info.js} +132 -147
  85. package/programs/totems/{dem-textures-manager.ts → dem-textures-manager.js} +257 -360
  86. package/programs/totems/{globe-changes.ts → globe-changes.js} +59 -79
  87. package/programs/totems/gpu-selection-uniform-block.js +99 -127
  88. package/programs/totems/{index.ts → index.js} +2 -2
  89. package/programs/two-d/pixel-padding-for-compass.js +87 -101
  90. package/programs/util.js +14 -19
  91. package/programs/vectorfields/logics/{constants.ts → constants.js} +4 -5
  92. package/programs/vectorfields/logics/{drawrectangleparticles.ts → drawrectangleparticles.js} +80 -115
  93. package/programs/vectorfields/logics/index.js +2 -4
  94. package/programs/vectorfields/logics/particle-ubo.js +16 -0
  95. package/programs/vectorfields/logics/{pixelbased.ts → pixelbased.js} +86 -115
  96. package/programs/vectorfields/logics/ubo.js +51 -57
  97. package/programs/vectorfields/{pingpongbuffermanager.ts → pingpongbuffermanager.js} +99 -113
  98. package/range-tools-on-terrain/bearing-line/{adapters.ts → adapters.js} +114 -154
  99. package/range-tools-on-terrain/bearing-line/{plugin.ts → plugin.js} +457 -569
  100. package/range-tools-on-terrain/bearing-line/types.js +1 -0
  101. package/range-tools-on-terrain/circle-line-chain/{adapters.ts → adapters.js} +85 -104
  102. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.ts → chain-list-map.js} +382 -446
  103. package/range-tools-on-terrain/circle-line-chain/{plugin.ts → plugin.js} +464 -607
  104. package/range-tools-on-terrain/circle-line-chain/types.js +1 -0
  105. package/range-tools-on-terrain/range-ring/{adapters.ts → adapters.js} +93 -114
  106. package/range-tools-on-terrain/range-ring/{enum.ts → enum.js} +2 -2
  107. package/range-tools-on-terrain/range-ring/{plugin.ts → plugin.js} +377 -444
  108. package/range-tools-on-terrain/range-ring/rangeringangletext.js +331 -0
  109. package/range-tools-on-terrain/range-ring/types.js +9 -0
  110. package/semiplugins/interface.js +1 -0
  111. package/semiplugins/lightweight/{line-plugin.ts → line-plugin.js} +221 -342
  112. package/semiplugins/lightweight/{piece-of-pie-plugin.ts → piece-of-pie-plugin.js} +200 -275
  113. package/semiplugins/shape-on-terrain/{arc-plugin.ts → arc-plugin.js} +481 -616
  114. package/semiplugins/shape-on-terrain/{circle-plugin.ts → circle-plugin.js} +444 -588
  115. package/semiplugins/shape-on-terrain/{padding-1-degree.ts → padding-1-degree.js} +539 -713
  116. package/semiplugins/shape-on-terrain/terrain-polygon/{adapters.ts → adapters.js} +55 -69
  117. package/semiplugins/shape-on-terrain/terrain-polygon/data/{cache.ts → cache.js} +102 -149
  118. package/semiplugins/shape-on-terrain/terrain-polygon/data/{index-polygon-map.ts → index-polygon-map.js} +45 -58
  119. package/semiplugins/shape-on-terrain/terrain-polygon/data/{manager.ts → manager.js} +4 -4
  120. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +177 -196
  121. package/semiplugins/shape-on-terrain/terrain-polygon/data/{polygon-to-triangles.ts → polygon-to-triangles.js} +100 -144
  122. package/semiplugins/shape-on-terrain/terrain-polygon/data/{random.ts → random.js} +121 -165
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.js +1 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/{worker-contact.ts → worker-contact.js} +63 -81
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +125 -146
  126. package/semiplugins/shape-on-terrain/terrain-polygon/{terrain-polygon.ts → terrain-polygon.js} +219 -265
  127. package/semiplugins/shape-on-terrain/terrain-polygon/types.js +8 -0
  128. package/semiplugins/shell/bbox-renderer/index.js +2 -0
  129. package/semiplugins/shell/bbox-renderer/{logic.ts → logic.js} +209 -273
  130. package/semiplugins/shell/bbox-renderer/object.js +75 -0
  131. package/semiplugins/type.js +1 -0
  132. package/semiplugins/utility/{container-plugin.ts → container-plugin.js} +94 -126
  133. package/semiplugins/utility/{object-pass-container-plugin.ts → object-pass-container-plugin.js} +80 -101
  134. package/shaders/fragment-toy/firework.js +1 -1
  135. package/shaders/fragment-toy/singularity.js +2 -5
  136. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -78
  137. package/tracks/point-heat-map/index.js +1 -0
  138. package/tracks/point-heat-map/plugin-webworker.js +121 -148
  139. package/tracks/point-heat-map/point-to-heat-map-flow.js +121 -150
  140. package/tracks/point-tracks/key-methods.js +2 -3
  141. package/tracks/point-tracks/plugin.js +401 -487
  142. package/tracks/timetracks/adaptors-line-strip.js +65 -79
  143. package/tracks/timetracks/plugin-line-strip.js +240 -295
  144. package/tracks/timetracks/program-line-strip.js +411 -495
  145. package/tracks/timetracks/programpoint-line-strip.js +109 -137
  146. package/types.js +19 -0
  147. package/util/account/bufferoffsetmanager.js +176 -209
  148. package/util/account/create-buffermap-orchastration.js +39 -0
  149. package/util/account/index.js +3 -6
  150. package/util/account/single-attribute-buffer-management/{buffer-manager.ts → buffer-manager.js} +119 -151
  151. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.ts → buffer-orchestrator.js} +212 -238
  152. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.ts → buffer-orchestrator1.js} +159 -184
  153. package/util/account/single-attribute-buffer-management/{index.ts → index.js} +4 -11
  154. package/util/account/single-attribute-buffer-management/{object-store.ts → object-store.js} +55 -76
  155. package/util/account/single-attribute-buffer-management/types.js +1 -0
  156. package/util/account/util.js +18 -22
  157. package/util/algorithms/index.js +1 -0
  158. package/util/algorithms/search-binary.js +25 -26
  159. package/util/build-strategy/{static-dynamic.ts → static-dynamic.js} +41 -50
  160. package/util/check/index.js +1 -0
  161. package/util/check/typecheck.js +66 -0
  162. package/util/{frame-counter-trigger.ts → frame-counter-trigger.js} +84 -99
  163. package/util/geometry/{index.ts → index.js} +121 -155
  164. package/util/gl-util/buffer/{attribute-loader.ts → attribute-loader.js} +62 -84
  165. package/util/gl-util/buffer/{index.ts → index.js} +3 -6
  166. package/util/gl-util/draw-options/{methods.ts → methods.js} +32 -47
  167. package/util/gl-util/uniform-block/{manager.ts → manager.js} +200 -232
  168. package/util/{globe-default-gl-states.ts → globe-default-gl-states.js} +4 -5
  169. package/util/{helper-methods.ts → helper-methods.js} +8 -9
  170. package/util/index.js +10 -9
  171. package/util/interpolation/index.js +1 -0
  172. package/util/interpolation/timetrack/index.js +2 -9
  173. package/util/interpolation/timetrack/timetrack-interpolator.js +79 -94
  174. package/util/interpolation/timetrack/web-worker.js +46 -51
  175. package/util/picking/{fence.ts → fence.js} +43 -47
  176. package/util/picking/{picker-displayer.ts → picker-displayer.js} +176 -226
  177. package/util/programs/draw-from-pixel-coords.js +164 -201
  178. package/util/programs/{draw-texture-on-canvas.ts → draw-texture-on-canvas.js} +69 -91
  179. package/util/programs/supersampletotextures.js +97 -130
  180. package/util/programs/texturetoglobe.js +128 -153
  181. package/util/shaderfunctions/{geometrytransformations.ts → geometrytransformations.js} +44 -106
  182. package/util/shaderfunctions/index.js +2 -2
  183. package/util/shaderfunctions/nodata.js +2 -4
  184. package/util/shaderfunctions/noisefunctions.js +7 -10
  185. package/util/{webglobjectbuilders.ts → webglobjectbuilders.js} +358 -446
  186. package/vectorfield/arrowfield/adaptor.js +11 -11
  187. package/vectorfield/arrowfield/index.js +3 -3
  188. package/vectorfield/arrowfield/plugin.js +83 -128
  189. package/vectorfield/waveparticles/adaptor.js +15 -16
  190. package/vectorfield/waveparticles/index.js +3 -3
  191. package/vectorfield/waveparticles/{plugin.ts → plugin.js} +415 -506
  192. package/vectorfield/wind/adapters/{image-to-fields.ts → image-to-fields.js} +61 -74
  193. package/vectorfield/wind/adapters/types.js +1 -0
  194. package/vectorfield/wind/{imagetovectorfieldandmagnitude.ts → imagetovectorfieldandmagnitude.js} +53 -78
  195. package/vectorfield/wind/index.js +5 -5
  196. package/vectorfield/wind/{plugin-persistant copy.ts → plugin-persistant copy.js } +364 -461
  197. package/vectorfield/wind/{plugin-persistant.ts → plugin-persistant.js} +375 -483
  198. package/vectorfield/wind/plugin.js +685 -883
  199. package/vectorfield/wind/vectorfieldimage.js +23 -27
  200. package/write-text/{context-text-bulk.ts → context-text-bulk.js} +200 -285
  201. package/write-text/context-text3.js +167 -0
  202. package/write-text/{context-text4.ts → context-text4.js} +146 -231
  203. package/write-text/context-textDELETE.js +94 -125
  204. package/write-text/objectarraylabels/{index.ts → index.js} +2 -2
  205. package/write-text/objectarraylabels/objectarraylabels.js +200 -247
  206. package/Math/matrix4.ts +0 -0
  207. package/Math/mesh/mapbox-delaunay.d.ts +0 -74
  208. package/Math/roadmap.md +0 -10
  209. package/Math/tessellation/constants.ts +0 -1
  210. package/Math/tessellation/roadmap.md +0 -48
  211. package/Math/tessellation/types.ts +0 -1
  212. package/Math/types.ts +0 -68
  213. package/investigation-tools/draw/tiles/adapters.ts +0 -133
  214. package/programs/line-on-globe/linestrip/data.ts +0 -29
  215. package/programs/polygon-on-globe/roadmap.md +0 -8
  216. package/programs/totems/camera-totem-attactment-interface.ts +0 -4
  217. package/programs/vectorfields/logics/particle-ubo.ts +0 -23
  218. package/publish.bat +0 -62
  219. package/range-tools-on-terrain/bearing-line/types.ts +0 -65
  220. package/range-tools-on-terrain/circle-line-chain/types.ts +0 -43
  221. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +0 -396
  222. package/range-tools-on-terrain/range-ring/types.ts +0 -30
  223. package/semiplugins/interface.ts +0 -14
  224. package/semiplugins/shape-on-terrain/goal.md +0 -12
  225. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +0 -20
  226. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +0 -209
  227. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +0 -5
  228. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +0 -37
  229. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +0 -90
  230. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +0 -69
  231. package/semiplugins/shell/bbox-renderer/index.ts +0 -2
  232. package/semiplugins/shell/bbox-renderer/object.ts +0 -129
  233. package/semiplugins/type.ts +0 -8
  234. package/terrain-plugin.mmd +0 -83
  235. package/tests/Math/arc-sampling-test.js +0 -367
  236. package/tests/Math/arc-sampling-test.ts +0 -429
  237. package/tests/Math/arc.test.ts +0 -77
  238. package/tests/Math/junction/arc-limit.test.ts +0 -7
  239. package/tests/Math/junction/arc-plane-points.test.ts +0 -196
  240. package/tests/Math/junction/arc-plane.test.ts +0 -172
  241. package/tests/Math/junction/line-sphere.test.ts +0 -127
  242. package/tests/Math/junction/plane-plane.test.ts +0 -91
  243. package/tests/Math/plane-test.ts +0 -17
  244. package/tests/Math/plane.test.ts +0 -43
  245. package/tests/Math/vec3.test.ts +0 -33
  246. package/tracks/point-heat-map/readme.md +0 -15
  247. package/tracks/timetracks/readme.md +0 -1
  248. package/tsconfig.json +0 -22
  249. package/types/@pirireis/webglobe.d.ts +0 -102
  250. package/types/delaunator.d.ts +0 -40
  251. package/types/earcut.d.ts +0 -11
  252. package/types/rbush.d.ts +0 -57
  253. package/types.ts +0 -319
  254. package/util/account/create-buffermap-orchastration.ts +0 -85
  255. package/util/account/single-attribute-buffer-management/types.ts +0 -43
  256. package/util/check/typecheck.ts +0 -74
  257. package/vectorfield/wind/adapters/types.ts +0 -12
  258. package/write-text/context-text3.ts +0 -252
  259. package/write-text/objectarraylabels/objectarraylabels.d.ts +0 -72
@@ -1,165 +1,121 @@
1
- /**
2
- * Generates random polygon data for testing PolygonPluginInput
3
- */
4
-
5
- import { GlobeBBox } from "../../../../types";
6
-
7
- /**
8
- * Generates a random polygon with optional holes
9
- * @param {Object} options - Configuration options
10
- * @param {number} options.minVertices - Minimum number of vertices for the shell (default: 3)
11
- * @param {number} options.maxVertices - Maximum number of vertices for the shell (default: 8)
12
- * @param {number} options.holeCount - Number of holes to generate (default: 0)
13
- * @param {number} options.minLat - Minimum latitude (default: -85)
14
- * @param {number} options.maxLat - Maximum latitude (default: 85)
15
- * @param {number} options.minLng - Minimum longitude (default: -180)
16
- * @param {number} options.maxLng - Maximum longitude (default: 180)
17
- * @param {number} options.dimensions - Number of dimensions per vertex (default: 2)
18
- * @returns {Object} PolygonPluginInput object
19
- */
20
- function generateRandomPolygon(options: {
21
- minVertices?: number;
22
- maxVertices?: number;
23
- holeCount?: number;
24
- minLat?: number;
25
- maxLat?: number;
26
- minLng?: number;
27
- maxLng?: number;
28
- radius?: number;
29
- dimensions?: number;
30
- } = {}) {
31
- const {
32
- minVertices = 3,
33
- maxVertices = 8,
34
- holeCount = 0,
35
- minLat = -85,
36
- maxLat = 85,
37
- minLng = -180,
38
- maxLng = 180,
39
- dimensions = 2,
40
- radius = 4,
41
- } = options;
42
-
43
- const key = `polygon_${Date.now()}_${Math.floor(Math.random() * 1000)}_${Math.random()}`;
44
- const vertices = [];
45
- const holes = [];
46
-
47
- // Generate shell vertices
48
- const shellVertexCount = Math.floor(Math.random() * (maxVertices - minVertices + 1)) + minVertices;
49
- const centerLng = Math.random() * (maxLng - minLng) + minLng;
50
- const centerLat = Math.random() * (maxLat - minLat) + minLat;
51
-
52
- // Generate shell as a rough circle with random variations
53
- for (let i = 0; i < shellVertexCount; i++) {
54
- const angle = (i / shellVertexCount) * 2 * Math.PI;
55
- const radiusVariation = radius * (0.7 + Math.random() * 0.6); // Add variation to radius
56
- const lng = centerLng + Math.cos(angle) * radiusVariation;
57
- const lat = centerLat + Math.sin(angle) * radiusVariation;
58
-
59
- vertices.push(lng, lat);
60
- if (dimensions > 2) {
61
- for (let d = 2; d < dimensions; d++) {
62
- vertices.push(Math.random() * 1000); // Random additional dimensions
63
- }
64
- }
65
- }
66
-
67
- // Generate holes
68
- for (let h = 0; h < holeCount; h++) {
69
- const holeStartIndex = vertices.length / dimensions;
70
- holes.push(holeStartIndex);
71
-
72
- const holeVertexCount = Math.floor(Math.random() * 4) + 3; // 3-6 vertices for holes
73
- const holeRadius = radius * (0.2 + Math.random() * 0.3); // Smaller radius for holes
74
- const holeCenterLng = centerLng + (Math.random() - 0.5) * radius * 0.8;
75
- const holeCenterLat = centerLat + (Math.random() - 0.5) * radius * 0.8;
76
-
77
- for (let i = 0; i < holeVertexCount; i++) {
78
- const angle = (i / holeVertexCount) * 2 * Math.PI;
79
- const lng = holeCenterLng + Math.cos(angle) * holeRadius;
80
- const lat = holeCenterLat + Math.sin(angle) * holeRadius;
81
-
82
- vertices.push(lng, lat);
83
- if (dimensions > 2) {
84
- for (let d = 2; d < dimensions; d++) {
85
- vertices.push(Math.random() * 1000);
86
- }
87
- }
88
- }
89
- }
90
-
91
- return {
92
- key,
93
- geometry: [{ vertices, holes }],
94
- color: [Math.random(), Math.random(), Math.random(), 1.0],
95
- };
96
- }
97
-
98
- /**
99
- * Generates multiple random polygons
100
- * @param {number} count - Number of polygons to generate
101
- * @param {Object} options - Options to pass to generateRandomPolygon
102
- * @returns {Array} Array of PolygonPluginInput objects
103
- */
104
- function generateRandomPolygons(count: number, options = {}) {
105
- const polygons = [];
106
- for (let i = 0; i < count; i++) {
107
- polygons.push(generateRandomPolygon(options));
108
- }
109
- return polygons;
110
- }
111
-
112
- /**
113
- * Generates a simple rectangular polygon for basic testing
114
- * @param {number} lng - Center longitude
115
- * @param {number} lat - Center latitude
116
- * @param {number} width - Width in degrees
117
- * @param {number} height - Height in degrees
118
- * @returns {Object} PolygonPluginInput object
119
- */
120
- function generateRectanglePolygon(lng = 0, lat = 0, width = 2, height = 1) {
121
- const halfWidth = width / 2;
122
- const halfHeight = height / 2;
123
-
124
- return {
125
- key: `rectangle_${Date.now()}`,
126
- geometry: [{
127
- vertices: [
128
- lng - halfWidth, lat - halfHeight, // Bottom-left
129
- lng + halfWidth, lat - halfHeight, // Bottom-right
130
- lng + halfWidth, lat + halfHeight, // Top-right
131
- lng - halfWidth, lat + halfHeight // Top-left
132
- ],
133
- holes: []
134
- }]
135
- };
136
- }
137
-
138
- function generateRectangleFromBBOX(bbox: GlobeBBox, key: string | null = null) {
139
- const { ll, ur } = bbox;
140
- return {
141
- key: key || `rectangle_${Date.now()}`,
142
- geometry: [{
143
- vertices: [
144
- ll.x, ll.y, // Bottom-left
145
- ur.x, ll.y, // Bottom-right
146
- ur.x, ur.y, // Top-right
147
- ll.x, ur.y // Top-left
148
- ],
149
- holes: []
150
- }]
151
- };
152
- }
153
-
154
- // // Example usage:
155
- // console.log('Polygon with holes:', generateRandomPolygon({ holeCount: 2 }));
156
- // console.log('Multiple polygons:', generateRandomPolygons(3));
157
- // console.log('Rectangle polygon:', generateRectanglePolygon(-74, 40.7, 0.1, 0.05));
158
-
159
- export {
160
- generateRandomPolygon,
161
- generateRandomPolygons,
162
- generateRectanglePolygon,
163
- generateRectangleFromBBOX
164
- };
165
-
1
+ /**
2
+ * Generates random polygon data for testing PolygonPluginInput
3
+ */
4
+ /**
5
+ * Generates a random polygon with optional holes
6
+ * @param {Object} options - Configuration options
7
+ * @param {number} options.minVertices - Minimum number of vertices for the shell (default: 3)
8
+ * @param {number} options.maxVertices - Maximum number of vertices for the shell (default: 8)
9
+ * @param {number} options.holeCount - Number of holes to generate (default: 0)
10
+ * @param {number} options.minLat - Minimum latitude (default: -85)
11
+ * @param {number} options.maxLat - Maximum latitude (default: 85)
12
+ * @param {number} options.minLng - Minimum longitude (default: -180)
13
+ * @param {number} options.maxLng - Maximum longitude (default: 180)
14
+ * @param {number} options.dimensions - Number of dimensions per vertex (default: 2)
15
+ * @returns {Object} PolygonPluginInput object
16
+ */
17
+ function generateRandomPolygon(options = {}) {
18
+ const { minVertices = 3, maxVertices = 8, holeCount = 0, minLat = -85, maxLat = 85, minLng = -180, maxLng = 180, dimensions = 2, radius = 4, } = options;
19
+ const key = `polygon_${Date.now()}_${Math.floor(Math.random() * 1000)}_${Math.random()}`;
20
+ const vertices = [];
21
+ const holes = [];
22
+ // Generate shell vertices
23
+ const shellVertexCount = Math.floor(Math.random() * (maxVertices - minVertices + 1)) + minVertices;
24
+ const centerLng = Math.random() * (maxLng - minLng) + minLng;
25
+ const centerLat = Math.random() * (maxLat - minLat) + minLat;
26
+ // Generate shell as a rough circle with random variations
27
+ for (let i = 0; i < shellVertexCount; i++) {
28
+ const angle = (i / shellVertexCount) * 2 * Math.PI;
29
+ const radiusVariation = radius * (0.7 + Math.random() * 0.6); // Add variation to radius
30
+ const lng = centerLng + Math.cos(angle) * radiusVariation;
31
+ const lat = centerLat + Math.sin(angle) * radiusVariation;
32
+ vertices.push(lng, lat);
33
+ if (dimensions > 2) {
34
+ for (let d = 2; d < dimensions; d++) {
35
+ vertices.push(Math.random() * 1000); // Random additional dimensions
36
+ }
37
+ }
38
+ }
39
+ // Generate holes
40
+ for (let h = 0; h < holeCount; h++) {
41
+ const holeStartIndex = vertices.length / dimensions;
42
+ holes.push(holeStartIndex);
43
+ const holeVertexCount = Math.floor(Math.random() * 4) + 3; // 3-6 vertices for holes
44
+ const holeRadius = radius * (0.2 + Math.random() * 0.3); // Smaller radius for holes
45
+ const holeCenterLng = centerLng + (Math.random() - 0.5) * radius * 0.8;
46
+ const holeCenterLat = centerLat + (Math.random() - 0.5) * radius * 0.8;
47
+ for (let i = 0; i < holeVertexCount; i++) {
48
+ const angle = (i / holeVertexCount) * 2 * Math.PI;
49
+ const lng = holeCenterLng + Math.cos(angle) * holeRadius;
50
+ const lat = holeCenterLat + Math.sin(angle) * holeRadius;
51
+ vertices.push(lng, lat);
52
+ if (dimensions > 2) {
53
+ for (let d = 2; d < dimensions; d++) {
54
+ vertices.push(Math.random() * 1000);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ return {
60
+ key,
61
+ geometry: [{ vertices, holes }],
62
+ color: [Math.random(), Math.random(), Math.random(), 1.0],
63
+ };
64
+ }
65
+ /**
66
+ * Generates multiple random polygons
67
+ * @param {number} count - Number of polygons to generate
68
+ * @param {Object} options - Options to pass to generateRandomPolygon
69
+ * @returns {Array} Array of PolygonPluginInput objects
70
+ */
71
+ function generateRandomPolygons(count, options = {}) {
72
+ const polygons = [];
73
+ for (let i = 0; i < count; i++) {
74
+ polygons.push(generateRandomPolygon(options));
75
+ }
76
+ return polygons;
77
+ }
78
+ /**
79
+ * Generates a simple rectangular polygon for basic testing
80
+ * @param {number} lng - Center longitude
81
+ * @param {number} lat - Center latitude
82
+ * @param {number} width - Width in degrees
83
+ * @param {number} height - Height in degrees
84
+ * @returns {Object} PolygonPluginInput object
85
+ */
86
+ function generateRectanglePolygon(lng = 0, lat = 0, width = 2, height = 1) {
87
+ const halfWidth = width / 2;
88
+ const halfHeight = height / 2;
89
+ return {
90
+ key: `rectangle_${Date.now()}`,
91
+ geometry: [{
92
+ vertices: [
93
+ lng - halfWidth, lat - halfHeight, // Bottom-left
94
+ lng + halfWidth, lat - halfHeight, // Bottom-right
95
+ lng + halfWidth, lat + halfHeight, // Top-right
96
+ lng - halfWidth, lat + halfHeight // Top-left
97
+ ],
98
+ holes: []
99
+ }]
100
+ };
101
+ }
102
+ function generateRectangleFromBBOX(bbox, key = null) {
103
+ const { ll, ur } = bbox;
104
+ return {
105
+ key: key || `rectangle_${Date.now()}`,
106
+ geometry: [{
107
+ vertices: [
108
+ ll.x, ll.y, // Bottom-left
109
+ ur.x, ll.y, // Bottom-right
110
+ ur.x, ur.y, // Top-right
111
+ ll.x, ur.y // Top-left
112
+ ],
113
+ holes: []
114
+ }]
115
+ };
116
+ }
117
+ // // Example usage:
118
+ // console.log('Polygon with holes:', generateRandomPolygon({ holeCount: 2 }));
119
+ // console.log('Multiple polygons:', generateRandomPolygons(3));
120
+ // console.log('Rectangle polygon:', generateRectanglePolygon(-74, 40.7, 0.1, 0.05));
121
+ export { generateRandomPolygon, generateRandomPolygons, generateRectanglePolygon, generateRectangleFromBBOX };
@@ -1,81 +1,63 @@
1
- import { PolygonInput, TerrainPolygonOptions } from "../types";
2
- import { WorkerInput, WorkerOutput, BBOXZOOMDATA } from "../types";
3
- import { Globe } from "../../../../types";
4
- import { MergedTilesInfo } from "../../../../Math/tessellation/tile-merger";
5
- import { DemTextureManager, DemTextureManagerCache } from "../../../../programs/totems/dem-textures-manager";
6
- import { RADIAN } from "../../../../Math/methods";
7
-
8
- export class WorkerContact {
9
- private _masterWorker: Worker;
10
- private _options: Pick<TerrainPolygonOptions, "pickable" | "variativeColorsOn">;
11
- private onResult: (result: WorkerOutput) => void;
12
- private demTextureManager: DemTextureManager = null as any;
13
-
14
- constructor(globe: Globe, options: Pick<TerrainPolygonOptions, "pickable" | "variativeColorsOn">, onResult: (result: WorkerOutput) => void) {
15
- this._options = options;
16
- this.onResult = onResult;
17
-
18
- // Initialize the Master Worker
19
- // @ts-ignore
20
- this._masterWorker = new Worker(new URL("./master-worker.js", import.meta.url), { type: 'module' });
21
-
22
- this._masterWorker.onmessage = (event: MessageEvent<WorkerOutput>) => {
23
- this.onResult(event.data);
24
- }
25
-
26
- // Initialize Master Worker state
27
- this._masterWorker.postMessage({
28
- pickableState: this._options.pickable,
29
- variativeColorsOn: this._options.variativeColorsOn,
30
- insertDeleteQueue: [],
31
- bboxes: null,
32
- } as WorkerInput);
33
-
34
- this.demTextureManager = DemTextureManagerCache.get(globe);
35
- this.demTextureManager.register(this);
36
- }
37
-
38
- setMergedTiles(mergedTilesInfo: MergedTilesInfo[]) {
39
- const bboxesData: BBOXZOOMDATA = new Array(mergedTilesInfo.length);
40
- for (let i = 0; i < mergedTilesInfo.length; i++) {
41
- const { bbox, zoom } = mergedTilesInfo[i];
42
- bboxesData[i] = {
43
- zoom: zoom,
44
- minX: bbox.ll.x * RADIAN,
45
- minY: bbox.ll.y * RADIAN,
46
- maxX: bbox.ur.x * RADIAN,
47
- maxY: bbox.ur.y * RADIAN,
48
- };
49
- }
50
-
51
- // Send BBOX updates to Master Worker
52
- this._masterWorker.postMessage({
53
- bboxes: bboxesData
54
- } as Partial<WorkerInput>);
55
- }
56
-
57
- free() {
58
- this.demTextureManager.unregister(this);
59
- this._masterWorker.terminate();
60
- }
61
-
62
- insertBulk(polygons: PolygonInput[]) {
63
- this._masterWorker.postMessage({
64
- insertDeleteQueue: polygons
65
- } as Partial<WorkerInput>);
66
- }
67
-
68
- deleteBulk(keys: string[]) {
69
- this._masterWorker.postMessage({
70
- insertDeleteQueue: keys
71
- } as Partial<WorkerInput>);
72
- }
73
-
74
- clear() {
75
- this._masterWorker.postMessage({
76
- insertDeleteQueue: ["__CLEAR_ALL_ITEMS__"]
77
- } as Partial<WorkerInput>);
78
- }
79
- }
80
-
81
-
1
+ import { DemTextureManagerCache } from "../../../../programs/totems/dem-textures-manager";
2
+ import { RADIAN } from "../../../../Math/methods";
3
+ export class WorkerContact {
4
+ _masterWorker;
5
+ _options;
6
+ onResult;
7
+ demTextureManager = null;
8
+ constructor(globe, options, onResult) {
9
+ this._options = options;
10
+ this.onResult = onResult;
11
+ // Initialize the Master Worker
12
+ // @ts-ignore
13
+ this._masterWorker = new Worker(new URL("./master-worker.js", import.meta.url), { type: 'module' });
14
+ this._masterWorker.onmessage = (event) => {
15
+ this.onResult(event.data);
16
+ };
17
+ // Initialize Master Worker state
18
+ this._masterWorker.postMessage({
19
+ pickableState: this._options.pickable,
20
+ variativeColorsOn: this._options.variativeColorsOn,
21
+ insertDeleteQueue: [],
22
+ bboxes: null,
23
+ });
24
+ this.demTextureManager = DemTextureManagerCache.get(globe);
25
+ this.demTextureManager.register(this);
26
+ }
27
+ setMergedTiles(mergedTilesInfo) {
28
+ const bboxesData = new Array(mergedTilesInfo.length);
29
+ for (let i = 0; i < mergedTilesInfo.length; i++) {
30
+ const { bbox, zoom } = mergedTilesInfo[i];
31
+ bboxesData[i] = {
32
+ zoom: zoom,
33
+ minX: bbox.ll.x * RADIAN,
34
+ minY: bbox.ll.y * RADIAN,
35
+ maxX: bbox.ur.x * RADIAN,
36
+ maxY: bbox.ur.y * RADIAN,
37
+ };
38
+ }
39
+ // Send BBOX updates to Master Worker
40
+ this._masterWorker.postMessage({
41
+ bboxes: bboxesData
42
+ });
43
+ }
44
+ free() {
45
+ this.demTextureManager.unregister(this);
46
+ this._masterWorker.terminate();
47
+ }
48
+ insertBulk(polygons) {
49
+ this._masterWorker.postMessage({
50
+ insertDeleteQueue: polygons
51
+ });
52
+ }
53
+ deleteBulk(keys) {
54
+ this._masterWorker.postMessage({
55
+ insertDeleteQueue: keys
56
+ });
57
+ }
58
+ clear() {
59
+ this._masterWorker.postMessage({
60
+ insertDeleteQueue: ["__CLEAR_ALL_ITEMS__"]
61
+ });
62
+ }
63
+ }