@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,504 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { RENDERING_DEFAULTS } from '../../../shared/math/index.js';
|
|
4
|
+
import { resolvePixelRatio } from '../../../shared/utils/pixel-ratio.js';
|
|
5
|
+
import { BufferCache } from '../../cache/buffer.js';
|
|
6
|
+
import { calculateLngLatOffset, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from '../../shaders/helpers.js';
|
|
7
|
+
import { ProjectionUniformManager } from '../../shaders/projection.js';
|
|
8
|
+
import { anchorElevationMeters } from '../../terrain/anchor.js';
|
|
9
|
+
import { TerrainContext } from '../../terrain/context.js';
|
|
10
|
+
import { drawBillboardsWithoutDepth } from './billboard-depth.js';
|
|
11
|
+
import { samplePointShapeRings } from './point-sdf.js';
|
|
12
|
+
// Number of segments that approximate a circle
|
|
13
|
+
const CIRCLE_SEGMENTS = RENDERING_DEFAULTS.CIRCLE_SEGMENTS;
|
|
14
|
+
/**
|
|
15
|
+
* Generates the vertices of a normalized circle (for TRIANGLE_FAN)
|
|
16
|
+
* A shape centered at (0,0) with radius 1
|
|
17
|
+
*/
|
|
18
|
+
function generateNormalizedCircleVertices(segments) {
|
|
19
|
+
const vertices = [];
|
|
20
|
+
// Center point
|
|
21
|
+
vertices.push({ x: 0, y: 0 });
|
|
22
|
+
// Points on the outer edge
|
|
23
|
+
for (let i = 0; i <= segments; i++) {
|
|
24
|
+
const angle = (i / segments) * Math.PI * 2;
|
|
25
|
+
vertices.push({
|
|
26
|
+
x: Math.cos(angle),
|
|
27
|
+
y: Math.sin(angle),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return vertices;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generates the stroke vertices of a normalized circle (for TRIANGLE_STRIP)
|
|
34
|
+
* Uses an inner radius and an outer radius
|
|
35
|
+
*/
|
|
36
|
+
function generateNormalizedCircleStrokeVertices(innerRadius, outerRadius, segments) {
|
|
37
|
+
const vertices = [];
|
|
38
|
+
for (let i = 0; i <= segments; i++) {
|
|
39
|
+
const angle = (i / segments) * Math.PI * 2;
|
|
40
|
+
const cos = Math.cos(angle);
|
|
41
|
+
const sin = Math.sin(angle);
|
|
42
|
+
// Outside
|
|
43
|
+
vertices.push({
|
|
44
|
+
x: cos * outerRadius,
|
|
45
|
+
y: sin * outerRadius,
|
|
46
|
+
});
|
|
47
|
+
// Inside
|
|
48
|
+
vertices.push({
|
|
49
|
+
x: cos * innerRadius,
|
|
50
|
+
y: sin * innerRadius,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return vertices;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generates the vertices of a normalized square (for TRIANGLE_FAN)
|
|
57
|
+
*/
|
|
58
|
+
function generateNormalizedSquareVertices() {
|
|
59
|
+
return [
|
|
60
|
+
{ x: 0, y: 0 }, // center
|
|
61
|
+
{ x: -1, y: -1 }, // top-left
|
|
62
|
+
{ x: 1, y: -1 }, // top-right
|
|
63
|
+
{ x: 1, y: 1 }, // bottom-right
|
|
64
|
+
{ x: -1, y: 1 }, // bottom-left
|
|
65
|
+
{ x: -1, y: -1 }, // top-left (closing)
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generates the stroke vertices of a normalized square
|
|
70
|
+
*/
|
|
71
|
+
function generateNormalizedSquareStrokeVertices(innerRadius, outerRadius) {
|
|
72
|
+
const vertices = [];
|
|
73
|
+
const corners = [
|
|
74
|
+
{ x: -1, y: -1 }, // top-left
|
|
75
|
+
{ x: 1, y: -1 }, // top-right
|
|
76
|
+
{ x: 1, y: 1 }, // bottom-right
|
|
77
|
+
{ x: -1, y: 1 }, // bottom-left
|
|
78
|
+
];
|
|
79
|
+
for (let i = 0; i <= 4; i++) {
|
|
80
|
+
const corner = corners[i % 4];
|
|
81
|
+
vertices.push({ x: corner.x * outerRadius, y: corner.y * outerRadius });
|
|
82
|
+
vertices.push({ x: corner.x * innerRadius, y: corner.y * innerRadius });
|
|
83
|
+
}
|
|
84
|
+
return vertices;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generates the fill vertices of a shape normalized to the radius 1 (for TRIANGLE_FAN)
|
|
88
|
+
*
|
|
89
|
+
* The circle and the square fill the radius. The triangle and the star are inscribed in the
|
|
90
|
+
* outer edge (`outerRatio`) and fill the inside of the stroke band, the same boundaries the
|
|
91
|
+
* instanced renderer draws with its distance function. `'icon'` is drawn as a circle.
|
|
92
|
+
*/
|
|
93
|
+
function generateFillVertices(shape, outerRatio) {
|
|
94
|
+
switch (shape) {
|
|
95
|
+
case 'square':
|
|
96
|
+
return generateNormalizedSquareVertices();
|
|
97
|
+
case 'triangle':
|
|
98
|
+
case 'star': {
|
|
99
|
+
const { inner } = samplePointShapeRings(shape, outerRatio, outerRatio - 1);
|
|
100
|
+
const ring = inner.map(([x, y]) => ({ x, y }));
|
|
101
|
+
return [{ x: 0, y: 0 }, ...ring, ring[0]];
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
return generateNormalizedCircleVertices(CIRCLE_SEGMENTS);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generates the stroke vertices of a shape normalized to the radius 1 (for TRIANGLE_STRIP)
|
|
109
|
+
*
|
|
110
|
+
* The stroke is the band between the radius and the outer edge (`outerRatio`); for the triangle
|
|
111
|
+
* and the star, the band of the stroke width inside the outer edge.
|
|
112
|
+
*/
|
|
113
|
+
function generateStrokeVertices(shape, outerRatio) {
|
|
114
|
+
switch (shape) {
|
|
115
|
+
case 'square':
|
|
116
|
+
return generateNormalizedSquareStrokeVertices(1, outerRatio);
|
|
117
|
+
case 'triangle':
|
|
118
|
+
case 'star': {
|
|
119
|
+
const rings = samplePointShapeRings(shape, outerRatio, outerRatio - 1);
|
|
120
|
+
const vertices = [];
|
|
121
|
+
for (let i = 0; i <= rings.outer.length; i++) {
|
|
122
|
+
const j = i % rings.outer.length;
|
|
123
|
+
vertices.push({ x: rings.outer[j][0], y: rings.outer[j][1] });
|
|
124
|
+
vertices.push({ x: rings.inner[j][0], y: rings.inner[j][1] });
|
|
125
|
+
}
|
|
126
|
+
return vertices;
|
|
127
|
+
}
|
|
128
|
+
default:
|
|
129
|
+
return generateNormalizedCircleStrokeVertices(1, outerRatio, CIRCLE_SEGMENTS);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Packs vertices into an interleaved Float32Array (x, y) */
|
|
133
|
+
function toVertexData(vertices) {
|
|
134
|
+
const data = new Float32Array(vertices.length * 2);
|
|
135
|
+
for (let i = 0; i < vertices.length; i++) {
|
|
136
|
+
data[i * 2] = vertices[i].x;
|
|
137
|
+
data[i * 2 + 1] = vertices[i].y;
|
|
138
|
+
}
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The point renderer core uses for point markers (circles, squares, triangles and stars; the
|
|
143
|
+
* shape `'icon'` is drawn as a circle), shared with custom feature renderers.
|
|
144
|
+
*
|
|
145
|
+
* Draws a billboard of a size in CSS px at a `[lng, lat]` position in degrees, converting to
|
|
146
|
+
* clip space on the GPU. Call `ensureShader`, `setOffsetUniforms` and `setProjectionData`
|
|
147
|
+
* before drawing.
|
|
148
|
+
*/
|
|
149
|
+
export class PointShapeRenderer {
|
|
150
|
+
constructor(_map, gl, pixelRatio, terrain = new TerrainContext()) {
|
|
151
|
+
Object.defineProperty(this, "gl", {
|
|
152
|
+
enumerable: true,
|
|
153
|
+
configurable: true,
|
|
154
|
+
writable: true,
|
|
155
|
+
value: void 0
|
|
156
|
+
});
|
|
157
|
+
Object.defineProperty(this, "program", {
|
|
158
|
+
enumerable: true,
|
|
159
|
+
configurable: true,
|
|
160
|
+
writable: true,
|
|
161
|
+
value: null
|
|
162
|
+
});
|
|
163
|
+
Object.defineProperty(this, "variantName", {
|
|
164
|
+
enumerable: true,
|
|
165
|
+
configurable: true,
|
|
166
|
+
writable: true,
|
|
167
|
+
value: ''
|
|
168
|
+
});
|
|
169
|
+
Object.defineProperty(this, "bufferCache", {
|
|
170
|
+
enumerable: true,
|
|
171
|
+
configurable: true,
|
|
172
|
+
writable: true,
|
|
173
|
+
value: void 0
|
|
174
|
+
});
|
|
175
|
+
// Projection uniform management
|
|
176
|
+
Object.defineProperty(this, "projectionUniformManager", {
|
|
177
|
+
enumerable: true,
|
|
178
|
+
configurable: true,
|
|
179
|
+
writable: true,
|
|
180
|
+
value: void 0
|
|
181
|
+
});
|
|
182
|
+
// Uniform locations (specific to this renderer)
|
|
183
|
+
Object.defineProperty(this, "colorLoc", {
|
|
184
|
+
enumerable: true,
|
|
185
|
+
configurable: true,
|
|
186
|
+
writable: true,
|
|
187
|
+
value: null
|
|
188
|
+
});
|
|
189
|
+
Object.defineProperty(this, "pointLngLatLoc", {
|
|
190
|
+
enumerable: true,
|
|
191
|
+
configurable: true,
|
|
192
|
+
writable: true,
|
|
193
|
+
value: null
|
|
194
|
+
});
|
|
195
|
+
/** Uniform for the ground elevation of the anchor (meters) */
|
|
196
|
+
Object.defineProperty(this, "anchorElevationLoc", {
|
|
197
|
+
enumerable: true,
|
|
198
|
+
configurable: true,
|
|
199
|
+
writable: true,
|
|
200
|
+
value: null
|
|
201
|
+
});
|
|
202
|
+
Object.defineProperty(this, "sizeClipLoc", {
|
|
203
|
+
enumerable: true,
|
|
204
|
+
configurable: true,
|
|
205
|
+
writable: true,
|
|
206
|
+
value: null
|
|
207
|
+
});
|
|
208
|
+
// ProjectionData
|
|
209
|
+
Object.defineProperty(this, "projectionData", {
|
|
210
|
+
enumerable: true,
|
|
211
|
+
configurable: true,
|
|
212
|
+
writable: true,
|
|
213
|
+
value: null
|
|
214
|
+
});
|
|
215
|
+
// Stores the uniforms for the offset mode
|
|
216
|
+
Object.defineProperty(this, "offsetUniforms", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
configurable: true,
|
|
219
|
+
writable: true,
|
|
220
|
+
value: null
|
|
221
|
+
});
|
|
222
|
+
/** Injected device pixel ratio (when not injected, it is read from window each time) */
|
|
223
|
+
Object.defineProperty(this, "pixelRatio", {
|
|
224
|
+
enumerable: true,
|
|
225
|
+
configurable: true,
|
|
226
|
+
writable: true,
|
|
227
|
+
value: void 0
|
|
228
|
+
});
|
|
229
|
+
/** The terrain state of the draw instance this renderer belongs to */
|
|
230
|
+
Object.defineProperty(this, "terrain", {
|
|
231
|
+
enumerable: true,
|
|
232
|
+
configurable: true,
|
|
233
|
+
writable: true,
|
|
234
|
+
value: void 0
|
|
235
|
+
});
|
|
236
|
+
this.gl = gl;
|
|
237
|
+
this.pixelRatio = pixelRatio;
|
|
238
|
+
this.terrain = terrain;
|
|
239
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl, { terrain });
|
|
240
|
+
this.bufferCache = new BufferCache(gl);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Ensures the shader exists (recreating it when necessary)
|
|
244
|
+
*/
|
|
245
|
+
ensureShader(shaderData) {
|
|
246
|
+
if (this.variantName === shaderData.variantName)
|
|
247
|
+
return;
|
|
248
|
+
if (this.program) {
|
|
249
|
+
this.gl.deleteProgram(this.program);
|
|
250
|
+
}
|
|
251
|
+
this.program = this.createShaderProgram(shaderData.vertexShaderPrelude, shaderData.define);
|
|
252
|
+
this.variantName = shaderData.variantName;
|
|
253
|
+
// Get the projection uniform locations
|
|
254
|
+
this.projectionUniformManager.getLocations(this.program);
|
|
255
|
+
// Get the uniform locations specific to this renderer
|
|
256
|
+
this.colorLoc = this.gl.getUniformLocation(this.program, 'u_color');
|
|
257
|
+
this.pointLngLatLoc = this.gl.getUniformLocation(this.program, 'u_point_offset');
|
|
258
|
+
this.anchorElevationLoc = this.gl.getUniformLocation(this.program, 'u_anchor_elevation_m');
|
|
259
|
+
this.sizeClipLoc = this.gl.getUniformLocation(this.program, 'u_size_clip');
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Sets the uniforms for the offset mode
|
|
263
|
+
*/
|
|
264
|
+
setOffsetUniforms(uniforms) {
|
|
265
|
+
this.offsetUniforms = uniforms;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Creates the shader program (offset mode)
|
|
269
|
+
*/
|
|
270
|
+
createShaderProgram(prelude, define) {
|
|
271
|
+
const projTransitionUniform = getProjectionTransitionUniform(prelude);
|
|
272
|
+
// Vertex shader:
|
|
273
|
+
// - a_offset: the normalized offset (a vertex of the shape)
|
|
274
|
+
// - u_point_offset: the relative coordinates of the point (the offset from the center,
|
|
275
|
+
// computed with 64-bit precision on the CPU side)
|
|
276
|
+
// - u_size_clip: the size in clip space
|
|
277
|
+
const vertexSource = `#version 300 es
|
|
278
|
+
${prelude}
|
|
279
|
+
${define}
|
|
280
|
+
${projTransitionUniform}${OFFSET_MODE_GLSL}
|
|
281
|
+
in vec2 a_offset;
|
|
282
|
+
uniform vec2 u_point_offset;
|
|
283
|
+
uniform vec2 u_size_clip;
|
|
284
|
+
// Ground elevation of the anchor (meters). It comes from the same source as hit testing (CPU)
|
|
285
|
+
uniform float u_anchor_elevation_m;
|
|
286
|
+
void main() {
|
|
287
|
+
// The elevation is not sampled from the DEM atlas; the value passed by the CPU is used as is
|
|
288
|
+
// (two sources make the drawn position and the hit area disagree)
|
|
289
|
+
g_anchor_elevation_m = u_anchor_elevation_m;
|
|
290
|
+
g_anchor_elevation_on = 1.0;
|
|
291
|
+
|
|
292
|
+
// Offset mode: uses the relative coordinates computed with 64-bit precision on the CPU side
|
|
293
|
+
vec4 centerClip = project_position_to_clipspace_from_offset(u_point_offset, u_projection_matrix);
|
|
294
|
+
|
|
295
|
+
// Convert to NDC coordinates and then apply the offset
|
|
296
|
+
vec3 centerNDC = centerClip.xyz / centerClip.w;
|
|
297
|
+
|
|
298
|
+
// Scale the offset by the size in clip space (applied in NDC space)
|
|
299
|
+
vec2 offsetNDC = a_offset * u_size_clip;
|
|
300
|
+
|
|
301
|
+
// Center + offset (in NDC space, w=1)
|
|
302
|
+
gl_Position = vec4(centerNDC.xy + offsetNDC, centerNDC.z, 1.0);
|
|
303
|
+
}`;
|
|
304
|
+
const fragmentSource = `#version 300 es
|
|
305
|
+
precision highp float;
|
|
306
|
+
uniform vec4 u_color;
|
|
307
|
+
out vec4 fragColor;
|
|
308
|
+
void main() {
|
|
309
|
+
fragColor = u_color;
|
|
310
|
+
}`;
|
|
311
|
+
return createProgram(this.gl, vertexSource, fragmentSource);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Sets the projection uniforms (supporting the offset mode and the globe mode)
|
|
315
|
+
* @param zoom The current zoom level (used to switch the offset mode)
|
|
316
|
+
*/
|
|
317
|
+
setProjectionUniforms(zoom) {
|
|
318
|
+
if (!this.projectionData)
|
|
319
|
+
return;
|
|
320
|
+
this.projectionUniformManager.setUniforms(this.projectionData, zoom, this.offsetUniforms);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Converts a size in pixels to a size in clip space
|
|
324
|
+
*
|
|
325
|
+
* CSS pixels are converted to device pixels first, and then to clip space. The viewport covers
|
|
326
|
+
* the drawing buffer (in device pixels), so the pixel ratio has to be taken into account.
|
|
327
|
+
*/
|
|
328
|
+
pixelsToClipSize(pixels) {
|
|
329
|
+
// Convert CSS pixels to device pixels
|
|
330
|
+
const dpr = resolvePixelRatio(this.pixelRatio);
|
|
331
|
+
const physicalPixels = pixels * dpr;
|
|
332
|
+
// Convert device pixels to clip space (the drawing buffer is what the viewport covers)
|
|
333
|
+
return {
|
|
334
|
+
x: (physicalPixels / this.gl.drawingBufferWidth) * 2,
|
|
335
|
+
y: (physicalPixels / this.gl.drawingBufferHeight) * 2,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Sets the ProjectionData
|
|
340
|
+
*/
|
|
341
|
+
setProjectionData(projectionData) {
|
|
342
|
+
this.projectionData = projectionData;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Draws a point
|
|
346
|
+
* @param coord The coordinates [lng, lat]
|
|
347
|
+
* @param style The point style
|
|
348
|
+
* @param zoom The current zoom level
|
|
349
|
+
* @param featureId The feature ID (optional)
|
|
350
|
+
*/
|
|
351
|
+
draw(coord, style, zoom, featureId,
|
|
352
|
+
/**
|
|
353
|
+
* The elevation to place it at (meters). When omitted, the ground elevation is used
|
|
354
|
+
*
|
|
355
|
+
* The four corners of the selection box and the rotation handle are placed at the same
|
|
356
|
+
* single height as the box. Picking up the ground height for each of them makes them look as
|
|
357
|
+
* if they float above or sink below the box (billboard).
|
|
358
|
+
*/
|
|
359
|
+
elevationMeters) {
|
|
360
|
+
if (!this.program || !this.projectionData)
|
|
361
|
+
return;
|
|
362
|
+
const gl = this.gl;
|
|
363
|
+
const [lng, lat] = coord;
|
|
364
|
+
// Convert the size to clip space
|
|
365
|
+
const radiusClip = this.pixelsToClipSize(style.size / 2);
|
|
366
|
+
// Ratio of the outer edge (radius + stroke width) to the radius. The vertices are normalized
|
|
367
|
+
// to the radius, and the outer edge is the circumradius of the shape
|
|
368
|
+
const radiusPx = style.size / 2;
|
|
369
|
+
const outerRatio = radiusPx > 0 ? (radiusPx + Math.max(0, style.strokeWidth)) / radiusPx : 1;
|
|
370
|
+
gl.useProgram(this.program);
|
|
371
|
+
// Set the projection uniforms
|
|
372
|
+
this.setProjectionUniforms(zoom);
|
|
373
|
+
// Compute the relative coordinates on the CPU side (offset mode: 64-bit precision)
|
|
374
|
+
const centerLngLat = this.offsetUniforms?.centerLngLat ?? [0, 0];
|
|
375
|
+
const pointOffset = calculateLngLatOffset([lng, lat], centerLngLat);
|
|
376
|
+
// Set the relative coordinates
|
|
377
|
+
if (this.pointLngLatLoc) {
|
|
378
|
+
gl.uniform2f(this.pointLngLatLoc, pointOffset[0], pointOffset[1]);
|
|
379
|
+
}
|
|
380
|
+
// Ground elevation of the anchor. It is taken from the same function that hit testing
|
|
381
|
+
// (createCoordinateTransform) goes through, so the drawn position and the hit area match
|
|
382
|
+
// structurally. When terrain is disabled it returns 0, giving the same result as before
|
|
383
|
+
// terrain was introduced.
|
|
384
|
+
if (this.anchorElevationLoc) {
|
|
385
|
+
gl.uniform1f(this.anchorElevationLoc, elevationMeters ?? anchorElevationMeters(this.terrain, lng, lat));
|
|
386
|
+
}
|
|
387
|
+
// Billboards are drawn without the depth test (see the note in billboard-depth.ts). A
|
|
388
|
+
// hand-drawn Point can arrive here through a CustomFeatureRenderer, so wrapping only the
|
|
389
|
+
// instanced side would leave the points of this path as half circles.
|
|
390
|
+
drawBillboardsWithoutDepth(gl, () => {
|
|
391
|
+
// Draw the fill
|
|
392
|
+
if (style.fillOpacity > 0) {
|
|
393
|
+
this.drawFill(radiusClip.x, radiusClip.y, outerRatio, style, featureId);
|
|
394
|
+
}
|
|
395
|
+
// Draw the stroke
|
|
396
|
+
if (style.strokeOpacity > 0 && style.strokeWidth > 0) {
|
|
397
|
+
this.drawStroke(radiusClip.x, radiusClip.y, outerRatio, style, featureId);
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Draws the fill
|
|
403
|
+
* The shape geometry is normalized, so it can be cached by shape type (and, for the triangle
|
|
404
|
+
* and the star, whose fill is the inside of the stroke band, by the outer ratio)
|
|
405
|
+
*/
|
|
406
|
+
drawFill(radiusX, radiusY, outerRatio, style, featureId) {
|
|
407
|
+
const gl = this.gl;
|
|
408
|
+
// Set the size
|
|
409
|
+
if (this.sizeClipLoc) {
|
|
410
|
+
gl.uniform2f(this.sizeClipLoc, radiusX, radiusY);
|
|
411
|
+
}
|
|
412
|
+
// Set the color
|
|
413
|
+
const color = [
|
|
414
|
+
style.fillColor[0],
|
|
415
|
+
style.fillColor[1],
|
|
416
|
+
style.fillColor[2],
|
|
417
|
+
style.fillColor[3] * style.fillOpacity,
|
|
418
|
+
];
|
|
419
|
+
if (this.colorLoc) {
|
|
420
|
+
gl.uniform4fv(this.colorLoc, color);
|
|
421
|
+
}
|
|
422
|
+
const insetShape = style.shape === 'triangle' || style.shape === 'star';
|
|
423
|
+
const outerRatioKey = Math.round(outerRatio * 100);
|
|
424
|
+
// Cache key: the shape type only (the shape is normalized, so it does not depend on the
|
|
425
|
+
// position or the size), plus the outer ratio for the shapes whose fill depends on it
|
|
426
|
+
const geometryHash = insetShape ? `${style.shape}:${outerRatioKey}` : style.shape;
|
|
427
|
+
const cacheKey = featureId ? `point:fill:${geometryHash}` : null;
|
|
428
|
+
this.drawShapeGeometry(cacheKey, geometryHash, gl.TRIANGLE_FAN, (ratio) => generateFillVertices(style.shape, ratio), featureId ? outerRatioKey / 100 : outerRatio);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Draws the stroke
|
|
432
|
+
* The stroke geometry depends on outerRatio, so it is cached by shape type + outerRatio
|
|
433
|
+
*/
|
|
434
|
+
drawStroke(radiusX, radiusY, outerRatio, style, featureId) {
|
|
435
|
+
const gl = this.gl;
|
|
436
|
+
// Set the size (uses the same radius as the fill)
|
|
437
|
+
if (this.sizeClipLoc) {
|
|
438
|
+
gl.uniform2f(this.sizeClipLoc, radiusX, radiusY);
|
|
439
|
+
}
|
|
440
|
+
// Set the color
|
|
441
|
+
const color = [
|
|
442
|
+
style.strokeColor[0],
|
|
443
|
+
style.strokeColor[1],
|
|
444
|
+
style.strokeColor[2],
|
|
445
|
+
style.strokeColor[3] * style.strokeOpacity,
|
|
446
|
+
];
|
|
447
|
+
if (this.colorLoc) {
|
|
448
|
+
gl.uniform4fv(this.colorLoc, color);
|
|
449
|
+
}
|
|
450
|
+
// Cache key: the shape type + outerRatio (rounded to two decimal places)
|
|
451
|
+
const outerRatioKey = Math.round(outerRatio * 100);
|
|
452
|
+
const geometryHash = `${style.shape}:${outerRatioKey}`;
|
|
453
|
+
const cacheKey = featureId ? `point:stroke:${geometryHash}` : null;
|
|
454
|
+
this.drawShapeGeometry(cacheKey, geometryHash, gl.TRIANGLE_STRIP, (ratio) => generateStrokeVertices(style.shape, ratio), featureId ? outerRatioKey / 100 : outerRatio);
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Draws normalized shape vertices, through the buffer cache when a cache key is given and with
|
|
458
|
+
* a transient buffer otherwise
|
|
459
|
+
*/
|
|
460
|
+
drawShapeGeometry(cacheKey, geometryHash, drawMode, build, outerRatio) {
|
|
461
|
+
const gl = this.gl;
|
|
462
|
+
if (cacheKey) {
|
|
463
|
+
const geometry = this.bufferCache.getOrCreate(cacheKey, geometryHash, () => {
|
|
464
|
+
const vertices = build(outerRatio);
|
|
465
|
+
return {
|
|
466
|
+
vertices: toVertexData(vertices),
|
|
467
|
+
vertexCount: vertices.length,
|
|
468
|
+
drawMode,
|
|
469
|
+
stride: 8,
|
|
470
|
+
attributes: [{ index: 0, size: 2, offset: 0 }],
|
|
471
|
+
};
|
|
472
|
+
});
|
|
473
|
+
gl.bindVertexArray(geometry.vao);
|
|
474
|
+
gl.drawArrays(geometry.drawMode, 0, geometry.vertexCount);
|
|
475
|
+
gl.bindVertexArray(null);
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
// No cache (a transient draw)
|
|
479
|
+
const vertices = build(outerRatio);
|
|
480
|
+
const vao = gl.createVertexArray();
|
|
481
|
+
gl.bindVertexArray(vao);
|
|
482
|
+
const buffer = gl.createBuffer();
|
|
483
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
484
|
+
gl.bufferData(gl.ARRAY_BUFFER, toVertexData(vertices), gl.STATIC_DRAW);
|
|
485
|
+
gl.enableVertexAttribArray(0);
|
|
486
|
+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
|
|
487
|
+
gl.drawArrays(drawMode, 0, vertices.length);
|
|
488
|
+
gl.bindVertexArray(null);
|
|
489
|
+
gl.deleteBuffer(buffer);
|
|
490
|
+
gl.deleteVertexArray(vao);
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Disposes of the resources
|
|
494
|
+
*
|
|
495
|
+
* @internal
|
|
496
|
+
*/
|
|
497
|
+
dispose() {
|
|
498
|
+
if (this.program) {
|
|
499
|
+
this.gl.deleteProgram(this.program);
|
|
500
|
+
this.program = null;
|
|
501
|
+
}
|
|
502
|
+
this.bufferCache.dispose();
|
|
503
|
+
}
|
|
504
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Resolution of the style of a point marker
|
|
5
|
+
*
|
|
6
|
+
* The only place that merges the style of a point feature into the default of the instance.
|
|
7
|
+
* Every built-in path reads a point through it (via `FeatureDrawer.getPointStyle`): the
|
|
8
|
+
* immediate batches, the classification of the retained runs, the retained chunks and the
|
|
9
|
+
* datasets. The shape in particular decides which run and which batch a point
|
|
10
|
+
* goes on, so resolving it anywhere else would split the z-order of the paths.
|
|
11
|
+
*/
|
|
12
|
+
import { hexToColor } from '../../../shared/utils/color.js';
|
|
13
|
+
/** The shapes a feature may name (`'icon'` belongs to the defaults of an extension) */
|
|
14
|
+
const FEATURE_POINT_SHAPES = new Set(['circle', 'square', 'triangle', 'star']);
|
|
15
|
+
/**
|
|
16
|
+
* The shape a feature names, or undefined when it names none or a value it may not name
|
|
17
|
+
*
|
|
18
|
+
* A style that did not come through an import (set through the API or applied by a replaced
|
|
19
|
+
* store) is not validated, so a stray value falls back to the default here.
|
|
20
|
+
*/
|
|
21
|
+
function featurePointShape(style) {
|
|
22
|
+
const shape = style.pointShape;
|
|
23
|
+
return shape !== undefined && FEATURE_POINT_SHAPES.has(shape) ? shape : undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Merges the style of a point feature (already carrying the rule color) into the default
|
|
27
|
+
*
|
|
28
|
+
* The keys of the feature win key by key: `pointColor` becomes the fill, `pointRadius` the
|
|
29
|
+
* size (a diameter), `pointShape` the shape. A key left unset (or a shape that is not one of
|
|
30
|
+
* the four a feature may name) keeps the default.
|
|
31
|
+
*
|
|
32
|
+
* @param style The style of the feature (undefined when it has none)
|
|
33
|
+
* @param defaults The point style of the `style` option of the instance
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export function resolvePointStyle(style, defaults) {
|
|
38
|
+
if (!style)
|
|
39
|
+
return defaults;
|
|
40
|
+
return {
|
|
41
|
+
...defaults,
|
|
42
|
+
shape: featurePointShape(style) ?? defaults.shape,
|
|
43
|
+
fillColor: style.pointColor ? hexToColor(style.pointColor, 1) : defaults.fillColor,
|
|
44
|
+
size: style.pointRadius ? style.pointRadius * 2 : defaults.size,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Coordinate } from '../../../store/types.js';
|
|
2
|
+
import { EarcutCache } from '../../cache/earcut.js';
|
|
3
|
+
import { TerrainContext } from '../../terrain/context.js';
|
|
4
|
+
/** The color type */
|
|
5
|
+
export type Color = [number, number, number, number];
|
|
6
|
+
/** Polygon data for a batch */
|
|
7
|
+
export interface PolygonBatchData {
|
|
8
|
+
coordinates: Coordinate[][];
|
|
9
|
+
color: Color;
|
|
10
|
+
featureId?: string;
|
|
11
|
+
/** The part number used for caching (a part of a MultiPolygon; omitted = 0 for a
|
|
12
|
+
* single polygon) */
|
|
13
|
+
partIndex?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* PolygonBatchRenderer
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The state of the draw instance a polygon renderer belongs to
|
|
20
|
+
*/
|
|
21
|
+
export interface PolygonRendererScope {
|
|
22
|
+
/** The terrain state (an inactive one draws flat) */
|
|
23
|
+
terrain?: TerrainContext;
|
|
24
|
+
/** Triangulation results keyed by feature id (a private cache when omitted) */
|
|
25
|
+
earcut?: EarcutCache;
|
|
26
|
+
}
|