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