@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.
- package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
- package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
- package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
- package/Math/{arc.js → arc.ts} +421 -292
- package/Math/bounds/line-bbox.js +225 -186
- package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
- package/Math/{circle.js → circle.ts} +49 -33
- package/Math/{constants.js → constants.ts} +12 -4
- package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
- package/Math/contour/quadtreecontours1.js +336 -298
- package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
- package/Math/haversine.ts +33 -0
- package/Math/index.js +0 -1
- package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
- package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
- package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
- package/Math/{line.js → line.ts} +84 -52
- package/Math/matrix4.ts +0 -0
- package/Math/mesh/mapbox-delaunay.d.ts +74 -0
- package/Math/{methods.js → methods.ts} +182 -107
- package/Math/{plane.js → plane.ts} +92 -56
- package/Math/{quaternion.js → quaternion.ts} +128 -106
- package/Math/roadmap.md +10 -0
- package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
- package/Math/tessellation/constants.ts +1 -0
- package/Math/tessellation/methods.ts +79 -0
- package/Math/tessellation/nearest-value-padding.ts +147 -0
- package/Math/tessellation/roadmap.md +48 -0
- package/Math/tessellation/spherical-triangle-area.ts +127 -0
- package/Math/tessellation/tile-merger.ts +578 -0
- package/Math/tessellation/triangle-tessellation.ts +533 -0
- package/Math/tessellation/types.ts +1 -0
- package/Math/types.ts +68 -0
- package/Math/utils.js +3 -2
- package/Math/{vec3.js → vec3.ts} +227 -151
- package/Math/xyz-tile.ts +26 -0
- package/algorithms/search-binary.js +14 -16
- package/altitude-locator/adaptors.js +0 -1
- package/altitude-locator/keymethod.js +0 -1
- package/altitude-locator/plugin.js +445 -345
- package/altitude-locator/types.js +26 -21
- package/compass-rose/compass-rose-padding-flat.js +274 -230
- package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
- package/compass-rose/index.js +3 -3
- package/{constants.js → constants.ts} +8 -6
- package/heatwave/datamanager.js +168 -149
- package/heatwave/heatwave.js +261 -206
- package/heatwave/index.js +5 -5
- package/heatwave/isobar.js +340 -303
- package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
- package/investigation-tools/draw/tiles/adapters.ts +133 -0
- package/investigation-tools/draw/tiles/tiles.ts +162 -0
- package/jest.config.js +6 -7
- package/package.json +1 -1
- package/pin/pin-object-array1.js +381 -300
- package/pin/pin-point-totem1.js +77 -60
- package/programs/arrowfield/arrow-field.js +89 -60
- package/programs/arrowfield/logic.js +173 -141
- package/programs/data2legend/density-to-legend.js +86 -68
- package/programs/data2legend/point-to-density-texture.js +84 -67
- package/programs/float2legendwithratio/index.js +3 -2
- package/programs/float2legendwithratio/logic.js +144 -118
- package/programs/float2legendwithratio/object.js +141 -104
- package/programs/helpers/blender.js +73 -58
- package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
- package/programs/index.js +19 -20
- package/programs/line-on-globe/circle-accurate-3d.js +112 -85
- package/programs/line-on-globe/circle-accurate-flat.js +200 -148
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
- package/programs/line-on-globe/index.js +0 -1
- package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
- package/programs/line-on-globe/linestrip/data.ts +29 -0
- package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
- package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
- package/programs/line-on-globe/util.js +8 -5
- package/programs/picking/pickable-polygon-renderer.js +129 -98
- package/programs/picking/pickable-renderer.js +130 -98
- package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
- package/programs/point-on-globe/element-point-glow.js +114 -80
- package/programs/point-on-globe/square-pixel-point.js +139 -120
- package/programs/polygon-on-globe/roadmap.md +8 -0
- package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
- package/programs/{programcache.js → programcache.ts} +134 -126
- package/programs/rings/index.js +1 -1
- package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
- package/programs/totems/camera-totem-attactment-interface.ts +4 -0
- package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
- package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
- package/programs/totems/dem-textures-manager.ts +368 -0
- package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
- package/programs/totems/gpu-selection-uniform-block.js +127 -99
- package/programs/totems/{index.js → index.ts} +2 -2
- package/programs/two-d/pixel-padding-for-compass.js +101 -87
- package/programs/util.js +19 -14
- package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
- package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
- package/programs/vectorfields/logics/index.js +4 -2
- package/programs/vectorfields/logics/particle-ubo.ts +23 -0
- package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
- package/programs/vectorfields/logics/ubo.js +57 -51
- package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
- package/publish.bat +62 -0
- package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
- package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
- package/range-tools-on-terrain/bearing-line/types.ts +65 -0
- package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
- package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
- package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
- package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
- package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
- package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
- package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
- package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
- package/range-tools-on-terrain/range-ring/types.ts +30 -0
- package/semiplugins/interface.ts +14 -0
- package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
- package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
- package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -472
- package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
- package/semiplugins/shape-on-terrain/goal.md +12 -0
- package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
- package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
- package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
- package/semiplugins/shell/bbox-renderer/index.ts +2 -0
- package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
- package/semiplugins/shell/bbox-renderer/object.ts +129 -0
- package/semiplugins/type.ts +8 -0
- package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
- package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
- package/shaders/fragment-toy/firework.js +1 -1
- package/shaders/fragment-toy/singularity.js +5 -2
- package/terrain-plugin.mmd +83 -0
- package/tests/Math/arc-sampling-test.js +367 -0
- package/tests/Math/arc-sampling-test.ts +429 -0
- package/tests/Math/arc.test.ts +77 -0
- package/tests/Math/junction/arc-limit.test.ts +7 -0
- package/tests/Math/junction/arc-plane-points.test.ts +196 -0
- package/tests/Math/junction/arc-plane.test.ts +172 -0
- package/tests/Math/junction/line-sphere.test.ts +127 -0
- package/tests/Math/junction/plane-plane.test.ts +91 -0
- package/tests/Math/plane-test.ts +17 -0
- package/tests/Math/plane.test.ts +43 -0
- package/tests/Math/vec3.test.ts +33 -0
- package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
- package/tracks/point-heat-map/index.js +0 -1
- package/tracks/point-heat-map/plugin-webworker.js +148 -121
- package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
- package/tracks/point-heat-map/readme.md +15 -0
- package/tracks/point-tracks/key-methods.js +3 -2
- package/tracks/point-tracks/plugin.js +487 -393
- package/tracks/timetracks/adaptors-line-strip.js +79 -65
- package/tracks/timetracks/plugin-line-strip.js +295 -240
- package/tracks/timetracks/program-line-strip.js +495 -411
- package/tracks/timetracks/programpoint-line-strip.js +137 -109
- package/tracks/timetracks/readme.md +1 -0
- package/tsconfig.json +22 -0
- package/types/@pirireis/webglobe.d.ts +102 -0
- package/types/delaunator.d.ts +40 -0
- package/types/earcut.d.ts +11 -0
- package/types/rbush.d.ts +57 -0
- package/types.ts +319 -0
- package/util/account/bufferoffsetmanager.js +209 -176
- package/util/account/create-buffermap-orchastration.ts +85 -0
- package/util/account/index.js +6 -3
- package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
- package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
- package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
- package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
- package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
- package/util/account/single-attribute-buffer-management/types.ts +43 -0
- package/util/account/util.js +22 -18
- package/util/algorithms/index.js +0 -1
- package/util/algorithms/search-binary.js +26 -25
- package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
- package/util/check/index.js +0 -1
- package/util/check/typecheck.ts +74 -0
- package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
- package/util/geometry/{index.js → index.ts} +155 -121
- package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
- package/util/gl-util/buffer/{index.js → index.ts} +6 -3
- package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
- package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
- package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
- package/util/helper-methods.ts +9 -0
- package/util/index.js +9 -10
- package/util/interpolation/index.js +0 -1
- package/util/interpolation/timetrack/index.js +9 -2
- package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
- package/util/interpolation/timetrack/web-worker.js +51 -46
- package/util/picking/{fence.js → fence.ts} +47 -41
- package/util/picking/picker-displayer.ts +226 -0
- package/util/programs/draw-from-pixel-coords.js +201 -164
- package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
- package/util/programs/supersampletotextures.js +130 -97
- package/util/programs/texturetoglobe.js +153 -128
- package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
- package/util/shaderfunctions/index.js +2 -2
- package/util/shaderfunctions/nodata.js +4 -2
- package/util/shaderfunctions/noisefunctions.js +10 -7
- package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
- package/vectorfield/arrowfield/adaptor.js +11 -11
- package/vectorfield/arrowfield/index.js +3 -3
- package/vectorfield/arrowfield/plugin.js +128 -83
- package/vectorfield/waveparticles/adaptor.js +16 -15
- package/vectorfield/waveparticles/index.js +3 -3
- package/vectorfield/waveparticles/plugin.ts +506 -0
- package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
- package/vectorfield/wind/adapters/types.ts +12 -0
- package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
- package/vectorfield/wind/index.js +5 -5
- package/vectorfield/wind/plugin-persistant copy.ts +461 -0
- package/vectorfield/wind/plugin-persistant.ts +483 -0
- package/vectorfield/wind/plugin.js +883 -671
- package/vectorfield/wind/vectorfieldimage.js +27 -23
- package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
- package/write-text/context-text3.ts +252 -0
- package/write-text/{context-text4.js → context-text4.ts} +231 -145
- package/write-text/context-textDELETE.js +125 -94
- package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
- package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
- package/write-text/objectarraylabels/objectarraylabels.js +247 -200
- package/Math/matrix4.js +0 -1
- package/Math/tessellation/earcut/adapters.js +0 -37
- package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
- package/Math/tessellation/methods.js +0 -46
- package/Math/tessellation/shred-input.js +0 -18
- package/Math/tessellation/tile-merger.js +0 -56
- package/Math/tessellation/tiler.js +0 -50
- package/Math/tessellation/triangle-tessellation-meta.js +0 -516
- package/Math/tessellation/triangle-tessellation.js +0 -14
- package/Math/tessellation/types.js +0 -1
- package/Math/tessellation/zoom-catch.js +0 -1
- package/Math/types.js +0 -1
- package/programs/line-on-globe/linestrip/data.js +0 -4
- package/programs/polygon-on-globe/partial-tesselation.js +0 -1
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -204
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -118
- package/programs/polygon-on-globe/texture-dem-triangles.js +0 -236
- package/programs/vectorfields/logics/drawrectangleparticles.js +0 -112
- package/programs/vectorfields/logics/ubo-new.js +0 -25
- package/range-tools-on-terrain/bearing-line/types.js +0 -1
- package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
- package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
- package/range-tools-on-terrain/range-ring/types.js +0 -9
- package/semiplugins/interface.js +0 -1
- package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
- package/semiplugins/shell/bbox-renderer/index.js +0 -2
- package/semiplugins/shell/bbox-renderer/object.js +0 -65
- package/semiplugins/type.js +0 -1
- package/types.js +0 -19
- package/util/account/create-buffermap-orchastration.js +0 -39
- package/util/account/single-attribute-buffer-management/types.js +0 -1
- package/util/check/typecheck.js +0 -66
- package/util/gl-util/uniform-block/types.js +0 -1
- package/util/picking/picker-displayer.js +0 -134
- package/util/webglobe/index.js +0 -2
- package/util/webglobe/rasteroverlay.js +0 -76
- package/vectorfield/waveparticles/plugin.js +0 -290
- package/write-text/attached-text-writer.js +0 -95
- package/write-text/context-text3.js +0 -167
|
@@ -1,53 +1,62 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
direction
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
+
}
|
package/Math/{line.js → line.ts}
RENAMED
|
@@ -1,52 +1,84 @@
|
|
|
1
|
-
import { EPSILON } from './constants';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
vec3copy
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
function
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
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
|
+
}
|
package/Math/matrix4.ts
ADDED
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const x = Math.cos(
|
|
53
|
-
const y = Math.cos(
|
|
54
|
-
const z = Math.sin(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
export const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
export const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
+
};
|