@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,364 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The GLSL sources of the SDF line program
|
|
5
|
+
*
|
|
6
|
+
* The HHAA approach:
|
|
7
|
+
* 1. Project geographic coordinates -> Mercator -> clip space
|
|
8
|
+
* 2. Compute the normal direction in clip space
|
|
9
|
+
* 3. Compute the offset in screen space (pixels)
|
|
10
|
+
* 4. Convert back to clip space and set gl_Position
|
|
11
|
+
* 5. Pass the signed distance (pixels) to the fragment stage
|
|
12
|
+
*
|
|
13
|
+
* The vertex stage also computes the miter/bevel joins, the round caps, and the subdivision
|
|
14
|
+
* of a segment on terrain and on the globe; the fragment stage computes the coverage of the line body and the
|
|
15
|
+
* caps and applies the dash pattern.
|
|
16
|
+
*/
|
|
17
|
+
import { getProjectionTransitionUniform, OFFSET_MODE_GLSL } from '../../shaders/helpers.js';
|
|
18
|
+
/**
|
|
19
|
+
* The vertex shader source of the SDF line program
|
|
20
|
+
*
|
|
21
|
+
* @param prelude The vertex shader prelude maplibre hands to the custom layer
|
|
22
|
+
* @param define The defines of the projection variant
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export function buildLineVertexSource(prelude, define) {
|
|
27
|
+
const projTransitionUniform = getProjectionTransitionUniform(prelude);
|
|
28
|
+
return `#version 300 es
|
|
29
|
+
${prelude}
|
|
30
|
+
${define}
|
|
31
|
+
${projTransitionUniform}${OFFSET_MODE_GLSL}
|
|
32
|
+
|
|
33
|
+
// Strip vertex attributes
|
|
34
|
+
layout(location = 0) in float a_side; // 1=left, -1=right
|
|
35
|
+
// a_station: the index of the subdivision point along the segment (0..u_stations)
|
|
36
|
+
layout(location = 1) in float a_station;
|
|
37
|
+
|
|
38
|
+
// Instance attributes
|
|
39
|
+
// a_indices: x=start point idx, y=end point idx, z=previous point idx (-1=none),
|
|
40
|
+
// w=next point idx (-1=none)
|
|
41
|
+
layout(location = 2) in vec4 a_indices;
|
|
42
|
+
// a_extra: x=cumulative distance at the segment start (drawing-buffer px at the draw zoom,
|
|
43
|
+
// for dashes), y=original line width (px), z=createdZoom, w=segment length
|
|
44
|
+
layout(location = 3) in vec4 a_extra;
|
|
45
|
+
layout(location = 4) in vec4 a_color; // line color (opacity already folded in)
|
|
46
|
+
|
|
47
|
+
// Uniforms
|
|
48
|
+
uniform float u_width; // line width (pixels) - for individual draws
|
|
49
|
+
uniform float u_zoom; // current zoom level
|
|
50
|
+
uniform vec2 u_viewport; // viewport size
|
|
51
|
+
uniform float u_miter_limit; // miter limit
|
|
52
|
+
uniform sampler2D u_coord_tex;
|
|
53
|
+
uniform float u_tex_size;
|
|
54
|
+
uniform float u_size_scale; // size factor at draw time (default 1)
|
|
55
|
+
uniform float u_stations; // number of subdivisions of the segment (1 on a flat map)
|
|
56
|
+
// 1 when the subdivision points move along the Mercator plane (the globe), 0 when they move
|
|
57
|
+
// along the degrees (the terrain)
|
|
58
|
+
uniform float u_station_mercator;
|
|
59
|
+
|
|
60
|
+
out float v_dist; // signed distance from the line center (pixels)
|
|
61
|
+
out float v_width; // half the line width (pixels)
|
|
62
|
+
out float v_linesofar; // cumulative distance (drawing-buffer px, for dashes)
|
|
63
|
+
// v_line_pos: position along the line (0=start, segmentLength=end,
|
|
64
|
+
// negative=start cap, >segmentLength=end cap)
|
|
65
|
+
out float v_line_pos;
|
|
66
|
+
out float v_seg_length; // segment length
|
|
67
|
+
out vec4 v_color; // line color (instance attribute)
|
|
68
|
+
|
|
69
|
+
// Read the relative coordinate from the coordinate texture
|
|
70
|
+
// (already computed at 64-bit precision on the CPU side)
|
|
71
|
+
vec2 getCoordOffset(int idx) {
|
|
72
|
+
int x = idx % int(u_tex_size);
|
|
73
|
+
int y = idx / int(u_tex_size);
|
|
74
|
+
return texelFetch(u_coord_tex, ivec2(x, y), 0).xy;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Project the relative coordinate to get clip-space coordinates (high-precision version)
|
|
78
|
+
vec4 projectOffset(vec2 offset) {
|
|
79
|
+
return project_position_to_clipspace_from_offset(offset, u_projection_matrix);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// The Mercator limit of latitude (the plane reaches infinity at the poles)
|
|
83
|
+
const float STATION_MAX_LAT = 85.0511287798066;
|
|
84
|
+
|
|
85
|
+
// Mercator coordinates (0-1) -> WGS84
|
|
86
|
+
vec2 stationMercatorToLngLat(vec2 mercator) {
|
|
87
|
+
float lng = mercator.x * 360.0 - 180.0;
|
|
88
|
+
float lat = degrees(atan(sinh(PI * (1.0 - 2.0 * mercator.y))));
|
|
89
|
+
return vec2(lng, lat);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// The point at t along the segment from a to b (relative coordinates)
|
|
93
|
+
//
|
|
94
|
+
// On the terrain it moves along the degrees, as it always has. On the globe it moves along the
|
|
95
|
+
// straight line of the Mercator plane: that is the path maplibre draws an edge along on the
|
|
96
|
+
// sphere (a parallel stays a parallel), where a straight line between the projected ends would
|
|
97
|
+
// be a chord through the sphere.
|
|
98
|
+
vec2 stationOffset(vec2 a, vec2 b, float t) {
|
|
99
|
+
if (u_station_mercator < 0.5) return mix(a, b, t);
|
|
100
|
+
// The same absolute coordinates as project_position_to_clipspace_from_offset
|
|
101
|
+
vec2 base = u_origin_shift + u_center_lnglat;
|
|
102
|
+
vec2 la = a + base;
|
|
103
|
+
vec2 lb = b + base;
|
|
104
|
+
la.y = clamp(la.y, -STATION_MAX_LAT, STATION_MAX_LAT);
|
|
105
|
+
lb.y = clamp(lb.y, -STATION_MAX_LAT, STATION_MAX_LAT);
|
|
106
|
+
vec2 mercator = mix(lngLatToMercator(la), lngLatToMercator(lb), t);
|
|
107
|
+
return stationMercatorToLngLat(mercator) - base;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Convert clip-space coordinates into screen space (pixels)
|
|
111
|
+
vec2 clipToScreen(vec4 clip) {
|
|
112
|
+
vec2 ndc = clip.xy / clip.w;
|
|
113
|
+
return (ndc * 0.5 + 0.5) * u_viewport;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Convert a screen-space offset into a clip-space offset
|
|
117
|
+
vec2 screenToClipOffset(vec2 screenOffset, float w) {
|
|
118
|
+
return screenOffset * 2.0 / u_viewport * w;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
void main() {
|
|
122
|
+
// Get the indices
|
|
123
|
+
int startIdx = int(a_indices.x);
|
|
124
|
+
int endIdx = int(a_indices.y);
|
|
125
|
+
int prevIdx = int(a_indices.z);
|
|
126
|
+
int nextIdx = int(a_indices.w);
|
|
127
|
+
|
|
128
|
+
// The position along the segment (0=start, 1=end)
|
|
129
|
+
// With u_stations = 1 only 0 and 1 come out, which is identical to before terrain
|
|
130
|
+
float stations = max(u_stations, 1.0);
|
|
131
|
+
float t = min(a_station / stations, 1.0);
|
|
132
|
+
bool atStart = a_station < 0.5;
|
|
133
|
+
bool atEnd = t >= 1.0;
|
|
134
|
+
|
|
135
|
+
// Get the relative coordinates (already computed at 64-bit precision on the CPU side)
|
|
136
|
+
vec2 startOffset = getCoordOffset(startIdx);
|
|
137
|
+
vec2 endOffset = getCoordOffset(endIdx);
|
|
138
|
+
|
|
139
|
+
// High-precision version: project into clip space
|
|
140
|
+
vec4 startClip = projectOffset(startOffset);
|
|
141
|
+
vec4 endClip = projectOffset(endOffset);
|
|
142
|
+
|
|
143
|
+
// Convert into screen space
|
|
144
|
+
vec2 startScreen = clipToScreen(startClip);
|
|
145
|
+
vec2 endScreen = clipToScreen(endClip);
|
|
146
|
+
|
|
147
|
+
// The current point (start or end)
|
|
148
|
+
vec4 currentClip = atStart ? startClip : endClip;
|
|
149
|
+
vec2 currentScreen = atStart ? startScreen : endScreen;
|
|
150
|
+
|
|
151
|
+
// The direction of the segment (screen space)
|
|
152
|
+
vec2 segmentVec = endScreen - startScreen;
|
|
153
|
+
float screenSegmentLength = length(segmentVec);
|
|
154
|
+
vec2 segmentDir = segmentVec / screenSegmentLength;
|
|
155
|
+
// The normal vector (pointing left)
|
|
156
|
+
vec2 normal = vec2(-segmentDir.y, segmentDir.x);
|
|
157
|
+
|
|
158
|
+
// Only for subdivision on terrain or on the globe (u_stations > 1), compute the position of
|
|
159
|
+
// the subdivision point and the local direction. On a flat map without terrain, the uniform
|
|
160
|
+
// branch skips this block entirely, so it is exactly identical to the previous computation.
|
|
161
|
+
if (u_stations > 1.5) {
|
|
162
|
+
float dt = 1.0 / stations;
|
|
163
|
+
vec2 backOffset = stationOffset(startOffset, endOffset, max(t - dt, 0.0));
|
|
164
|
+
vec2 forwardOffset = stationOffset(startOffset, endOffset, min(t + dt, 1.0));
|
|
165
|
+
|
|
166
|
+
if (!atStart && !atEnd) {
|
|
167
|
+
vec2 midOffset = stationOffset(startOffset, endOffset, t);
|
|
168
|
+
currentClip = projectOffset(midOffset);
|
|
169
|
+
currentScreen = clipToScreen(currentClip);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
vec2 backScreen = atStart ? currentScreen : clipToScreen(projectOffset(backOffset));
|
|
173
|
+
vec2 forwardScreen = atEnd ? currentScreen : clipToScreen(projectOffset(forwardOffset));
|
|
174
|
+
vec2 localVec = forwardScreen - backScreen;
|
|
175
|
+
float localLen = length(localVec);
|
|
176
|
+
if (localLen > 0.0001) {
|
|
177
|
+
vec2 localDir = localVec / localLen;
|
|
178
|
+
segmentDir = localDir;
|
|
179
|
+
normal = vec2(-localDir.y, localDir.x);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Miter computation
|
|
184
|
+
float miterScale = 1.0;
|
|
185
|
+
vec2 miterNormal = normal;
|
|
186
|
+
|
|
187
|
+
if (atStart) {
|
|
188
|
+
// Start point: take the previous segment into account
|
|
189
|
+
if (prevIdx >= 0) {
|
|
190
|
+
vec2 prevOffset = getCoordOffset(prevIdx);
|
|
191
|
+
vec4 prevClip = projectOffset(prevOffset);
|
|
192
|
+
vec2 prevScreen = clipToScreen(prevClip);
|
|
193
|
+
|
|
194
|
+
vec2 prevDir = normalize(startScreen - prevScreen);
|
|
195
|
+
vec2 prevNormal = vec2(-prevDir.y, prevDir.x);
|
|
196
|
+
|
|
197
|
+
// The miter normal (the average of the two normals, normalized)
|
|
198
|
+
vec2 avgNormal = prevNormal + normal;
|
|
199
|
+
float avgLen = length(avgNormal);
|
|
200
|
+
if (avgLen > 0.001) {
|
|
201
|
+
miterNormal = avgNormal / avgLen;
|
|
202
|
+
float cosHalf = dot(miterNormal, normal);
|
|
203
|
+
if (cosHalf > 0.001) {
|
|
204
|
+
miterScale = 1.0 / cosHalf;
|
|
205
|
+
// Fall back to a bevel once the miter limit is exceeded
|
|
206
|
+
if (miterScale > u_miter_limit) {
|
|
207
|
+
miterScale = 1.0;
|
|
208
|
+
miterNormal = normal;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
} else if (atEnd) {
|
|
214
|
+
// End point: take the next segment into account
|
|
215
|
+
if (nextIdx >= 0) {
|
|
216
|
+
vec2 nextOffset = getCoordOffset(nextIdx);
|
|
217
|
+
vec4 nextClip = projectOffset(nextOffset);
|
|
218
|
+
vec2 nextScreen = clipToScreen(nextClip);
|
|
219
|
+
|
|
220
|
+
vec2 nextDir = normalize(nextScreen - endScreen);
|
|
221
|
+
vec2 nextNormal = vec2(-nextDir.y, nextDir.x);
|
|
222
|
+
|
|
223
|
+
// The miter normal
|
|
224
|
+
vec2 avgNormal = normal + nextNormal;
|
|
225
|
+
float avgLen = length(avgNormal);
|
|
226
|
+
if (avgLen > 0.001) {
|
|
227
|
+
miterNormal = avgNormal / avgLen;
|
|
228
|
+
float cosHalf = dot(miterNormal, normal);
|
|
229
|
+
if (cosHalf > 0.001) {
|
|
230
|
+
miterScale = 1.0 / cosHalf;
|
|
231
|
+
// Fall back to a bevel once the miter limit is exceeded
|
|
232
|
+
if (miterScale > u_miter_limit) {
|
|
233
|
+
miterScale = 1.0;
|
|
234
|
+
miterNormal = normal;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Scale the line width with the zoom level (computed on the GPU side)
|
|
242
|
+
// a_extra.y = the original line width (pixels relative to createdZoom)
|
|
243
|
+
// a_extra.z = createdZoom
|
|
244
|
+
// widthPixels = strokeWidth * 2^(u_zoom - createdZoom)
|
|
245
|
+
//
|
|
246
|
+
// strokeWidth < 0 means "a fixed width of -strokeWidth pixels (zoom-independent)".
|
|
247
|
+
// This is the convention that lets features without a createdZoom be mixed into the same
|
|
248
|
+
// batch (= the same u_zoom) as variable-width features and drawn together.
|
|
249
|
+
//
|
|
250
|
+
// u_size_scale is the size factor at draw time (default 1). It is multiplied outside the
|
|
251
|
+
// branch so that it takes effect no matter which branch the data layer goes through.
|
|
252
|
+
float strokeWidth = a_extra.y;
|
|
253
|
+
float createdZoom = a_extra.z;
|
|
254
|
+
float lineWidth = (strokeWidth > 0.0
|
|
255
|
+
? strokeWidth * pow(2.0, u_zoom - createdZoom)
|
|
256
|
+
: (strokeWidth < 0.0 ? -strokeWidth : u_width)) * u_size_scale;
|
|
257
|
+
float halfWidth = lineWidth / 2.0;
|
|
258
|
+
|
|
259
|
+
// HHAA: expand by w+1 so that partially covered pixels are included too
|
|
260
|
+
float expandedHalfWidth = halfWidth + 1.0;
|
|
261
|
+
|
|
262
|
+
// The offset in screen space
|
|
263
|
+
vec2 screenOffset = miterNormal * a_side * expandedHalfWidth * miterScale;
|
|
264
|
+
|
|
265
|
+
// Convert it into an offset in clip space
|
|
266
|
+
vec2 clipOffset = screenToClipOffset(screenOffset, currentClip.w);
|
|
267
|
+
|
|
268
|
+
// Segment information
|
|
269
|
+
float segmentStart = a_extra.x; // cumulative distance at the starting position
|
|
270
|
+
// Use the screen-space segment length computed on the GPU side (better precision)
|
|
271
|
+
|
|
272
|
+
// Round cap handling
|
|
273
|
+
// When there is no preceding or following segment, expand to round off the end
|
|
274
|
+
bool isStartCap = atStart && (prevIdx < 0);
|
|
275
|
+
bool isEndCap = atEnd && (nextIdx < 0);
|
|
276
|
+
|
|
277
|
+
vec2 capOffset = vec2(0.0);
|
|
278
|
+
float linePos = t * screenSegmentLength; // position along the line
|
|
279
|
+
|
|
280
|
+
if (isStartCap) {
|
|
281
|
+
// Start cap: expand against the direction of travel
|
|
282
|
+
capOffset = -segmentDir * expandedHalfWidth;
|
|
283
|
+
linePos = -expandedHalfWidth; // before the start point
|
|
284
|
+
} else if (isEndCap) {
|
|
285
|
+
// End cap: expand along the direction of travel
|
|
286
|
+
capOffset = segmentDir * expandedHalfWidth;
|
|
287
|
+
linePos = screenSegmentLength + expandedHalfWidth; // beyond the end point
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// The final position (including the cap expansion)
|
|
291
|
+
vec2 totalScreenOffset = screenOffset + capOffset;
|
|
292
|
+
vec2 totalClipOffset = screenToClipOffset(totalScreenOffset, currentClip.w);
|
|
293
|
+
gl_Position = currentClip + vec4(totalClipOffset, 0.0, 0.0);
|
|
294
|
+
|
|
295
|
+
// The values passed to the fragment stage
|
|
296
|
+
v_dist = a_side * expandedHalfWidth; // signed distance (pixels)
|
|
297
|
+
v_width = halfWidth; // half the line width (pixels)
|
|
298
|
+
v_linesofar = segmentStart + t * screenSegmentLength; // cumulative distance (for dashes)
|
|
299
|
+
v_line_pos = linePos; // position along the line
|
|
300
|
+
v_seg_length = screenSegmentLength; // segment length (computed on the GPU)
|
|
301
|
+
v_color = a_color; // line color (instance attribute)
|
|
302
|
+
}`;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* The fragment shader source of the SDF line program
|
|
306
|
+
*
|
|
307
|
+
* @internal
|
|
308
|
+
*/
|
|
309
|
+
export const LINE_FRAGMENT_SOURCE = `#version 300 es
|
|
310
|
+
precision highp float;
|
|
311
|
+
|
|
312
|
+
in float v_dist; // signed distance from the line center (pixels)
|
|
313
|
+
in float v_width; // half the line width (pixels)
|
|
314
|
+
in float v_line_pos; // position along the line
|
|
315
|
+
in float v_seg_length; // segment length
|
|
316
|
+
in float v_linesofar; // cumulative distance (drawing-buffer px, for dashes)
|
|
317
|
+
in vec4 v_color; // line color (opacity already folded in)
|
|
318
|
+
|
|
319
|
+
uniform float u_dashEnabled; // flag that enables the dash pattern
|
|
320
|
+
uniform vec4 u_dashArray; // [dash, gap, period, 0] in drawing-buffer px
|
|
321
|
+
uniform float u_opacity; // opacity factor at draw time (default 1)
|
|
322
|
+
|
|
323
|
+
out vec4 fragColor;
|
|
324
|
+
|
|
325
|
+
void main() {
|
|
326
|
+
float d = v_dist;
|
|
327
|
+
float w = v_width;
|
|
328
|
+
|
|
329
|
+
// Compute the distance from the ends along the line
|
|
330
|
+
// startDist: distance from the start point (negative=inside the line, positive=cap region)
|
|
331
|
+
float startDist = -v_line_pos;
|
|
332
|
+
// endDist: distance from the end point (negative=inside the line, positive=cap region)
|
|
333
|
+
float endDist = v_line_pos - v_seg_length;
|
|
334
|
+
|
|
335
|
+
float coverage;
|
|
336
|
+
|
|
337
|
+
if (startDist > 0.0) {
|
|
338
|
+
// Start cap region: circular distance function
|
|
339
|
+
float capDist = length(vec2(d, startDist)) - w;
|
|
340
|
+
coverage = 1.0 - clamp(capDist + 0.5, 0.0, 1.0);
|
|
341
|
+
} else if (endDist > 0.0) {
|
|
342
|
+
// End cap region: circular distance function
|
|
343
|
+
float capDist = length(vec2(d, endDist)) - w;
|
|
344
|
+
coverage = 1.0 - clamp(capDist + 0.5, 0.0, 1.0);
|
|
345
|
+
} else {
|
|
346
|
+
// Ordinary line rendering (HHAA)
|
|
347
|
+
float left = clamp(d - w + 0.5, 0.0, 1.0);
|
|
348
|
+
float right = clamp(d + w + 0.5, 0.0, 1.0);
|
|
349
|
+
coverage = right - left;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// Apply the dash pattern
|
|
353
|
+
if (u_dashEnabled > 0.5 && coverage > 0.0) {
|
|
354
|
+
float patternLength = u_dashArray.z;
|
|
355
|
+
float dashLength = u_dashArray.x;
|
|
356
|
+
float posInPattern = mod(v_linesofar, patternLength);
|
|
357
|
+
if (posInPattern > dashLength) {
|
|
358
|
+
coverage = 0.0;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// The factor is multiplied into the whole value the same way the existing coverage is
|
|
363
|
+
fragColor = v_color * coverage * u_opacity;
|
|
364
|
+
}`;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The types of the SDF line renderer
|
|
3
|
+
*
|
|
4
|
+
* The public stroke style and options, the line data handed to the batch paths, and the GPU
|
|
5
|
+
* resources of a retained batch. `sdf-line.ts` re-exports them.
|
|
6
|
+
*/
|
|
7
|
+
import type { Color, LineStyle } from '../../../shared/types/style.js';
|
|
8
|
+
export type { Color, LineStyle };
|
|
9
|
+
/** The style of a line drawn by {@link SDFLineRenderer}. */
|
|
10
|
+
export interface SDFStrokeStyle {
|
|
11
|
+
/** The line width in CSS px (at `createdZoom` when the options give one) */
|
|
12
|
+
width: number;
|
|
13
|
+
/** The color as `[r, g, b, a]`, each 0..1 */
|
|
14
|
+
color: Color;
|
|
15
|
+
/** The opacity, 0..1, multiplied into the color */
|
|
16
|
+
opacity: number;
|
|
17
|
+
/** Solid, dashed or dotted */
|
|
18
|
+
lineStyle: LineStyle;
|
|
19
|
+
/**
|
|
20
|
+
* The dash and gap lengths in CSS px, `[dash, gap]`. When omitted, a preset of `lineStyle`
|
|
21
|
+
* is used
|
|
22
|
+
*/
|
|
23
|
+
dashArray?: number[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The unit of a line width: screen pixels (CSS px), or meters on the ground converted at the
|
|
27
|
+
* zoom and the latitude.
|
|
28
|
+
*/
|
|
29
|
+
export type WidthUnit = 'pixels' | 'meters';
|
|
30
|
+
/** The options of one {@link SDFLineRenderer.draw} call. */
|
|
31
|
+
export interface SDFStrokeOptions {
|
|
32
|
+
/** The unit of the width. The renderer draws `width` in CSS px */
|
|
33
|
+
widthUnit: WidthUnit;
|
|
34
|
+
/** Whether the path is closed (the last position joins the first) */
|
|
35
|
+
closed: boolean;
|
|
36
|
+
/** The id of the feature drawn, for diagnostics */
|
|
37
|
+
featureId?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The zoom at which `width` applies; the width then scales as `width * 2^(zoom -
|
|
40
|
+
* createdZoom)`. When omitted, the width is fixed on screen
|
|
41
|
+
*/
|
|
42
|
+
createdZoom?: number;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|