@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,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The chunk of the retained cache and the building and releasing of its batch
|
|
3
|
+
*
|
|
4
|
+
* A chunk is a run of at most STORE_CHUNK_TARGET features of one kind. It owns at most one
|
|
5
|
+
* retained batch (a GPU resource); an immediate chunk owns none and is drawn one feature at a time.
|
|
6
|
+
*/
|
|
7
|
+
import type { Feature, Layer } from '../../store/types.js';
|
|
8
|
+
import type { RetainedLineBatch } from '../renderers/line/line-types.js';
|
|
9
|
+
import { type RetainedPointBatch } from '../renderers/point/point-instance.js';
|
|
10
|
+
import type { RetainedPolygonBatch } from '../renderers/polygon/sdf-polygon.js';
|
|
11
|
+
import type { RetainedRendererSet } from '../renderers/retained.js';
|
|
12
|
+
import type { ChunkBBox } from './store-retained-bbox.js';
|
|
13
|
+
import type { RunKind } from './store-retained-classify.js';
|
|
14
|
+
import { type CoordPatch, type LineCoordSlot } from './store-retained-coord-patch.js';
|
|
15
|
+
/** Upper limit of the number of features per chunk */
|
|
16
|
+
export declare const STORE_CHUNK_TARGET = 512;
|
|
17
|
+
/**
|
|
18
|
+
* One chunk (= one retained batch, or a list of features drawn immediately)
|
|
19
|
+
*/
|
|
20
|
+
export interface ChunkEntry {
|
|
21
|
+
readonly kind: RunKind;
|
|
22
|
+
readonly featureIds: string[];
|
|
23
|
+
/** The retained batch (null for immediate, or when the contents are empty) */
|
|
24
|
+
line: RetainedLineBatch | null;
|
|
25
|
+
polygon: RetainedPolygonBatch | null;
|
|
26
|
+
point: RetainedPointBatch | null;
|
|
27
|
+
/** Whether a rebuild is needed (the retained batch is not used while this is true) */
|
|
28
|
+
dirty: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* "feature → position in the coordinate texture" of a line chunk
|
|
31
|
+
*
|
|
32
|
+
* Used for the incremental update of vertices. Only the types whose coordinate list goes in as
|
|
33
|
+
* one contiguous run (LineString / Freehand) are recorded. It is null for anything but a line
|
|
34
|
+
* chunk and for a chunk without a batch.
|
|
35
|
+
*/
|
|
36
|
+
lineOffsets: Map<string, LineCoordSlot> | null;
|
|
37
|
+
/**
|
|
38
|
+
* Vertices to write into the coordinate texture on the next draw (the diff during a drag)
|
|
39
|
+
*
|
|
40
|
+
* The chunk does not become dirty while they are queued (it is not rebuilt).
|
|
41
|
+
*/
|
|
42
|
+
pendingCoordPatches: CoordPatch[] | null;
|
|
43
|
+
/**
|
|
44
|
+
* Longitude/latitude bbox of every feature in the chunk
|
|
45
|
+
*
|
|
46
|
+
* Used for the thinning by the viewport. It is null for a chunk without a single coordinate,
|
|
47
|
+
* and such a chunk is always drawn without thinning (the safe side).
|
|
48
|
+
*/
|
|
49
|
+
bbox: ChunkBBox | null;
|
|
50
|
+
/**
|
|
51
|
+
* The origin the retained batch was built with (null before the first build)
|
|
52
|
+
*
|
|
53
|
+
* The vertices are baked relative to it, so the precision on screen depends on how far it is
|
|
54
|
+
* from what is on screen (see `view/shaders/retained-origin.ts`).
|
|
55
|
+
*/
|
|
56
|
+
origin: [number, number] | null;
|
|
57
|
+
/**
|
|
58
|
+
* The origin chosen for the view by the last rebase (null = the center of the bbox)
|
|
59
|
+
*
|
|
60
|
+
* Kept across rebuilds, so a change of the data does not move the origin away from the view.
|
|
61
|
+
*/
|
|
62
|
+
viewOrigin: [number, number] | null;
|
|
63
|
+
/** The frame of the last rebase (a chunk is rebased at most once per frame) */
|
|
64
|
+
rebasedFrame: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Cache for a single layer
|
|
68
|
+
*/
|
|
69
|
+
export interface LayerCache {
|
|
70
|
+
readonly chunks: ChunkEntry[];
|
|
71
|
+
/** featureId → chunk index (for partial invalidation) */
|
|
72
|
+
readonly featureToChunk: Map<string, number>;
|
|
73
|
+
}
|
|
74
|
+
/** Result of building a chunk */
|
|
75
|
+
export type ChunkBuildResult =
|
|
76
|
+
/** A retained batch was built */
|
|
77
|
+
'built'
|
|
78
|
+
/** There was nothing to draw (no retained batch is needed) */
|
|
79
|
+
| 'empty'
|
|
80
|
+
/** The GPU resource could not be created (shaders not initialized). Retry on the next frame */
|
|
81
|
+
| 'retry'
|
|
82
|
+
/** The classification disagreed with the kind of the chunk. Rebuild the whole layer */
|
|
83
|
+
| 'mismatch';
|
|
84
|
+
/**
|
|
85
|
+
* A new chunk of the given kind, waiting for its first build
|
|
86
|
+
*/
|
|
87
|
+
export declare function createChunkEntry(kind: RunKind): ChunkEntry;
|
|
88
|
+
/**
|
|
89
|
+
* Builds the retained batch that matches the kind of the chunk
|
|
90
|
+
*/
|
|
91
|
+
export declare function buildChunkBatch(chunk: ChunkEntry, features: Feature[], layer: Layer | undefined, origin: [number, number], renderers: RetainedRendererSet): ChunkBuildResult;
|
|
92
|
+
/**
|
|
93
|
+
* Releases the retained batch of a chunk
|
|
94
|
+
*
|
|
95
|
+
* @param renderers Where to release the GPU resources (null = only the references are dropped)
|
|
96
|
+
*/
|
|
97
|
+
export declare function disposeChunkBatches(chunk: ChunkEntry, renderers: RetainedRendererSet | null): void;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { toInstancedPointShape, } from '../renderers/point/point-instance.js';
|
|
4
|
+
import { collectLineItems, collectPoints, collectPolygons } from './store-retained-collect.js';
|
|
5
|
+
import { computeLineCoordSlots, } from './store-retained-coord-patch.js';
|
|
6
|
+
/** Upper limit of the number of features per chunk */
|
|
7
|
+
export const STORE_CHUNK_TARGET = 512;
|
|
8
|
+
/**
|
|
9
|
+
* A new chunk of the given kind, waiting for its first build
|
|
10
|
+
*/
|
|
11
|
+
export function createChunkEntry(kind) {
|
|
12
|
+
return {
|
|
13
|
+
kind,
|
|
14
|
+
featureIds: [],
|
|
15
|
+
line: null,
|
|
16
|
+
polygon: null,
|
|
17
|
+
point: null,
|
|
18
|
+
dirty: true,
|
|
19
|
+
lineOffsets: null,
|
|
20
|
+
pendingCoordPatches: null,
|
|
21
|
+
bbox: null,
|
|
22
|
+
origin: null,
|
|
23
|
+
viewOrigin: null,
|
|
24
|
+
rebasedFrame: -1,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Builds the retained batch that matches the kind of the chunk
|
|
29
|
+
*/
|
|
30
|
+
export function buildChunkBatch(chunk, features, layer, origin, renderers) {
|
|
31
|
+
const styles = renderers.styles;
|
|
32
|
+
if (chunk.kind === 'line') {
|
|
33
|
+
const items = collectLineItems(features, styles, layer);
|
|
34
|
+
if (items.length === 0)
|
|
35
|
+
return 'empty';
|
|
36
|
+
const batch = renderers.line.buildRetainedBatch(items, { lineStyle: 'solid' }, { origin });
|
|
37
|
+
if (!batch)
|
|
38
|
+
return 'retry';
|
|
39
|
+
chunk.line = batch;
|
|
40
|
+
// Index table used for the incremental update of a vertex drag (kept in step with the order
|
|
41
|
+
// of items)
|
|
42
|
+
chunk.lineOffsets = computeLineCoordSlots(features);
|
|
43
|
+
return 'built';
|
|
44
|
+
}
|
|
45
|
+
if (chunk.kind === 'polygon') {
|
|
46
|
+
const polygons = collectPolygons(features, styles, layer);
|
|
47
|
+
if (polygons.length === 0)
|
|
48
|
+
return 'empty';
|
|
49
|
+
const batch = renderers.polygon.buildRetained(polygons, { origin });
|
|
50
|
+
if (!batch)
|
|
51
|
+
return 'retry';
|
|
52
|
+
chunk.polygon = batch;
|
|
53
|
+
return 'built';
|
|
54
|
+
}
|
|
55
|
+
const shape = pointShapeOfRun(chunk.kind);
|
|
56
|
+
if (shape) {
|
|
57
|
+
const points = collectPoints(features, styles, layer);
|
|
58
|
+
if (points.length === 0)
|
|
59
|
+
return 'empty';
|
|
60
|
+
const batch = renderers.point.buildRetained(points, shape, { origin });
|
|
61
|
+
if (!batch)
|
|
62
|
+
return 'retry';
|
|
63
|
+
chunk.point = batch;
|
|
64
|
+
return 'built';
|
|
65
|
+
}
|
|
66
|
+
return 'empty';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The point shape of a point run (null for any other kind)
|
|
70
|
+
*/
|
|
71
|
+
function pointShapeOfRun(kind) {
|
|
72
|
+
return kind.startsWith('point-') ? toInstancedPointShape(kind.slice('point-'.length)) : null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Releases the retained batch of a chunk
|
|
76
|
+
*
|
|
77
|
+
* @param renderers Where to release the GPU resources (null = only the references are dropped)
|
|
78
|
+
*/
|
|
79
|
+
export function disposeChunkBatches(chunk, renderers) {
|
|
80
|
+
if (renderers) {
|
|
81
|
+
if (chunk.polygon)
|
|
82
|
+
renderers.polygon.disposeRetained(chunk.polygon);
|
|
83
|
+
if (chunk.line)
|
|
84
|
+
renderers.line.disposeRetainedBatch(chunk.line);
|
|
85
|
+
if (chunk.point)
|
|
86
|
+
renderers.point.disposeRetained(chunk.point);
|
|
87
|
+
}
|
|
88
|
+
chunk.polygon = null;
|
|
89
|
+
chunk.line = null;
|
|
90
|
+
chunk.point = null;
|
|
91
|
+
// Once the batch is gone, both the index table and the queued patches lose their meaning
|
|
92
|
+
chunk.lineOffsets = null;
|
|
93
|
+
chunk.pendingCoordPatches = null;
|
|
94
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classification of the Store features into runs
|
|
3
|
+
*
|
|
4
|
+
* A run is a sequence of features that the BatchManager of immediate mode would draw in one
|
|
5
|
+
* batch. Cutting the feature list where the kind changes keeps the z-order of retained mode
|
|
6
|
+
* identical to immediate mode.
|
|
7
|
+
*/
|
|
8
|
+
import type { Feature, Layer } from '../../store/types.js';
|
|
9
|
+
import type { FeatureCompanionRegistry } from '../feature-companion.js';
|
|
10
|
+
import { type PointShape } from '../renderers/point/point-instance.js';
|
|
11
|
+
import type { RetainedStyleResolver } from '../renderers/retained.js';
|
|
12
|
+
/**
|
|
13
|
+
* Kind of a run
|
|
14
|
+
*
|
|
15
|
+
* It is matched with the unit at which the BatchManager of immediate mode flushes a batch (the
|
|
16
|
+
* batch kind and the point shape). A position where the kind changes becomes a run boundary.
|
|
17
|
+
*/
|
|
18
|
+
export type RunKind = 'polygon' | 'line' | `point-${PointShape}` | 'immediate';
|
|
19
|
+
/**
|
|
20
|
+
* Classifies a feature into the kind of its run
|
|
21
|
+
*
|
|
22
|
+
* It copies the batch kinds, the flush rules and the fallback rules of immediate mode
|
|
23
|
+
* (BatchManager.processFeature) as they are. If this drifts from immediate mode the z-order
|
|
24
|
+
* breaks, so keep the conditions here in one-to-one correspondence with the immediate-mode side.
|
|
25
|
+
*
|
|
26
|
+
* @param customTypes Renderers of the custom feature types (a registered type is drawn at once)
|
|
27
|
+
* @param layer The layer it belongs to (used to evaluate the style rules)
|
|
28
|
+
*/
|
|
29
|
+
export declare function classifyFeature(feature: Feature, styles: RetainedStyleResolver, customTypes: ReadonlyMap<string, unknown>, companions: FeatureCompanionRegistry, layer?: Layer): RunKind;
|
|
30
|
+
/**
|
|
31
|
+
* Origin of the relative coordinates of a chunk (the representative coordinate of the first
|
|
32
|
+
* feature)
|
|
33
|
+
*/
|
|
34
|
+
export declare function featureOrigin(feature: Feature | undefined): [number, number];
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { toInstancedPointShape } from '../renderers/point/point-instance.js';
|
|
4
|
+
/**
|
|
5
|
+
* Classifies a feature into the kind of its run
|
|
6
|
+
*
|
|
7
|
+
* It copies the batch kinds, the flush rules and the fallback rules of immediate mode
|
|
8
|
+
* (BatchManager.processFeature) as they are. If this drifts from immediate mode the z-order
|
|
9
|
+
* breaks, so keep the conditions here in one-to-one correspondence with the immediate-mode side.
|
|
10
|
+
*
|
|
11
|
+
* @param customTypes Renderers of the custom feature types (a registered type is drawn at once)
|
|
12
|
+
* @param layer The layer it belongs to (used to evaluate the style rules)
|
|
13
|
+
*/
|
|
14
|
+
export function classifyFeature(feature, styles, customTypes, companions, layer) {
|
|
15
|
+
// A custom type is drawn immediately (it cannot go on a core batch)
|
|
16
|
+
if (customTypes.has(feature.type))
|
|
17
|
+
return 'immediate';
|
|
18
|
+
// A feature that has a companion (feature companion) needs a hook right before it, so it cannot
|
|
19
|
+
// go on a retained batch. It is split out into an immediate chunk and drawn one at a time (on
|
|
20
|
+
// the assumption that features with a companion are few; if no provider at all is registered
|
|
21
|
+
// this test is false in O(1)).
|
|
22
|
+
if (companions.has(feature))
|
|
23
|
+
return 'immediate';
|
|
24
|
+
switch (feature.type) {
|
|
25
|
+
case 'Point':
|
|
26
|
+
case 'MultiPoint': {
|
|
27
|
+
const shape = toInstancedPointShape(styles.getPointStyle(feature, layer).shape);
|
|
28
|
+
// A shape without instancing support is drawn immediately, one point at a time
|
|
29
|
+
return shape ? `point-${shape}` : 'immediate';
|
|
30
|
+
}
|
|
31
|
+
case 'LineString':
|
|
32
|
+
case 'Freehand':
|
|
33
|
+
case 'MultiLineString': {
|
|
34
|
+
const strokeStyle = styles.getLineStringStrokeStyle(feature, layer);
|
|
35
|
+
// Dashed and dotted lines cannot be retained because their CPU-side splitting depends on
|
|
36
|
+
// the zoom
|
|
37
|
+
return strokeStyle.lineStyle === 'solid' ? 'line' : 'immediate';
|
|
38
|
+
}
|
|
39
|
+
case 'Polygon':
|
|
40
|
+
case 'MultiPolygon':
|
|
41
|
+
case 'Circle': {
|
|
42
|
+
const { strokeStyle } = styles.getPolygonStyles(feature, layer);
|
|
43
|
+
// Only a dashed outline cannot be retained (fill only and a solid outline can be)
|
|
44
|
+
if (strokeStyle.opacity > 0 && strokeStyle.lineStyle !== 'solid')
|
|
45
|
+
return 'immediate';
|
|
46
|
+
return 'polygon';
|
|
47
|
+
}
|
|
48
|
+
default:
|
|
49
|
+
// Kinds that retained mode does not handle, such as Image
|
|
50
|
+
return 'immediate';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Origin of the relative coordinates of a chunk (the representative coordinate of the first
|
|
55
|
+
* feature)
|
|
56
|
+
*/
|
|
57
|
+
export function featureOrigin(feature) {
|
|
58
|
+
if (!feature)
|
|
59
|
+
return [0, 0];
|
|
60
|
+
switch (feature.type) {
|
|
61
|
+
case 'MultiPoint': {
|
|
62
|
+
const coord = feature.coordinates[0];
|
|
63
|
+
return coord ? [coord[0], coord[1]] : [0, 0];
|
|
64
|
+
}
|
|
65
|
+
case 'LineString':
|
|
66
|
+
case 'Freehand': {
|
|
67
|
+
const coord = feature.coordinates[0];
|
|
68
|
+
return coord ? [coord[0], coord[1]] : [0, 0];
|
|
69
|
+
}
|
|
70
|
+
case 'MultiLineString': {
|
|
71
|
+
const coord = feature.coordinates[0]?.[0];
|
|
72
|
+
return coord ? [coord[0], coord[1]] : [0, 0];
|
|
73
|
+
}
|
|
74
|
+
case 'Polygon': {
|
|
75
|
+
const coord = feature.coordinates[0]?.[0];
|
|
76
|
+
return coord ? [coord[0], coord[1]] : [0, 0];
|
|
77
|
+
}
|
|
78
|
+
case 'MultiPolygon': {
|
|
79
|
+
const coord = feature.coordinates[0]?.[0]?.[0];
|
|
80
|
+
return coord ? [coord[0], coord[1]] : [0, 0];
|
|
81
|
+
}
|
|
82
|
+
default: {
|
|
83
|
+
// A single coordinate, such as Point / Circle
|
|
84
|
+
const coord = feature.coordinates;
|
|
85
|
+
return Array.isArray(coord) && typeof coord[0] === 'number' ? [coord[0], coord[1]] : [0, 0];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Feature, Layer } from '../../store/types.js';
|
|
2
|
+
import type { LineBatchItem } from '../renderers/line/line-types.js';
|
|
3
|
+
import type { PointInstanceDataFull } from '../renderers/point/point-instance.js';
|
|
4
|
+
import type { SDFPolygonBatchData } from '../renderers/polygon/sdf-polygon.js';
|
|
5
|
+
import type { RetainedStyleResolver } from '../renderers/retained.js';
|
|
6
|
+
/**
|
|
7
|
+
* Collects the items of a line batch
|
|
8
|
+
*
|
|
9
|
+
* A feature without createdZoom has to be drawn with a constant width on screen. u_zoom is per
|
|
10
|
+
* batch, so a fixed width is expressed with a negative width (a convention of the shader). This
|
|
11
|
+
* way fixed widths and variable widths can be mixed in the same batch and the z-order is kept.
|
|
12
|
+
*/
|
|
13
|
+
export declare function collectLineItems(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): LineBatchItem[];
|
|
14
|
+
/**
|
|
15
|
+
* Collects the data of a polygon batch
|
|
16
|
+
*
|
|
17
|
+
* A fill-only polygon is also pushed as an SDFPolygon without an outline (strokeOpacity = 0).
|
|
18
|
+
* Immediate mode draws it with PolygonBatchRenderer, but the appearance of the fill is the same.
|
|
19
|
+
*/
|
|
20
|
+
export declare function collectPolygons(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): SDFPolygonBatchData[];
|
|
21
|
+
/**
|
|
22
|
+
* Collects the data of the point instances
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectPoints(features: Feature[], styles: RetainedStyleResolver, layer: Layer | undefined): PointInstanceDataFull[];
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Conversions from features to the data of a retained batch
|
|
5
|
+
*
|
|
6
|
+
* The same math as the collect functions of display: the style is resolved once at build time
|
|
7
|
+
* and the result is baked into the vertex or instance data of the batch.
|
|
8
|
+
*/
|
|
9
|
+
import { generateCirclePolygon } from '../../shared/math/index.js';
|
|
10
|
+
import { getCircleRadius, getCreatedZoom } from '../../shared/utils/property.js';
|
|
11
|
+
import { toLineBatchItem, toPointInstanceData } from '../renderers/batch-manager.js';
|
|
12
|
+
/**
|
|
13
|
+
* createdZoom of a fixed-width feature
|
|
14
|
+
*
|
|
15
|
+
* When the line width is expressed as a negative value the shader ignores createdZoom, so the
|
|
16
|
+
* value itself has no meaning. It is a constant only to decide what goes into the array.
|
|
17
|
+
*/
|
|
18
|
+
const FIXED_WIDTH_CREATED_ZOOM = 0;
|
|
19
|
+
/**
|
|
20
|
+
* Collects the items of a line batch
|
|
21
|
+
*
|
|
22
|
+
* A feature without createdZoom has to be drawn with a constant width on screen. u_zoom is per
|
|
23
|
+
* batch, so a fixed width is expressed with a negative width (a convention of the shader). This
|
|
24
|
+
* way fixed widths and variable widths can be mixed in the same batch and the z-order is kept.
|
|
25
|
+
*/
|
|
26
|
+
export function collectLineItems(features, styles, layer) {
|
|
27
|
+
const items = [];
|
|
28
|
+
for (const feature of features) {
|
|
29
|
+
const strokeStyle = styles.getLineStringStrokeStyle(feature, layer);
|
|
30
|
+
const createdZoom = getCreatedZoom(feature);
|
|
31
|
+
const push = (coords) => {
|
|
32
|
+
if (!coords || coords.length < 2)
|
|
33
|
+
return;
|
|
34
|
+
const item = toLineBatchItem(coords, feature.id, strokeStyle, createdZoom ?? FIXED_WIDTH_CREATED_ZOOM);
|
|
35
|
+
if (createdZoom === undefined)
|
|
36
|
+
item.strokeWidth = -strokeStyle.width;
|
|
37
|
+
items.push(item);
|
|
38
|
+
};
|
|
39
|
+
if (feature.type === 'MultiLineString') {
|
|
40
|
+
for (const part of feature.coordinates)
|
|
41
|
+
push(part);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
push(feature.coordinates);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return items;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Collects the data of a polygon batch
|
|
51
|
+
*
|
|
52
|
+
* A fill-only polygon is also pushed as an SDFPolygon without an outline (strokeOpacity = 0).
|
|
53
|
+
* Immediate mode draws it with PolygonBatchRenderer, but the appearance of the fill is the same.
|
|
54
|
+
*/
|
|
55
|
+
export function collectPolygons(features, styles, layer) {
|
|
56
|
+
const polygons = [];
|
|
57
|
+
for (const feature of features) {
|
|
58
|
+
const { fillColor, strokeStyle } = styles.getPolygonStyles(feature, layer);
|
|
59
|
+
const hasStroke = strokeStyle.opacity > 0 && strokeStyle.width > 0;
|
|
60
|
+
const createdZoom = getCreatedZoom(feature);
|
|
61
|
+
// The outline of a feature without createdZoom has a fixed width (the negative convention)
|
|
62
|
+
const strokeWidth = hasStroke
|
|
63
|
+
? createdZoom === undefined
|
|
64
|
+
? -strokeStyle.width
|
|
65
|
+
: strokeStyle.width
|
|
66
|
+
: 0;
|
|
67
|
+
const push = (rings, partIndex) => {
|
|
68
|
+
const outerRing = rings?.[0];
|
|
69
|
+
if (!rings || !outerRing || outerRing.length < 3)
|
|
70
|
+
return;
|
|
71
|
+
if (!hasStroke && fillColor[3] <= 0)
|
|
72
|
+
return;
|
|
73
|
+
polygons.push({
|
|
74
|
+
coordinates: rings,
|
|
75
|
+
style: {
|
|
76
|
+
fillColor,
|
|
77
|
+
fillOpacity: 1,
|
|
78
|
+
strokeColor: strokeStyle.color,
|
|
79
|
+
strokeWidth,
|
|
80
|
+
strokeOpacity: hasStroke ? 1 : 0,
|
|
81
|
+
},
|
|
82
|
+
createdZoom: createdZoom ?? FIXED_WIDTH_CREATED_ZOOM,
|
|
83
|
+
featureId: feature.id,
|
|
84
|
+
partIndex,
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
if (feature.type === 'MultiPolygon') {
|
|
88
|
+
const parts = feature.coordinates;
|
|
89
|
+
for (let i = 0; i < parts.length; i++)
|
|
90
|
+
push(parts[i], i);
|
|
91
|
+
}
|
|
92
|
+
else if (feature.type === 'Circle') {
|
|
93
|
+
const radiusMeters = getCircleRadius(feature);
|
|
94
|
+
if (!radiusMeters || radiusMeters <= 0)
|
|
95
|
+
continue;
|
|
96
|
+
push([generateCirclePolygon(feature.coordinates, radiusMeters)], 0);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
push(feature.coordinates, 0);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return polygons;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Collects the data of the point instances
|
|
106
|
+
*/
|
|
107
|
+
export function collectPoints(features, styles, layer) {
|
|
108
|
+
const points = [];
|
|
109
|
+
for (const feature of features) {
|
|
110
|
+
const style = styles.getPointStyle(feature, layer);
|
|
111
|
+
if (feature.type === 'MultiPoint') {
|
|
112
|
+
for (const coord of feature.coordinates) {
|
|
113
|
+
points.push(toPointInstanceData(coord, style));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
points.push(toPointInstanceData(feature.coordinates, style));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return points;
|
|
121
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental update of the coordinate texture of a retained line chunk
|
|
3
|
+
*
|
|
4
|
+
* A vertex drag moves only a few vertices. Rebuilding a line chunk with many vertices every frame
|
|
5
|
+
* would overflow the frame, so the diff of the vertices that moved is queued on the chunk and,
|
|
6
|
+
* right before drawing, only the corresponding texels of the coordinate texture are rewritten
|
|
7
|
+
* (see SDFLineRenderer.patchRetainedBatchCoords).
|
|
8
|
+
*/
|
|
9
|
+
import type { Coordinate, Feature } from '../../store/types.js';
|
|
10
|
+
import type { RetainedLineBatch } from '../renderers/line/line-types.js';
|
|
11
|
+
import type { SDFLineRenderer } from '../renderers/line/sdf-line.js';
|
|
12
|
+
import type { RetainedLineRenderer } from '../renderers/retained.js';
|
|
13
|
+
import { type ChunkBBox } from './store-retained-bbox.js';
|
|
14
|
+
/**
|
|
15
|
+
* Upper limit of the number of vertices that one update may put into the incremental update of
|
|
16
|
+
* the coordinate texture
|
|
17
|
+
*
|
|
18
|
+
* A change beyond this (moving vertices in bulk, cut and paste) rebuilds the whole chunk.
|
|
19
|
+
* The incremental update targets the case where "one vertex drag moves only a few points".
|
|
20
|
+
*/
|
|
21
|
+
export declare const MAX_PATCHED_VERTICES = 8;
|
|
22
|
+
/**
|
|
23
|
+
* Position of a feature within the coordinate texture of a line chunk
|
|
24
|
+
*/
|
|
25
|
+
export interface LineCoordSlot {
|
|
26
|
+
/** Serial index of the first texel in the coordinate texture */
|
|
27
|
+
offset: number;
|
|
28
|
+
/** Number of vertices (this many are stored consecutively) */
|
|
29
|
+
count: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Diff of one vertex to write back into the coordinate texture
|
|
33
|
+
*/
|
|
34
|
+
export interface CoordPatch {
|
|
35
|
+
coordIndex: number;
|
|
36
|
+
lngLat: [number, number];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A line renderer that supports partial updates of the coordinate texture
|
|
40
|
+
*
|
|
41
|
+
* It is not included in `RetainedLineRenderer` (renderers/retained.ts), so whether the
|
|
42
|
+
* implementation is present is checked at runtime before it is used.
|
|
43
|
+
*/
|
|
44
|
+
export type LineCoordPatcher = Pick<SDFLineRenderer, 'patchRetainedBatchCoords'>;
|
|
45
|
+
/**
|
|
46
|
+
* Extracts the line renderer if it supports partial updates of the coordinate texture
|
|
47
|
+
*/
|
|
48
|
+
export declare function asCoordPatcher(line: RetainedLineRenderer): LineCoordPatcher | null;
|
|
49
|
+
/**
|
|
50
|
+
* Computes the diff of a coordinate list (the indices of the vertices that moved)
|
|
51
|
+
*
|
|
52
|
+
* A vertex drag is an update where "the number of vertices is the same and only a few values
|
|
53
|
+
* differ". Anything else (vertices added or removed, many of them moved) cannot be applied as a
|
|
54
|
+
* diff, so null is returned.
|
|
55
|
+
*
|
|
56
|
+
* The comparison is done in a single pass. If the element references are the same, that vertex
|
|
57
|
+
* has not moved (the Store reuses the arrays of the vertices it does not change). The values are
|
|
58
|
+
* looked at only when the references differ.
|
|
59
|
+
*
|
|
60
|
+
* @param maxChanged Upper limit of the number of changed vertices allowed as a diff
|
|
61
|
+
* @returns The indices of the vertices that moved (an empty array when none moved). null when
|
|
62
|
+
* the number of vertices differs or the upper limit is exceeded
|
|
63
|
+
*/
|
|
64
|
+
export declare function computeCoordinateDiff(prev: readonly Coordinate[], next: readonly Coordinate[], maxChanged: number): number[] | null;
|
|
65
|
+
/**
|
|
66
|
+
* Computes the "feature → position in the coordinate texture" of a line chunk
|
|
67
|
+
*
|
|
68
|
+
* The coordinate texture is packed with the coordinates in the order of the items returned by
|
|
69
|
+
* collectLineItems. Therefore this must count in the same order and with the same exclusion rule
|
|
70
|
+
* as collectLineItems (fewer than 2 vertices are not pushed).
|
|
71
|
+
*
|
|
72
|
+
* Only the types where one feature becomes one item and the coordinate list goes in as it is
|
|
73
|
+
* (LineString / Freehand) are recorded. A MultiLineString splits into several items and its
|
|
74
|
+
* indices interleave, so it is not a target of the diff (only the coordinate count is advanced).
|
|
75
|
+
*/
|
|
76
|
+
export declare function computeLineCoordSlots(features: readonly Feature[]): Map<string, LineCoordSlot>;
|
|
77
|
+
/**
|
|
78
|
+
* The part of a chunk that the incremental update reads and writes
|
|
79
|
+
*
|
|
80
|
+
* The chunk of the cache satisfies it structurally.
|
|
81
|
+
*/
|
|
82
|
+
export interface PatchableLineChunk {
|
|
83
|
+
readonly kind: string;
|
|
84
|
+
line: RetainedLineBatch | null;
|
|
85
|
+
/** Whether a rebuild is needed (a dirty chunk takes no patches) */
|
|
86
|
+
dirty: boolean;
|
|
87
|
+
lineOffsets: Map<string, LineCoordSlot> | null;
|
|
88
|
+
pendingCoordPatches: CoordPatch[] | null;
|
|
89
|
+
bbox: ChunkBBox | null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Queues a vertex movement as a diff patch against the retained batch
|
|
93
|
+
*
|
|
94
|
+
* It can be queued only when all of the following hold. If even one of them fails, false is
|
|
95
|
+
* returned and the caller rebuilds the whole chunk (rebuilding too much still renders
|
|
96
|
+
* correctly).
|
|
97
|
+
*
|
|
98
|
+
* - A type whose coordinate list goes into the coordinate texture as one contiguous run
|
|
99
|
+
* (LineString / Freehand)
|
|
100
|
+
* - No other item that affects the appearance (properties = the input of the style rules) has
|
|
101
|
+
* changed
|
|
102
|
+
* - The number of vertices is unchanged and between 1 and MAX_PATCHED_VERTICES vertices moved
|
|
103
|
+
* - The chunk it belongs to has a retained line batch and is not waiting for a rebuild
|
|
104
|
+
* - The renderer used for drawing supports partial updates of the coordinate texture
|
|
105
|
+
*
|
|
106
|
+
* The drag being committed (up) does not trigger another rebuild. The patch queued by the last
|
|
107
|
+
* movement becomes the committed value as it is.
|
|
108
|
+
*
|
|
109
|
+
* @param chunk The chunk that carries the feature (undefined when there is none)
|
|
110
|
+
* @param line The line renderer used most recently (null before the first draw)
|
|
111
|
+
*/
|
|
112
|
+
export declare function queueCoordPatch(chunk: PatchableLineChunk | undefined, feature: Feature, previous: Feature, line: RetainedLineRenderer | null): boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Applies the queued vertex diff to the coordinate texture
|
|
115
|
+
*
|
|
116
|
+
* It is not called for a chunk thinned away off-screen, but the patches stay queued, so they
|
|
117
|
+
* are all applied on the first frame where the chunk comes into view.
|
|
118
|
+
*/
|
|
119
|
+
export declare function flushCoordPatches(chunk: PatchableLineChunk, line: RetainedLineRenderer): void;
|