@pirireis/webglobeplugins 0.17.1 → 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 -113
- 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.js → tiles.ts} +162 -128
- 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 -481
- 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 -394
- 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 -685
- 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 -146
- 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 -298
- package/Math/tessellation/tiler.js +0 -50
- package/Math/tessellation/triangle-tessellation-meta.js +0 -523
- 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/investigation-tools/draw/tiles/adapters.js +0 -67
- package/programs/line-on-globe/linestrip/data.js +0 -4
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -328
- package/programs/polygon-on-globe/texture-dem-triangles.js +0 -268
- package/programs/vectorfields/logics/drawrectangleparticles.js +0 -114
- package/programs/vectorfields/logics/drawrectangleparticles1.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/vectorfield/waveparticles/plugin.js +0 -290
- package/write-text/context-text3.js +0 -167
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/// <reference lib="webworker" />
|
|
2
|
+
|
|
3
|
+
import { Cache } from "./cache";
|
|
4
|
+
import { partialTessellation, zoomLevelShowThreshold } from "../../../../Math/tessellation/triangle-tessellation";
|
|
5
|
+
import { IndexAttributeEscapeValue } from "../../../../programs/polygon-on-globe/texture-dem-triangles";
|
|
6
|
+
|
|
7
|
+
const cache = new Cache(100); // 100 km threshold
|
|
8
|
+
let _pickableState = false;
|
|
9
|
+
let _variativeColorsOnState = false;
|
|
10
|
+
|
|
11
|
+
let showThreshold = 0;
|
|
12
|
+
// eslint-disable-next-line no-restricted-globals
|
|
13
|
+
self.onmessage = (event) => {
|
|
14
|
+
try {
|
|
15
|
+
const { bboxes, insertDeleteQueue, pickableState, variativeColorsOn } = event.data;
|
|
16
|
+
if (variativeColorsOn !== undefined) {
|
|
17
|
+
_variativeColorsOnState = variativeColorsOn;
|
|
18
|
+
}
|
|
19
|
+
if (pickableState !== undefined) {
|
|
20
|
+
_pickableState = pickableState;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Process insert/delete queue
|
|
24
|
+
if (insertDeleteQueue[0] === "__CLEAR_ALL_ITEMS__") {
|
|
25
|
+
insertDeleteQueue.shift();
|
|
26
|
+
cache.clear();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
for (const item of insertDeleteQueue) {
|
|
30
|
+
if (typeof item === 'string') {
|
|
31
|
+
cache.remove(item);
|
|
32
|
+
} else {
|
|
33
|
+
cache.insert(item.key, item);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Update bboxes if provided
|
|
38
|
+
if (bboxes) {
|
|
39
|
+
cache.setBBOXes(bboxes);
|
|
40
|
+
showThreshold = zoomLevelShowThreshold(bboxes[0].zoom, 0.03);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Search for triangles in view
|
|
44
|
+
const trianglesInView = cache.search();
|
|
45
|
+
|
|
46
|
+
// Prepare arrays for merging
|
|
47
|
+
const results = [];
|
|
48
|
+
|
|
49
|
+
// Convert bbox to BBoxZoom format for partialTessellation
|
|
50
|
+
const bboxZooms = bboxes ? bboxes.map(b => ({
|
|
51
|
+
bbox: {
|
|
52
|
+
min: [b.minX, b.minY],
|
|
53
|
+
max: [b.maxX, b.maxY]
|
|
54
|
+
},
|
|
55
|
+
zoom: b.zoom
|
|
56
|
+
})) : []; // This will be empty if no bbox, causing issues
|
|
57
|
+
|
|
58
|
+
let counter = 0;
|
|
59
|
+
let indexCounter = 0;
|
|
60
|
+
// Process each triangle
|
|
61
|
+
for (const triangle of trianglesInView) {
|
|
62
|
+
if (triangle.tessellationMeta.showThreshold * 0.075 > showThreshold) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const result = (triangle.tessellationMeta.showThreshold < showThreshold) ? partialTessellation(
|
|
67
|
+
triangle.tessellationMeta,
|
|
68
|
+
bboxZooms,
|
|
69
|
+
5 // innerCuts parameter
|
|
70
|
+
) : triangle.tessellationMeta.shortCut;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
counter += result.vec3s.length;
|
|
74
|
+
indexCounter += result.indices.length;
|
|
75
|
+
if (_pickableState) {
|
|
76
|
+
// TODO: find a better way to fill indeces to final array
|
|
77
|
+
result.pickIndex = triangle.polygon.index;
|
|
78
|
+
}
|
|
79
|
+
if (_variativeColorsOnState) {
|
|
80
|
+
const color = triangle.polygon.color || [IndexAttributeEscapeValue, IndexAttributeEscapeValue, IndexAttributeEscapeValue, IndexAttributeEscapeValue];
|
|
81
|
+
result.variativeColors = color;
|
|
82
|
+
// Update offset for next triangle
|
|
83
|
+
}
|
|
84
|
+
results.push(result);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Send results back
|
|
88
|
+
const output = {
|
|
89
|
+
vec3s: new Float32Array(counter),
|
|
90
|
+
longLats: new Float32Array(counter / 3 * 2),
|
|
91
|
+
indices: new Uint32Array(indexCounter),
|
|
92
|
+
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
if (_pickableState) {
|
|
96
|
+
output.pickIndices = new Float32Array(counter / 3);
|
|
97
|
+
}
|
|
98
|
+
if (_variativeColorsOnState) {
|
|
99
|
+
output.variativeColors = new Float32Array(counter / 3 * 4);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
let currentVertexOffset = 0;
|
|
103
|
+
let indexOffset = 0;
|
|
104
|
+
for (const result of results) {
|
|
105
|
+
output.vec3s.set(result.vec3s, currentVertexOffset);
|
|
106
|
+
output.longLats.set(result.longLats, (currentVertexOffset / 3) * 2);
|
|
107
|
+
output.indices.set(result.indices.map(i => i + currentVertexOffset / 3), indexOffset);
|
|
108
|
+
currentVertexOffset += result.vec3s.length;
|
|
109
|
+
indexOffset += result.indices.length;
|
|
110
|
+
if (_pickableState) {
|
|
111
|
+
const subArray = output.pickIndices.subarray(currentVertexOffset / 3 - result.vec3s.length / 3, currentVertexOffset / 3);
|
|
112
|
+
subArray.fill(result.pickIndex);
|
|
113
|
+
}
|
|
114
|
+
if (_variativeColorsOnState && result.variativeColors) {
|
|
115
|
+
const vertexCount = result.vec3s.length / 3;
|
|
116
|
+
const colorStartIndex = (currentVertexOffset / 3 - vertexCount) * 4;
|
|
117
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
118
|
+
const offset = colorStartIndex + i * 4;
|
|
119
|
+
output.variativeColors[offset] = result.variativeColors[0];
|
|
120
|
+
output.variativeColors[offset + 1] = result.variativeColors[1];
|
|
121
|
+
output.variativeColors[offset + 2] = result.variativeColors[2];
|
|
122
|
+
output.variativeColors[offset + 3] = result.variativeColors[3];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const buffers = [
|
|
128
|
+
output.vec3s.buffer,
|
|
129
|
+
output.indices.buffer,
|
|
130
|
+
output.longLats.buffer,
|
|
131
|
+
];
|
|
132
|
+
if (pickableState && output.pickIndices) {
|
|
133
|
+
buffers.push(output.pickIndices.buffer);
|
|
134
|
+
}
|
|
135
|
+
if (_variativeColorsOnState && output.variativeColors) {
|
|
136
|
+
buffers.push(output.variativeColors.buffer);
|
|
137
|
+
}
|
|
138
|
+
// eslint-disable-next-line no-restricted-globals
|
|
139
|
+
self.postMessage(output,
|
|
140
|
+
buffers);
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error('Error in worker:', error);
|
|
143
|
+
|
|
144
|
+
// self.postMessage({ error: error.message || 'Unknown error in worker' });
|
|
145
|
+
}
|
|
146
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Requirements
|
|
2
|
+
|
|
3
|
+
- webgl program
|
|
4
|
+
- interaction with globe elevation api
|
|
5
|
+
- mesh algorithm
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# WEBGL PROGRAM
|
|
9
|
+
|
|
10
|
+
Triangles with Webgl picking. Program can have color hightlighting too for selected item.
|
|
11
|
+
|
|
12
|
+
# Interation with Globe Elevation API
|
|
13
|
+
|
|
14
|
+
Elevation resolution is based on camera and focus positions.
|
|
15
|
+
Instead of blindly ask for elevation of coordinates, what else can be done?
|
|
16
|
+
|
|
17
|
+
## 1. Server side solution
|
|
18
|
+
A detailed version can be requested from server. Server create mesh. The mesh preferably high resolution.
|
|
19
|
+
Therefore zoom level and camera information is no longer parameters.
|
|
20
|
+
|
|
21
|
+
On edit mod the change is on fly. Server probably cannot catch the speed of spontanius editting. On this case less detailed mesh can be
|
|
22
|
+
processed be client side. One edit finished, client asks for detailed final version.
|
|
23
|
+
|
|
24
|
+
**Criterias:** Visual compatibility with Globe surface, Performance, Memory, Web Traffic(maybe opening a mesh server at backand)
|
|
25
|
+
|
|
26
|
+
# Mesh Algorithm & Data Structure
|
|
27
|
+
|
|
28
|
+
olygon to elevation mesh
|
|
29
|
+
|
|
30
|
+
Data structure would be points and indexes.
|
|
31
|
+
|
|
32
|
+
Adaptors employed to convert user input to desired ınput.
|
|
33
|
+
|
|
34
|
+
Flat version of mesh can be build on front end if possible
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
***********
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
[-] Mesh algorthm concave
|
|
42
|
+
[-] triangle plugin with gpu picking. input ( key, mesh (Variative size ?) , color,)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
--------
|
|
46
|
+
|
|
47
|
+
# Loading DEM to texture array
|
|
48
|
+
|
|
49
|
+
There is 6 Tiles with dem in an instance of time.
|
|
50
|
+
|
|
51
|
+
These 6 tiles can be loaded to gpu as texture[6].
|
|
52
|
+
And 6 bbox can be loaded as vec4[6] rgba -> ur lr rl ll
|
|
53
|
+
Each vertex finds which tile they are blonged to, and calculate dem from points relative position to their bbox
|
|
54
|
+
If a vertex is not inside of a tile elevation is Zero.
|
|
55
|
+
|
|
56
|
+
****
|
|
57
|
+
|
|
58
|
+
Taking interseption between points of six tile ( 5 * 5 * 6 ) and polygons will give necessery points.
|
|
59
|
+
|
|
60
|
+
In theory, That way we can contract polygon mesh that fits the Elevation model perfectly with minimal count of points.
|
|
61
|
+
|
|
62
|
+
{
|
|
63
|
+
If 'tiles' are not spontaninus. ve can predefine meshes acounding to current zoom level. If zoom level changes the shapes inside visibility bbox will be updated.
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
Hasana sorular
|
|
69
|
+
|
|
70
|
+
Ekrana yüklenen ekrandaki yükseklikler merkez baz alınarak 6 tane
|
|
71
|
+
|
|
72
|
+
5 * 5 * 6 ?
|
|
73
|
+
|
|
74
|
+
bir anda sadece 6 tile in yükseikli ile mi çizim yapılmakta ?
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
GLOBA bunları bboxları ile alabileceğim bir method çıkabilir miyiz?
|
|
78
|
+
|
|
79
|
+
Dönen istekleri alabileceğim
|
|
80
|
+
|
|
81
|
+
--
|
|
82
|
+
|
|
83
|
+
Hasan ile konuştum.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
mesh
|
|
89
|
+
|
|
90
|
+
try mapbox delunay
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { WorkerContact } from "./data/worker-contact";
|
|
2
|
+
import { TextureDemTriangles } from "../../../programs/polygon-on-globe/texture-dem-triangles";
|
|
3
|
+
import { Globe, DrawRangeIndexParams, UBOHandler, DrawRange } from "../../../types";
|
|
4
|
+
import { noRegisterGlobeProgramCache } from "../../../programs/programcache";
|
|
5
|
+
import { PolygonInput, PolygonPluginInput } from "./types";
|
|
6
|
+
import { PickerDisplayer } from "../../../util/picking/picker-displayer";
|
|
7
|
+
import { IndexPolygonMap } from "./data/index-polygon-map";
|
|
8
|
+
import { WorkerOutput, TerrainPolygonOptions } from "./types";
|
|
9
|
+
|
|
10
|
+
export class TerrainPolygonSemiPlugin {
|
|
11
|
+
id: string;
|
|
12
|
+
globe: Globe = null as any;
|
|
13
|
+
private _options: TerrainPolygonOptions = {
|
|
14
|
+
pickable: false,
|
|
15
|
+
variativeColorsOn: false,
|
|
16
|
+
defaultColor: [0.5, 0.5, 1, 1],
|
|
17
|
+
pickedColor: [1, 0, 0, 1],
|
|
18
|
+
opacity: 1.0,
|
|
19
|
+
showTesselationPoints: false,
|
|
20
|
+
};
|
|
21
|
+
private _workerContact: WorkerContact = null as any;
|
|
22
|
+
private _program: TextureDemTriangles = null as any;
|
|
23
|
+
private _pickerDisplayer: PickerDisplayer | null = null;
|
|
24
|
+
private _indexPolygonMap: IndexPolygonMap = new IndexPolygonMap();
|
|
25
|
+
private _lastPickedPolygon: PolygonPluginInput | null = null;
|
|
26
|
+
private _elementArrayBuffer: WebGLBuffer = null as any;
|
|
27
|
+
private _vec3Buffer: WebGLBuffer = null as any;
|
|
28
|
+
private _pickIndexBuffer: WebGLBuffer | null = null;
|
|
29
|
+
private _variativeColorBuffer: WebGLBuffer = null as any;
|
|
30
|
+
private _mercatorXYBuffer: WebGLBuffer = null as any;
|
|
31
|
+
private _vao: WebGLVertexArrayObject = null as any;
|
|
32
|
+
private _uboHandler: UBOHandler = null as any;
|
|
33
|
+
|
|
34
|
+
private _drawPointsRangeIndexParams: DrawRangeIndexParams = {
|
|
35
|
+
drawRange: {
|
|
36
|
+
first: 0,
|
|
37
|
+
count: 0,
|
|
38
|
+
},
|
|
39
|
+
drawMode: WebGL2RenderingContext.POINTS,
|
|
40
|
+
elementBufferIndexType: WebGL2RenderingContext.UNSIGNED_INT,
|
|
41
|
+
elementBuffer: WebGLBuffer = null as any,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
private _drawRangeIndexParams: DrawRangeIndexParams = {
|
|
45
|
+
drawRange: {
|
|
46
|
+
first: 0,
|
|
47
|
+
count: 0,
|
|
48
|
+
},
|
|
49
|
+
drawMode: WebGL2RenderingContext.TRIANGLES,
|
|
50
|
+
elementBufferIndexType: WebGL2RenderingContext.UNSIGNED_INT,
|
|
51
|
+
elementBuffer: WebGLBuffer = null as any,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
constructor(id: string, options: Partial<TerrainPolygonOptions> = {}) {
|
|
55
|
+
this.id = id;
|
|
56
|
+
this._options = { ...this._options, ...options };
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
init(globe: Globe, gl: WebGL2RenderingContext) {
|
|
61
|
+
this.globe = globe;
|
|
62
|
+
|
|
63
|
+
this._drawRangeIndexParams.drawMode = globe.gl.TRIANGLES;
|
|
64
|
+
this._drawRangeIndexParams.elementBufferIndexType = globe.gl.UNSIGNED_INT
|
|
65
|
+
|
|
66
|
+
this._program = noRegisterGlobeProgramCache.getProgram(this.globe, TextureDemTriangles);
|
|
67
|
+
this._elementArrayBuffer = gl.createBuffer();
|
|
68
|
+
this._vec3Buffer = gl.createBuffer();
|
|
69
|
+
this._mercatorXYBuffer = gl.createBuffer();
|
|
70
|
+
|
|
71
|
+
this._uboHandler = this._program.createUBO();
|
|
72
|
+
this._uboHandler.updateSingle("opacity", new Float32Array([this._options.opacity]));
|
|
73
|
+
this._uboHandler.updateSingle("defaultColor", new Float32Array(this._options.defaultColor));
|
|
74
|
+
|
|
75
|
+
if (this._options.pickable) {
|
|
76
|
+
this._pickIndexBuffer = gl.createBuffer();
|
|
77
|
+
this._pickerDisplayer = new PickerDisplayer(this.globe, "R32I");
|
|
78
|
+
this._uboHandler.updateSingle("private_isPickedOn", new Float32Array([1.0]));
|
|
79
|
+
this._uboHandler.updateSingle("pickedColor", new Float32Array(this._options.pickedColor));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (this._options.variativeColorsOn) {
|
|
83
|
+
this._variativeColorBuffer = gl.createBuffer();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this._vao = this._program.createVAO({
|
|
87
|
+
offset: 0,
|
|
88
|
+
stride: 0,
|
|
89
|
+
buffer: this._vec3Buffer
|
|
90
|
+
}, {
|
|
91
|
+
offset: 0,
|
|
92
|
+
stride: 0,
|
|
93
|
+
buffer: this._mercatorXYBuffer
|
|
94
|
+
}, this._options.pickable ? {
|
|
95
|
+
offset: 0,
|
|
96
|
+
stride: 0,
|
|
97
|
+
buffer: this._pickIndexBuffer!
|
|
98
|
+
} : undefined,
|
|
99
|
+
this._options.variativeColorsOn ? {
|
|
100
|
+
offset: 0,
|
|
101
|
+
stride: 0,
|
|
102
|
+
buffer: this._variativeColorBuffer!
|
|
103
|
+
} : undefined
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
this._drawRangeIndexParams.elementBuffer = this._elementArrayBuffer;
|
|
108
|
+
this._workerContact = new WorkerContact(this.globe, this._options, (result: WorkerOutput) => {
|
|
109
|
+
// console.log('TerrainPolygonSemiPlugin received data from worker', result);
|
|
110
|
+
this.setBuffers(result);
|
|
111
|
+
});
|
|
112
|
+
this._drawRangeIndexParams.elementBuffer = this._elementArrayBuffer;
|
|
113
|
+
this._drawPointsRangeIndexParams.elementBuffer = this._elementArrayBuffer;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
insertBulk(polygons: PolygonPluginInput[]) {
|
|
118
|
+
// if (this._indexPolygonMap) {
|
|
119
|
+
polygons = this._indexPolygonMap.insertBulk(polygons);
|
|
120
|
+
// }
|
|
121
|
+
this._workerContact.insertBulk(polygons as PolygonInput[]);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
deleteBulk(keys: string[]) {
|
|
125
|
+
this._workerContact.deleteBulk(keys);
|
|
126
|
+
this._indexPolygonMap.deleteBulk(keys);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
setUniform(name: string, value: any) {
|
|
132
|
+
// check options have the key name
|
|
133
|
+
if (name.startsWith("private_")) {
|
|
134
|
+
throw new Error(`Cannot set private uniform ${name}`);
|
|
135
|
+
}
|
|
136
|
+
if (this._options.hasOwnProperty(name)) {
|
|
137
|
+
if ((this._options as any)[name] === value) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
(this._options as any)[name] = value;
|
|
141
|
+
}
|
|
142
|
+
this._uboHandler.updateSingle(name, value);
|
|
143
|
+
this.globe.DrawRender();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
setOpacity(opacity: number) {
|
|
147
|
+
if (this._options.opacity !== opacity) {
|
|
148
|
+
this._options.opacity = opacity;
|
|
149
|
+
this._uboHandler.updateSingle("opacity", new Float32Array([opacity]));
|
|
150
|
+
this.globe.DrawRender();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
setBuffers(data: WorkerOutput) {
|
|
155
|
+
console.log("TerrainPolygonSemiPlugin updating buffers", data.indices.length / 3, "triangles");
|
|
156
|
+
const gl = this.globe.gl as WebGL2RenderingContext;
|
|
157
|
+
|
|
158
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._elementArrayBuffer);
|
|
159
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data.indices, gl.STREAM_DRAW);
|
|
160
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._vec3Buffer);
|
|
161
|
+
gl.bufferData(gl.ARRAY_BUFFER, data.vec3s, gl.STREAM_DRAW);
|
|
162
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._mercatorXYBuffer);
|
|
163
|
+
gl.bufferData(gl.ARRAY_BUFFER, data.longLats, gl.STREAM_DRAW);
|
|
164
|
+
if (this._options.pickable) {
|
|
165
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._pickIndexBuffer);
|
|
166
|
+
gl.bufferData(gl.ARRAY_BUFFER, data.pickIndices, gl.STREAM_DRAW);
|
|
167
|
+
}
|
|
168
|
+
if (this._options.variativeColorsOn) {
|
|
169
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._variativeColorBuffer);
|
|
170
|
+
gl.bufferData(gl.ARRAY_BUFFER, data.variativeColors!, gl.STREAM_DRAW);
|
|
171
|
+
}
|
|
172
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
173
|
+
this._drawRangeIndexParams.drawRange.count = data.indices.length;
|
|
174
|
+
this._drawPointsRangeIndexParams.drawRange.count = data.indices.length;
|
|
175
|
+
this.globe.DrawRender();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
getPickedPolygon(): PolygonPluginInput | null {
|
|
179
|
+
if (this._options.pickable === false) {
|
|
180
|
+
throw new Error("TerrainPolygonSemiPlugin is not pickable. Set pickable option to true on construction to enable picking.");
|
|
181
|
+
}
|
|
182
|
+
return this._lastPickedPolygon;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
_selfSelect() {
|
|
187
|
+
const { globe, _pickerDisplayer } = this;
|
|
188
|
+
const pos = globe.api_GetMousePos();
|
|
189
|
+
const x = pos.canvasX;
|
|
190
|
+
const y = globe.api_ScrH() - pos.canvasY;
|
|
191
|
+
_pickerDisplayer!.pickXY(x, y, 0, (selectedIDsSet) => {
|
|
192
|
+
if (selectedIDsSet.size > 0) {
|
|
193
|
+
const selectedID = Array.from(selectedIDsSet)[0];
|
|
194
|
+
const newPolygon = this._indexPolygonMap.get(selectedID) || null;
|
|
195
|
+
if (newPolygon !== this._lastPickedPolygon) {
|
|
196
|
+
this._lastPickedPolygon = newPolygon;
|
|
197
|
+
globe.DrawRender();
|
|
198
|
+
this._uboHandler.updateSingle("private_pickedIndex", new Float32Array([selectedID]));
|
|
199
|
+
}
|
|
200
|
+
} else {
|
|
201
|
+
if (this._lastPickedPolygon !== null) {
|
|
202
|
+
this._lastPickedPolygon = null;
|
|
203
|
+
globe.DrawRender();
|
|
204
|
+
this._uboHandler.updateSingle("private_pickedIndex", new Float32Array([-1]));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
clear() {
|
|
213
|
+
this._workerContact.clear();
|
|
214
|
+
this._indexPolygonMap.clear();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// GLOBE API INTERACTION METHODS
|
|
218
|
+
|
|
219
|
+
resize() {
|
|
220
|
+
if (this._options.pickable) {
|
|
221
|
+
this._pickerDisplayer?.resize();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
draw3D() {
|
|
226
|
+
const gl = this.globe.gl as WebGL2RenderingContext;
|
|
227
|
+
gl.disable(gl.DEPTH_TEST);
|
|
228
|
+
|
|
229
|
+
// drawPoints
|
|
230
|
+
if (this._options.showTesselationPoints) {
|
|
231
|
+
this._program.draw(
|
|
232
|
+
this._vao,
|
|
233
|
+
this._drawPointsRangeIndexParams,
|
|
234
|
+
this._uboHandler);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (this._pickerDisplayer) {
|
|
238
|
+
this._pickerDisplayer.bindFBO();
|
|
239
|
+
this._pickerDisplayer.clearTextures();
|
|
240
|
+
// gl.enable(gl.DEPTH_TEST);
|
|
241
|
+
} else {
|
|
242
|
+
// gl.disable(gl.DEPTH_TEST);
|
|
243
|
+
}
|
|
244
|
+
gl.frontFace(gl.CW);
|
|
245
|
+
this._program.draw(
|
|
246
|
+
this._vao,
|
|
247
|
+
this._drawRangeIndexParams,
|
|
248
|
+
this._uboHandler);
|
|
249
|
+
gl.frontFace(gl.CCW);
|
|
250
|
+
|
|
251
|
+
if (this._pickerDisplayer) {
|
|
252
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
253
|
+
this._pickerDisplayer.drawColorTexture();
|
|
254
|
+
this._selfSelect();
|
|
255
|
+
}
|
|
256
|
+
gl.enable(gl.DEPTH_TEST);
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
free() {
|
|
261
|
+
this._workerContact.free();
|
|
262
|
+
noRegisterGlobeProgramCache.releaseProgram(this.globe, TextureDemTriangles);
|
|
263
|
+
|
|
264
|
+
}
|
|
265
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @module WebGLobePlugins/SemiPlugins/ShapeOnTerrain/TerrainPolygon
|
|
4
|
+
* @description
|
|
5
|
+
* Type definitions for TerrainPolygon plugin
|
|
6
|
+
* /
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Color } from "../../../types";
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @type PolygonInput
|
|
15
|
+
* @description
|
|
16
|
+
* Represents the input structure for defining a polygon on terrain.
|
|
17
|
+
* Position starts with the shell vertices followed by hole vertices.
|
|
18
|
+
* @param vertices - A flat array of vertex coordinates (e.g., [x1, y1, x2, y2, ...]).
|
|
19
|
+
* @param holes - An array of indices indicating the start of each hole in the positions array.
|
|
20
|
+
* @param dimensions - The number of dimensions for each vertex (typically 2 for 2D coordinates).
|
|
21
|
+
*/
|
|
22
|
+
export type PolygonPluginInput = {
|
|
23
|
+
key: string;
|
|
24
|
+
geometry: { vertices: number[]; holes: number[] }[]
|
|
25
|
+
color?: Color;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type TerrainPolygonOptions = {
|
|
29
|
+
pickable: boolean;
|
|
30
|
+
variativeColorsOn: boolean;
|
|
31
|
+
defaultColor: Color;
|
|
32
|
+
pickedColor: Color;
|
|
33
|
+
opacity: number;
|
|
34
|
+
showTesselationPoints: boolean;
|
|
35
|
+
pickedCallback?: (polygon: PolygonPluginInput | null) => void;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type PolygonInput = PolygonPluginInput & { index: number };
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
export type TrianglesMiddleData = {
|
|
43
|
+
key: string;
|
|
44
|
+
vertices: number[];
|
|
45
|
+
indices: number[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type BBOXZOOMDATA = {
|
|
49
|
+
minX: number,
|
|
50
|
+
minY: number,
|
|
51
|
+
maxX: number,
|
|
52
|
+
maxY: number,
|
|
53
|
+
zoom: number
|
|
54
|
+
}[];
|
|
55
|
+
|
|
56
|
+
export type WorkerInput = {
|
|
57
|
+
pickableState: boolean | undefined;
|
|
58
|
+
variativeColorsOn: boolean | undefined;
|
|
59
|
+
bboxes: BBOXZOOMDATA | null | undefined;
|
|
60
|
+
insertDeleteQueue: (PolygonPluginInput | string)[] | null | undefined;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export type WorkerOutput = {
|
|
64
|
+
vec3s: Float32Array;
|
|
65
|
+
indices: Uint32Array;
|
|
66
|
+
longLats: Float32Array;
|
|
67
|
+
pickIndices: Float32Array | null;
|
|
68
|
+
variativeColors: Float32Array | null;
|
|
69
|
+
};
|