@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.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 +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +316 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +405 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +423 -0
- package/dist/api/impl/extension-host.js +364 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +851 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +21 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +84 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +85 -0
- package/dist/geometry/geojson.js +173 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +66 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +12 -6
- package/dist/view/layer/attach.js +86 -10
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +38 -15
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -236,7 +236,7 @@ export class PointShapeRenderer {
|
|
|
236
236
|
this.gl = gl;
|
|
237
237
|
this.pixelRatio = pixelRatio;
|
|
238
238
|
this.terrain = terrain;
|
|
239
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl
|
|
239
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl).useTerrainState(terrain);
|
|
240
240
|
this.bufferCache = new BufferCache(gl);
|
|
241
241
|
}
|
|
242
242
|
/**
|
|
@@ -385,7 +385,7 @@ void main() {
|
|
|
385
385
|
gl.uniform1f(this.anchorElevationLoc, elevationMeters ?? anchorElevationMeters(this.terrain, lng, lat));
|
|
386
386
|
}
|
|
387
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
|
|
388
|
+
// hand-drawn Point can arrive here through a FeatureTypeRenderer, so wrapping only the
|
|
389
389
|
// instanced side would leave the points of this path as half circles.
|
|
390
390
|
drawBillboardsWithoutDepth(gl, () => {
|
|
391
391
|
// Draw the fill
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* datasets. The shape in particular decides which run and which batch a point
|
|
10
10
|
* goes on, so resolving it anywhere else would split the z-order of the paths.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { toColor } from '../../../shared/color.js';
|
|
13
13
|
/** The shapes a feature may name (`'icon'` belongs to the defaults of an extension) */
|
|
14
14
|
const FEATURE_POINT_SHAPES = new Set(['circle', 'square', 'triangle', 'star']);
|
|
15
15
|
/**
|
|
@@ -22,12 +22,30 @@ function featurePointShape(style) {
|
|
|
22
22
|
const shape = style.pointShape;
|
|
23
23
|
return shape !== undefined && FEATURE_POINT_SHAPES.has(shape) ? shape : undefined;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* The opacity of the marker a feature names, from 0 to 1 (1 when it names none or a value
|
|
27
|
+
* outside the range)
|
|
28
|
+
*/
|
|
29
|
+
function featurePointOpacity(style) {
|
|
30
|
+
const opacity = style.pointOpacity;
|
|
31
|
+
return typeof opacity === 'number' && opacity >= 0 && opacity <= 1 ? opacity : 1;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The width of the outline of the marker a feature names, or undefined when it names none or
|
|
35
|
+
* a value that is not a finite number of 0 or more
|
|
36
|
+
*/
|
|
37
|
+
function featurePointStrokeWidth(style) {
|
|
38
|
+
const width = style.pointStrokeWidth;
|
|
39
|
+
return typeof width === 'number' && Number.isFinite(width) && width >= 0 ? width : undefined;
|
|
40
|
+
}
|
|
25
41
|
/**
|
|
26
42
|
* Merges the style of a point feature (already carrying the rule color) into the default
|
|
27
43
|
*
|
|
28
44
|
* The keys of the feature win key by key: `pointColor` becomes the fill, `pointRadius` the
|
|
29
|
-
* size (a diameter), `pointShape` the shape
|
|
30
|
-
* the
|
|
45
|
+
* size (a diameter), `pointShape` the shape, `pointStrokeColor` and `pointStrokeWidth` the
|
|
46
|
+
* outline. `pointOpacity` is multiplied into the opacity of the fill and of the outline of the
|
|
47
|
+
* marker. A key left unset (or a shape that is not one of the four a feature may name, an
|
|
48
|
+
* opacity outside 0 to 1, or a negative width) keeps the default.
|
|
31
49
|
*
|
|
32
50
|
* @param style The style of the feature (undefined when it has none)
|
|
33
51
|
* @param defaults The point style of the `style` option of the instance
|
|
@@ -37,10 +55,36 @@ function featurePointShape(style) {
|
|
|
37
55
|
export function resolvePointStyle(style, defaults) {
|
|
38
56
|
if (!style)
|
|
39
57
|
return defaults;
|
|
58
|
+
const opacity = featurePointOpacity(style);
|
|
40
59
|
return {
|
|
41
60
|
...defaults,
|
|
42
61
|
shape: featurePointShape(style) ?? defaults.shape,
|
|
43
|
-
fillColor: style.pointColor ?
|
|
62
|
+
fillColor: style.pointColor ? toColor(style.pointColor, 1) : defaults.fillColor,
|
|
44
63
|
size: style.pointRadius ? style.pointRadius * 2 : defaults.size,
|
|
64
|
+
fillOpacity: defaults.fillOpacity * opacity,
|
|
65
|
+
strokeColor: style.pointStrokeColor ? toColor(style.pointStrokeColor, 1) : defaults.strokeColor,
|
|
66
|
+
strokeWidth: featurePointStrokeWidth(style) ?? defaults.strokeWidth,
|
|
67
|
+
strokeOpacity: defaults.strokeOpacity * opacity,
|
|
45
68
|
};
|
|
46
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* How far the marker of a point reaches from its position, in CSS pixels: the radius the
|
|
72
|
+
* marker is drawn with plus its outline when the outline is drawn
|
|
73
|
+
*
|
|
74
|
+
* It reads the keys `resolvePointStyle` reads for the size and the outline, without building
|
|
75
|
+
* the merged style, so the hit test can ask it of every point on every move of the pointer.
|
|
76
|
+
*
|
|
77
|
+
* @param style The style of the feature (undefined when it has none)
|
|
78
|
+
* @param defaults The point style of the `style` option of the instance
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export function pointMarkerReachPx(style, defaults) {
|
|
83
|
+
const radius = style?.pointRadius ? style.pointRadius : defaults.size / 2;
|
|
84
|
+
const strokeOpacity = defaults.strokeOpacity * (style ? featurePointOpacity(style) : 1);
|
|
85
|
+
const stroke = strokeOpacity > 0
|
|
86
|
+
? ((style ? featurePointStrokeWidth(style) : undefined) ?? defaults.strokeWidth)
|
|
87
|
+
: 0;
|
|
88
|
+
const reach = radius + stroke;
|
|
89
|
+
return Number.isFinite(reach) && reach > 0 ? reach : 0;
|
|
90
|
+
}
|
|
@@ -92,8 +92,7 @@ export class PolygonBatchRenderer {
|
|
|
92
92
|
this.earcutCache = scope.earcut ?? new EarcutCache();
|
|
93
93
|
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
94
94
|
surface: true,
|
|
95
|
-
|
|
96
|
-
});
|
|
95
|
+
}).useTerrainState(this.terrain);
|
|
97
96
|
this.vertexBuffer = gl.createBuffer();
|
|
98
97
|
this.indexBuffer = gl.createBuffer();
|
|
99
98
|
this.vao = gl.createVertexArray();
|
|
@@ -83,7 +83,9 @@ export class FillShaderManager {
|
|
|
83
83
|
value: null
|
|
84
84
|
});
|
|
85
85
|
this.gl = gl;
|
|
86
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
86
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
87
|
+
surface: true,
|
|
88
|
+
}).useTerrainState(terrain);
|
|
87
89
|
this.vertexBuffer = gl.createBuffer();
|
|
88
90
|
this.indexBuffer = gl.createBuffer();
|
|
89
91
|
this.vao = gl.createVertexArray();
|
|
@@ -210,8 +210,7 @@ export class SDFPolygonRenderer {
|
|
|
210
210
|
this.earcutCache = scope.earcut ?? new EarcutCache();
|
|
211
211
|
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
212
212
|
surface: true,
|
|
213
|
-
|
|
214
|
-
});
|
|
213
|
+
}).useTerrainState(this.terrain);
|
|
215
214
|
this.vertexBuffer = gl.createBuffer();
|
|
216
215
|
this.indexBuffer = gl.createBuffer();
|
|
217
216
|
this.vao = gl.createVertexArray();
|
|
@@ -550,7 +549,7 @@ void main() {
|
|
|
550
549
|
* the cache used by the drawing of the Store must not be polluted with the features
|
|
551
550
|
* of datasets). However, when options.triangulator is passed, both the caching and the
|
|
552
551
|
* time slicing of the triangulation become its responsibility
|
|
553
|
-
* (
|
|
552
|
+
* (dataset/triangulation.ts).
|
|
554
553
|
*
|
|
555
554
|
* @returns The built batch. null when the shader is not initialized or there are no
|
|
556
555
|
* vertices
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Triangulating a huge polygon (a water body on the order of a million vertices)
|
|
9
9
|
* takes more than ten seconds in one go, so the dataset path injects
|
|
10
|
-
* an implementation that slices the work over time (
|
|
10
|
+
* an implementation that slices the work over time (dataset/triangulation.ts) here.
|
|
11
11
|
* For a polygon whose triangulation has not finished yet, null is returned, and the
|
|
12
12
|
* caller omits the fill of that polygon and puts it into the batch with the outline
|
|
13
13
|
* only. Once the triangulation finishes, the injecting side prompts a rebuild.
|
|
@@ -159,7 +159,9 @@ export class StrokeRenderer {
|
|
|
159
159
|
this.gl = gl;
|
|
160
160
|
this.pixelRatio = pixelRatio;
|
|
161
161
|
this.terrain = terrain;
|
|
162
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
162
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
163
|
+
surface: true,
|
|
164
|
+
}).useTerrainState(terrain);
|
|
163
165
|
this.vertexBuffer = gl.createBuffer();
|
|
164
166
|
this.vao = gl.createVertexArray();
|
|
165
167
|
this.setupVAO();
|
|
@@ -4,23 +4,13 @@
|
|
|
4
4
|
* Utilities for creating and managing WebGL2 shaders
|
|
5
5
|
* Performs the WGS84 -> Mercator -> clip coordinate conversion on the GPU
|
|
6
6
|
*/
|
|
7
|
+
import type { OffsetUniforms, ShaderData } from '../../api/extension/render.js';
|
|
8
|
+
export type { OffsetUniforms, ShaderData };
|
|
7
9
|
/**
|
|
8
10
|
* Converts WGS84 coordinates to Mercator coordinates (high precision
|
|
9
11
|
* computation on the CPU side)
|
|
10
12
|
*/
|
|
11
13
|
export declare function lngLatToMercator(lng: number, lat: number): [number, number];
|
|
12
|
-
/**
|
|
13
|
-
* The shader prelude maplibre passes to the `prerender` / `render` of a custom layer, which
|
|
14
|
-
* the renderers of this library take to compile their programs for the current projection.
|
|
15
|
-
*/
|
|
16
|
-
export interface ShaderData {
|
|
17
|
-
/** The GLSL maplibre prepends to a vertex shader (its projection functions) */
|
|
18
|
-
vertexShaderPrelude: string;
|
|
19
|
-
/** The `#define` lines of the current projection */
|
|
20
|
-
define: string;
|
|
21
|
-
/** The name of the projection variant; a program is recompiled when it changes */
|
|
22
|
-
variantName: string;
|
|
23
|
-
}
|
|
24
14
|
/**
|
|
25
15
|
* The precision every sampler of the engine is read with
|
|
26
16
|
*
|
|
@@ -153,36 +143,6 @@ export declare function calculateOffsetUniforms(centerLngLat: [number, number],
|
|
|
153
143
|
* @returns The translated matrix (64-bit values)
|
|
154
144
|
*/
|
|
155
145
|
export declare function translateMatrixByLongitude(matrix: ArrayLike<number>, lngShift: number): number[];
|
|
156
|
-
/**
|
|
157
|
-
* The uniform values for offset mode
|
|
158
|
-
*
|
|
159
|
-
* The uniforms for globe mode are obtained directly from ProjectionData, so
|
|
160
|
-
* this interface contains only the values needed for the offset computation of
|
|
161
|
-
* the Mercator projection.
|
|
162
|
-
*/
|
|
163
|
-
export interface OffsetUniforms {
|
|
164
|
-
/** The center coordinates (rounded to Float32, for sending to the shader) */
|
|
165
|
-
centerLngLat: [number, number];
|
|
166
|
-
/** The center coordinates (64-bit precision, for the offset computation on the CPU side) */
|
|
167
|
-
centerLngLat64: [number, number];
|
|
168
|
-
/**
|
|
169
|
-
* The Mercator coordinates of the center (a value computed at 64-bit
|
|
170
|
-
* precision)
|
|
171
|
-
*
|
|
172
|
-
* Used to restore the Mercator relative coordinates of a vertex to absolute
|
|
173
|
-
* coordinates when looking up the terrain DEM atlas. So that everything can
|
|
174
|
-
* be handled relatively, the atlas origin is also handed over relative to
|
|
175
|
-
* this value (absolute Mercator coordinates do not have enough digits in
|
|
176
|
-
* Float32).
|
|
177
|
-
*/
|
|
178
|
-
centerMercator: [number, number];
|
|
179
|
-
/** The view center in clip space, computed at 64-bit precision */
|
|
180
|
-
projectionCenter: [number, number, number, number];
|
|
181
|
-
/** The Mercator units per degree of longitude and latitude at the center */
|
|
182
|
-
unitsPerDegree: [number, number, number];
|
|
183
|
-
/** The second-order correction of `unitsPerDegree` for the change with latitude */
|
|
184
|
-
unitsPerDegree2: [number, number, number];
|
|
185
|
-
}
|
|
186
146
|
/**
|
|
187
147
|
* Returns a position relative to the view center in degrees, computed at 64-bit precision
|
|
188
148
|
* so that it survives Float32.
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only AND MIT
|
|
3
|
-
/**
|
|
4
|
-
* Shader helpers
|
|
5
|
-
*
|
|
6
|
-
* Utilities for creating and managing WebGL2 shaders
|
|
7
|
-
* Performs the WGS84 -> Mercator -> clip coordinate conversion on the GPU
|
|
8
|
-
*/
|
|
9
3
|
/**
|
|
10
4
|
* Converts WGS84 coordinates to Mercator coordinates (high precision
|
|
11
5
|
* computation on the CPU side)
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* each renderer.
|
|
7
7
|
*/
|
|
8
8
|
import type { ProjectionData } from 'maplibre-gl';
|
|
9
|
-
import type {
|
|
9
|
+
import type { TerrainAnchors } from '../../api/extension/context.js';
|
|
10
|
+
import type { RenderContext } from '../../api/extension/render.js';
|
|
10
11
|
import type { OffsetUniforms } from './helpers.js';
|
|
11
12
|
/**
|
|
12
13
|
* The locations of the projection and terrain uniforms of one program, as
|
|
@@ -81,19 +82,26 @@ export declare class ProjectionUniformManager {
|
|
|
81
82
|
/**
|
|
82
83
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
83
84
|
*
|
|
84
|
-
* The renderers of a CustomLayer
|
|
85
|
-
* of an extension
|
|
86
|
-
*
|
|
85
|
+
* The renderers of a CustomLayer bind their instance's state after construction. A renderer
|
|
86
|
+
* of an extension, which may be shared between draw instances, calls `setTerrain(ctx)` with
|
|
87
|
+
* the render context it receives in each draw call.
|
|
87
88
|
*/
|
|
88
89
|
private terrain;
|
|
90
|
+
/**
|
|
91
|
+
* @param gl - The WebGL context of the map
|
|
92
|
+
* @param options - `surface`: whether the renderer draws things stuck to the ground (areas
|
|
93
|
+
* and lines), which lie flat on the frames that draw them flat
|
|
94
|
+
*/
|
|
89
95
|
constructor(gl: WebGL2RenderingContext, options?: {
|
|
90
96
|
surface?: boolean;
|
|
91
|
-
terrain?: TerrainContext | null;
|
|
92
97
|
});
|
|
93
98
|
/**
|
|
94
|
-
* Sets the terrain
|
|
99
|
+
* Sets the terrain the next uniforms are taken from.
|
|
100
|
+
*
|
|
101
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
102
|
+
* object the engine did not hand out) draws without terrain
|
|
95
103
|
*/
|
|
96
|
-
setTerrain(terrain:
|
|
104
|
+
setTerrain(terrain: RenderContext | TerrainAnchors | null): void;
|
|
97
105
|
/**
|
|
98
106
|
* Obtains the uniform locations from a program
|
|
99
107
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { terrainStateOf } from '../terrain/binding.js';
|
|
3
4
|
import { INACTIVE_TERRAIN_STATE, TERRAIN_ATLAS_TEXTURE_UNIT, } from '../terrain/state.js';
|
|
4
5
|
import { getRenderFrame } from './frame.js';
|
|
5
6
|
/**
|
|
@@ -29,6 +30,11 @@ function createMemo() {
|
|
|
29
30
|
* A class that manages the projection-related uniforms in one place
|
|
30
31
|
*/
|
|
31
32
|
export class ProjectionUniformManager {
|
|
33
|
+
/**
|
|
34
|
+
* @param gl - The WebGL context of the map
|
|
35
|
+
* @param options - `surface`: whether the renderer draws things stuck to the ground (areas
|
|
36
|
+
* and lines), which lie flat on the frames that draw them flat
|
|
37
|
+
*/
|
|
32
38
|
constructor(gl, options = {}) {
|
|
33
39
|
Object.defineProperty(this, "gl", {
|
|
34
40
|
enumerable: true,
|
|
@@ -68,25 +74,36 @@ export class ProjectionUniformManager {
|
|
|
68
74
|
/**
|
|
69
75
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
70
76
|
*
|
|
71
|
-
* The renderers of a CustomLayer
|
|
72
|
-
* of an extension
|
|
73
|
-
*
|
|
77
|
+
* The renderers of a CustomLayer bind their instance's state after construction. A renderer
|
|
78
|
+
* of an extension, which may be shared between draw instances, calls `setTerrain(ctx)` with
|
|
79
|
+
* the render context it receives in each draw call.
|
|
74
80
|
*/
|
|
75
81
|
Object.defineProperty(this, "terrain", {
|
|
76
82
|
enumerable: true,
|
|
77
83
|
configurable: true,
|
|
78
84
|
writable: true,
|
|
79
|
-
value:
|
|
85
|
+
value: null
|
|
80
86
|
});
|
|
81
87
|
this.gl = gl;
|
|
82
88
|
this.surface = options.surface === true;
|
|
83
|
-
this.terrain = options.terrain ?? null;
|
|
84
89
|
}
|
|
85
90
|
/**
|
|
86
|
-
* Sets the terrain
|
|
91
|
+
* Sets the terrain the next uniforms are taken from.
|
|
92
|
+
*
|
|
93
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
94
|
+
* object the engine did not hand out) draws without terrain
|
|
87
95
|
*/
|
|
88
96
|
setTerrain(terrain) {
|
|
97
|
+
this.terrain = terrainStateOf(terrain);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Sets the terrain state of an instance directly
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
useTerrainState(terrain) {
|
|
89
105
|
this.terrain = terrain;
|
|
106
|
+
return this;
|
|
90
107
|
}
|
|
91
108
|
/**
|
|
92
109
|
* Obtains the uniform locations from a program
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* quad follows the sphere the way maplibre's layers do
|
|
23
23
|
*/
|
|
24
24
|
import type { ProjectionData } from 'maplibre-gl';
|
|
25
|
-
import type {
|
|
25
|
+
import type { TerrainAnchors } from '../../api/extension/context.js';
|
|
26
|
+
import type { RenderContext } from '../../api/extension/render.js';
|
|
26
27
|
import type { DrapeQuadCorners, QuadDrapeSurface } from '../terrain/drape/quad.js';
|
|
27
28
|
import type { OffsetUniforms } from './helpers.js';
|
|
28
29
|
/**
|
|
@@ -72,15 +73,19 @@ export declare class QuadShader {
|
|
|
72
73
|
/**
|
|
73
74
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
74
75
|
*
|
|
75
|
-
* The CustomLayer
|
|
76
|
-
* owns a QuadShader calls `setTerrain(
|
|
76
|
+
* The CustomLayer binds its instance's state after construction. An extension renderer that
|
|
77
|
+
* owns a QuadShader calls `setTerrain(ctx)` with the render context it receives.
|
|
77
78
|
*/
|
|
78
79
|
private terrain;
|
|
79
|
-
|
|
80
|
+
/** @param gl - The WebGL context of the map */
|
|
81
|
+
constructor(gl: WebGL2RenderingContext);
|
|
80
82
|
/**
|
|
81
|
-
* Sets the terrain
|
|
83
|
+
* Sets the terrain the next draws use.
|
|
84
|
+
*
|
|
85
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
86
|
+
* object the engine did not hand out) draws without terrain
|
|
82
87
|
*/
|
|
83
|
-
setTerrain(terrain:
|
|
88
|
+
setTerrain(terrain: RenderContext | TerrainAnchors | null): void;
|
|
84
89
|
/**
|
|
85
90
|
* Initializes the buffers
|
|
86
91
|
*/
|
|
@@ -164,14 +169,13 @@ export declare class QuadShader {
|
|
|
164
169
|
* cannot be built). The caller falls back to the conventional way of drawing
|
|
165
170
|
* (the fill texture + a separate draw of the text).
|
|
166
171
|
*
|
|
167
|
-
* @param terrain The
|
|
168
|
-
*
|
|
169
|
-
* @param
|
|
170
|
-
* @param
|
|
171
|
-
* @param opacity The opacity, 0..1
|
|
172
|
+
* @param terrain - The render context of the draw call, or its `terrain`
|
|
173
|
+
* @param corners - The corners of the quad in degrees
|
|
174
|
+
* @param surface - The fill and the text
|
|
175
|
+
* @param opacity - The opacity, 0..1
|
|
172
176
|
* @returns true if it was painted; false when the caller must draw it another way
|
|
173
177
|
*/
|
|
174
|
-
export declare function drawQuadSurfaceOnTerrain(terrain:
|
|
178
|
+
export declare function drawQuadSurfaceOnTerrain(terrain: RenderContext | TerrainAnchors, corners: DrapeQuadCorners, surface: QuadDrapeSurface, opacity: number): boolean;
|
|
175
179
|
/**
|
|
176
180
|
* Returns the corners of a rectangle of a size in degrees, rotated about its center.
|
|
177
181
|
*
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
import { globeGridOf } from '../globe-subdivision.js';
|
|
4
|
+
import { terrainStateOf } from '../terrain/binding.js';
|
|
4
5
|
import { quadMercatorCorners } from '../terrain/drape/quad.js';
|
|
5
6
|
import { getQuadDrapeFrame, isTerrainElevationActive, reportTerrainCoarsening, } from '../terrain/state.js';
|
|
6
7
|
import { calculateLngLatOffset, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from './helpers.js';
|
|
@@ -15,7 +16,8 @@ import { buildQuadGrid, computeQuadGridSize, } from './quad-grid.js';
|
|
|
15
16
|
* subdivided to the terrain mesh.
|
|
16
17
|
*/
|
|
17
18
|
export class QuadShader {
|
|
18
|
-
|
|
19
|
+
/** @param gl - The WebGL context of the map */
|
|
20
|
+
constructor(gl) {
|
|
19
21
|
Object.defineProperty(this, "gl", {
|
|
20
22
|
enumerable: true,
|
|
21
23
|
configurable: true,
|
|
@@ -134,26 +136,37 @@ export class QuadShader {
|
|
|
134
136
|
/**
|
|
135
137
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
136
138
|
*
|
|
137
|
-
* The CustomLayer
|
|
138
|
-
* owns a QuadShader calls `setTerrain(
|
|
139
|
+
* The CustomLayer binds its instance's state after construction. An extension renderer that
|
|
140
|
+
* owns a QuadShader calls `setTerrain(ctx)` with the render context it receives.
|
|
139
141
|
*/
|
|
140
142
|
Object.defineProperty(this, "terrain", {
|
|
141
143
|
enumerable: true,
|
|
142
144
|
configurable: true,
|
|
143
145
|
writable: true,
|
|
144
|
-
value:
|
|
146
|
+
value: null
|
|
145
147
|
});
|
|
146
148
|
this.gl = gl;
|
|
147
|
-
this.
|
|
148
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl, { terrain });
|
|
149
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl);
|
|
149
150
|
this.setupBuffers();
|
|
150
151
|
}
|
|
151
152
|
/**
|
|
152
|
-
* Sets the terrain
|
|
153
|
+
* Sets the terrain the next draws use.
|
|
154
|
+
*
|
|
155
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
156
|
+
* object the engine did not hand out) draws without terrain
|
|
153
157
|
*/
|
|
154
158
|
setTerrain(terrain) {
|
|
159
|
+
this.useTerrainState(terrainStateOf(terrain));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Sets the terrain state of an instance directly
|
|
163
|
+
*
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
useTerrainState(terrain) {
|
|
155
167
|
this.terrain = terrain;
|
|
156
|
-
this.projectionUniformManager.
|
|
168
|
+
this.projectionUniformManager.useTerrainState(terrain);
|
|
169
|
+
return this;
|
|
157
170
|
}
|
|
158
171
|
/**
|
|
159
172
|
* Initializes the buffers
|
|
@@ -491,14 +504,22 @@ void main() {
|
|
|
491
504
|
* cannot be built). The caller falls back to the conventional way of drawing
|
|
492
505
|
* (the fill texture + a separate draw of the text).
|
|
493
506
|
*
|
|
494
|
-
* @param terrain The
|
|
495
|
-
*
|
|
496
|
-
* @param
|
|
497
|
-
* @param
|
|
498
|
-
* @param opacity The opacity, 0..1
|
|
507
|
+
* @param terrain - The render context of the draw call, or its `terrain`
|
|
508
|
+
* @param corners - The corners of the quad in degrees
|
|
509
|
+
* @param surface - The fill and the text
|
|
510
|
+
* @param opacity - The opacity, 0..1
|
|
499
511
|
* @returns true if it was painted; false when the caller must draw it another way
|
|
500
512
|
*/
|
|
501
513
|
export function drawQuadSurfaceOnTerrain(terrain, corners, surface, opacity) {
|
|
514
|
+
const state = terrainStateOf(terrain);
|
|
515
|
+
return state !== null && drawQuadSurfaceOnTerrainState(state, corners, surface, opacity);
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* {@link drawQuadSurfaceOnTerrain} over the terrain state of an instance
|
|
519
|
+
*
|
|
520
|
+
* @internal
|
|
521
|
+
*/
|
|
522
|
+
export function drawQuadSurfaceOnTerrainState(terrain, corners, surface, opacity) {
|
|
502
523
|
if (!isTerrainElevationActive(terrain))
|
|
503
524
|
return false;
|
|
504
525
|
const frame = getQuadDrapeFrame(terrain);
|
|
@@ -27,7 +27,7 @@ import type { Feature, FeatureStyle, FeatureType, StyleRule } from '../store/typ
|
|
|
27
27
|
export interface LegendEntry {
|
|
28
28
|
/** The displayed label */
|
|
29
29
|
label: string;
|
|
30
|
-
/** The color
|
|
30
|
+
/** The color, as `#rrggbb` */
|
|
31
31
|
color: string;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
@@ -57,27 +57,12 @@ export declare function getStyleRuleChannel(type: FeatureType): StyleRuleChannel
|
|
|
57
57
|
* `categorical` matches strings, numbers and booleans by `String(value)`; `graduated` and
|
|
58
58
|
* `continuous` take finite numbers only (a numeric string gives `other`). `continuous`
|
|
59
59
|
* clamps values outside `min`..`max` and returns the first ramp color when `max <= min`. It
|
|
60
|
-
* is a pure function.
|
|
60
|
+
* is a pure function. The colors of the rule may be any CSS color; the result is normalized
|
|
61
|
+
* to `#rrggbb`.
|
|
61
62
|
*
|
|
62
63
|
* @param rule The style rule
|
|
63
64
|
* @param properties The attributes of the feature
|
|
64
|
-
* @returns The color in `#
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```ts
|
|
68
|
-
* import { evaluateStyleRule, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
69
|
-
*
|
|
70
|
-
* const rule: StyleRule = {
|
|
71
|
-
* kind: 'graduated',
|
|
72
|
-
* property: 'population',
|
|
73
|
-
* breaks: [1000, 10000],
|
|
74
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
75
|
-
* other: '#cccccc',
|
|
76
|
-
* };
|
|
77
|
-
* evaluateStyleRule(rule, { population: 5000 }); // '#fdbb84'
|
|
78
|
-
* evaluateStyleRule(rule, { population: '5000' }); // '#cccccc' (not a number)
|
|
79
|
-
* evaluateStyleRule(rule, {}); // '#cccccc'
|
|
80
|
-
* ```
|
|
65
|
+
* @returns The color in `#rrggbb` form
|
|
81
66
|
*/
|
|
82
67
|
export declare function evaluateStyleRule(rule: StyleRule, properties: Record<string, unknown> | undefined): string;
|
|
83
68
|
/**
|
|
@@ -134,33 +119,11 @@ export declare function resolveFeatureStyle(feature: Feature, rule: StyleRule |
|
|
|
134
119
|
* `legendOther` is appended at the end
|
|
135
120
|
*
|
|
136
121
|
* Numbers are turned into strings with `String()`. Locale formatting is up to the caller.
|
|
122
|
+
* The colors are normalized to `#rrggbb`, as {@link evaluateStyleRule} returns them.
|
|
137
123
|
*
|
|
138
124
|
* @param rule The style rule
|
|
139
125
|
* @param messages The entries of the messages table to use (default: `MESSAGES_EN`;
|
|
140
126
|
* missing entries fall back to it)
|
|
141
127
|
* @returns The legend rows, in the order to show them
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```ts
|
|
145
|
-
* import { deriveLegend, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
146
|
-
*
|
|
147
|
-
* const rule: StyleRule = {
|
|
148
|
-
* kind: 'graduated',
|
|
149
|
-
* property: 'population',
|
|
150
|
-
* breaks: [1000, 10000],
|
|
151
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
152
|
-
* other: '#cccccc',
|
|
153
|
-
* };
|
|
154
|
-
* deriveLegend(rule);
|
|
155
|
-
* // [
|
|
156
|
-
* // { label: 'Below 1000', color: '#fee8c8' },
|
|
157
|
-
* // { label: '1000 to below 10000', color: '#fdbb84' },
|
|
158
|
-
* // { label: '10000 or more', color: '#e34a33' },
|
|
159
|
-
* // { label: 'Other', color: '#cccccc' },
|
|
160
|
-
* // ]
|
|
161
|
-
*
|
|
162
|
-
* // In the language of the host application
|
|
163
|
-
* deriveLegend(rule, { legendOther: 'Autres', legendBelow: (upper) => `Moins de ${upper}` });
|
|
164
|
-
* ```
|
|
165
128
|
*/
|
|
166
129
|
export declare function deriveLegend(rule: StyleRule, messages?: Partial<Messages>): LegendEntry[];
|