@pirireis/webglobeplugins 1.0.2 → 1.0.4
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/package.json +2 -2
- package/plugins/alarms/alarmFadeInFadeOutPlugin/AlarmTimeLineFadeInFadeOutPlugin.js +399 -0
- package/{Math/angle-calculation.ts → webglobeplugins/Math/angle-calculation.js} +14 -18
- package/{Math/arc-cdf-points.ts → webglobeplugins/Math/arc-cdf-points.js} +272 -329
- package/{Math/arc-generate-points-exponantial.ts → webglobeplugins/Math/arc-generate-points-exponantial.js} +254 -299
- package/{Math/arc.ts → webglobeplugins/Math/arc.js} +292 -421
- package/{Math → webglobeplugins/Math}/bounds/line-bbox.js +186 -225
- package/{Math/circle-cdf-points.ts → webglobeplugins/Math/circle-cdf-points.js} +78 -143
- package/{Math/circle.ts → webglobeplugins/Math/circle.js} +33 -49
- package/{Math/constants.ts → webglobeplugins/Math/constants.js} +4 -12
- package/{Math/contour/quadtreecontours.ts → webglobeplugins/Math/contour/quadtreecontours.js} +300 -371
- package/{Math → webglobeplugins/Math}/contour/quadtreecontours1.js +298 -336
- package/{Math/finite-line-2d.ts → webglobeplugins/Math/finite-line-2d.js} +58 -68
- package/{Math/haversine.ts → webglobeplugins/Math/haversine.js} +22 -33
- package/webglobeplugins/Math/index.js +1 -0
- package/{Math/juction/arc-plane.ts → webglobeplugins/Math/juction/arc-plane.js} +143 -203
- package/{Math/juction/line-sphere.ts → webglobeplugins/Math/juction/line-sphere.js} +22 -32
- package/{Math/juction/plane-plane.ts → webglobeplugins/Math/juction/plane-plane.js} +53 -62
- package/{Math/line.ts → webglobeplugins/Math/line.js} +52 -84
- package/webglobeplugins/Math/matrix4.js +1 -0
- package/{Math/methods.ts → webglobeplugins/Math/methods.js} +126 -182
- package/{Math/plane.ts → webglobeplugins/Math/plane.js} +56 -92
- package/{Math/quaternion.ts → webglobeplugins/Math/quaternion.js} +106 -128
- package/{Math/templete-shapes/grid-visually-equal.ts → webglobeplugins/Math/templete-shapes/grid-visually-equal.js} +65 -118
- package/webglobeplugins/Math/tessellation/constants.js +1 -0
- package/{Math/tessellation/methods.ts → webglobeplugins/Math/tessellation/methods.js} +49 -79
- package/{Math/tessellation/nearest-value-padding.ts → webglobeplugins/Math/tessellation/nearest-value-padding.js} +112 -147
- package/{Math/tessellation/spherical-triangle-area.ts → webglobeplugins/Math/tessellation/spherical-triangle-area.js} +99 -127
- package/{Math/tessellation/tile-merger.ts → webglobeplugins/Math/tessellation/tile-merger.js} +429 -578
- package/{Math/tessellation/triangle-tessellation.ts → webglobeplugins/Math/tessellation/triangle-tessellation.js} +464 -533
- package/webglobeplugins/Math/tessellation/types.js +1 -0
- package/webglobeplugins/Math/types.js +1 -0
- package/{Math → webglobeplugins/Math}/utils.js +2 -3
- package/{Math/vec3.ts → webglobeplugins/Math/vec3.js} +155 -227
- package/{Math/xyz-tile.ts → webglobeplugins/Math/xyz-tile.js} +18 -26
- package/{algorithms → webglobeplugins/algorithms}/search-binary.js +16 -14
- package/webglobeplugins/altitude-locator/adaptors.js +1 -0
- package/webglobeplugins/altitude-locator/keymethod.js +1 -0
- package/{altitude-locator → webglobeplugins/altitude-locator}/plugin.js +344 -445
- package/{altitude-locator → webglobeplugins/altitude-locator}/types.js +21 -26
- package/{compass-rose → webglobeplugins/compass-rose}/compass-rose-padding-flat.js +230 -274
- package/{compass-rose/compass-text-writer.ts → webglobeplugins/compass-rose/compass-text-writer.js} +155 -210
- package/{compass-rose → webglobeplugins/compass-rose}/index.js +3 -3
- package/{constants.ts → webglobeplugins/constants.js} +6 -8
- package/{heatwave → webglobeplugins/heatwave}/datamanager.js +149 -168
- package/{heatwave → webglobeplugins/heatwave}/heatwave.js +206 -261
- package/{heatwave → webglobeplugins/heatwave}/index.js +5 -5
- package/{heatwave → webglobeplugins/heatwave}/isobar.js +306 -340
- package/{heatwave/texture-point-sampler.ts → webglobeplugins/heatwave/texture-point-sampler.js} +187 -220
- package/webglobeplugins/investigation-tools/draw/tiles/adapters.js +67 -0
- package/{investigation-tools/draw/tiles/tiles.ts → webglobeplugins/investigation-tools/draw/tiles/tiles.js} +128 -162
- package/{jest.config.js → webglobeplugins/jest.config.js} +7 -6
- package/{pin → webglobeplugins/pin}/pin-object-array1.js +300 -381
- package/{pin → webglobeplugins/pin}/pin-point-totem1.js +60 -77
- package/{programs → webglobeplugins/programs}/arrowfield/arrow-field.js +60 -89
- package/{programs → webglobeplugins/programs}/arrowfield/logic.js +141 -173
- package/{programs → webglobeplugins/programs}/data2legend/density-to-legend.js +68 -86
- package/{programs → webglobeplugins/programs}/data2legend/point-to-density-texture.js +67 -84
- package/{programs → webglobeplugins/programs}/float2legendwithratio/index.js +2 -3
- package/{programs → webglobeplugins/programs}/float2legendwithratio/logic.js +118 -144
- package/{programs → webglobeplugins/programs}/float2legendwithratio/object.js +104 -141
- package/{programs → webglobeplugins/programs}/helpers/blender.js +58 -73
- package/{programs/helpers/fadeaway.ts → webglobeplugins/programs/helpers/fadeaway.js} +60 -73
- package/{programs → webglobeplugins/programs}/index.js +20 -19
- package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-3d.js +85 -112
- package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-flat.js +148 -200
- package/{programs → webglobeplugins/programs}/line-on-globe/degree-padding-around-circle-3d.js +102 -134
- package/webglobeplugins/programs/line-on-globe/index.js +1 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/lines-color-instanced-flat.js +80 -99
- package/webglobeplugins/programs/line-on-globe/linestrip/data.js +4 -0
- package/{programs/line-on-globe/linestrip/linestrip.ts → webglobeplugins/programs/line-on-globe/linestrip/linestrip.js} +93 -152
- package/{programs/line-on-globe/naive-accurate-flexible.ts → webglobeplugins/programs/line-on-globe/naive-accurate-flexible.js} +126 -175
- package/{programs → webglobeplugins/programs}/line-on-globe/util.js +5 -8
- package/{programs → webglobeplugins/programs}/picking/pickable-polygon-renderer.js +98 -129
- package/{programs → webglobeplugins/programs}/picking/pickable-renderer.js +98 -130
- package/{programs → webglobeplugins/programs}/point-on-globe/element-globe-surface-glow.js +93 -122
- package/{programs → webglobeplugins/programs}/point-on-globe/element-point-glow.js +80 -114
- package/{programs → webglobeplugins/programs}/point-on-globe/square-pixel-point.js +121 -139
- package/{programs/polygon-on-globe/texture-dem-triangles.ts → webglobeplugins/programs/polygon-on-globe/texture-dem-triangles.js} +178 -209
- package/{programs/programcache.ts → webglobeplugins/programs/programcache.js} +126 -134
- package/webglobeplugins/programs/rings/index.js +1 -0
- package/{programs/rings/partial-ring/piece-of-pie.ts → webglobeplugins/programs/rings/partial-ring/piece-of-pie.js} +152 -222
- package/webglobeplugins/programs/totems/attachments/adaptive-opacity.js +131 -0
- package/{programs/totems/dem-textures-manager.ts → webglobeplugins/programs/totems/attachments/dem-textures-manager.js} +263 -360
- package/webglobeplugins/programs/totems/camera-totem-attactment-interface.js +1 -0
- package/{programs/totems/camerauniformblock.ts → webglobeplugins/programs/totems/camerauniformblock.js} +225 -310
- package/{programs/totems/canvas-webglobe-info.ts → webglobeplugins/programs/totems/canvas-webglobe-info.js} +132 -147
- package/{programs/totems/globe-changes.ts → webglobeplugins/programs/totems/globe-changes.js} +59 -79
- package/{programs → webglobeplugins/programs}/totems/gpu-selection-uniform-block.js +99 -127
- package/{programs/totems/index.ts → webglobeplugins/programs/totems/index.js} +2 -2
- package/{programs → webglobeplugins/programs}/two-d/pixel-padding-for-compass.js +87 -101
- package/{programs → webglobeplugins/programs}/util.js +14 -19
- package/{programs/vectorfields/logics/constants.ts → webglobeplugins/programs/vectorfields/logics/constants.js} +4 -5
- package/{programs/vectorfields/logics/drawrectangleparticles.ts → webglobeplugins/programs/vectorfields/logics/drawrectangleparticles.js} +107 -136
- package/{programs → webglobeplugins/programs}/vectorfields/logics/index.js +2 -4
- package/webglobeplugins/programs/vectorfields/logics/particle-ubo.js +19 -0
- package/{programs/vectorfields/logics/pixelbased.ts → webglobeplugins/programs/vectorfields/logics/pixelbased.js} +89 -122
- package/{programs → webglobeplugins/programs}/vectorfields/logics/ubo.js +51 -57
- package/{programs/vectorfields/pingpongbuffermanager.ts → webglobeplugins/programs/vectorfields/pingpongbuffermanager.js} +99 -113
- package/{range-tools-on-terrain/bearing-line/adapters.ts → webglobeplugins/range-tools-on-terrain/bearing-line/adapters.js} +114 -154
- package/{range-tools-on-terrain/bearing-line/plugin.ts → webglobeplugins/range-tools-on-terrain/bearing-line/plugin.js} +457 -569
- package/webglobeplugins/range-tools-on-terrain/bearing-line/types.js +1 -0
- package/{range-tools-on-terrain/circle-line-chain/adapters.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/adapters.js} +85 -104
- package/{range-tools-on-terrain/circle-line-chain/chain-list-map.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/chain-list-map.js} +382 -446
- package/{range-tools-on-terrain/circle-line-chain/plugin.ts → webglobeplugins/range-tools-on-terrain/circle-line-chain/plugin.js} +464 -607
- package/webglobeplugins/range-tools-on-terrain/circle-line-chain/types.js +1 -0
- package/{range-tools-on-terrain/range-ring/adapters.ts → webglobeplugins/range-tools-on-terrain/range-ring/adapters.js} +93 -114
- package/{range-tools-on-terrain/range-ring/enum.ts → webglobeplugins/range-tools-on-terrain/range-ring/enum.js} +2 -2
- package/{range-tools-on-terrain/range-ring/plugin.ts → webglobeplugins/range-tools-on-terrain/range-ring/plugin.js} +377 -444
- package/webglobeplugins/range-tools-on-terrain/range-ring/rangeringangletext.js +331 -0
- package/webglobeplugins/range-tools-on-terrain/range-ring/types.js +9 -0
- package/webglobeplugins/semiplugins/interface.js +1 -0
- package/{semiplugins/lightweight/line-plugin.ts → webglobeplugins/semiplugins/lightweight/line-plugin.js} +221 -342
- package/{semiplugins/lightweight/piece-of-pie-plugin.ts → webglobeplugins/semiplugins/lightweight/piece-of-pie-plugin.js} +200 -275
- package/{semiplugins/shape-on-terrain/arc-plugin.ts → webglobeplugins/semiplugins/shape-on-terrain/arc-plugin.js} +481 -616
- package/{semiplugins/shape-on-terrain/circle-plugin.ts → webglobeplugins/semiplugins/shape-on-terrain/circle-plugin.js} +444 -588
- package/{semiplugins/shape-on-terrain/padding-1-degree.ts → webglobeplugins/semiplugins/shape-on-terrain/padding-1-degree.js} +539 -713
- package/{semiplugins/shape-on-terrain/terrain-polygon/adapters.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/adapters.js} +55 -69
- package/{semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/cache.js} +104 -149
- package/{semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.js} +45 -58
- package/{semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/manager.js} +4 -4
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +241 -0
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +76 -0
- package/{semiplugins/shape-on-terrain/terrain-polygon/data/random.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/random.js} +121 -165
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/types.js +1 -0
- package/{semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.js} +64 -81
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +162 -0
- package/{semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts → webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.js} +282 -265
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/test-records.js +14 -0
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/types.js +8 -0
- package/webglobeplugins/semiplugins/shell/bbox-renderer/index.js +2 -0
- package/{semiplugins/shell/bbox-renderer/logic.ts → webglobeplugins/semiplugins/shell/bbox-renderer/logic.js} +209 -273
- package/webglobeplugins/semiplugins/shell/bbox-renderer/object.js +78 -0
- package/webglobeplugins/semiplugins/type.js +1 -0
- package/{semiplugins/utility/container-plugin.ts → webglobeplugins/semiplugins/utility/container-plugin.js} +94 -126
- package/{semiplugins/utility/object-pass-container-plugin.ts → webglobeplugins/semiplugins/utility/object-pass-container-plugin.js} +80 -101
- package/{shaders → webglobeplugins/shaders}/fragment-toy/firework.js +1 -1
- package/{shaders → webglobeplugins/shaders}/fragment-toy/singularity.js +2 -5
- package/{tracks → webglobeplugins/tracks}/point-heat-map/adaptors/timetracksplugin-format-to-this.js +63 -78
- package/webglobeplugins/tracks/point-heat-map/index.js +1 -0
- package/{tracks → webglobeplugins/tracks}/point-heat-map/plugin-webworker.js +121 -148
- package/{tracks → webglobeplugins/tracks}/point-heat-map/point-to-heat-map-flow.js +121 -150
- package/{tracks → webglobeplugins/tracks}/point-tracks/key-methods.js +2 -3
- package/{tracks → webglobeplugins/tracks}/point-tracks/plugin.js +401 -487
- package/{tracks → webglobeplugins/tracks}/timetracks/adaptors-line-strip.js +65 -79
- package/{tracks → webglobeplugins/tracks}/timetracks/plugin-line-strip.js +240 -295
- package/{tracks → webglobeplugins/tracks}/timetracks/program-line-strip.js +413 -495
- package/{tracks → webglobeplugins/tracks}/timetracks/programpoint-line-strip.js +109 -137
- package/webglobeplugins/types.js +19 -0
- package/{util → webglobeplugins/util}/account/bufferoffsetmanager.js +176 -209
- package/webglobeplugins/util/account/create-buffermap-orchastration.js +39 -0
- package/{util → webglobeplugins/util}/account/index.js +3 -6
- package/{util/account/single-attribute-buffer-management/buffer-manager.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-manager.js} +119 -151
- package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +212 -238
- package/{util/account/single-attribute-buffer-management/buffer-orchestrator1.ts → webglobeplugins/util/account/single-attribute-buffer-management/buffer-orchestrator1.js} +159 -184
- package/{util/account/single-attribute-buffer-management/index.ts → webglobeplugins/util/account/single-attribute-buffer-management/index.js} +4 -11
- package/{util/account/single-attribute-buffer-management/object-store.ts → webglobeplugins/util/account/single-attribute-buffer-management/object-store.js} +55 -76
- package/webglobeplugins/util/account/single-attribute-buffer-management/types.js +1 -0
- package/{util → webglobeplugins/util}/account/util.js +18 -22
- package/webglobeplugins/util/algorithms/index.js +1 -0
- package/{util → webglobeplugins/util}/algorithms/search-binary.js +25 -26
- package/{util/build-strategy/static-dynamic.ts → webglobeplugins/util/build-strategy/static-dynamic.js} +41 -50
- package/webglobeplugins/util/check/index.js +1 -0
- package/webglobeplugins/util/check/typecheck.js +66 -0
- package/{util/frame-counter-trigger.ts → webglobeplugins/util/frame-counter-trigger.js} +84 -99
- package/{util/geometry/index.ts → webglobeplugins/util/geometry/index.js} +121 -155
- package/webglobeplugins/util/gl-util/buffer/attribute-loader.js +74 -0
- package/{util/gl-util/buffer/index.ts → webglobeplugins/util/gl-util/buffer/index.js} +3 -6
- package/{util/gl-util/draw-options/methods.ts → webglobeplugins/util/gl-util/draw-options/methods.js} +32 -47
- package/{util/gl-util/uniform-block/manager.ts → webglobeplugins/util/gl-util/uniform-block/manager.js} +209 -232
- package/{util/globe-default-gl-states.ts → webglobeplugins/util/globe-default-gl-states.js} +4 -5
- package/{util/helper-methods.ts → webglobeplugins/util/helper-methods.js} +8 -9
- package/{util → webglobeplugins/util}/index.js +10 -9
- package/webglobeplugins/util/interpolation/index.js +1 -0
- package/webglobeplugins/util/interpolation/timetrack/index.js +2 -0
- package/{util → webglobeplugins/util}/interpolation/timetrack/timetrack-interpolator.js +79 -94
- package/{util → webglobeplugins/util}/interpolation/timetrack/web-worker.js +46 -51
- package/{util/picking/fence.ts → webglobeplugins/util/picking/fence.js} +43 -47
- package/{util/picking/picker-displayer.ts → webglobeplugins/util/picking/picker-displayer.js} +176 -226
- package/{util → webglobeplugins/util}/programs/draw-from-pixel-coords.js +164 -201
- package/{util/programs/draw-texture-on-canvas.ts → webglobeplugins/util/programs/draw-texture-on-canvas.js} +69 -91
- package/{util → webglobeplugins/util}/programs/supersampletotextures.js +97 -130
- package/{util/programs/texturetoglobe.js → webglobeplugins/util/programs/texturetoglobe_delete.js} +128 -153
- package/{util/shaderfunctions/geometrytransformations.ts → webglobeplugins/util/shaderfunctions/geometrytransformations.js} +44 -106
- package/{util → webglobeplugins/util}/shaderfunctions/index.js +2 -2
- package/{util → webglobeplugins/util}/shaderfunctions/nodata.js +2 -4
- package/{util → webglobeplugins/util}/shaderfunctions/noisefunctions.js +7 -10
- package/{util/webglobjectbuilders.ts → webglobeplugins/util/webglobjectbuilders.js} +358 -446
- package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/adaptor.js +11 -11
- package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/index.js +3 -3
- package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/plugin.js +83 -128
- package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/adaptor.js +15 -16
- package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/index.js +3 -3
- package/{vectorfield/waveparticles/plugin.ts → webglobeplugins/vectorfield/waveparticles/plugin.js} +455 -506
- package/webglobeplugins/vectorfield/wind/adapters/image-to-fields.js +92 -0
- package/webglobeplugins/vectorfield/wind/adapters/types.js +1 -0
- package/{vectorfield/wind/imagetovectorfieldandmagnitude.ts → webglobeplugins/vectorfield/wind/imagetovectorfieldandmagnitude.js} +53 -78
- package/{vectorfield → webglobeplugins/vectorfield}/wind/index.js +5 -5
- package/{vectorfield/wind/plugin-persistant.ts → webglobeplugins/vectorfield/wind/plugin-persistant.js} +390 -483
- package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin.js +685 -883
- package/{vectorfield → webglobeplugins/vectorfield}/wind/vectorfieldimage.js +23 -27
- package/{write-text/context-text-bulk.ts → webglobeplugins/write-text/context-text-bulk.js} +200 -285
- package/webglobeplugins/write-text/context-text3.js +167 -0
- package/{write-text/context-text4.ts → webglobeplugins/write-text/context-text4.js} +146 -231
- package/{write-text → webglobeplugins/write-text}/context-textDELETE.js +94 -125
- package/{write-text/objectarraylabels/index.ts → webglobeplugins/write-text/objectarraylabels/index.js} +2 -2
- package/{write-text → webglobeplugins/write-text}/objectarraylabels/objectarraylabels.js +200 -247
- package/Math/index.js +0 -0
- package/Math/matrix4.ts +0 -0
- package/Math/mesh/mapbox-delaunay.d.ts +0 -74
- package/Math/roadmap.md +0 -10
- package/Math/tessellation/constants.ts +0 -1
- package/Math/tessellation/roadmap.md +0 -48
- package/Math/tessellation/types.ts +0 -1
- package/Math/types.ts +0 -68
- package/altitude-locator/adaptors.js +0 -0
- package/altitude-locator/keymethod.js +0 -0
- package/investigation-tools/draw/tiles/adapters.ts +0 -133
- package/programs/line-on-globe/index.js +0 -0
- package/programs/line-on-globe/linestrip/data.ts +0 -29
- package/programs/polygon-on-globe/roadmap.md +0 -8
- package/programs/rings/index.js +0 -1
- package/programs/totems/camera-totem-attactment-interface.ts +0 -4
- package/programs/vectorfields/logics/particle-ubo.ts +0 -23
- package/publish.bat +0 -62
- package/range-tools-on-terrain/bearing-line/types.ts +0 -65
- package/range-tools-on-terrain/circle-line-chain/types.ts +0 -43
- package/range-tools-on-terrain/range-ring/rangeringangletext.ts +0 -396
- package/range-tools-on-terrain/range-ring/types.ts +0 -30
- package/semiplugins/interface.ts +0 -14
- package/semiplugins/shape-on-terrain/goal.md +0 -12
- package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +0 -20
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +0 -196
- package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +0 -209
- package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +0 -144
- package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +0 -5
- package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +0 -37
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +0 -146
- package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +0 -90
- package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +0 -69
- package/semiplugins/shell/bbox-renderer/index.ts +0 -2
- package/semiplugins/shell/bbox-renderer/object.ts +0 -129
- package/semiplugins/type.ts +0 -8
- package/terrain-plugin.mmd +0 -83
- package/tests/Math/arc-sampling-test.js +0 -367
- package/tests/Math/arc-sampling-test.ts +0 -429
- package/tests/Math/arc.test.ts +0 -77
- package/tests/Math/junction/arc-limit.test.ts +0 -7
- package/tests/Math/junction/arc-plane-points.test.ts +0 -196
- package/tests/Math/junction/arc-plane.test.ts +0 -172
- package/tests/Math/junction/line-sphere.test.ts +0 -127
- package/tests/Math/junction/plane-plane.test.ts +0 -91
- package/tests/Math/plane-test.ts +0 -17
- package/tests/Math/plane.test.ts +0 -43
- package/tests/Math/vec3.test.ts +0 -33
- package/tracks/point-heat-map/index.js +0 -0
- package/tracks/point-heat-map/readme.md +0 -15
- package/tracks/timetracks/readme.md +0 -1
- package/tsconfig.json +0 -22
- package/types/@pirireis/webglobe.d.ts +0 -102
- package/types/delaunator.d.ts +0 -40
- package/types/earcut.d.ts +0 -11
- package/types/rbush.d.ts +0 -57
- package/types.ts +0 -319
- package/util/account/create-buffermap-orchastration.ts +0 -85
- package/util/account/single-attribute-buffer-management/types.ts +0 -43
- package/util/algorithms/index.js +0 -0
- package/util/check/index.js +0 -0
- package/util/check/typecheck.ts +0 -74
- package/util/gl-util/buffer/attribute-loader.ts +0 -84
- package/util/interpolation/index.js +0 -0
- package/util/interpolation/timetrack/index.js +0 -9
- package/vectorfield/wind/adapters/image-to-fields.ts +0 -74
- package/vectorfield/wind/adapters/types.ts +0 -12
- package/vectorfield/wind/plugin-persistant copy.ts +0 -461
- package/write-text/context-text3.ts +0 -252
- package/write-text/objectarraylabels/objectarraylabels.d.ts +0 -72
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/// <reference lib="webworker" />
|
|
2
|
-
|
|
3
|
-
import { PolygonInput, WorkerInput, WorkerOutput, BBOXZOOMDATA } from "../types";
|
|
4
|
-
|
|
5
|
-
interface WorkerWrapper {
|
|
6
|
-
worker: Worker;
|
|
7
|
-
inProgress: boolean;
|
|
8
|
-
insertDeleteQueue: (PolygonInput | string)[];
|
|
9
|
-
lastBBOXData: BBOXZOOMDATA | null;
|
|
10
|
-
itemCount: number;
|
|
11
|
-
lastOutput: WorkerOutput | null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const _workers: WorkerWrapper[] = [];
|
|
15
|
-
const _workerMap: Map<string, number> = new Map();
|
|
16
|
-
let _maxWorkers = 4; // Default, updated in init
|
|
17
|
-
let _nextWorkerIndex = 0;
|
|
18
|
-
|
|
19
|
-
// Configuration state to pass to new workers or re-broadcast
|
|
20
|
-
let _pickableState: boolean | undefined;
|
|
21
|
-
let _variativeColorsOn: boolean | undefined;
|
|
22
|
-
|
|
23
|
-
// Initialize workers
|
|
24
|
-
function initWorkers() {
|
|
25
|
-
_maxWorkers = Math.max(1, (navigator.hardwareConcurrency || 4) - 1);
|
|
26
|
-
for (let i = 0; i < _maxWorkers; i++) {
|
|
27
|
-
addWorker();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function addWorker() {
|
|
32
|
-
// @ts-ignore
|
|
33
|
-
const worker = new Worker(new URL("./worker.js", import.meta.url), { type: 'module' });
|
|
34
|
-
|
|
35
|
-
const wrapper: WorkerWrapper = {
|
|
36
|
-
worker,
|
|
37
|
-
inProgress: false,
|
|
38
|
-
insertDeleteQueue: [],
|
|
39
|
-
lastBBOXData: null,
|
|
40
|
-
itemCount: 0,
|
|
41
|
-
lastOutput: null
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
worker.onmessage = (event: MessageEvent<WorkerOutput>) => {
|
|
45
|
-
wrapper.inProgress = false;
|
|
46
|
-
wrapper.lastOutput = event.data;
|
|
47
|
-
mergeAndSendResults();
|
|
48
|
-
sendToSubWorker(wrapper);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Initialize sub-worker with current global state
|
|
52
|
-
worker.postMessage({
|
|
53
|
-
pickableState: _pickableState,
|
|
54
|
-
variativeColorsOn: _variativeColorsOn,
|
|
55
|
-
insertDeleteQueue: [],
|
|
56
|
-
bboxes: null,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
_workers.push(wrapper);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function mergeAndSendResults() {
|
|
63
|
-
let totalVec3s = 0;
|
|
64
|
-
let totalIndices = 0;
|
|
65
|
-
let totalLongLats = 0;
|
|
66
|
-
let totalPickIndices = 0;
|
|
67
|
-
let totalVariativeColors = 0;
|
|
68
|
-
|
|
69
|
-
const validOutputs: WorkerOutput[] = [];
|
|
70
|
-
|
|
71
|
-
for (const w of _workers) {
|
|
72
|
-
if (w.lastOutput) {
|
|
73
|
-
validOutputs.push(w.lastOutput);
|
|
74
|
-
totalVec3s += w.lastOutput.vec3s.length;
|
|
75
|
-
totalIndices += w.lastOutput.indices.length;
|
|
76
|
-
totalLongLats += w.lastOutput.longLats.length;
|
|
77
|
-
if (w.lastOutput.pickIndices) totalPickIndices += w.lastOutput.pickIndices.length;
|
|
78
|
-
if (w.lastOutput.variativeColors) totalVariativeColors += w.lastOutput.variativeColors.length;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (validOutputs.length === 0) return;
|
|
83
|
-
|
|
84
|
-
const merged: WorkerOutput = {
|
|
85
|
-
vec3s: new Float32Array(totalVec3s),
|
|
86
|
-
indices: new Uint32Array(totalIndices),
|
|
87
|
-
longLats: new Float32Array(totalLongLats),
|
|
88
|
-
pickIndices: totalPickIndices > 0 ? new Float32Array(totalPickIndices) : null,
|
|
89
|
-
variativeColors: totalVariativeColors > 0 ? new Float32Array(totalVariativeColors) : null
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
let offsetVec3s = 0;
|
|
93
|
-
let offsetIndices = 0;
|
|
94
|
-
let offsetLongLats = 0;
|
|
95
|
-
let offsetPickIndices = 0;
|
|
96
|
-
let offsetVariativeColors = 0;
|
|
97
|
-
let vertexOffset = 0;
|
|
98
|
-
|
|
99
|
-
for (const out of validOutputs) {
|
|
100
|
-
merged.vec3s.set(out.vec3s, offsetVec3s);
|
|
101
|
-
offsetVec3s += out.vec3s.length;
|
|
102
|
-
|
|
103
|
-
for (let i = 0; i < out.indices.length; i++) {
|
|
104
|
-
merged.indices[offsetIndices + i] = out.indices[i] + vertexOffset;
|
|
105
|
-
}
|
|
106
|
-
offsetIndices += out.indices.length;
|
|
107
|
-
vertexOffset += out.vec3s.length / 3;
|
|
108
|
-
|
|
109
|
-
merged.longLats.set(out.longLats, offsetLongLats);
|
|
110
|
-
offsetLongLats += out.longLats.length;
|
|
111
|
-
|
|
112
|
-
if (merged.pickIndices && out.pickIndices) {
|
|
113
|
-
merged.pickIndices.set(out.pickIndices, offsetPickIndices);
|
|
114
|
-
offsetPickIndices += out.pickIndices.length;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (merged.variativeColors && out.variativeColors) {
|
|
118
|
-
merged.variativeColors.set(out.variativeColors, offsetVariativeColors);
|
|
119
|
-
offsetVariativeColors += out.variativeColors.length;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Send merged result to Main Thread
|
|
124
|
-
self.postMessage(merged, [
|
|
125
|
-
merged.vec3s.buffer,
|
|
126
|
-
merged.indices.buffer,
|
|
127
|
-
merged.longLats.buffer,
|
|
128
|
-
...(merged.pickIndices ? [merged.pickIndices.buffer] : []),
|
|
129
|
-
...(merged.variativeColors ? [merged.variativeColors.buffer] : [])
|
|
130
|
-
]);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function sendToSubWorker(wrapper: WorkerWrapper) {
|
|
134
|
-
if (wrapper.inProgress) return;
|
|
135
|
-
if (wrapper.insertDeleteQueue.length === 0 && wrapper.lastBBOXData === null) return;
|
|
136
|
-
|
|
137
|
-
wrapper.inProgress = true;
|
|
138
|
-
wrapper.worker.postMessage({
|
|
139
|
-
pickableState: undefined, // State is set on init, only send updates if needed
|
|
140
|
-
variativeColorsOn: undefined,
|
|
141
|
-
bboxes: wrapper.lastBBOXData,
|
|
142
|
-
insertDeleteQueue: wrapper.insertDeleteQueue,
|
|
143
|
-
} as WorkerInput);
|
|
144
|
-
|
|
145
|
-
wrapper.lastBBOXData = null;
|
|
146
|
-
wrapper.insertDeleteQueue = [];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function triggerAllWorkers() {
|
|
150
|
-
for (const w of _workers) {
|
|
151
|
-
sendToSubWorker(w);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Handle messages from Main Thread
|
|
156
|
-
self.onmessage = (event: MessageEvent<WorkerInput>) => {
|
|
157
|
-
const { bboxes, insertDeleteQueue, pickableState, variativeColorsOn } = event.data;
|
|
158
|
-
|
|
159
|
-
// Initialize if not already done
|
|
160
|
-
if (_workers.length === 0) {
|
|
161
|
-
_pickableState = pickableState;
|
|
162
|
-
_variativeColorsOn = variativeColorsOn;
|
|
163
|
-
initWorkers();
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Handle BBOX updates
|
|
167
|
-
if (bboxes) {
|
|
168
|
-
for (const w of _workers) {
|
|
169
|
-
w.lastBBOXData = bboxes;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Handle Insert/Delete
|
|
174
|
-
if (insertDeleteQueue && insertDeleteQueue.length > 0) {
|
|
175
|
-
if (insertDeleteQueue[0] === "__CLEAR_ALL_ITEMS__") {
|
|
176
|
-
_workerMap.clear();
|
|
177
|
-
for (const w of _workers) {
|
|
178
|
-
w.insertDeleteQueue = ["__CLEAR_ALL_ITEMS__"];
|
|
179
|
-
w.itemCount = 0;
|
|
180
|
-
w.lastOutput = null;
|
|
181
|
-
}
|
|
182
|
-
} else {
|
|
183
|
-
for (const item of insertDeleteQueue) {
|
|
184
|
-
if (typeof item === 'string') {
|
|
185
|
-
// Delete
|
|
186
|
-
const workerIdx = _workerMap.get(item);
|
|
187
|
-
if (workerIdx !== undefined) {
|
|
188
|
-
_workers[workerIdx].insertDeleteQueue.push(item);
|
|
189
|
-
_workers[workerIdx].itemCount--;
|
|
190
|
-
_workerMap.delete(item);
|
|
191
|
-
}
|
|
192
|
-
} else {
|
|
193
|
-
// Insert
|
|
194
|
-
let workerIdx = _workerMap.get(item.key);
|
|
195
|
-
if (workerIdx === undefined) {
|
|
196
|
-
workerIdx = _nextWorkerIndex;
|
|
197
|
-
_workerMap.set(item.key, workerIdx);
|
|
198
|
-
_workers[workerIdx].itemCount++;
|
|
199
|
-
_nextWorkerIndex = (_nextWorkerIndex + 1) % _workers.length;
|
|
200
|
-
}
|
|
201
|
-
_workers[workerIdx].insertDeleteQueue.push(item.key);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Trigger all workers to process the new data
|
|
208
|
-
triggerAllWorkers();
|
|
209
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* # Purpose
|
|
3
|
-
* Divide long edges of polygons into smaller segments
|
|
4
|
-
*
|
|
5
|
-
* This algorithm should be called after earcutting / triangulation.
|
|
6
|
-
* Then earcut should run second time to further divide long edges.
|
|
7
|
-
*
|
|
8
|
-
* populate points on a arc between two given points on a sphere
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import { Radian } from "../../../../types";
|
|
14
|
-
|
|
15
|
-
import { PolygonPluginInput, TrianglesMiddleData } from "../types";
|
|
16
|
-
import { haversine } from "../../../../Math/haversine";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import earcut from "earcut";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
function __pointsInBetweenGreateCircle(
|
|
27
|
-
lat1: Radian,
|
|
28
|
-
lon1: Radian,
|
|
29
|
-
lat2: Radian,
|
|
30
|
-
lon2: Radian,
|
|
31
|
-
unitSphereDistance: number
|
|
32
|
-
): number[] | null {
|
|
33
|
-
const points: number[] = [];
|
|
34
|
-
|
|
35
|
-
const d1 = haversine(lat1, lon1, lat2, lon2);
|
|
36
|
-
if (d1 <= unitSphereDistance) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const numSegments = Math.ceil(d1 / unitSphereDistance);
|
|
41
|
-
for (let i = 1; i < numSegments; i++) {
|
|
42
|
-
const f = i / numSegments;
|
|
43
|
-
const A = Math.sin((1 - f) * d1) / Math.sin(d1);
|
|
44
|
-
const B = Math.sin(f * d1) / Math.sin(d1);
|
|
45
|
-
const x = A * Math.cos(lat1) * Math.cos(lon1) + B * Math.cos(lat2) * Math.cos(lon2);
|
|
46
|
-
const y = A * Math.cos(lat1) * Math.sin(lon1) + B * Math.cos(lat2) * Math.sin(lon2);
|
|
47
|
-
const z = A * Math.sin(lat1) + B * Math.sin(lat2);
|
|
48
|
-
const latN = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
49
|
-
const lonN = Math.atan2(y, x);
|
|
50
|
-
points.push(latN, lonN);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return points;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
function _dividePolygonEdgeSize(
|
|
59
|
-
polygon: PolygonPluginInput,
|
|
60
|
-
kmThreshold: number
|
|
61
|
-
): PolygonPluginInput {
|
|
62
|
-
const unitSphereDistance = kmThreshold / 6371; // Earth radius in km
|
|
63
|
-
|
|
64
|
-
const newGeometries = polygon.geometry.map(geom => {
|
|
65
|
-
const { vertices, holes } = geom;
|
|
66
|
-
const newVertices: number[] = [];
|
|
67
|
-
const newHoles: number[] = [];
|
|
68
|
-
|
|
69
|
-
const processRing = (start: number, end: number) => {
|
|
70
|
-
for (let i = start; i < end; i++) {
|
|
71
|
-
const long1 = vertices[2 * i];
|
|
72
|
-
const lat1 = vertices[2 * i + 1];
|
|
73
|
-
const next_i = (i + 1 < end) ? i + 1 : start;
|
|
74
|
-
const long2 = vertices[2 * next_i];
|
|
75
|
-
const lat2 = vertices[2 * next_i + 1];
|
|
76
|
-
|
|
77
|
-
newVertices.push(long1, lat1);
|
|
78
|
-
const extraPoints = __pointsInBetweenGreateCircle(
|
|
79
|
-
lat1, long1, lat2, long2, unitSphereDistance
|
|
80
|
-
);
|
|
81
|
-
if (extraPoints) {
|
|
82
|
-
newVertices.push(...extraPoints);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
const shellEnd = holes.length > 0 ? holes[0] : vertices.length / 2;
|
|
88
|
-
processRing(0, shellEnd);
|
|
89
|
-
|
|
90
|
-
for (let h = 0; h < holes.length; h++) {
|
|
91
|
-
newHoles.push(newVertices.length / 2);
|
|
92
|
-
const holeStart = holes[h];
|
|
93
|
-
const holeEnd = h + 1 < holes.length ? holes[h + 1] : vertices.length / 2;
|
|
94
|
-
processRing(holeStart, holeEnd);
|
|
95
|
-
}
|
|
96
|
-
return { vertices: newVertices, holes: newHoles };
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
...polygon,
|
|
101
|
-
geometry: newGeometries,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// TODO:
|
|
106
|
-
// divide TrianglesMiddleData edges longer than threshold
|
|
107
|
-
// function _divideTriangleEdges(
|
|
108
|
-
// key: string,
|
|
109
|
-
// vertices: number[],
|
|
110
|
-
// indices: number[],
|
|
111
|
-
// kmThreshold: number // maybe
|
|
112
|
-
// ): TrianglesMiddleData {
|
|
113
|
-
// return { key, vertices, indices };
|
|
114
|
-
// }
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// TODO: NEED TEST
|
|
119
|
-
function triangulation(polygon: PolygonPluginInput, kmThreshold: number): TrianglesMiddleData {
|
|
120
|
-
|
|
121
|
-
const finalVertices: number[] = [];
|
|
122
|
-
const finalIndices: number[] = [];
|
|
123
|
-
let vertexIndexOffset = 0;
|
|
124
|
-
|
|
125
|
-
for (const geom of polygon.geometry) {
|
|
126
|
-
const indices = earcut(geom.vertices, geom.holes, 2);
|
|
127
|
-
|
|
128
|
-
finalVertices.push(...geom.vertices);
|
|
129
|
-
|
|
130
|
-
for (const index of indices) {
|
|
131
|
-
finalIndices.push(index + vertexIndexOffset);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
vertexIndexOffset += geom.vertices.length / 2;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return {
|
|
138
|
-
key: polygon.key,
|
|
139
|
-
vertices: finalVertices,
|
|
140
|
-
indices: finalIndices
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export { triangulation };
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Color } from "../../../../types";
|
|
2
|
-
import { TriangleTessellationMeta } from "../../../../Math/tessellation/triangle-tessellation";
|
|
3
|
-
import { PolygonPluginInput } from "../types";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
type CatchedType = {
|
|
8
|
-
polygon: PolygonPluginInput,
|
|
9
|
-
offset: number,
|
|
10
|
-
tessellationMeta: TriangleTessellationMeta,
|
|
11
|
-
minX: number,
|
|
12
|
-
minY: number,
|
|
13
|
-
maxX: number,
|
|
14
|
-
maxY: number,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
type CacheTriangle = {
|
|
19
|
-
parentKey: string;
|
|
20
|
-
tessellationMeta: TriangleTessellationMeta;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
type Cache = Map<string,
|
|
25
|
-
{
|
|
26
|
-
triangles: CacheTriangle[],
|
|
27
|
-
properties: PolygonProperties
|
|
28
|
-
}>;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
type PolygonProperties = {
|
|
33
|
-
color: Color,
|
|
34
|
-
height: number,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export { CacheTriangle, Cache, PolygonProperties, CatchedType };
|
|
@@ -1,146 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,90 +0,0 @@
|
|
|
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
|
|
@@ -1,69 +0,0 @@
|
|
|
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
|
-
};
|