@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,53 +1,62 @@
1
- import { EPSILON } from "../constants";
2
- import { dot, cross, lengthSquared } from "../vec3";
3
- export function planePlaneJunction(out, plane1, plane2) {
4
- const _normal1 = plane1.normal;
5
- const _normal2 = plane2.normal;
6
- const distance1 = plane1.distance;
7
- const distance2 = plane2.distance;
8
- const { origin, direction } = out;
9
- const d = dot(_normal1, _normal2);
10
- if (Math.abs(d) > 1 - EPSILON) {
11
- return false; // Planes are parallel, no intersection
12
- }
13
- cross(direction, _normal1, _normal2);
14
- const magnitudeSquired = lengthSquared(out.direction);
15
- if (magnitudeSquired < EPSILON) {
16
- return false; // No valid intersection line
17
- }
18
- const magnitude = Math.sqrt(magnitudeSquired);
19
- direction[0] /= magnitude;
20
- direction[1] /= magnitude;
21
- direction[2] /= magnitude;
22
- let determinant;
23
- // Calculate the intersection point
24
- // set z = 0
25
- determinant = _normal1[0] * _normal2[1] - _normal1[1] * _normal2[0];
26
- if (Math.abs(determinant) > EPSILON) {
27
- origin[0] = (distance1 * _normal2[1] - distance2 * _normal1[1]) / determinant;
28
- origin[1] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
29
- origin[2] = 0;
30
- }
31
- else {
32
- // set y = 0
33
- determinant = _normal1[0] * _normal2[2] - _normal1[2] * _normal2[0];
34
- if (Math.abs(determinant) > EPSILON) {
35
- origin[0] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
36
- origin[1] = 0;
37
- origin[2] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
38
- }
39
- else {
40
- // set x = 0
41
- determinant = _normal1[1] * _normal2[2] - _normal1[2] * _normal2[1];
42
- if (Math.abs(determinant) > EPSILON) {
43
- origin[0] = 0;
44
- origin[1] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
45
- origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
46
- }
47
- else {
48
- return false; // No valid intersection point
49
- }
50
- }
51
- }
52
- return true;
53
- }
1
+ import { Plane, Line, Vec3 } from "../types";
2
+ import { EPSILON } from "../constants";
3
+ import { copy, create, dot, cross, lengthSquared } from "../vec3";
4
+
5
+
6
+ export function planePlaneJunction(out: Line, plane1: Plane, plane2: Plane): boolean {
7
+ const _normal1 = plane1.normal;
8
+ const _normal2 = plane2.normal;
9
+ const distance1 = plane1.distance;
10
+ const distance2 = plane2.distance;
11
+
12
+ const { origin, direction } = out;
13
+
14
+ const d = dot(_normal1, _normal2);
15
+
16
+ if (Math.abs(d) > 1 - EPSILON) {
17
+ return false; // Planes are parallel, no intersection
18
+ }
19
+
20
+ cross(direction, _normal1, _normal2);
21
+
22
+ const magnitudeSquired = lengthSquared(out.direction);
23
+ if (magnitudeSquired < EPSILON) {
24
+ return false; // No valid intersection line
25
+ }
26
+
27
+ const magnitude = Math.sqrt(magnitudeSquired);
28
+ direction[0] /= magnitude;
29
+ direction[1] /= magnitude;
30
+ direction[2] /= magnitude;
31
+
32
+
33
+
34
+ let determinant: number;
35
+ // Calculate the intersection point
36
+ // set z = 0
37
+ determinant = _normal1[0] * _normal2[1] - _normal1[1] * _normal2[0];
38
+ if (Math.abs(determinant) > EPSILON) {
39
+ origin[0] = (distance1 * _normal2[1] - distance2 * _normal1[1]) / determinant;
40
+ origin[1] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
41
+ origin[2] = 0;
42
+ } else {
43
+ // set y = 0
44
+ determinant = _normal1[0] * _normal2[2] - _normal1[2] * _normal2[0];
45
+ if (Math.abs(determinant) > EPSILON) {
46
+ origin[0] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
47
+ origin[1] = 0;
48
+ origin[2] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
49
+ } else {
50
+ // set x = 0
51
+ determinant = _normal1[1] * _normal2[2] - _normal1[2] * _normal2[1];
52
+ if (Math.abs(determinant) > EPSILON) {
53
+ origin[0] = 0;
54
+ origin[1] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
55
+ origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
56
+ } else {
57
+ return false; // No valid intersection point
58
+ }
59
+ }
60
+ }
61
+ return true;
62
+ }
@@ -1,52 +1,84 @@
1
- import { EPSILON } from './constants';
2
- import { subtract, applyQuaternion as vec3applyQuaternion, add, multiplyScalar, normalize, dot, cross, lengthSquared, clone as vec3clone, create as vec3create, copy as vec3copy } from './vec3';
3
- const _0vector = /*@__PURE__*/ vec3create(0, 0, 0);
4
- function create(origin = vec3create(), direction = vec3create()) {
5
- const direction_ = vec3clone(direction);
6
- normalize(direction_, direction_);
7
- return {
8
- origin: vec3clone(origin),
9
- direction: direction_
10
- };
11
- }
12
- function set(out, origin, direction) {
13
- vec3copy(out.origin, origin);
14
- vec3copy(out.direction, direction);
15
- }
16
- function copy(out, a) {
17
- out.origin = vec3copy(out.origin, a.origin);
18
- out.direction = vec3copy(out.direction, a.direction);
19
- }
20
- function clone(a) {
21
- return {
22
- origin: vec3clone(a.origin),
23
- direction: vec3clone(a.direction)
24
- };
25
- }
26
- function fromTwoPoints(out, a, b) {
27
- subtract(out.direction, b, a);
28
- normalize(out.direction, out.direction);
29
- vec3copy(out.origin, a);
30
- }
31
- function at(out, line, distance) {
32
- multiplyScalar(_0vector, line.direction, distance);
33
- add(out, _0vector, line.origin);
34
- }
35
- function closestPoint(out, line, point) {
36
- subtract(_0vector, point, line.origin);
37
- const dot_ = dot(_0vector, line.direction);
38
- vec3copy(out, line.direction);
39
- multiplyScalar(out, out, dot_);
40
- add(out, out, line.origin);
41
- }
42
- function contains(line, point) {
43
- subtract(_0vector, point, line.origin);
44
- cross(_0vector, _0vector, line.direction);
45
- return lengthSquared(_0vector) < EPSILON;
46
- }
47
- function applyQuaternion(out, line, quaternion) {
48
- vec3applyQuaternion(out.origin, line.origin, quaternion);
49
- vec3applyQuaternion(out.direction, line.direction, quaternion);
50
- normalize(out.direction, out.direction);
51
- }
52
- export { create, set, copy, clone, fromTwoPoints, at, closestPoint, contains, applyQuaternion };
1
+ import { EPSILON } from './constants';
2
+ import { Vec3, Line, Quaternion } from './types';
3
+ import {
4
+ subtract,
5
+ applyQuaternion as vec3applyQuaternion,
6
+ add,
7
+ multiplyScalar,
8
+ normalize,
9
+ dot,
10
+ cross,
11
+ lengthSquared,
12
+ clone as vec3clone,
13
+ create as vec3create,
14
+ copy as vec3copy
15
+ } from './vec3';
16
+
17
+
18
+ const _0vector = /*@__PURE__*/ vec3create(0, 0, 0);
19
+
20
+
21
+ function create(origin = vec3create(), direction = vec3create()): Line {
22
+ const direction_ = vec3clone(direction);
23
+ normalize(direction_, direction_);
24
+ return {
25
+ origin: vec3clone(origin),
26
+ direction: direction_
27
+ };
28
+ }
29
+
30
+ function set(out: Line, origin: Vec3, direction: Vec3) {
31
+ vec3copy(out.origin, origin);
32
+ vec3copy(out.direction, direction);
33
+ }
34
+
35
+ function copy(out: Line, a: Line) {
36
+ out.origin = vec3copy(out.origin, a.origin);
37
+ out.direction = vec3copy(out.direction, a.direction);
38
+ }
39
+
40
+ function clone(a: Line): Line {
41
+ return {
42
+ origin: vec3clone(a.origin),
43
+ direction: vec3clone(a.direction)
44
+ }
45
+ }
46
+
47
+ function fromTwoPoints(out: Line, a: Vec3, b: Vec3) {
48
+ subtract(out.direction, b, a);
49
+ normalize(out.direction, out.direction);
50
+ vec3copy(out.origin, a);
51
+ }
52
+
53
+ function at(out: Vec3, line: Line, distance: number) {
54
+ multiplyScalar(_0vector, line.direction, distance);
55
+ add(out, _0vector, line.origin);
56
+ }
57
+
58
+
59
+ function closestPoint(out: Vec3, line: Line, point: Vec3) {
60
+ subtract(_0vector, point, line.origin);
61
+ const dot_ = dot(_0vector, line.direction);
62
+ vec3copy(out, line.direction);
63
+ multiplyScalar(out, out, dot_);
64
+ add(out, out, line.origin);
65
+ }
66
+
67
+
68
+ function contains(line: Line, point: Vec3): boolean {
69
+ subtract(_0vector, point, line.origin);
70
+ cross(_0vector, _0vector, line.direction);
71
+ return lengthSquared(_0vector) < EPSILON;
72
+ }
73
+
74
+ function applyQuaternion(out: Line, line: Line, quaternion: Quaternion) {
75
+ vec3applyQuaternion(out.origin, line.origin, quaternion);
76
+ vec3applyQuaternion(out.direction, line.direction, quaternion);
77
+ normalize(out.direction, out.direction);
78
+ }
79
+
80
+ export {
81
+ create,
82
+ set,
83
+ copy, clone, fromTwoPoints, at, closestPoint, contains, applyQuaternion
84
+ }
File without changes
@@ -0,0 +1,74 @@
1
+ export default class Delaunator {
2
+ /**
3
+ * Constructs a delaunay triangulation object given an array of points (`[x, y]` by default).
4
+ * `getX` and `getY` are optional functions of the form `(point) => value` for custom point formats.
5
+ */
6
+ static from<P>(
7
+ points: P[],
8
+ getX?: (p: P) => number,
9
+ getY?: (p: P) => number
10
+ ): Delaunator;
11
+
12
+ /**
13
+ * Constructs a delaunay triangulation object given an array of point coordinates of the form:
14
+ * `[x0, y0, x1, y1, ...]` (use a typed array for best performance). Duplicate points are skipped.
15
+ */
16
+ constructor(coords: ArrayLike<number>);
17
+
18
+ /** The input coordinates array */
19
+ coords: ArrayLike<number>;
20
+
21
+ /** A `Uint32Array` array of indices that reference points on the convex hull of the input data, counter-clockwise. */
22
+ hull: Uint32Array;
23
+
24
+ /** A `Uint32Array` array of triangle vertex indices (each group of three numbers forms a triangle). All triangles are directed counterclockwise. */
25
+ triangles: Uint32Array;
26
+
27
+ /**
28
+ * A `Int32Array` array of triangle half-edge indices that allows you to traverse the triangulation.
29
+ * `i`-th half-edge in the array corresponds to vertex `triangles[i]` the half-edge is coming from.
30
+ * `halfedges[i]` is the index of a twin half-edge in an adjacent triangle (or `-1` for outer half-edges on the convex hull).
31
+ */
32
+ halfedges: Int32Array;
33
+
34
+ /**
35
+ * Updates the triangulation if you modified `delaunay.coords` values in place, avoiding expensive memory allocations.
36
+ * Useful for iterative relaxation algorithms such as Lloyd's.
37
+ */
38
+ update(): void;
39
+
40
+ // Private properties and methods
41
+ private _triangles: Uint32Array;
42
+ private _halfedges: Int32Array;
43
+ private _hashSize: number;
44
+ private _hullPrev: Uint32Array;
45
+ private _hullNext: Uint32Array;
46
+ private _hullTri: Uint32Array;
47
+ private _hullHash: Int32Array;
48
+ private _ids: Uint32Array;
49
+ private _dists: Float64Array;
50
+ private trianglesLen: number;
51
+ private _cx: number;
52
+ private _cy: number;
53
+ private _hullStart: number;
54
+
55
+ private _hashKey(x: number, y: number): number;
56
+ private _legalize(a: number): number;
57
+ private _link(a: number, b: number): void;
58
+ private _addTriangle(i0: number, i1: number, i2: number, a: number, b: number, c: number): number;
59
+ }
60
+
61
+ // Utility functions (not exported in the original module)
62
+ declare function pseudoAngle(dx: number, dy: number): number;
63
+ declare function dist(ax: number, ay: number, bx: number, by: number): number;
64
+ declare function inCircle(ax: number, ay: number, bx: number, by: number, cx: number, cy: number, px: number, py: number): boolean;
65
+ declare function circumradius(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): number;
66
+ declare function circumcenter(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): { x: number; y: number };
67
+ declare function quicksort(ids: Uint32Array, dists: Float64Array, left: number, right: number): void;
68
+ declare function swap(arr: Uint32Array, i: number, j: number): void;
69
+ declare function defaultGetX(p: [number, number]): number;
70
+ declare function defaultGetY(p: [number, number]): number;
71
+
72
+ // Constants
73
+ declare const EPSILON: number;
74
+ declare const EDGE_STACK: Uint32Array;
@@ -1,107 +1,182 @@
1
- import { WORLD_RADIUS_3D, WORLD_RADIUS_MERCATOR } from './constants';
2
- import { dot as dot3, copy as copy3 } from './vec3';
3
- export const RADIAN = Math.PI / 180;
4
- const _0vec3 = [0, 0, 0];
5
- const _0vec2 = [0, 0];
6
- export const cartesian3dToRadian = (output, cartesian) => {
7
- const x = cartesian[0];
8
- const y = cartesian[1];
9
- const z = cartesian[2];
10
- output[0] = Math.atan2(y, x); // longitude
11
- output[1] = Math.asin(z); // latitude
12
- };
13
- export const radianToMercator = (xy) => {
14
- return [
15
- WORLD_RADIUS_MERCATOR * xy[0],
16
- WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + xy[1] / 2))
17
- ];
18
- };
19
- export const radianToCartesian3d = (xy) => {
20
- const x = Math.cos(xy[1]) * Math.cos(xy[0]);
21
- const y = Math.cos(xy[1]) * Math.sin(xy[0]);
22
- const z = -Math.sin(xy[1]);
23
- return [x, y, z];
24
- };
25
- export const sphericalLinearInterpolation_UnitVector = (output, normalizedA, normalizedB, ratio) => {
26
- const theta = Math.acos(dot3(normalizedA, normalizedB));
27
- if (theta < 0.000001) {
28
- copy3(output, normalizedA);
29
- return;
30
- }
31
- const sinTheta = Math.sin(theta);
32
- output[0] = (Math.sin((1.0 - ratio) * theta) * normalizedA[0] + Math.sin(ratio * theta) * normalizedB[0]) / sinTheta;
33
- output[1] = (Math.sin((1.0 - ratio) * theta) * normalizedA[1] + Math.sin(ratio * theta) * normalizedB[1]) / sinTheta;
34
- output[2] = (Math.sin((1.0 - ratio) * theta) * normalizedA[2] + Math.sin(ratio * theta) * normalizedB[2]) / sinTheta;
35
- };
36
- export const sphericalLinearInterpolation_Mercator = (output, normalizedA, normalizedB, ratio) => {
37
- sphericalLinearInterpolation_UnitVector(_0vec3, normalizedA, normalizedB, ratio);
38
- cartesian3dToRadian(_0vec2, _0vec3);
39
- output[0] = WORLD_RADIUS_MERCATOR * _0vec2[0];
40
- output[1] = WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + _0vec2[1] / 2));
41
- };
42
- export const sphericalLinearInterpolation_Cartesian3d = (output, a, b, ratio) => {
43
- sphericalLinearInterpolation_UnitVector(_0vec3, [a[0], a[1], a[2]], [b[0], b[1], b[2]], ratio);
44
- const height = a[3] + (b[3] - a[3]) * ratio;
45
- output[0] = _0vec3[0] * height;
46
- output[1] = _0vec3[1] * height;
47
- output[2] = _0vec3[2] * height;
48
- };
49
- export const wgs84ToCartesian3d = (output, long, lat, height) => {
50
- const longRad = long * RADIAN;
51
- const latRad = lat * RADIAN;
52
- const x = Math.cos(latRad) * Math.cos(longRad);
53
- const y = Math.cos(latRad) * Math.sin(longRad);
54
- const z = Math.sin(latRad);
55
- const radius = WORLD_RADIUS_3D + height;
56
- output[0] = x * radius;
57
- output[1] = y * radius;
58
- output[2] = z * radius;
59
- };
60
- export const wgs84ToMercator = (long, lat) => {
61
- return [
62
- WORLD_RADIUS_MERCATOR * long * RADIAN,
63
- WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + lat * RADIAN / 2))
64
- ];
65
- };
66
- export const pixelXYToRadians = (pixelXY) => {
67
- const long = (2.0 * pixelXY[0] - 1.0) * Math.PI;
68
- const lat = (2.0 * pixelXY[1] - 1.0) * Math.PI / 2.0;
69
- return [long, lat];
70
- };
71
- export const pixelXYLenghtToUnitVectorWithHeight = (pixelXYHeight) => {
72
- const [long, lat] = pixelXYToRadians([pixelXYHeight[0], pixelXYHeight[1]]);
73
- const radius = WORLD_RADIUS_3D + pixelXYHeight[2];
74
- return [...radianToCartesian3d([long, lat]), radius];
75
- };
76
- export const globe3Dcoordinates = (globe, longlats, height = 0, msl = false, { paddingCount = 0, paddingValue = NaN }) => {
77
- const len = longlats.length / 2;
78
- const result = new Float32Array(len * 3 + paddingCount * 3).fill(paddingValue);
79
- for (let i = 0; i < len; i++) {
80
- const long = longlats[i * 2];
81
- const lat = longlats[i * 2 + 1];
82
- const xyz = globe.api_GetCartesian3DPoint(long, lat, height, msl);
83
- result.set(xyz, i * 3);
84
- }
85
- return result;
86
- };
87
- const manhattanDistance = (a, b) => {
88
- return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
89
- };
90
- export const globe2Dcoordinates = (globe, distanceFilterMeter = WORLD_RADIUS_MERCATOR) => (longlats, { paddingCount = 0, paddingValue = NaN }) => {
91
- let _lastXY = [NaN, NaN];
92
- const len = longlats.length / 2;
93
- const result = new Float32Array(len * 2 + paddingCount * 2).fill(paddingValue);
94
- for (let i = 0; i < len; i++) {
95
- const long = longlats[i * 2];
96
- const lat = longlats[i * 2 + 1];
97
- const xy = globe.api_GetMercator2DPoint(long, lat);
98
- if (manhattanDistance(_lastXY, xy) > distanceFilterMeter) {
99
- result.set([paddingValue, paddingValue], i * 2);
100
- }
101
- else {
102
- result.set(xy, i * 2);
103
- }
104
- _lastXY = xy;
105
- }
106
- return result;
107
- };
1
+ import { WORLD_RADIUS_3D, WORLD_RADIUS_MERCATOR } from './constants';
2
+ import { Vec3, Vec2, Vec4, Fraction, WGS84, LongLat } from './types';
3
+ import { dot as dot3, copy as copy3 } from './vec3';
4
+ import { Globe, GlobeBBox } from '../types';
5
+
6
+ export const RADIAN = Math.PI / 180;
7
+
8
+ const _0vec3 = [0, 0, 0] as Vec3;
9
+ const _0vec2 = [0, 0] as Vec2;
10
+ export const cartesian3dToRadian = (output: WGS84,
11
+ cartesian: Vec3): void => {
12
+ const x = cartesian[0];
13
+ const y = cartesian[1];
14
+ const z = cartesian[2];
15
+ output[0] = Math.atan2(y, x); // longitude
16
+ output[1] = Math.asin(z); // latitude
17
+ };
18
+
19
+ export const radianToMercator = (xy: Vec2): Vec2 => {
20
+ return [
21
+ WORLD_RADIUS_MERCATOR * xy[0],
22
+ WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + xy[1] / 2))
23
+ ];
24
+ };
25
+
26
+ export function radianToMercatorXY(xy: Vec2): Vec2 {
27
+ return [
28
+ xy[0],
29
+ Math.log(Math.tan(Math.PI / 4 + xy[1] / 2)),
30
+ ];
31
+ }
32
+
33
+ export function globeBBoxToXYBBOX(t: GlobeBBox): { ll: [number, number], ur: [number, number] } {
34
+ // this code scales Y to linear integration
35
+
36
+ return {
37
+ ll: radianToMercatorXY([t.ll.x * RADIAN, t.ll.y * RADIAN]), // west longitude, north latitude
38
+ ur: radianToMercatorXY([t.ur.x * RADIAN, t.ur.y * RADIAN]) // east longitude, south latitude
39
+ };
40
+ }
41
+
42
+
43
+ export function tileXY2Radian(x: number, y: number, zoom: number): LongLat {
44
+ const n = Math.pow(2, zoom);
45
+ const long = x / n * 2 * Math.PI - Math.PI;
46
+ const lat = Math.atan(Math.sinh(Math.PI - (y / n * 2 * Math.PI)));
47
+ return [long, lat];
48
+ }
49
+
50
+
51
+ export const radianToCartesian3d = (xy: Vec2): Vec3 => {
52
+ const x = Math.cos(xy[1]) * Math.cos(xy[0]);
53
+ const y = Math.cos(xy[1]) * Math.sin(xy[0]);
54
+ const z = -Math.sin(xy[1]);
55
+ return [x, y, z];
56
+ };
57
+
58
+ export const sphericalLinearInterpolation_UnitVector = (
59
+ output: Vec3,
60
+ normalizedA: Vec3,
61
+ normalizedB: Vec3,
62
+ ratio: Fraction
63
+ ): void => {
64
+ const theta = Math.acos(dot3(normalizedA, normalizedB));
65
+ if (theta < 0.000001) {
66
+ copy3(output, normalizedA);
67
+ return;
68
+ }
69
+ const sinTheta = Math.sin(theta);
70
+ output[0] = (Math.sin((1.0 - ratio) * theta) * normalizedA[0] + Math.sin(ratio * theta) * normalizedB[0]) / sinTheta;
71
+ output[1] = (Math.sin((1.0 - ratio) * theta) * normalizedA[1] + Math.sin(ratio * theta) * normalizedB[1]) / sinTheta;
72
+ output[2] = (Math.sin((1.0 - ratio) * theta) * normalizedA[2] + Math.sin(ratio * theta) * normalizedB[2]) / sinTheta;
73
+ };
74
+
75
+
76
+ export const sphericalLinearInterpolation_Mercator = (
77
+ output: Vec2,
78
+ normalizedA: Vec3,
79
+ normalizedB: Vec3,
80
+ ratio: Fraction
81
+ ): void => {
82
+ sphericalLinearInterpolation_UnitVector(_0vec3, normalizedA, normalizedB, ratio);
83
+ cartesian3dToRadian(_0vec2, _0vec3);
84
+ output[0] = WORLD_RADIUS_MERCATOR * _0vec2[0];
85
+ output[1] = WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + _0vec2[1] / 2));
86
+ }
87
+
88
+
89
+
90
+ export const sphericalLinearInterpolation_Cartesian3d = (
91
+ output: Vec3,
92
+ a: Vec4,
93
+ b: Vec4,
94
+ ratio: Fraction
95
+ ): void => {
96
+ sphericalLinearInterpolation_UnitVector(
97
+ _0vec3,
98
+ [a[0], a[1], a[2]],
99
+ [b[0], b[1], b[2]],
100
+ ratio
101
+ );
102
+ const height = a[3] + (b[3] - a[3]) * ratio;
103
+ output[0] = _0vec3[0] * height;
104
+ output[1] = _0vec3[1] * height;
105
+ output[2] = _0vec3[2] * height;
106
+ }
107
+
108
+
109
+
110
+
111
+ export const wgs84ToCartesian3d = (output: Vec3, long: number, lat: number, height: number): void => {
112
+ const longRad = long * RADIAN;
113
+ const latRad = lat * RADIAN;
114
+ const x = Math.cos(latRad) * Math.cos(longRad);
115
+ const y = Math.cos(latRad) * Math.sin(longRad);
116
+ const z = Math.sin(latRad);
117
+ const radius = WORLD_RADIUS_3D + height;
118
+ output[0] = x * radius;
119
+ output[1] = y * radius;
120
+ output[2] = z * radius;
121
+ };
122
+
123
+ export const wgs84ToMercator = (long: number, lat: number): Vec2 => {
124
+ return [
125
+ WORLD_RADIUS_MERCATOR * long * RADIAN,
126
+ WORLD_RADIUS_MERCATOR * Math.log(Math.tan(Math.PI / 4 + lat * RADIAN / 2))
127
+ ];
128
+ };
129
+
130
+ export const pixelXYToRadians = (pixelXY: Vec2): Vec2 => {
131
+ const long = (2.0 * pixelXY[0] - 1.0) * Math.PI;
132
+ const lat = (2.0 * pixelXY[1] - 1.0) * Math.PI / 2.0;
133
+ return [long, lat];
134
+ };
135
+
136
+ export const pixelXYLenghtToUnitVectorWithHeight = (pixelXYHeight: [number, number, number]): Vec4 => {
137
+ const [long, lat] = pixelXYToRadians([pixelXYHeight[0], pixelXYHeight[1]]);
138
+ const radius = WORLD_RADIUS_3D + pixelXYHeight[2];
139
+ return [...radianToCartesian3d([long, lat]), radius];
140
+ };
141
+
142
+
143
+
144
+ export const globe3Dcoordinates = (globe: Globe, longlats: number[] | Float64Array, height = 0, msl = false, { paddingCount = 0, paddingValue = NaN }: { paddingCount?: number; paddingValue?: number }
145
+ ): Float32Array => {
146
+ const len = longlats.length / 2;
147
+ const result = new Float32Array(len * 3 + paddingCount * 3).fill(paddingValue);
148
+ for (let i = 0; i < len; i++) {
149
+ const long = longlats[i * 2];
150
+ const lat = longlats[i * 2 + 1];
151
+ const xyz = globe.api_GetCartesian3DPoint(long, lat, height, msl);
152
+ result.set(xyz, i * 3);
153
+ }
154
+ return result;
155
+ };
156
+
157
+
158
+ const manhattanDistance = (a: Vec2, b: Vec2): number => {
159
+ return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);
160
+ };
161
+
162
+ export const globe2Dcoordinates = (globe: Globe, distanceFilterMeter: number = WORLD_RADIUS_MERCATOR) => (
163
+ longlats: number[] | Float64Array,
164
+ { paddingCount = 0, paddingValue = NaN }: { paddingCount?: number; paddingValue?: number }
165
+ ): Float32Array => {
166
+ let _lastXY: Vec2 = [NaN, NaN];
167
+ const len = longlats.length / 2;
168
+ const result = new Float32Array(len * 2 + paddingCount * 2).fill(paddingValue);
169
+ for (let i = 0; i < len; i++) {
170
+
171
+ const long = longlats[i * 2];
172
+ const lat = longlats[i * 2 + 1];
173
+ const xy = globe.api_GetMercator2DPoint(long, lat);
174
+ if (manhattanDistance(_lastXY, xy) > distanceFilterMeter) {
175
+ result.set([paddingValue, paddingValue], i * 2);
176
+ } else {
177
+ result.set(xy, i * 2);
178
+ }
179
+ _lastXY = xy;
180
+ }
181
+ return result;
182
+ };