@sakuzu/maplibre-gl-draw 1.0.0
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/CHANGELOG.md +43 -0
- package/LICENSE +661 -0
- package/README.ja.md +248 -0
- package/README.md +255 -0
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/api/api.d.ts +1259 -0
- package/dist/api/api.js +86 -0
- package/dist/api/context.d.ts +173 -0
- package/dist/api/context.js +193 -0
- package/dist/api/display-api.d.ts +1 -0
- package/dist/api/display-api.js +23 -0
- package/dist/api/event-api.d.ts +13 -0
- package/dist/api/event-api.js +17 -0
- package/dist/api/extension-api.d.ts +46 -0
- package/dist/api/extension-api.js +85 -0
- package/dist/api/feature-api.d.ts +11 -0
- package/dist/api/feature-api.js +101 -0
- package/dist/api/geometry/apply.d.ts +51 -0
- package/dist/api/geometry/apply.js +114 -0
- package/dist/api/geometry/boolean.d.ts +28 -0
- package/dist/api/geometry/boolean.js +65 -0
- package/dist/api/geometry/buffer.d.ts +11 -0
- package/dist/api/geometry/buffer.js +105 -0
- package/dist/api/geometry/split.d.ts +16 -0
- package/dist/api/geometry/split.js +75 -0
- package/dist/api/geometry/targets.d.ts +76 -0
- package/dist/api/geometry/targets.js +158 -0
- package/dist/api/geometry/types.d.ts +31 -0
- package/dist/api/geometry/types.js +3 -0
- package/dist/api/geometry-operations.d.ts +162 -0
- package/dist/api/geometry-operations.js +94 -0
- package/dist/api/group-api.d.ts +10 -0
- package/dist/api/group-api.js +78 -0
- package/dist/api/import-export/constants.d.ts +29 -0
- package/dist/api/import-export/constants.js +40 -0
- package/dist/api/import-export/embedded-file.d.ts +13 -0
- package/dist/api/import-export/embedded-file.js +31 -0
- package/dist/api/import-export/file-name.d.ts +10 -0
- package/dist/api/import-export/file-name.js +20 -0
- package/dist/api/import-export/format-detection.d.ts +12 -0
- package/dist/api/import-export/format-detection.js +29 -0
- package/dist/api/import-export/geojson-export.d.ts +19 -0
- package/dist/api/import-export/geojson-export.js +262 -0
- package/dist/api/import-export/geojson-import.d.ts +34 -0
- package/dist/api/import-export/geojson-import.js +538 -0
- package/dist/api/import-export/geometry-validation.d.ts +20 -0
- package/dist/api/import-export/geometry-validation.js +107 -0
- package/dist/api/import-export/image-import.d.ts +12 -0
- package/dist/api/import-export/image-import.js +53 -0
- package/dist/api/import-export/index.d.ts +9 -0
- package/dist/api/import-export/index.js +107 -0
- package/dist/api/import-export/native-format.d.ts +15 -0
- package/dist/api/import-export/native-format.js +126 -0
- package/dist/api/import-export/native-validation.d.ts +28 -0
- package/dist/api/import-export/native-validation.js +212 -0
- package/dist/api/import-export/own-property.d.ts +10 -0
- package/dist/api/import-export/own-property.js +19 -0
- package/dist/api/import-export/style-validation.d.ts +27 -0
- package/dist/api/import-export/style-validation.js +49 -0
- package/dist/api/import-export/types.d.ts +26 -0
- package/dist/api/import-export/types.js +3 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.js +3 -0
- package/dist/api/input-api.d.ts +158 -0
- package/dist/api/input-api.js +144 -0
- package/dist/api/instance-api.d.ts +38 -0
- package/dist/api/instance-api.js +136 -0
- package/dist/api/layer-api.d.ts +12 -0
- package/dist/api/layer-api.js +62 -0
- package/dist/api/selection-api.d.ts +7 -0
- package/dist/api/selection-api.js +78 -0
- package/dist/api/snapping-api.d.ts +125 -0
- package/dist/api/snapping-api.js +50 -0
- package/dist/api/topology-api.d.ts +30 -0
- package/dist/api/topology-api.js +16 -0
- package/dist/api/tracing-api.d.ts +31 -0
- package/dist/api/tracing-api.js +16 -0
- package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
- package/dist/dispatcher/hit-test/box-strategies.js +275 -0
- package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
- package/dist/dispatcher/hit-test/box-strategy.js +37 -0
- package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
- package/dist/dispatcher/hit-test/globe-shape.js +70 -0
- package/dist/dispatcher/hit-test/index.d.ts +14 -0
- package/dist/dispatcher/hit-test/index.js +9 -0
- package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
- package/dist/dispatcher/hit-test/local-frame.js +112 -0
- package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
- package/dist/dispatcher/hit-test/segment-grid.js +79 -0
- package/dist/dispatcher/hit-test/service.d.ts +120 -0
- package/dist/dispatcher/hit-test/service.js +333 -0
- package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
- package/dist/dispatcher/hit-test/strategies/base.js +66 -0
- package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
- package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
- package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
- package/dist/dispatcher/hit-test/strategies/image.js +115 -0
- package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
- package/dist/dispatcher/hit-test/strategies/index.js +10 -0
- package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
- package/dist/dispatcher/hit-test/strategies/line.js +30 -0
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
- package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
- package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
- package/dist/dispatcher/hit-test/strategies/point.js +29 -0
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
- package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
- package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
- package/dist/dispatcher/hit-test/topmost.js +157 -0
- package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
- package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
- package/dist/dispatcher/index.d.ts +15 -0
- package/dist/dispatcher/index.js +3 -0
- package/dist/dispatcher/input-router.d.ts +1 -0
- package/dist/dispatcher/input-router.js +288 -0
- package/dist/dispatcher/normalizer.d.ts +1 -0
- package/dist/dispatcher/normalizer.js +513 -0
- package/dist/dispatcher/types.d.ts +144 -0
- package/dist/dispatcher/types.js +15 -0
- package/dist/display/chunk-set.d.ts +24 -0
- package/dist/display/chunk-set.js +533 -0
- package/dist/display/chunk.d.ts +1 -0
- package/dist/display/chunk.js +104 -0
- package/dist/display/columnar/index.d.ts +12 -0
- package/dist/display/columnar/index.js +13 -0
- package/dist/display/columnar/prepare.d.ts +42 -0
- package/dist/display/columnar/prepare.js +116 -0
- package/dist/display/columnar/source.d.ts +1 -0
- package/dist/display/columnar/source.js +531 -0
- package/dist/display/columnar/table.d.ts +1 -0
- package/dist/display/columnar/table.js +471 -0
- package/dist/display/columnar/types.d.ts +223 -0
- package/dist/display/columnar/types.js +3 -0
- package/dist/display/dataset.d.ts +2 -0
- package/dist/display/dataset.js +891 -0
- package/dist/display/index.d.ts +13 -0
- package/dist/display/index.js +3 -0
- package/dist/display/interaction.d.ts +1 -0
- package/dist/display/interaction.js +90 -0
- package/dist/display/manager.d.ts +1 -0
- package/dist/display/manager.js +440 -0
- package/dist/display/packed-rtree.d.ts +1 -0
- package/dist/display/packed-rtree.js +244 -0
- package/dist/display/partition.d.ts +1 -0
- package/dist/display/partition.js +226 -0
- package/dist/display/provider.d.ts +1 -0
- package/dist/display/provider.js +342 -0
- package/dist/display/retained.d.ts +40 -0
- package/dist/display/retained.js +898 -0
- package/dist/display/selection.d.ts +13 -0
- package/dist/display/selection.js +226 -0
- package/dist/display/source.d.ts +1 -0
- package/dist/display/source.js +119 -0
- package/dist/display/spatial.d.ts +1 -0
- package/dist/display/spatial.js +71 -0
- package/dist/display/style.d.ts +1 -0
- package/dist/display/style.js +126 -0
- package/dist/display/thinning.d.ts +65 -0
- package/dist/display/thinning.js +910 -0
- package/dist/display/triangulation.d.ts +1 -0
- package/dist/display/triangulation.js +0 -0
- package/dist/display/types.d.ts +561 -0
- package/dist/display/types.js +43 -0
- package/dist/extension/feature-handler.d.ts +182 -0
- package/dist/extension/feature-handler.js +3 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +3 -0
- package/dist/extension/renderers.d.ts +208 -0
- package/dist/extension/renderers.js +3 -0
- package/dist/geometry/angle.d.ts +47 -0
- package/dist/geometry/angle.js +44 -0
- package/dist/geometry/bbox.d.ts +48 -0
- package/dist/geometry/bbox.js +83 -0
- package/dist/geometry/boolean.d.ts +162 -0
- package/dist/geometry/boolean.js +331 -0
- package/dist/geometry/buffer.d.ts +72 -0
- package/dist/geometry/buffer.js +218 -0
- package/dist/geometry/circle.d.ts +55 -0
- package/dist/geometry/circle.js +107 -0
- package/dist/geometry/coords.d.ts +97 -0
- package/dist/geometry/coords.js +149 -0
- package/dist/geometry/distance.d.ts +79 -0
- package/dist/geometry/distance.js +111 -0
- package/dist/geometry/errors.d.ts +74 -0
- package/dist/geometry/errors.js +104 -0
- package/dist/geometry/index.d.ts +28 -0
- package/dist/geometry/index.js +38 -0
- package/dist/geometry/measure.d.ts +81 -0
- package/dist/geometry/measure.js +236 -0
- package/dist/geometry/predicates.d.ts +62 -0
- package/dist/geometry/predicates.js +132 -0
- package/dist/geometry/simplify.d.ts +74 -0
- package/dist/geometry/simplify.js +159 -0
- package/dist/geometry/split.d.ts +68 -0
- package/dist/geometry/split.js +430 -0
- package/dist/geometry/types.d.ts +95 -0
- package/dist/geometry/types.js +3 -0
- package/dist/geometry/units.d.ts +35 -0
- package/dist/geometry/units.js +41 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +20 -0
- package/dist/maplibre-gl-draw.d.ts +47 -0
- package/dist/maplibre-gl-draw.js +407 -0
- package/dist/messages.d.ts +64 -0
- package/dist/messages.js +36 -0
- package/dist/modes/cursor.d.ts +1 -0
- package/dist/modes/cursor.js +72 -0
- package/dist/modes/draw/circle.d.ts +1 -0
- package/dist/modes/draw/circle.js +222 -0
- package/dist/modes/draw/commit-layer.d.ts +26 -0
- package/dist/modes/draw/commit-layer.js +31 -0
- package/dist/modes/draw/freehand.d.ts +1 -0
- package/dist/modes/draw/freehand.js +264 -0
- package/dist/modes/draw/image.d.ts +1 -0
- package/dist/modes/draw/image.js +60 -0
- package/dist/modes/draw/index.d.ts +9 -0
- package/dist/modes/draw/index.js +11 -0
- package/dist/modes/draw/line.d.ts +1 -0
- package/dist/modes/draw/line.js +363 -0
- package/dist/modes/draw/point.d.ts +1 -0
- package/dist/modes/draw/point.js +87 -0
- package/dist/modes/draw/polygon.d.ts +1 -0
- package/dist/modes/draw/polygon.js +378 -0
- package/dist/modes/draw/trace-support.d.ts +79 -0
- package/dist/modes/draw/trace-support.js +161 -0
- package/dist/modes/handler.d.ts +285 -0
- package/dist/modes/handler.js +3 -0
- package/dist/modes/index.d.ts +7 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/manager.d.ts +15 -0
- package/dist/modes/manager.js +196 -0
- package/dist/modes/select/box-selection.d.ts +52 -0
- package/dist/modes/select/box-selection.js +140 -0
- package/dist/modes/select/click-handler.d.ts +32 -0
- package/dist/modes/select/click-handler.js +166 -0
- package/dist/modes/select/cursor-handler.d.ts +15 -0
- package/dist/modes/select/cursor-handler.js +59 -0
- package/dist/modes/select/drag/auxiliary.d.ts +26 -0
- package/dist/modes/select/drag/auxiliary.js +56 -0
- package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
- package/dist/modes/select/drag/intermediate-writes.js +171 -0
- package/dist/modes/select/drag/move.d.ts +24 -0
- package/dist/modes/select/drag/move.js +59 -0
- package/dist/modes/select/drag/operation.d.ts +30 -0
- package/dist/modes/select/drag/operation.js +18 -0
- package/dist/modes/select/drag/radius.d.ts +15 -0
- package/dist/modes/select/drag/radius.js +49 -0
- package/dist/modes/select/drag/transform.d.ts +17 -0
- package/dist/modes/select/drag/transform.js +155 -0
- package/dist/modes/select/drag/vertex.d.ts +17 -0
- package/dist/modes/select/drag/vertex.js +163 -0
- package/dist/modes/select/drag-handler.d.ts +1 -0
- package/dist/modes/select/drag-handler.js +254 -0
- package/dist/modes/select/hit-helpers.d.ts +40 -0
- package/dist/modes/select/hit-helpers.js +51 -0
- package/dist/modes/select/mode.d.ts +1 -0
- package/dist/modes/select/mode.js +397 -0
- package/dist/modes/select/shortcut-handler.d.ts +40 -0
- package/dist/modes/select/shortcut-handler.js +128 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.js +3 -0
- package/dist/operations/layer-operations.d.ts +1 -0
- package/dist/operations/layer-operations.js +350 -0
- package/dist/operations/resize.d.ts +71 -0
- package/dist/operations/resize.js +252 -0
- package/dist/operations/rotate.d.ts +17 -0
- package/dist/operations/rotate.js +166 -0
- package/dist/operations/selection-operations.d.ts +20 -0
- package/dist/operations/selection-operations.js +159 -0
- package/dist/operations/shared-vertex.d.ts +1 -0
- package/dist/operations/shared-vertex.js +210 -0
- package/dist/operations/trace-graph.d.ts +96 -0
- package/dist/operations/trace-graph.js +283 -0
- package/dist/operations/vertex.d.ts +1 -0
- package/dist/operations/vertex.js +538 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mutation-hooks.d.ts +28 -0
- package/dist/plugins/mutation-hooks.js +84 -0
- package/dist/plugins/plugin-context.d.ts +1 -0
- package/dist/plugins/plugin-context.js +367 -0
- package/dist/plugins/plugin-manager.d.ts +103 -0
- package/dist/plugins/plugin-manager.js +316 -0
- package/dist/plugins/plugin.d.ts +529 -0
- package/dist/plugins/plugin.js +3 -0
- package/dist/shared/config/constants.d.ts +66 -0
- package/dist/shared/config/constants.js +60 -0
- package/dist/shared/config/feature-style.d.ts +155 -0
- package/dist/shared/config/feature-style.js +154 -0
- package/dist/shared/config/index.d.ts +17 -0
- package/dist/shared/config/index.js +8 -0
- package/dist/shared/config/rendering.d.ts +107 -0
- package/dist/shared/config/rendering.js +33 -0
- package/dist/shared/config/selection-highlight.d.ts +29 -0
- package/dist/shared/config/selection-highlight.js +35 -0
- package/dist/shared/config/selection.d.ts +273 -0
- package/dist/shared/config/selection.js +266 -0
- package/dist/shared/config/topology.d.ts +33 -0
- package/dist/shared/config/topology.js +17 -0
- package/dist/shared/config/trace.d.ts +40 -0
- package/dist/shared/config/trace.js +17 -0
- package/dist/shared/math/angle.d.ts +21 -0
- package/dist/shared/math/angle.js +34 -0
- package/dist/shared/math/circle.d.ts +6 -0
- package/dist/shared/math/circle.js +10 -0
- package/dist/shared/math/constants.d.ts +48 -0
- package/dist/shared/math/constants.js +59 -0
- package/dist/shared/math/distance.d.ts +78 -0
- package/dist/shared/math/distance.js +147 -0
- package/dist/shared/math/globe-subdivision.d.ts +62 -0
- package/dist/shared/math/globe-subdivision.js +99 -0
- package/dist/shared/math/index.d.ts +17 -0
- package/dist/shared/math/index.js +21 -0
- package/dist/shared/math/intersection.d.ts +63 -0
- package/dist/shared/math/intersection.js +236 -0
- package/dist/shared/math/longitude.d.ts +20 -0
- package/dist/shared/math/longitude.js +31 -0
- package/dist/shared/math/mercator-plane.d.ts +27 -0
- package/dist/shared/math/mercator-plane.js +26 -0
- package/dist/shared/math/obb.d.ts +65 -0
- package/dist/shared/math/obb.js +107 -0
- package/dist/shared/math/rotation.d.ts +93 -0
- package/dist/shared/math/rotation.js +186 -0
- package/dist/shared/math/segment-grid.d.ts +69 -0
- package/dist/shared/math/segment-grid.js +159 -0
- package/dist/shared/math/transform.d.ts +140 -0
- package/dist/shared/math/transform.js +189 -0
- package/dist/shared/types/events.d.ts +128 -0
- package/dist/shared/types/events.js +3 -0
- package/dist/shared/types/model.d.ts +950 -0
- package/dist/shared/types/model.js +3 -0
- package/dist/shared/types/selection-box.d.ts +23 -0
- package/dist/shared/types/selection-box.js +3 -0
- package/dist/shared/types/style.d.ts +68 -0
- package/dist/shared/types/style.js +3 -0
- package/dist/shared/utils/color.d.ts +49 -0
- package/dist/shared/utils/color.js +180 -0
- package/dist/shared/utils/coordinates.d.ts +52 -0
- package/dist/shared/utils/coordinates.js +75 -0
- package/dist/shared/utils/embedded-image.d.ts +34 -0
- package/dist/shared/utils/embedded-image.js +161 -0
- package/dist/shared/utils/event-emitter.d.ts +262 -0
- package/dist/shared/utils/event-emitter.js +44 -0
- package/dist/shared/utils/feature-bbox.d.ts +8 -0
- package/dist/shared/utils/feature-bbox.js +207 -0
- package/dist/shared/utils/feature-segments.d.ts +23 -0
- package/dist/shared/utils/feature-segments.js +179 -0
- package/dist/shared/utils/id.d.ts +1 -0
- package/dist/shared/utils/id.js +35 -0
- package/dist/shared/utils/image.d.ts +34 -0
- package/dist/shared/utils/image.js +106 -0
- package/dist/shared/utils/index.d.ts +15 -0
- package/dist/shared/utils/index.js +24 -0
- package/dist/shared/utils/map.d.ts +26 -0
- package/dist/shared/utils/map.js +35 -0
- package/dist/shared/utils/name-generator.d.ts +197 -0
- package/dist/shared/utils/name-generator.js +337 -0
- package/dist/shared/utils/pixel-ratio.d.ts +111 -0
- package/dist/shared/utils/pixel-ratio.js +85 -0
- package/dist/shared/utils/property.d.ts +88 -0
- package/dist/shared/utils/property.js +140 -0
- package/dist/shared/utils/vertex-ref.d.ts +23 -0
- package/dist/shared/utils/vertex-ref.js +20 -0
- package/dist/snapping/custom-targets.d.ts +1 -0
- package/dist/snapping/custom-targets.js +21 -0
- package/dist/snapping/geometry.d.ts +1 -0
- package/dist/snapping/geometry.js +61 -0
- package/dist/snapping/index.d.ts +14 -0
- package/dist/snapping/index.js +4 -0
- package/dist/snapping/indicator.d.ts +19 -0
- package/dist/snapping/indicator.js +145 -0
- package/dist/snapping/providers/display.d.ts +72 -0
- package/dist/snapping/providers/display.js +268 -0
- package/dist/snapping/providers/guide.d.ts +69 -0
- package/dist/snapping/providers/guide.js +187 -0
- package/dist/snapping/providers/intersection.d.ts +1 -0
- package/dist/snapping/providers/intersection.js +92 -0
- package/dist/snapping/providers/shared.d.ts +39 -0
- package/dist/snapping/providers/shared.js +146 -0
- package/dist/snapping/providers/store.d.ts +1 -0
- package/dist/snapping/providers/store.js +132 -0
- package/dist/snapping/service.d.ts +1 -0
- package/dist/snapping/service.js +272 -0
- package/dist/snapping/types.d.ts +267 -0
- package/dist/snapping/types.js +66 -0
- package/dist/store/change-merger.d.ts +1 -0
- package/dist/store/change-merger.js +102 -0
- package/dist/store/draw-store.d.ts +1 -0
- package/dist/store/draw-store.js +396 -0
- package/dist/store/event-bridge.d.ts +1 -0
- package/dist/store/event-bridge.js +161 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.js +4 -0
- package/dist/store/local-visibility.d.ts +21 -0
- package/dist/store/local-visibility.js +27 -0
- package/dist/store/lock.d.ts +67 -0
- package/dist/store/lock.js +54 -0
- package/dist/store/memory/change-bus.d.ts +60 -0
- package/dist/store/memory/change-bus.js +232 -0
- package/dist/store/memory/file-store.d.ts +15 -0
- package/dist/store/memory/file-store.js +33 -0
- package/dist/store/memory/frozen.d.ts +21 -0
- package/dist/store/memory/frozen.js +51 -0
- package/dist/store/memory/ui-state.d.ts +51 -0
- package/dist/store/memory/ui-state.js +223 -0
- package/dist/store/memory.d.ts +26 -0
- package/dist/store/memory.js +708 -0
- package/dist/store/spatial/index.d.ts +6 -0
- package/dist/store/spatial/index.js +4 -0
- package/dist/store/spatial/spatial-index.d.ts +90 -0
- package/dist/store/spatial/spatial-index.js +148 -0
- package/dist/store/spatial/store-spatial-index.d.ts +60 -0
- package/dist/store/spatial/store-spatial-index.js +125 -0
- package/dist/store/store.d.ts +417 -0
- package/dist/store/store.js +3 -0
- package/dist/store/types.d.ts +8 -0
- package/dist/store/types.js +3 -0
- package/dist/store/writable-layer.d.ts +35 -0
- package/dist/store/writable-layer.js +20 -0
- package/dist/view/cache/buffer.d.ts +28 -0
- package/dist/view/cache/buffer.js +176 -0
- package/dist/view/cache/earcut.d.ts +1 -0
- package/dist/view/cache/earcut.js +122 -0
- package/dist/view/cache/style-rule.d.ts +1 -0
- package/dist/view/cache/style-rule.js +97 -0
- package/dist/view/cache/terrain-fill.d.ts +30 -0
- package/dist/view/cache/terrain-fill.js +60 -0
- package/dist/view/cache/texture.d.ts +14 -0
- package/dist/view/cache/texture.js +292 -0
- package/dist/view/coordinator.d.ts +27 -0
- package/dist/view/coordinator.js +72 -0
- package/dist/view/feature-companion.d.ts +173 -0
- package/dist/view/feature-companion.js +108 -0
- package/dist/view/globe-subdivision.d.ts +78 -0
- package/dist/view/globe-subdivision.js +128 -0
- package/dist/view/index.d.ts +47 -0
- package/dist/view/index.js +20 -0
- package/dist/view/layer/attach.d.ts +20 -0
- package/dist/view/layer/attach.js +47 -0
- package/dist/view/layer/blend.d.ts +57 -0
- package/dist/view/layer/blend.js +14 -0
- package/dist/view/layer/custom-layer.d.ts +1 -0
- package/dist/view/layer/custom-layer.js +509 -0
- package/dist/view/layer/depth-state.d.ts +14 -0
- package/dist/view/layer/depth-state.js +44 -0
- package/dist/view/layer/display-list.d.ts +1 -0
- package/dist/view/layer/display-list.js +111 -0
- package/dist/view/layer/drape-planner.d.ts +139 -0
- package/dist/view/layer/drape-planner.js +726 -0
- package/dist/view/layer/frame-render.d.ts +57 -0
- package/dist/view/layer/frame-render.js +209 -0
- package/dist/view/layer/frame-state.d.ts +147 -0
- package/dist/view/layer/frame-state.js +484 -0
- package/dist/view/layer/gl-state.d.ts +77 -0
- package/dist/view/layer/gl-state.js +132 -0
- package/dist/view/layer/index.d.ts +6 -0
- package/dist/view/layer/index.js +5 -0
- package/dist/view/layer/render-scope.d.ts +30 -0
- package/dist/view/layer/render-scope.js +28 -0
- package/dist/view/layer/render.d.ts +87 -0
- package/dist/view/layer/render.js +187 -0
- package/dist/view/layer/renderers.d.ts +81 -0
- package/dist/view/layer/renderers.js +142 -0
- package/dist/view/layer/slot-manager.d.ts +26 -0
- package/dist/view/layer/slot-manager.js +133 -0
- package/dist/view/layer/slots.d.ts +33 -0
- package/dist/view/layer/slots.js +50 -0
- package/dist/view/layer/store-retained-bbox.d.ts +36 -0
- package/dist/view/layer/store-retained-bbox.js +188 -0
- package/dist/view/layer/store-retained-chunk.d.ts +97 -0
- package/dist/view/layer/store-retained-chunk.js +94 -0
- package/dist/view/layer/store-retained-classify.d.ts +34 -0
- package/dist/view/layer/store-retained-classify.js +88 -0
- package/dist/view/layer/store-retained-collect.d.ts +24 -0
- package/dist/view/layer/store-retained-collect.js +121 -0
- package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
- package/dist/view/layer/store-retained-coord-patch.js +168 -0
- package/dist/view/layer/store-retained-immediate.d.ts +63 -0
- package/dist/view/layer/store-retained-immediate.js +49 -0
- package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
- package/dist/view/layer/store-retained-invalidation.js +192 -0
- package/dist/view/layer/store-retained.d.ts +198 -0
- package/dist/view/layer/store-retained.js +430 -0
- package/dist/view/layer/terrain-resolver.d.ts +1 -0
- package/dist/view/layer/terrain-resolver.js +174 -0
- package/dist/view/renderers/batch-manager.d.ts +61 -0
- package/dist/view/renderers/batch-manager.js +718 -0
- package/dist/view/renderers/draw-factors.d.ts +60 -0
- package/dist/view/renderers/draw-factors.js +35 -0
- package/dist/view/renderers/drawer.d.ts +1 -0
- package/dist/view/renderers/drawer.js +346 -0
- package/dist/view/renderers/image.d.ts +1 -0
- package/dist/view/renderers/image.js +255 -0
- package/dist/view/renderers/line/dash.d.ts +31 -0
- package/dist/view/renderers/line/dash.js +152 -0
- package/dist/view/renderers/line/line-geometry.d.ts +39 -0
- package/dist/view/renderers/line/line-geometry.js +460 -0
- package/dist/view/renderers/line/line-gl.d.ts +1 -0
- package/dist/view/renderers/line/line-gl.js +236 -0
- package/dist/view/renderers/line/line-shader.d.ts +1 -0
- package/dist/view/renderers/line/line-shader.js +364 -0
- package/dist/view/renderers/line/line-types.d.ts +43 -0
- package/dist/view/renderers/line/line-types.js +3 -0
- package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
- package/dist/view/renderers/line/line-uniforms.js +390 -0
- package/dist/view/renderers/line/sdf-line.d.ts +92 -0
- package/dist/view/renderers/line/sdf-line.js +567 -0
- package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
- package/dist/view/renderers/point/billboard-depth.js +56 -0
- package/dist/view/renderers/point/point-instance.d.ts +124 -0
- package/dist/view/renderers/point/point-instance.js +738 -0
- package/dist/view/renderers/point/point-sdf.d.ts +58 -0
- package/dist/view/renderers/point/point-sdf.js +170 -0
- package/dist/view/renderers/point/point-shape.d.ts +99 -0
- package/dist/view/renderers/point/point-shape.js +504 -0
- package/dist/view/renderers/point/point-style.d.ts +1 -0
- package/dist/view/renderers/point/point-style.js +46 -0
- package/dist/view/renderers/polygon/batch.d.ts +26 -0
- package/dist/view/renderers/polygon/batch.js +336 -0
- package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
- package/dist/view/renderers/polygon/earcut-input.js +55 -0
- package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
- package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
- package/dist/view/renderers/polygon/fill.d.ts +74 -0
- package/dist/view/renderers/polygon/fill.js +251 -0
- package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
- package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
- package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
- package/dist/view/renderers/polygon/terrain-cull.js +14 -0
- package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
- package/dist/view/renderers/polygon/triangulator.js +3 -0
- package/dist/view/renderers/retained.d.ts +43 -0
- package/dist/view/renderers/retained.js +3 -0
- package/dist/view/renderers/stroke.d.ts +121 -0
- package/dist/view/renderers/stroke.js +621 -0
- package/dist/view/shaders/frame.d.ts +8 -0
- package/dist/view/shaders/frame.js +37 -0
- package/dist/view/shaders/helpers.d.ts +238 -0
- package/dist/view/shaders/helpers.js +611 -0
- package/dist/view/shaders/initializer.d.ts +27 -0
- package/dist/view/shaders/initializer.js +125 -0
- package/dist/view/shaders/projection.d.ts +123 -0
- package/dist/view/shaders/projection.js +299 -0
- package/dist/view/shaders/quad-grid.d.ts +77 -0
- package/dist/view/shaders/quad-grid.js +128 -0
- package/dist/view/shaders/quad.d.ts +189 -0
- package/dist/view/shaders/quad.js +582 -0
- package/dist/view/shaders/retained-origin.d.ts +50 -0
- package/dist/view/shaders/retained-origin.js +67 -0
- package/dist/view/shaders/terrain-shade.d.ts +23 -0
- package/dist/view/shaders/terrain-shade.js +93 -0
- package/dist/view/style-rule.d.ts +166 -0
- package/dist/view/style-rule.js +300 -0
- package/dist/view/terrain/anchor.d.ts +135 -0
- package/dist/view/terrain/anchor.js +226 -0
- package/dist/view/terrain/context.d.ts +132 -0
- package/dist/view/terrain/context.js +437 -0
- package/dist/view/terrain/dem-atlas.d.ts +97 -0
- package/dist/view/terrain/dem-atlas.js +534 -0
- package/dist/view/terrain/detect.d.ts +126 -0
- package/dist/view/terrain/detect.js +198 -0
- package/dist/view/terrain/drape/bin-store.d.ts +179 -0
- package/dist/view/terrain/drape/bin-store.js +529 -0
- package/dist/view/terrain/drape/binning.d.ts +259 -0
- package/dist/view/terrain/drape/binning.js +604 -0
- package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
- package/dist/view/terrain/drape/edge-constrain.js +175 -0
- package/dist/view/terrain/drape/geometry.d.ts +95 -0
- package/dist/view/terrain/drape/geometry.js +260 -0
- package/dist/view/terrain/drape/mesh.d.ts +50 -0
- package/dist/view/terrain/drape/mesh.js +86 -0
- package/dist/view/terrain/drape/pass.d.ts +122 -0
- package/dist/view/terrain/drape/pass.js +379 -0
- package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
- package/dist/view/terrain/drape/quad-glyphs.js +117 -0
- package/dist/view/terrain/drape/quad.d.ts +249 -0
- package/dist/view/terrain/drape/quad.js +835 -0
- package/dist/view/terrain/drape/renderer.d.ts +184 -0
- package/dist/view/terrain/drape/renderer.js +706 -0
- package/dist/view/terrain/drape/shared.d.ts +80 -0
- package/dist/view/terrain/drape/shared.js +173 -0
- package/dist/view/terrain/drape/stitch.d.ts +155 -0
- package/dist/view/terrain/drape/stitch.js +228 -0
- package/dist/view/terrain/ground.d.ts +72 -0
- package/dist/view/terrain/ground.js +151 -0
- package/dist/view/terrain/metrics.d.ts +180 -0
- package/dist/view/terrain/metrics.js +231 -0
- package/dist/view/terrain/occlusion.d.ts +11 -0
- package/dist/view/terrain/occlusion.js +129 -0
- package/dist/view/terrain/polygon.d.ts +86 -0
- package/dist/view/terrain/polygon.js +301 -0
- package/dist/view/terrain/shade.d.ts +48 -0
- package/dist/view/terrain/shade.js +45 -0
- package/dist/view/terrain/state.d.ts +99 -0
- package/dist/view/terrain/state.js +186 -0
- package/dist/view/terrain/tessellation.d.ts +265 -0
- package/dist/view/terrain/tessellation.js +924 -0
- package/dist/view/terrain/tiling.d.ts +56 -0
- package/dist/view/terrain/tiling.js +155 -0
- package/dist/view/terrain/upstream-terrain.d.ts +82 -0
- package/dist/view/terrain/upstream-terrain.js +116 -0
- package/dist/view/ui/auxiliary-handles.d.ts +151 -0
- package/dist/view/ui/auxiliary-handles.js +22 -0
- package/dist/view/ui/bounds.d.ts +53 -0
- package/dist/view/ui/bounds.js +149 -0
- package/dist/view/ui/box-selection.d.ts +1 -0
- package/dist/view/ui/box-selection.js +83 -0
- package/dist/view/ui/handle-test.d.ts +1 -0
- package/dist/view/ui/handle-test.js +437 -0
- package/dist/view/ui/handle-thinning.d.ts +122 -0
- package/dist/view/ui/handle-thinning.js +430 -0
- package/dist/view/ui/handles.d.ts +25 -0
- package/dist/view/ui/handles.js +673 -0
- package/dist/view/ui/helper.d.ts +19 -0
- package/dist/view/ui/helper.js +76 -0
- package/dist/view/ui/index.d.ts +15 -0
- package/dist/view/ui/index.js +15 -0
- package/dist/view/ui/selection-scope.d.ts +25 -0
- package/dist/view/ui/selection-scope.js +34 -0
- package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
- package/dist/view/ui/selection-ui/bounding-box.js +240 -0
- package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
- package/dist/view/ui/selection-ui/extension-registry.js +78 -0
- package/dist/view/ui/selection-ui/index.d.ts +12 -0
- package/dist/view/ui/selection-ui/index.js +12 -0
- package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
- package/dist/view/ui/selection-ui/renderer.js +227 -0
- package/dist/view/ui/selection-ui/types.d.ts +55 -0
- package/dist/view/ui/selection-ui/types.js +3 -0
- package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
- package/dist/view/ui/selection-ui-drawer.js +329 -0
- package/dist/view/ui/tentative.d.ts +1 -0
- package/dist/view/ui/tentative.js +320 -0
- package/dist/view/viewport.d.ts +119 -0
- package/dist/view/viewport.js +254 -0
- package/package.json +113 -0
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The owner of the terrain rendering state (one per draw instance)
|
|
5
|
+
*
|
|
6
|
+
* The terrain state mixes two kinds of things: "values valid only for that frame" and
|
|
7
|
+
* "records carried across frames". The former alone would be fine as a module global (the
|
|
8
|
+
* same practice as `shaders/frame.ts`), but putting the latter in a global breaks when a page
|
|
9
|
+
* has several rendering instances.
|
|
10
|
+
*
|
|
11
|
+
* How it actually broke: when a page has several maps (the main one, a thumbnail, a print
|
|
12
|
+
* preview and so on) each has its own Map and CustomLayer. The subdivision generation counter
|
|
13
|
+
* counts from 0 per CustomLayer, yet the place that value was written to was a single global.
|
|
14
|
+
* Retained batches (`layer/store-retained.ts`) decide whether to re-bake by "the global
|
|
15
|
+
* generation vs their own record", so whenever the counters of two instances happened to
|
|
16
|
+
* coincide the change was invisible and flat geometry baked before the terrain came alive was
|
|
17
|
+
* never rebuilt. The subdivision cache (`cache/terrain-fill.ts`) was shared by feature id as
|
|
18
|
+
* well, so when the generations coincided by chance it returned triangles subdivided with
|
|
19
|
+
* another instance's step (the shape where only the summit becomes a tent).
|
|
20
|
+
*
|
|
21
|
+
* So the whole state is collected into this class and each CustomLayer owns one. There is no
|
|
22
|
+
* module-level "current" context: every reader (state.ts / anchor.ts / occlusion.ts /
|
|
23
|
+
* polygon.ts) takes the context explicitly. The renderers of a CustomLayer receive their
|
|
24
|
+
* instance's context at construction, extension renderers receive it in the draw context
|
|
25
|
+
* (`CustomRendererDrawContext.terrain`), hit testing uses the anchor projection bound per map
|
|
26
|
+
* (`installAnchorProjector`), and plugins use the projection bound to their instance
|
|
27
|
+
* (`PluginContext.projectAnchor`). A read from outside rendering therefore always sees its own
|
|
28
|
+
* instance, never "the instance drawn last".
|
|
29
|
+
*/
|
|
30
|
+
import { TerrainFillCache } from '../cache/terrain-fill.js';
|
|
31
|
+
import { TerrainCoverage } from './ground.js';
|
|
32
|
+
/** The state when the terrain is disabled */
|
|
33
|
+
export const INACTIVE_TERRAIN_STATE = {
|
|
34
|
+
active: false,
|
|
35
|
+
atlasTexture: null,
|
|
36
|
+
atlasRect: [0, 0, 1, 1],
|
|
37
|
+
atlasSize: [1, 1],
|
|
38
|
+
elevationScale: 0,
|
|
39
|
+
liftMeters: 0,
|
|
40
|
+
stepMeters: 0,
|
|
41
|
+
stepGrid: 0,
|
|
42
|
+
tessellationRegion: null,
|
|
43
|
+
tessellationTiling: null,
|
|
44
|
+
generation: 0,
|
|
45
|
+
};
|
|
46
|
+
/** The initial diagnostic values */
|
|
47
|
+
export const INITIAL_DRAPE_DEBUG = {
|
|
48
|
+
used: false,
|
|
49
|
+
reason: 'not-evaluated',
|
|
50
|
+
featureCount: 0,
|
|
51
|
+
edgeCount: 0,
|
|
52
|
+
tileCount: 0,
|
|
53
|
+
maxRunsPerCell: 0,
|
|
54
|
+
maxEdgesPerCell: 0,
|
|
55
|
+
maxTileEdges: 0,
|
|
56
|
+
truncatedCells: 0,
|
|
57
|
+
unfitTiles: 0,
|
|
58
|
+
insideRuns: 0,
|
|
59
|
+
excluded: 0,
|
|
60
|
+
immediate: 0,
|
|
61
|
+
};
|
|
62
|
+
/** The frame used when the anchor projection is unavailable */
|
|
63
|
+
export const INACTIVE_ANCHOR_FRAME = {
|
|
64
|
+
terrain: null,
|
|
65
|
+
elevationQuery: null,
|
|
66
|
+
tileZoom: 0,
|
|
67
|
+
elevationScale: 0,
|
|
68
|
+
mainMatrix: null,
|
|
69
|
+
offsetUniforms: null,
|
|
70
|
+
useOffsetMode: false,
|
|
71
|
+
width: 0,
|
|
72
|
+
height: 0,
|
|
73
|
+
cameraMercator: null,
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* The terrain state of one draw instance.
|
|
77
|
+
*
|
|
78
|
+
* Treat it as an opaque handle: a custom renderer receives it as
|
|
79
|
+
* `CustomRendererDrawContext.terrain` and passes it to the renderers and to the terrain
|
|
80
|
+
* functions (such as {@link anchorElevationMeters} and {@link drawQuadSurfaceOnTerrain}).
|
|
81
|
+
* Constructing one gives a state with no terrain.
|
|
82
|
+
*/
|
|
83
|
+
export class TerrainContext {
|
|
84
|
+
constructor() {
|
|
85
|
+
/** This frame's terrain state (read by the shaders' projection uniforms) */
|
|
86
|
+
Object.defineProperty(this, "renderState", {
|
|
87
|
+
enumerable: true,
|
|
88
|
+
configurable: true,
|
|
89
|
+
writable: true,
|
|
90
|
+
value: INACTIVE_TERRAIN_STATE
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* Suppression of adding elevation to vertices
|
|
94
|
+
*
|
|
95
|
+
* UI drawn as a rectangle on the screen (the rubber band of a box selection) stops being a
|
|
96
|
+
* rectangle once it is pasted onto the ground. The elevation is stopped only for such
|
|
97
|
+
* rendering.
|
|
98
|
+
*
|
|
99
|
+
* @internal
|
|
100
|
+
*/
|
|
101
|
+
Object.defineProperty(this, "elevationSuppressed", {
|
|
102
|
+
enumerable: true,
|
|
103
|
+
configurable: true,
|
|
104
|
+
writable: true,
|
|
105
|
+
value: false
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* Whether this is a frame that draws polygons and lines flat (the band where they cannot be
|
|
109
|
+
* made to follow the ground)
|
|
110
|
+
*
|
|
111
|
+
* In the zoomed-out band (z <= TERRAIN_ANALYTIC_MIN_ZOOM) the analytic drape is not used and
|
|
112
|
+
* polygons and lines are drawn by vertex displacement. In that band, however, the
|
|
113
|
+
* subdivision range (the DEM atlas intersected with the view) covers only a tiny part of the
|
|
114
|
+
* screen. Triangles outside the range are emitted without being subdivided, so only their
|
|
115
|
+
* vertices pick up an elevation while their interior pierces the mountain, and in a pitched
|
|
116
|
+
* view this becomes a vertical curtain (a cliff). The baked shape is not rebuilt until the
|
|
117
|
+
* camera stops, so during a zoom gesture the shape of an even older range is drawn.
|
|
118
|
+
*
|
|
119
|
+
* Over a wide area the relief amounts to only a dozen or so pixels on screen (the same
|
|
120
|
+
* reason the depth test is turned off). So polygons and lines are drawn without adding an
|
|
121
|
+
* elevation. The picture simply becomes the same as with the terrain off, and the cliff
|
|
122
|
+
* disappears by construction.
|
|
123
|
+
*
|
|
124
|
+
* Points, handles and symbols are out of scope. A symbol decided by a single vertex does not
|
|
125
|
+
* interpolate anything in between and so creates no cliff, and stopping its elevation would
|
|
126
|
+
* make it disagree with hit testing (the anchor projection).
|
|
127
|
+
*
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
Object.defineProperty(this, "surfacesFlattened", {
|
|
131
|
+
enumerable: true,
|
|
132
|
+
configurable: true,
|
|
133
|
+
writable: true,
|
|
134
|
+
value: false
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* The IDs of the datasets whose polygons and lines the analytic drape paints in this
|
|
138
|
+
* frame
|
|
139
|
+
*
|
|
140
|
+
* The decision "was it handed over to the drape" (whether to pile polygons and lines into
|
|
141
|
+
* the retained batch) is switched only after it has settled for several frames, to avoid
|
|
142
|
+
* flapping. That creates a window of several frames in which "the drape is already painting
|
|
143
|
+
* but the hand-over decision has not come back yet". If the immediate path draws the
|
|
144
|
+
* selection highlight during that window, everything outside the subdivision range becomes a
|
|
145
|
+
* flat slab floating above the terrain. Which way the highlight is drawn is therefore
|
|
146
|
+
* decided not by the decision but by whether it is actually being painted right now.
|
|
147
|
+
*
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
Object.defineProperty(this, "drapePaintedDatasets", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
configurable: true,
|
|
153
|
+
writable: true,
|
|
154
|
+
value: null
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* The light source of this frame's shading (null in a frame with no terrain)
|
|
158
|
+
*
|
|
159
|
+
* Read by the polygon fill of the vertex displacement path (`shaders/projection.ts` writes
|
|
160
|
+
* it into the uniforms). The analytic drape carries the light source in its own draw
|
|
161
|
+
* instructions, so this exists only to "deliver the same light to the other path as well".
|
|
162
|
+
* The light changes with the bearing, so it is set again every frame.
|
|
163
|
+
*
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
Object.defineProperty(this, "shadeLight", {
|
|
167
|
+
enumerable: true,
|
|
168
|
+
configurable: true,
|
|
169
|
+
writable: true,
|
|
170
|
+
value: null
|
|
171
|
+
});
|
|
172
|
+
/**
|
|
173
|
+
* The diagnostic values of the analytic drape
|
|
174
|
+
*
|
|
175
|
+
* @internal
|
|
176
|
+
*/
|
|
177
|
+
Object.defineProperty(this, "drapeDebug", {
|
|
178
|
+
enumerable: true,
|
|
179
|
+
configurable: true,
|
|
180
|
+
writable: true,
|
|
181
|
+
value: INITIAL_DRAPE_DEBUG
|
|
182
|
+
});
|
|
183
|
+
/**
|
|
184
|
+
* The entry point of this frame's quad analytic drape (null when the terrain is disabled)
|
|
185
|
+
*
|
|
186
|
+
* Images and the fill of text quads are drawn by QuadShader. CustomLayer puts it here
|
|
187
|
+
* every frame and QuadShader reads it and enters the path that "pastes it as ground pixels".
|
|
188
|
+
* It is always reset to null at the end of the frame, so it is never read from outside
|
|
189
|
+
* rendering.
|
|
190
|
+
*
|
|
191
|
+
* @internal
|
|
192
|
+
*/
|
|
193
|
+
Object.defineProperty(this, "quadDrapeFrame", {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
configurable: true,
|
|
196
|
+
writable: true,
|
|
197
|
+
value: null
|
|
198
|
+
});
|
|
199
|
+
/**
|
|
200
|
+
* The subdivision grid spacing of the previous frame (Mercator). 0 means no terrain
|
|
201
|
+
*
|
|
202
|
+
* Used to decide whether to advance the generation. It is a per-instance value.
|
|
203
|
+
*
|
|
204
|
+
* This must not be looked at in meters. The conversion of the step into meters involves the
|
|
205
|
+
* latitude (`stepGrid * circumferenceAtLatitude(centerLat)`), so the value changes even when
|
|
206
|
+
* a pan moves the latitude by a single millidegree, and the generation advances every frame.
|
|
207
|
+
* Retained batches re-bake on a change of generation, so this amounts to "re-baking
|
|
208
|
+
* everything on every pan" (measured, frames during a pan reached 90 to 120 milliseconds).
|
|
209
|
+
* The grid spacing is a power of 2 in Mercator, so it changes only when a zoom level is
|
|
210
|
+
* crossed.
|
|
211
|
+
*
|
|
212
|
+
* @internal
|
|
213
|
+
*/
|
|
214
|
+
Object.defineProperty(this, "stepGrid", {
|
|
215
|
+
enumerable: true,
|
|
216
|
+
configurable: true,
|
|
217
|
+
writable: true,
|
|
218
|
+
value: 0
|
|
219
|
+
});
|
|
220
|
+
/**
|
|
221
|
+
* The generation of the subdivision (a serial number closed within this instance)
|
|
222
|
+
*
|
|
223
|
+
* @internal
|
|
224
|
+
*/
|
|
225
|
+
Object.defineProperty(this, "generation", {
|
|
226
|
+
enumerable: true,
|
|
227
|
+
configurable: true,
|
|
228
|
+
writable: true,
|
|
229
|
+
value: 0
|
|
230
|
+
});
|
|
231
|
+
/**
|
|
232
|
+
* The coarseness of the step actually used in this generation (1 = the terrain mesh nodes
|
|
233
|
+
* themselves)
|
|
234
|
+
*
|
|
235
|
+
* When a batch is subdivided coarsely for budget reasons, the chords of the coarse triangles
|
|
236
|
+
* dive under the hills of the terrain. The amount they dive grows in proportion to the step,
|
|
237
|
+
* so the depth bias is increased in proportion as well (gl.polygonOffset in view/layer/gl-state.ts).
|
|
238
|
+
* The renderer reports it on every build, and it is returned to 1 when the generation
|
|
239
|
+
* changes.
|
|
240
|
+
*
|
|
241
|
+
* @internal
|
|
242
|
+
*/
|
|
243
|
+
Object.defineProperty(this, "tessellationCoarsening", {
|
|
244
|
+
enumerable: true,
|
|
245
|
+
configurable: true,
|
|
246
|
+
writable: true,
|
|
247
|
+
value: 1
|
|
248
|
+
});
|
|
249
|
+
/**
|
|
250
|
+
* The most recently decided subdivision range (Mercator)
|
|
251
|
+
*
|
|
252
|
+
* It is not recomputed while the atlas stays inside this rectangle. Recomputing it every
|
|
253
|
+
* frame to match the atlas would cause retained batches to be re-baked on every pan.
|
|
254
|
+
*
|
|
255
|
+
* @internal
|
|
256
|
+
*/
|
|
257
|
+
Object.defineProperty(this, "tessellationRegion", {
|
|
258
|
+
enumerable: true,
|
|
259
|
+
configurable: true,
|
|
260
|
+
writable: true,
|
|
261
|
+
value: null
|
|
262
|
+
});
|
|
263
|
+
/**
|
|
264
|
+
* The most recently built index of tile steps (recomputed at the same time as the range)
|
|
265
|
+
*
|
|
266
|
+
* @internal
|
|
267
|
+
*/
|
|
268
|
+
Object.defineProperty(this, "tessellationTiling", {
|
|
269
|
+
enumerable: true,
|
|
270
|
+
configurable: true,
|
|
271
|
+
writable: true,
|
|
272
|
+
value: null
|
|
273
|
+
});
|
|
274
|
+
/**
|
|
275
|
+
* The frame of the anchor projection
|
|
276
|
+
*
|
|
277
|
+
* @internal
|
|
278
|
+
*/
|
|
279
|
+
Object.defineProperty(this, "anchorFrame", {
|
|
280
|
+
enumerable: true,
|
|
281
|
+
configurable: true,
|
|
282
|
+
writable: true,
|
|
283
|
+
value: INACTIVE_ANCHOR_FRAME
|
|
284
|
+
});
|
|
285
|
+
/**
|
|
286
|
+
* The elevation cache within a single frame
|
|
287
|
+
*
|
|
288
|
+
* Hit testing calls project on the same vertex many times (hit testing, thinning, bbox). It
|
|
289
|
+
* costs about 3.5us per point, so it is worth reusing within a frame. It is thrown away
|
|
290
|
+
* every frame because the value may change once the DEM arrives in a new frame.
|
|
291
|
+
*
|
|
292
|
+
* @internal
|
|
293
|
+
*/
|
|
294
|
+
Object.defineProperty(this, "elevationCache", {
|
|
295
|
+
enumerable: true,
|
|
296
|
+
configurable: true,
|
|
297
|
+
writable: true,
|
|
298
|
+
value: new Map()
|
|
299
|
+
});
|
|
300
|
+
/**
|
|
301
|
+
* The generation of the DEM coverage
|
|
302
|
+
*
|
|
303
|
+
* When the set of DEM tiles being drawn changes (a tile arrives, or the zoom changes), the
|
|
304
|
+
* already baked elevations become stale. Retained batches fetch the elevations again on a
|
|
305
|
+
* change of this value.
|
|
306
|
+
*
|
|
307
|
+
* @internal
|
|
308
|
+
*/
|
|
309
|
+
Object.defineProperty(this, "elevationGeneration", {
|
|
310
|
+
enumerable: true,
|
|
311
|
+
configurable: true,
|
|
312
|
+
writable: true,
|
|
313
|
+
value: 0
|
|
314
|
+
});
|
|
315
|
+
/**
|
|
316
|
+
* The terrain tiles maplibre drew in the most recent frame (where the anchors read the drawn
|
|
317
|
+
* surface, `ground.ts`)
|
|
318
|
+
*
|
|
319
|
+
* @internal
|
|
320
|
+
*/
|
|
321
|
+
Object.defineProperty(this, "coverage", {
|
|
322
|
+
enumerable: true,
|
|
323
|
+
configurable: true,
|
|
324
|
+
writable: true,
|
|
325
|
+
value: new TerrainCoverage()
|
|
326
|
+
});
|
|
327
|
+
/**
|
|
328
|
+
* Whether the camera is in motion (custom-layer writes it every frame)
|
|
329
|
+
*
|
|
330
|
+
* While it is moving, re-baking of retained batches is deferred. Re-baking during a gesture
|
|
331
|
+
* makes that one frame take several hundred milliseconds and the gesture catch, and it would
|
|
332
|
+
* have to be redone once the motion ends anyway.
|
|
333
|
+
*
|
|
334
|
+
* @internal
|
|
335
|
+
*/
|
|
336
|
+
Object.defineProperty(this, "cameraMoving", {
|
|
337
|
+
enumerable: true,
|
|
338
|
+
configurable: true,
|
|
339
|
+
writable: true,
|
|
340
|
+
value: false
|
|
341
|
+
});
|
|
342
|
+
/**
|
|
343
|
+
* The cache of occlusion tests within a single frame
|
|
344
|
+
*
|
|
345
|
+
* The same anchor is looked up many times in one frame (rendering and collision testing).
|
|
346
|
+
* The result changes once the camera moves, so it is thrown away every frame just like the
|
|
347
|
+
* elevation cache.
|
|
348
|
+
*
|
|
349
|
+
* @internal
|
|
350
|
+
*/
|
|
351
|
+
Object.defineProperty(this, "occlusionCache", {
|
|
352
|
+
enumerable: true,
|
|
353
|
+
configurable: true,
|
|
354
|
+
writable: true,
|
|
355
|
+
value: new Map()
|
|
356
|
+
});
|
|
357
|
+
/**
|
|
358
|
+
* The Mercator cells the globe asks the geometry to be cut into in this frame (null on a
|
|
359
|
+
* flat map)
|
|
360
|
+
*
|
|
361
|
+
* The context carries it because it is what every renderer of the instance holds: the cut
|
|
362
|
+
* of the globe goes through the same subdivision as the terrain (`view/globe-subdivision.ts`
|
|
363
|
+
* gives the step to the renderers when the terrain gives none).
|
|
364
|
+
*
|
|
365
|
+
* @internal
|
|
366
|
+
*/
|
|
367
|
+
Object.defineProperty(this, "globeGrids", {
|
|
368
|
+
enumerable: true,
|
|
369
|
+
configurable: true,
|
|
370
|
+
writable: true,
|
|
371
|
+
value: null
|
|
372
|
+
});
|
|
373
|
+
/**
|
|
374
|
+
* The generation of the globe cells (a serial number closed within this instance)
|
|
375
|
+
*
|
|
376
|
+
* It advances when the globe starts or stops being drawn and when a cell changes size, so
|
|
377
|
+
* the retained batches that baked the old cut are rebuilt.
|
|
378
|
+
*
|
|
379
|
+
* @internal
|
|
380
|
+
*/
|
|
381
|
+
Object.defineProperty(this, "globeGeneration", {
|
|
382
|
+
enumerable: true,
|
|
383
|
+
configurable: true,
|
|
384
|
+
writable: true,
|
|
385
|
+
value: 0
|
|
386
|
+
});
|
|
387
|
+
/**
|
|
388
|
+
* The subdivision cache of polygon fills
|
|
389
|
+
*
|
|
390
|
+
* It depends on the generation and the step, so it is held per instance. Sharing it by
|
|
391
|
+
* feature id would pick up triangles subdivided with another instance's step.
|
|
392
|
+
*
|
|
393
|
+
* @internal
|
|
394
|
+
*/
|
|
395
|
+
Object.defineProperty(this, "fillCache", {
|
|
396
|
+
enumerable: true,
|
|
397
|
+
configurable: true,
|
|
398
|
+
writable: true,
|
|
399
|
+
value: new TerrainFillCache()
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* The identifier of the DEM tile set seen most recently
|
|
404
|
+
*
|
|
405
|
+
* @internal
|
|
406
|
+
*/
|
|
407
|
+
get coverageKey() {
|
|
408
|
+
return this.coverage.key;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Returns the state to its initial values (when the layer is destroyed)
|
|
412
|
+
*
|
|
413
|
+
* @internal
|
|
414
|
+
*/
|
|
415
|
+
reset() {
|
|
416
|
+
this.renderState = INACTIVE_TERRAIN_STATE;
|
|
417
|
+
this.elevationSuppressed = false;
|
|
418
|
+
this.shadeLight = null;
|
|
419
|
+
this.drapeDebug = INITIAL_DRAPE_DEBUG;
|
|
420
|
+
this.stepGrid = 0;
|
|
421
|
+
this.tessellationRegion = null;
|
|
422
|
+
this.tessellationTiling = null;
|
|
423
|
+
this.tessellationCoarsening = 1;
|
|
424
|
+
this.anchorFrame = INACTIVE_ANCHOR_FRAME;
|
|
425
|
+
this.elevationCache = new Map();
|
|
426
|
+
this.occlusionCache = new Map();
|
|
427
|
+
this.coverage.clear();
|
|
428
|
+
this.fillCache.clear();
|
|
429
|
+
this.globeGrids = null;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Releases an instance's terrain state (when the layer is destroyed)
|
|
434
|
+
*/
|
|
435
|
+
export function releaseTerrainContext(context) {
|
|
436
|
+
context.reset();
|
|
437
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type RenderableTerrainTile, type TerrainLike } from './detect.js';
|
|
2
|
+
/** The result of building the atlas */
|
|
3
|
+
export interface DemAtlasResult {
|
|
4
|
+
texture: WebGLTexture;
|
|
5
|
+
/** [x0, y0, 1/width, 1/height] (Mercator) */
|
|
6
|
+
rect: [number, number, number, number];
|
|
7
|
+
/** [width, height] (texels) */
|
|
8
|
+
size: [number, number];
|
|
9
|
+
/** The maximum zoom of the tiles being drawn (used for the lift and the subdivision step) */
|
|
10
|
+
maxTileZoom: number;
|
|
11
|
+
/** The number of pixels within a tile, used to derive the ground size of one DEM pixel */
|
|
12
|
+
demDim: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The DEM atlas
|
|
16
|
+
*/
|
|
17
|
+
export declare class DemAtlas {
|
|
18
|
+
private gl;
|
|
19
|
+
private program;
|
|
20
|
+
private vao;
|
|
21
|
+
private quadBuffer;
|
|
22
|
+
private framebuffer;
|
|
23
|
+
private texture;
|
|
24
|
+
private textureWidth;
|
|
25
|
+
private textureHeight;
|
|
26
|
+
private destLoc;
|
|
27
|
+
private extentLoc;
|
|
28
|
+
private terrainLoc;
|
|
29
|
+
private matrixLoc;
|
|
30
|
+
private dimLoc;
|
|
31
|
+
private unpackLoc;
|
|
32
|
+
private exaggerationLoc;
|
|
33
|
+
/** What the atlas holds now, for skipping a bake that would give the same texels */
|
|
34
|
+
private bakedKey;
|
|
35
|
+
private bakedResult;
|
|
36
|
+
/** A number per DEM texture object (the key compares textures by identity) */
|
|
37
|
+
private textureIds;
|
|
38
|
+
private nextTextureId;
|
|
39
|
+
/** The number of bakes done (diagnostics and tests) */
|
|
40
|
+
bakeCount: number;
|
|
41
|
+
constructor(gl: WebGL2RenderingContext);
|
|
42
|
+
/**
|
|
43
|
+
* Bakes the DEM tiles being drawn into the atlas
|
|
44
|
+
*
|
|
45
|
+
* @param centerMercatorX The Mercator x of the camera center. Each tile is placed on the copy
|
|
46
|
+
* of the world nearest to it, so the tiles on both sides of the antimeridian sit next to
|
|
47
|
+
* each other (see `computeAtlasLayout`)
|
|
48
|
+
* @param tilesLoaded Whether every tile of the map has arrived (`map.areTilesLoaded()`).
|
|
49
|
+
* While they have not, the DEM textures can be rewritten in place, so the atlas is baked
|
|
50
|
+
* again on every frame; once they have, an unchanged frame reuses the last bake
|
|
51
|
+
* @returns null when it cannot be baked (the terrain is disabled, there is not a single
|
|
52
|
+
* tile, or a GL resource could not be allocated)
|
|
53
|
+
*/
|
|
54
|
+
build(terrain: TerrainLike, centerMercatorX?: number, tilesLoaded?: boolean): DemAtlasResult | null;
|
|
55
|
+
/**
|
|
56
|
+
* The key of everything a bake reads (two bakes with the same key give the same texels, as
|
|
57
|
+
* long as no DEM texture was rewritten in place)
|
|
58
|
+
*/
|
|
59
|
+
private bakeKey;
|
|
60
|
+
/**
|
|
61
|
+
* Releases the GL resources
|
|
62
|
+
*/
|
|
63
|
+
dispose(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Compiles the baking program once (false when it cannot be created)
|
|
66
|
+
*/
|
|
67
|
+
ensureProgram(): boolean;
|
|
68
|
+
private ensureTarget;
|
|
69
|
+
}
|
|
70
|
+
/** The layout of the atlas */
|
|
71
|
+
export interface AtlasLayout {
|
|
72
|
+
minX: number;
|
|
73
|
+
minY: number;
|
|
74
|
+
spanX: number;
|
|
75
|
+
spanY: number;
|
|
76
|
+
width: number;
|
|
77
|
+
height: number;
|
|
78
|
+
maxZoom: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The Mercator x of the west edge of a tile, on the copy of the world nearest to the camera
|
|
82
|
+
*
|
|
83
|
+
* The tiles carry canonical x (0 to 2^z - 1). Across the antimeridian the view holds tiles from
|
|
84
|
+
* both ends of that range, and with canonical x their union would be the whole width of the
|
|
85
|
+
* world, crushing the resolution of the atlas. The tile is moved by whole turns (1 in Mercator
|
|
86
|
+
* units) so that its center is within half a turn of the camera center. This is the same
|
|
87
|
+
* placement maplibre gives the wrapped copies it draws.
|
|
88
|
+
*/
|
|
89
|
+
export declare function tileMercatorX(tile: RenderableTerrainTile, centerMercatorX: number): number;
|
|
90
|
+
/**
|
|
91
|
+
* Decides the layout of the atlas from the tiles being drawn
|
|
92
|
+
*
|
|
93
|
+
* The range covered is the union of the Mercator rectangles of the tiles (each placed on the
|
|
94
|
+
* copy nearest to the camera, `tileMercatorX`), and the resolution aims at "assigning
|
|
95
|
+
* ATLAS_CELL_TEXELS to the finest tile", lowered only when it would exceed the upper bound.
|
|
96
|
+
*/
|
|
97
|
+
export declare function computeAtlasLayout(tiles: RenderableTerrainTile[], centerMercatorX: number): AtlasLayout | null;
|