@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,128 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Subdivision of a textured quad (the degraded path)
|
|
5
|
+
*
|
|
6
|
+
* On frames where the analytic drape (`terrain/drape/quad.ts`) cannot be used,
|
|
7
|
+
* the quad is split to a fineness close to the grid of the terrain mesh. The
|
|
8
|
+
* resulting vertices are lifted by the shared GLSL
|
|
9
|
+
* (`terrain_elevation_from_offset` in `OFFSET_MODE_GLSL`), which looks up the
|
|
10
|
+
* elevation from the DEM atlas, so unlike a billboard with only four corners
|
|
11
|
+
* the terrain never pokes through from the inside.
|
|
12
|
+
*
|
|
13
|
+
* The step is aimed at half the node spacing of the terrain mesh. In theory,
|
|
14
|
+
* splitting to match the nodes themselves would be best, but a quad is a
|
|
15
|
+
* rotated rectangle, so cutting it along the grid produces trapezoids. With a
|
|
16
|
+
* half step, the amount by which a chord dips below the terrain inside a cell
|
|
17
|
+
* drops to about 1/4 of the node-aligned case and falls within the depth bias
|
|
18
|
+
* (`TERRAIN_DEPTH_BIAS`) applied to the whole frame.
|
|
19
|
+
*
|
|
20
|
+
* There is an upper limit on the total number of cells. This is so that the
|
|
21
|
+
* cost does not diverge even for a huge quad that covers a whole country;
|
|
22
|
+
* when the limit is hit, the caller reports the coarsening factor via
|
|
23
|
+
* `reportTerrainCoarsening` and the depth bias grows by the same amount (it
|
|
24
|
+
* rides directly on the same mechanism as the subdivision of polygons and
|
|
25
|
+
* lines).
|
|
26
|
+
*/
|
|
27
|
+
/** The maximum number of divisions per side */
|
|
28
|
+
export const QUAD_GRID_MAX_DIVISIONS = 128;
|
|
29
|
+
/** The upper limit on the total number of cells */
|
|
30
|
+
export const QUAD_GRID_MAX_CELLS = 16384;
|
|
31
|
+
/** The target step relative to the terrain mesh node spacing (half the fineness) */
|
|
32
|
+
const QUAD_GRID_STEP_RATIO = 0.5;
|
|
33
|
+
/**
|
|
34
|
+
* Decides the number of divisions
|
|
35
|
+
*
|
|
36
|
+
* @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
|
|
37
|
+
* bottom-right, bottom-left)
|
|
38
|
+
* @param stepGrid The node spacing of the terrain mesh (Mercator). No subdivision if 0 or less
|
|
39
|
+
* @param stepRatio The target step relative to `stepGrid` (half of it on terrain; the globe
|
|
40
|
+
* passes 1 to cut at its cell, `view/globe-subdivision.ts`)
|
|
41
|
+
*/
|
|
42
|
+
export function computeQuadGridSize(quad, stepGrid, stepRatio = QUAD_GRID_STEP_RATIO) {
|
|
43
|
+
if (!(stepGrid > 0))
|
|
44
|
+
return { nx: 1, ny: 1, coarsening: 1 };
|
|
45
|
+
const lengthU = Math.max(edgeLength(quad, 0, 1), edgeLength(quad, 3, 2));
|
|
46
|
+
const lengthV = Math.max(edgeLength(quad, 0, 3), edgeLength(quad, 1, 2));
|
|
47
|
+
const target = stepGrid * stepRatio;
|
|
48
|
+
let nx = clampDivisions(Math.ceil(lengthU / target));
|
|
49
|
+
let ny = clampDivisions(Math.ceil(lengthV / target));
|
|
50
|
+
if (nx * ny > QUAD_GRID_MAX_CELLS) {
|
|
51
|
+
const scale = Math.sqrt(QUAD_GRID_MAX_CELLS / (nx * ny));
|
|
52
|
+
nx = Math.max(1, Math.floor(nx * scale));
|
|
53
|
+
ny = Math.max(1, Math.floor(ny * scale));
|
|
54
|
+
}
|
|
55
|
+
const coarsening = Math.max(1, lengthU / nx / stepGrid, lengthV / ny / stepGrid);
|
|
56
|
+
return { nx, ny, coarsening };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Builds a grid by subdividing the four corners
|
|
60
|
+
*
|
|
61
|
+
* The interpolation is done on the Mercator plane. The interpolation of the
|
|
62
|
+
* texture coordinates when the GPU draws the four-corner billboard is also
|
|
63
|
+
* linear on the Mercator plane, so the appearance does not change when
|
|
64
|
+
* subdivided (interpolating on the lng/lat plane would introduce a slight
|
|
65
|
+
* stretch in the latitude direction).
|
|
66
|
+
*
|
|
67
|
+
* @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
|
|
68
|
+
* bottom-right, bottom-left)
|
|
69
|
+
*/
|
|
70
|
+
export function buildQuadGrid(quad, nx, ny) {
|
|
71
|
+
const cols = nx + 1;
|
|
72
|
+
const rows = ny + 1;
|
|
73
|
+
const vertexCount = cols * rows;
|
|
74
|
+
const lngLat = new Float64Array(vertexCount * 2);
|
|
75
|
+
const texCoords = new Float32Array(vertexCount * 2);
|
|
76
|
+
for (let j = 0; j < rows; j++) {
|
|
77
|
+
const v = j / ny;
|
|
78
|
+
for (let i = 0; i < cols; i++) {
|
|
79
|
+
const u = i / nx;
|
|
80
|
+
// Bilinear interpolation (a = top-left, b = top-right, c = bottom-right, d = bottom-left)
|
|
81
|
+
const wa = (1 - u) * (1 - v);
|
|
82
|
+
const wb = u * (1 - v);
|
|
83
|
+
const wc = u * v;
|
|
84
|
+
const wd = (1 - u) * v;
|
|
85
|
+
const x = wa * quad[0] + wb * quad[2] + wc * quad[4] + wd * quad[6];
|
|
86
|
+
const y = wa * quad[1] + wb * quad[3] + wc * quad[5] + wd * quad[7];
|
|
87
|
+
const at = (j * cols + i) * 2;
|
|
88
|
+
lngLat[at] = x * 360 - 180;
|
|
89
|
+
lngLat[at + 1] = latFromMercatorY(y);
|
|
90
|
+
texCoords[at] = u;
|
|
91
|
+
texCoords[at + 1] = v;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const indices = new Uint16Array(nx * ny * 6);
|
|
95
|
+
let k = 0;
|
|
96
|
+
for (let j = 0; j < ny; j++) {
|
|
97
|
+
for (let i = 0; i < nx; i++) {
|
|
98
|
+
const topLeft = j * cols + i;
|
|
99
|
+
const topRight = topLeft + 1;
|
|
100
|
+
const bottomLeft = topLeft + cols;
|
|
101
|
+
const bottomRight = bottomLeft + 1;
|
|
102
|
+
indices[k++] = topLeft;
|
|
103
|
+
indices[k++] = bottomLeft;
|
|
104
|
+
indices[k++] = bottomRight;
|
|
105
|
+
indices[k++] = topLeft;
|
|
106
|
+
indices[k++] = bottomRight;
|
|
107
|
+
indices[k++] = topRight;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { lngLat, texCoords, indices, vertexCount };
|
|
111
|
+
}
|
|
112
|
+
/** Mercator y -> latitude */
|
|
113
|
+
function latFromMercatorY(y) {
|
|
114
|
+
const n = Math.PI - 2 * Math.PI * y;
|
|
115
|
+
return (180 / Math.PI) * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
|
|
116
|
+
}
|
|
117
|
+
/** The distance between two of the four corners (Mercator) */
|
|
118
|
+
function edgeLength(quad, from, to) {
|
|
119
|
+
const dx = quad[to * 2] - quad[from * 2];
|
|
120
|
+
const dy = quad[to * 2 + 1] - quad[from * 2 + 1];
|
|
121
|
+
return Math.hypot(dx, dy);
|
|
122
|
+
}
|
|
123
|
+
/** Clamps the number of divisions into 1..the upper limit */
|
|
124
|
+
function clampDivisions(value) {
|
|
125
|
+
if (!Number.isFinite(value) || value < 1)
|
|
126
|
+
return 1;
|
|
127
|
+
return Math.min(QUAD_GRID_MAX_DIVISIONS, Math.round(value));
|
|
128
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuadShader
|
|
3
|
+
*
|
|
4
|
+
* A shader for drawing a textured quad (a quadrilateral).
|
|
5
|
+
* Uses MapLibre's projectTile to support pitch/roll/globe.
|
|
6
|
+
* Avoids coordinate precision problems with offset mode.
|
|
7
|
+
*
|
|
8
|
+
* On frames where terrain (3D) is enabled, a billboard with only four corners
|
|
9
|
+
* lets the terrain poke through from the inside, so the drawing is split into
|
|
10
|
+
* three ways.
|
|
11
|
+
*
|
|
12
|
+
* 1. Analytic drape (the preferred one). `terrain/drape/quad.ts` paints it as
|
|
13
|
+
* pixels of the ground surface. Burying and clipping cannot occur by
|
|
14
|
+
* construction, and behind a ridge it is hidden by the depth of the terrain
|
|
15
|
+
* mesh
|
|
16
|
+
* 2. Subdivision (degraded). On frames where the resources for the analytic
|
|
17
|
+
* drape cannot be prepared, the quad is split to the fineness of the
|
|
18
|
+
* terrain mesh grid and an elevation is given per vertex
|
|
19
|
+
* 3. Four corner vertices (no terrain). This path is exactly identical to
|
|
20
|
+
* before on a flat map. On the globe the same grid as 2 is cut along the
|
|
21
|
+
* Mercator plane with the cell of the fills instead (no elevation), so the
|
|
22
|
+
* quad follows the sphere the way maplibre's layers do
|
|
23
|
+
*/
|
|
24
|
+
import type { ProjectionData } from 'maplibre-gl';
|
|
25
|
+
import type { TerrainContext } from '../terrain/context.js';
|
|
26
|
+
import type { DrapeQuadCorners, QuadDrapeSurface } from '../terrain/drape/quad.js';
|
|
27
|
+
import type { OffsetUniforms } from './helpers.js';
|
|
28
|
+
/**
|
|
29
|
+
* The four corners of a quad, each `[lng, lat]` in degrees, as {@link computeQuadVertices}
|
|
30
|
+
* returns them.
|
|
31
|
+
*/
|
|
32
|
+
export interface QuadVertices {
|
|
33
|
+
/** The top-left corner (texture coordinate (0, 0)) */
|
|
34
|
+
topLeft: [number, number];
|
|
35
|
+
/** The top-right corner (texture coordinate (1, 0)) */
|
|
36
|
+
topRight: [number, number];
|
|
37
|
+
/** The bottom-left corner (texture coordinate (0, 1)) */
|
|
38
|
+
bottomLeft: [number, number];
|
|
39
|
+
/** The bottom-right corner (texture coordinate (1, 1)) */
|
|
40
|
+
bottomRight: [number, number];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Draws a textured quad on the map, such as a picture pasted onto it, following pitch,
|
|
44
|
+
* globe and terrain.
|
|
45
|
+
*
|
|
46
|
+
* Call `ensureShader` with the shader data of the frame and `setOffsetUniforms` before
|
|
47
|
+
* `draw`. On terrain the quad is painted as ground pixels when possible, otherwise it is
|
|
48
|
+
* subdivided to the terrain mesh.
|
|
49
|
+
*/
|
|
50
|
+
export declare class QuadShader {
|
|
51
|
+
private gl;
|
|
52
|
+
private program;
|
|
53
|
+
private variantName;
|
|
54
|
+
private vao;
|
|
55
|
+
private positionBuffer;
|
|
56
|
+
private texCoordBuffer;
|
|
57
|
+
private projectionUniformManager;
|
|
58
|
+
private textureLoc;
|
|
59
|
+
private opacityLoc;
|
|
60
|
+
private offsetUniforms;
|
|
61
|
+
private gridVao;
|
|
62
|
+
private gridPositionBuffer;
|
|
63
|
+
private gridTexCoordBuffer;
|
|
64
|
+
private gridIndexBuffer;
|
|
65
|
+
/** The most recently built grid (not rebuilt if the corners and divisions are the same) */
|
|
66
|
+
private grid;
|
|
67
|
+
private gridKey;
|
|
68
|
+
/** The vertex offsets of the grid (a work array re-subtracting the center every frame) */
|
|
69
|
+
private gridOffsets;
|
|
70
|
+
/** The capacity of the vertex buffer allocated on the GPU (number of elements) */
|
|
71
|
+
private gridPositionCapacity;
|
|
72
|
+
/**
|
|
73
|
+
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
74
|
+
*
|
|
75
|
+
* The CustomLayer passes its instance's context at construction. An extension renderer that
|
|
76
|
+
* owns a QuadShader calls `setTerrain(context.terrain)` with the draw context it receives.
|
|
77
|
+
*/
|
|
78
|
+
private terrain;
|
|
79
|
+
constructor(gl: WebGL2RenderingContext, terrain?: TerrainContext | null);
|
|
80
|
+
/**
|
|
81
|
+
* Sets the terrain state the next draws use (null draws without terrain)
|
|
82
|
+
*/
|
|
83
|
+
setTerrain(terrain: TerrainContext | null): void;
|
|
84
|
+
/**
|
|
85
|
+
* Initializes the buffers
|
|
86
|
+
*/
|
|
87
|
+
private setupBuffers;
|
|
88
|
+
/**
|
|
89
|
+
* Sets the uniforms for offset mode
|
|
90
|
+
*/
|
|
91
|
+
setOffsetUniforms(uniforms: OffsetUniforms): void;
|
|
92
|
+
/**
|
|
93
|
+
* Ensures the shader (recreating it when necessary)
|
|
94
|
+
*/
|
|
95
|
+
ensureShader(shaderData: {
|
|
96
|
+
vertexShaderPrelude: string;
|
|
97
|
+
define: string;
|
|
98
|
+
variantName: string;
|
|
99
|
+
}): void;
|
|
100
|
+
/**
|
|
101
|
+
* Creates the shader program for a quad (offset mode)
|
|
102
|
+
*/
|
|
103
|
+
private createQuadProgram;
|
|
104
|
+
/**
|
|
105
|
+
* Sets the projection uniforms (supporting offset mode + globe mode)
|
|
106
|
+
* @param projectionData MapLibre's ProjectionData
|
|
107
|
+
* @param zoom The current zoom level (used to switch offset mode)
|
|
108
|
+
*/
|
|
109
|
+
private setProjectionUniforms;
|
|
110
|
+
/**
|
|
111
|
+
* Draws a quad
|
|
112
|
+
*
|
|
113
|
+
* @param vertices The four vertices of the quad (WGS84 coordinates [lng, lat])
|
|
114
|
+
* @param texture The texture
|
|
115
|
+
* @param opacity The opacity
|
|
116
|
+
* @param projectionData MapLibre's ProjectionData
|
|
117
|
+
* @param zoom The current zoom level
|
|
118
|
+
*/
|
|
119
|
+
draw(vertices: QuadVertices, texture: WebGLTexture, opacity: number, projectionData: ProjectionData, zoom: number): void;
|
|
120
|
+
/**
|
|
121
|
+
* Draws with a subdivided grid (the degraded path)
|
|
122
|
+
*
|
|
123
|
+
* Splits the four corners to the fineness of the terrain mesh grid and adds
|
|
124
|
+
* the DEM elevation per vertex. Applying the elevation to the vertices is
|
|
125
|
+
* done by the shared GLSL, so the shader is the same one as the billboard.
|
|
126
|
+
*
|
|
127
|
+
* @returns true if it was drawn. When no subdivision is needed (the terrain
|
|
128
|
+
* step is unavailable) it returns false and the caller draws with the
|
|
129
|
+
* conventional four corner vertices
|
|
130
|
+
*/
|
|
131
|
+
private drawSubdivided;
|
|
132
|
+
/**
|
|
133
|
+
* Draws with a grid cut along the Mercator plane on the globe
|
|
134
|
+
*
|
|
135
|
+
* @param cell The cell of the fills on the globe (Mercator; 0 on a flat map)
|
|
136
|
+
* @returns true if it was drawn. A flat map, and a quad inside one cell, return false and
|
|
137
|
+
* the caller draws the four corners
|
|
138
|
+
*/
|
|
139
|
+
private drawOnGlobe;
|
|
140
|
+
/**
|
|
141
|
+
* Draws the quad as a grid of `size` interpolated on the Mercator plane (shared by the
|
|
142
|
+
* terrain and the globe)
|
|
143
|
+
*/
|
|
144
|
+
private drawGrid;
|
|
145
|
+
/**
|
|
146
|
+
* Uploads the texture coordinates and indices of the grid to the GPU
|
|
147
|
+
*/
|
|
148
|
+
private uploadGridStatics;
|
|
149
|
+
/**
|
|
150
|
+
* Disposes of the resources
|
|
151
|
+
*/
|
|
152
|
+
dispose(): void;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Paints a quad with a fill and text as pixels of the terrain surface.
|
|
156
|
+
*
|
|
157
|
+
* Used by custom renderers that draw text on a filled quad. The fill is decided by a
|
|
158
|
+
* rectangle fill and the text by an SDF atlas lookup, both within the same
|
|
159
|
+
* fragment, so a mismatch of subdivision between the fill and the text cannot
|
|
160
|
+
* occur.
|
|
161
|
+
*
|
|
162
|
+
* Returns false on frames with no terrain and on frames that have terrain but
|
|
163
|
+
* no entry point for the analytic drape (the DEM has not arrived, the shader
|
|
164
|
+
* cannot be built). The caller falls back to the conventional way of drawing
|
|
165
|
+
* (the fill texture + a separate draw of the text).
|
|
166
|
+
*
|
|
167
|
+
* @param terrain The terrain state of the draw instance being drawn
|
|
168
|
+
* (`CustomRendererDrawContext.terrain`)
|
|
169
|
+
* @param corners The corners of the quad in degrees
|
|
170
|
+
* @param surface The fill and the text
|
|
171
|
+
* @param opacity The opacity, 0..1
|
|
172
|
+
* @returns true if it was painted; false when the caller must draw it another way
|
|
173
|
+
*/
|
|
174
|
+
export declare function drawQuadSurfaceOnTerrain(terrain: TerrainContext, corners: DrapeQuadCorners, surface: QuadDrapeSurface, opacity: number): boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Returns the corners of a rectangle of a size in degrees, rotated about its center.
|
|
177
|
+
*
|
|
178
|
+
* When a large image is placed at a low zoom level, the latitude may exceed
|
|
179
|
+
* +/-90 degrees. In that case it is scaled down automatically so that the
|
|
180
|
+
* whole thing is displayed.
|
|
181
|
+
*
|
|
182
|
+
* @param centerLng The center longitude
|
|
183
|
+
* @param centerLat The center latitude
|
|
184
|
+
* @param widthDeg The width (degrees)
|
|
185
|
+
* @param heightDeg The height (degrees)
|
|
186
|
+
* @param rotationRad The rotation angle (radians, counter-clockwise)
|
|
187
|
+
* @returns The four vertices of the quad (WGS84 coordinates [lng, lat])
|
|
188
|
+
*/
|
|
189
|
+
export declare function computeQuadVertices(centerLng: number, centerLat: number, widthDeg: number, heightDeg: number, rotationRad: number): QuadVertices;
|