@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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signed distance functions of the built-in point shapes
|
|
3
|
+
*
|
|
4
|
+
* Both point renderers draw the same four shapes, and both take them from here: the instanced
|
|
5
|
+
* renderer evaluates `POINT_SDF_GLSL` in its fragment shader, and the per-point renderer builds
|
|
6
|
+
* its vertices by sampling `pointShapeSdf`, which is the same formula written in TypeScript. The
|
|
7
|
+
* two copies are kept side by side so that a change to one is a change to the other.
|
|
8
|
+
*
|
|
9
|
+
* Every shape is inscribed in the circle of radius `r` (the circumradius equals the radius of the
|
|
10
|
+
* circle shape), so a point of a given size occupies the same circle whatever its shape, and the
|
|
11
|
+
* hit area (the circumcircle) covers it. The distance is negative inside, zero on the edge and
|
|
12
|
+
* positive outside, in the units of the input (device pixels in the shader). The fill and the
|
|
13
|
+
* stroke are separated by a band of this distance: the stroke is the band `-strokeWidth < d <= 0`
|
|
14
|
+
* inside the outer edge.
|
|
15
|
+
*
|
|
16
|
+
* The triangle is equilateral with a vertex pointing up (+y), and the star is a regular pentagram
|
|
17
|
+
* with a tip pointing up. +y is up on the screen for both renderers.
|
|
18
|
+
*/
|
|
19
|
+
/** The shapes the built-in renderers draw */
|
|
20
|
+
export type SdfPointShape = 'circle' | 'square' | 'triangle' | 'star';
|
|
21
|
+
/** Value of the `u_shape` uniform for each shape */
|
|
22
|
+
export declare const POINT_SHAPE_CODE: Readonly<Record<SdfPointShape, number>>;
|
|
23
|
+
/**
|
|
24
|
+
* Ratio of the inner vertices of the star to its tips ((3 - √5) / 2, a regular pentagram)
|
|
25
|
+
*/
|
|
26
|
+
export declare const STAR_INNER_RATIO = 0.381966011250105;
|
|
27
|
+
/**
|
|
28
|
+
* Signed distance from `(x, y)` (relative to the center of the point) to the edge of a shape
|
|
29
|
+
* inscribed in the circle of radius `r`
|
|
30
|
+
*
|
|
31
|
+
* The same formula as `pointShapeSdf` of `POINT_SDF_GLSL`. The circle uses the Euclidean
|
|
32
|
+
* distance and the square the Chebyshev distance (half its side is `r`).
|
|
33
|
+
*/
|
|
34
|
+
export declare function pointShapeSdf(shape: SdfPointShape, x: number, y: number, r: number): number;
|
|
35
|
+
/**
|
|
36
|
+
* GLSL of `pointShapeSdf` (the shape is selected by the value of `POINT_SHAPE_CODE`)
|
|
37
|
+
*/
|
|
38
|
+
export declare const POINT_SDF_GLSL = "\nfloat sdPointTriangle(vec2 p, float r) {\n const float k = 1.7320508075688772;\n float h = r * 0.8660254037844386;\n p.x = abs(p.x) - h;\n p.y = p.y + h / k;\n if (p.x + k * p.y > 0.0) p = vec2(p.x - k * p.y, -k * p.x - p.y) / 2.0;\n p.x -= clamp(p.x, -2.0 * h, 0.0);\n return -length(p) * sign(p.y);\n}\n\nfloat sdPointStar(vec2 p, float r) {\n const vec2 k1 = vec2(0.8090169943749475, -0.5877852522924731);\n const vec2 k2 = vec2(-0.8090169943749475, -0.5877852522924731);\n p.x = abs(p.x);\n p -= 2.0 * max(dot(k1, p), 0.0) * k1;\n p -= 2.0 * max(dot(k2, p), 0.0) * k2;\n p.x = abs(p.x);\n p.y -= r;\n vec2 ba = 0.381966011250105 * vec2(-k1.y, k1.x) - vec2(0.0, 1.0);\n float h = clamp(dot(p, ba) / dot(ba, ba), 0.0, r);\n return length(p - ba * h) * sign(p.y * ba.x - p.x * ba.y);\n}\n\nfloat pointShapeSdf(vec2 p, float r, float shape) {\n if (shape < 0.5) return length(p) - r;\n if (shape < 1.5) return max(abs(p.x), abs(p.y)) - r;\n if (shape < 2.5) return sdPointTriangle(p, r);\n return sdPointStar(p, r);\n}\n";
|
|
39
|
+
/** A ring of the outline of a shape, sampled along rays from the center */
|
|
40
|
+
export interface PointShapeRings {
|
|
41
|
+
/** The outer edge (distance 0) */
|
|
42
|
+
outer: Array<[number, number]>;
|
|
43
|
+
/** The inner edge of the stroke (distance `-inset`), on the same rays as `outer` */
|
|
44
|
+
inner: Array<[number, number]>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Samples the outer edge and the inner edge of the stroke of a polygonal shape
|
|
48
|
+
*
|
|
49
|
+
* Both rings are taken on the same rays from the center (through every vertex, plus subdivisions
|
|
50
|
+
* for the star), so the vertices pair up for a strip between them and the center sees each ring
|
|
51
|
+
* as a fan. The inner edge is where the distance function is `-inset`, so the band between the
|
|
52
|
+
* rings is exactly the stroke band of the instanced renderer. The rings are not closed (the first
|
|
53
|
+
* vertex is not repeated).
|
|
54
|
+
*
|
|
55
|
+
* @param outer The circumradius of the outer edge
|
|
56
|
+
* @param inset The stroke width (the depth of the inner edge; 0 makes the rings equal)
|
|
57
|
+
*/
|
|
58
|
+
export declare function samplePointShapeRings(shape: 'triangle' | 'star', outer: number, inset: number): PointShapeRings;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** Value of the `u_shape` uniform for each shape */
|
|
4
|
+
export const POINT_SHAPE_CODE = {
|
|
5
|
+
circle: 0,
|
|
6
|
+
square: 1,
|
|
7
|
+
triangle: 2,
|
|
8
|
+
star: 3,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Ratio of the inner vertices of the star to its tips ((3 - √5) / 2, a regular pentagram)
|
|
12
|
+
*/
|
|
13
|
+
export const STAR_INNER_RATIO = 0.381966011250105;
|
|
14
|
+
const SQRT3 = 1.7320508075688772;
|
|
15
|
+
/** Half the side of an equilateral triangle inscribed in the unit circle (√3 / 2) */
|
|
16
|
+
const TRIANGLE_HALF_SIDE = 0.8660254037844386;
|
|
17
|
+
/** (cos 36°, -sin 36°): the mirror axes of the star */
|
|
18
|
+
const STAR_K1X = 0.8090169943749475;
|
|
19
|
+
const STAR_K1Y = -0.5877852522924731;
|
|
20
|
+
/**
|
|
21
|
+
* Signed distance to an equilateral triangle inscribed in the circle of radius `r`
|
|
22
|
+
*/
|
|
23
|
+
function sdTriangle(x, y, r) {
|
|
24
|
+
const h = r * TRIANGLE_HALF_SIDE;
|
|
25
|
+
let px = Math.abs(x) - h;
|
|
26
|
+
let py = y + h / SQRT3;
|
|
27
|
+
if (px + SQRT3 * py > 0) {
|
|
28
|
+
const nx = (px - SQRT3 * py) / 2;
|
|
29
|
+
const ny = (-SQRT3 * px - py) / 2;
|
|
30
|
+
px = nx;
|
|
31
|
+
py = ny;
|
|
32
|
+
}
|
|
33
|
+
px -= Math.min(Math.max(px, -2 * h), 0);
|
|
34
|
+
return -Math.hypot(px, py) * Math.sign(py);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Signed distance to a regular pentagram whose tips lie on the circle of radius `r`
|
|
38
|
+
*/
|
|
39
|
+
function sdStar(x, y, r) {
|
|
40
|
+
let px = Math.abs(x);
|
|
41
|
+
let py = y;
|
|
42
|
+
// Fold the plane into one tenth of the star (mirrors about the two axes k1 and k2)
|
|
43
|
+
let t = Math.max(STAR_K1X * px + STAR_K1Y * py, 0);
|
|
44
|
+
px -= 2 * t * STAR_K1X;
|
|
45
|
+
py -= 2 * t * STAR_K1Y;
|
|
46
|
+
t = Math.max(-STAR_K1X * px + STAR_K1Y * py, 0);
|
|
47
|
+
px -= 2 * t * -STAR_K1X;
|
|
48
|
+
py -= 2 * t * STAR_K1Y;
|
|
49
|
+
px = Math.abs(px);
|
|
50
|
+
py -= r;
|
|
51
|
+
// Edge from the tip (0, r) toward the inner vertex
|
|
52
|
+
const bax = STAR_INNER_RATIO * -STAR_K1Y;
|
|
53
|
+
const bay = STAR_INNER_RATIO * STAR_K1X - 1;
|
|
54
|
+
const h = Math.min(Math.max((px * bax + py * bay) / (bax * bax + bay * bay), 0), r);
|
|
55
|
+
return Math.hypot(px - bax * h, py - bay * h) * Math.sign(py * bax - px * bay);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Signed distance from `(x, y)` (relative to the center of the point) to the edge of a shape
|
|
59
|
+
* inscribed in the circle of radius `r`
|
|
60
|
+
*
|
|
61
|
+
* The same formula as `pointShapeSdf` of `POINT_SDF_GLSL`. The circle uses the Euclidean
|
|
62
|
+
* distance and the square the Chebyshev distance (half its side is `r`).
|
|
63
|
+
*/
|
|
64
|
+
export function pointShapeSdf(shape, x, y, r) {
|
|
65
|
+
switch (shape) {
|
|
66
|
+
case 'square':
|
|
67
|
+
return Math.max(Math.abs(x), Math.abs(y)) - r;
|
|
68
|
+
case 'triangle':
|
|
69
|
+
return sdTriangle(x, y, r);
|
|
70
|
+
case 'star':
|
|
71
|
+
return sdStar(x, y, r);
|
|
72
|
+
default:
|
|
73
|
+
return Math.hypot(x, y) - r;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* GLSL of `pointShapeSdf` (the shape is selected by the value of `POINT_SHAPE_CODE`)
|
|
78
|
+
*/
|
|
79
|
+
export const POINT_SDF_GLSL = `
|
|
80
|
+
float sdPointTriangle(vec2 p, float r) {
|
|
81
|
+
const float k = ${SQRT3};
|
|
82
|
+
float h = r * ${TRIANGLE_HALF_SIDE};
|
|
83
|
+
p.x = abs(p.x) - h;
|
|
84
|
+
p.y = p.y + h / k;
|
|
85
|
+
if (p.x + k * p.y > 0.0) p = vec2(p.x - k * p.y, -k * p.x - p.y) / 2.0;
|
|
86
|
+
p.x -= clamp(p.x, -2.0 * h, 0.0);
|
|
87
|
+
return -length(p) * sign(p.y);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
float sdPointStar(vec2 p, float r) {
|
|
91
|
+
const vec2 k1 = vec2(${STAR_K1X}, ${STAR_K1Y});
|
|
92
|
+
const vec2 k2 = vec2(${-STAR_K1X}, ${STAR_K1Y});
|
|
93
|
+
p.x = abs(p.x);
|
|
94
|
+
p -= 2.0 * max(dot(k1, p), 0.0) * k1;
|
|
95
|
+
p -= 2.0 * max(dot(k2, p), 0.0) * k2;
|
|
96
|
+
p.x = abs(p.x);
|
|
97
|
+
p.y -= r;
|
|
98
|
+
vec2 ba = ${STAR_INNER_RATIO} * vec2(-k1.y, k1.x) - vec2(0.0, 1.0);
|
|
99
|
+
float h = clamp(dot(p, ba) / dot(ba, ba), 0.0, r);
|
|
100
|
+
return length(p - ba * h) * sign(p.y * ba.x - p.x * ba.y);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
float pointShapeSdf(vec2 p, float r, float shape) {
|
|
104
|
+
if (shape < 0.5) return length(p) - r;
|
|
105
|
+
if (shape < 1.5) return max(abs(p.x), abs(p.y)) - r;
|
|
106
|
+
if (shape < 2.5) return sdPointTriangle(p, r);
|
|
107
|
+
return sdPointStar(p, r);
|
|
108
|
+
}
|
|
109
|
+
`;
|
|
110
|
+
/** Angles (radians) of the vertices of the polygonal shapes, counterclockwise from the top */
|
|
111
|
+
function vertexAngles(shape) {
|
|
112
|
+
const count = shape === 'triangle' ? 3 : 10;
|
|
113
|
+
const angles = [];
|
|
114
|
+
for (let i = 0; i < count; i++)
|
|
115
|
+
angles.push(Math.PI / 2 + (i / count) * Math.PI * 2);
|
|
116
|
+
return angles;
|
|
117
|
+
}
|
|
118
|
+
/** Subdivisions between two vertex angles (the star needs them for the rounded inner corners) */
|
|
119
|
+
function subdivisions(shape) {
|
|
120
|
+
return shape === 'triangle' ? 1 : 4;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Distance from the center along the direction `(dx, dy)` at which the distance function
|
|
124
|
+
* reaches `level` (bisection; 0 when the center itself is already outside that level)
|
|
125
|
+
*/
|
|
126
|
+
function radiusAtLevel(shape, dx, dy, outer, level) {
|
|
127
|
+
if (pointShapeSdf(shape, 0, 0, outer) >= level)
|
|
128
|
+
return 0;
|
|
129
|
+
let lo = 0;
|
|
130
|
+
let hi = outer;
|
|
131
|
+
for (let i = 0; i < 40; i++) {
|
|
132
|
+
const mid = (lo + hi) / 2;
|
|
133
|
+
if (pointShapeSdf(shape, dx * mid, dy * mid, outer) < level)
|
|
134
|
+
lo = mid;
|
|
135
|
+
else
|
|
136
|
+
hi = mid;
|
|
137
|
+
}
|
|
138
|
+
return (lo + hi) / 2;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Samples the outer edge and the inner edge of the stroke of a polygonal shape
|
|
142
|
+
*
|
|
143
|
+
* Both rings are taken on the same rays from the center (through every vertex, plus subdivisions
|
|
144
|
+
* for the star), so the vertices pair up for a strip between them and the center sees each ring
|
|
145
|
+
* as a fan. The inner edge is where the distance function is `-inset`, so the band between the
|
|
146
|
+
* rings is exactly the stroke band of the instanced renderer. The rings are not closed (the first
|
|
147
|
+
* vertex is not repeated).
|
|
148
|
+
*
|
|
149
|
+
* @param outer The circumradius of the outer edge
|
|
150
|
+
* @param inset The stroke width (the depth of the inner edge; 0 makes the rings equal)
|
|
151
|
+
*/
|
|
152
|
+
export function samplePointShapeRings(shape, outer, inset) {
|
|
153
|
+
const angles = vertexAngles(shape);
|
|
154
|
+
const steps = subdivisions(shape);
|
|
155
|
+
const rings = { outer: [], inner: [] };
|
|
156
|
+
for (let i = 0; i < angles.length; i++) {
|
|
157
|
+
const from = angles[i];
|
|
158
|
+
const to = i + 1 < angles.length ? angles[i + 1] : angles[0] + Math.PI * 2;
|
|
159
|
+
for (let s = 0; s < steps; s++) {
|
|
160
|
+
const angle = from + ((to - from) * s) / steps;
|
|
161
|
+
const dx = Math.cos(angle);
|
|
162
|
+
const dy = Math.sin(angle);
|
|
163
|
+
const ro = radiusAtLevel(shape, dx, dy, outer, 0);
|
|
164
|
+
const ri = inset > 0 ? radiusAtLevel(shape, dx, dy, outer, -inset) : ro;
|
|
165
|
+
rings.outer.push([dx * ro, dy * ro]);
|
|
166
|
+
rings.inner.push([dx * ri, dy * ri]);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return rings;
|
|
170
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PointShapeRenderer
|
|
3
|
+
*
|
|
4
|
+
* A renderer that draws a point as a shape of a fixed size in screen pixels.
|
|
5
|
+
* The Mercator-to-clip-space conversion is done on the GPU (using MapLibre's projectTile)
|
|
6
|
+
*/
|
|
7
|
+
import type { Map as MapLibreMap, ProjectionData } from 'maplibre-gl';
|
|
8
|
+
import type { PointStyle } from '../../../shared/types/style.js';
|
|
9
|
+
import type { PixelRatioInput } from '../../../shared/utils/pixel-ratio.js';
|
|
10
|
+
import type { OffsetUniforms, ShaderData } from '../../shaders/helpers.js';
|
|
11
|
+
import { TerrainContext } from '../../terrain/context.js';
|
|
12
|
+
export type { Color, PointShape, PointStyle } from '../../../shared/types/style.js';
|
|
13
|
+
/**
|
|
14
|
+
* The point renderer core uses for point markers (circles, squares, triangles and stars; the
|
|
15
|
+
* shape `'icon'` is drawn as a circle), shared with custom feature renderers.
|
|
16
|
+
*
|
|
17
|
+
* Draws a billboard of a size in CSS px at a `[lng, lat]` position in degrees, converting to
|
|
18
|
+
* clip space on the GPU. Call `ensureShader`, `setOffsetUniforms` and `setProjectionData`
|
|
19
|
+
* before drawing.
|
|
20
|
+
*/
|
|
21
|
+
export declare class PointShapeRenderer {
|
|
22
|
+
private gl;
|
|
23
|
+
private program;
|
|
24
|
+
private variantName;
|
|
25
|
+
private bufferCache;
|
|
26
|
+
private projectionUniformManager;
|
|
27
|
+
private colorLoc;
|
|
28
|
+
private pointLngLatLoc;
|
|
29
|
+
/** Uniform for the ground elevation of the anchor (meters) */
|
|
30
|
+
private anchorElevationLoc;
|
|
31
|
+
private sizeClipLoc;
|
|
32
|
+
private projectionData;
|
|
33
|
+
private offsetUniforms;
|
|
34
|
+
/** Injected device pixel ratio (when not injected, it is read from window each time) */
|
|
35
|
+
private pixelRatio;
|
|
36
|
+
/** The terrain state of the draw instance this renderer belongs to */
|
|
37
|
+
private readonly terrain;
|
|
38
|
+
constructor(_map: MapLibreMap, gl: WebGL2RenderingContext, pixelRatio?: PixelRatioInput, terrain?: TerrainContext);
|
|
39
|
+
/**
|
|
40
|
+
* Ensures the shader exists (recreating it when necessary)
|
|
41
|
+
*/
|
|
42
|
+
ensureShader(shaderData: ShaderData): void;
|
|
43
|
+
/**
|
|
44
|
+
* Sets the uniforms for the offset mode
|
|
45
|
+
*/
|
|
46
|
+
setOffsetUniforms(uniforms: OffsetUniforms): void;
|
|
47
|
+
/**
|
|
48
|
+
* Creates the shader program (offset mode)
|
|
49
|
+
*/
|
|
50
|
+
private createShaderProgram;
|
|
51
|
+
/**
|
|
52
|
+
* Sets the projection uniforms (supporting the offset mode and the globe mode)
|
|
53
|
+
* @param zoom The current zoom level (used to switch the offset mode)
|
|
54
|
+
*/
|
|
55
|
+
private setProjectionUniforms;
|
|
56
|
+
/**
|
|
57
|
+
* Converts a size in pixels to a size in clip space
|
|
58
|
+
*
|
|
59
|
+
* CSS pixels are converted to device pixels first, and then to clip space. The viewport covers
|
|
60
|
+
* the drawing buffer (in device pixels), so the pixel ratio has to be taken into account.
|
|
61
|
+
*/
|
|
62
|
+
private pixelsToClipSize;
|
|
63
|
+
/**
|
|
64
|
+
* Sets the ProjectionData
|
|
65
|
+
*/
|
|
66
|
+
setProjectionData(projectionData: ProjectionData): void;
|
|
67
|
+
/**
|
|
68
|
+
* Draws a point
|
|
69
|
+
* @param coord The coordinates [lng, lat]
|
|
70
|
+
* @param style The point style
|
|
71
|
+
* @param zoom The current zoom level
|
|
72
|
+
* @param featureId The feature ID (optional)
|
|
73
|
+
*/
|
|
74
|
+
draw(coord: [number, number], style: PointStyle, zoom: number, featureId?: string,
|
|
75
|
+
/**
|
|
76
|
+
* The elevation to place it at (meters). When omitted, the ground elevation is used
|
|
77
|
+
*
|
|
78
|
+
* The four corners of the selection box and the rotation handle are placed at the same
|
|
79
|
+
* single height as the box. Picking up the ground height for each of them makes them look as
|
|
80
|
+
* if they float above or sink below the box (billboard).
|
|
81
|
+
*/
|
|
82
|
+
elevationMeters?: number): void;
|
|
83
|
+
/**
|
|
84
|
+
* Draws the fill
|
|
85
|
+
* The shape geometry is normalized, so it can be cached by shape type (and, for the triangle
|
|
86
|
+
* and the star, whose fill is the inside of the stroke band, by the outer ratio)
|
|
87
|
+
*/
|
|
88
|
+
private drawFill;
|
|
89
|
+
/**
|
|
90
|
+
* Draws the stroke
|
|
91
|
+
* The stroke geometry depends on outerRatio, so it is cached by shape type + outerRatio
|
|
92
|
+
*/
|
|
93
|
+
private drawStroke;
|
|
94
|
+
/**
|
|
95
|
+
* Draws normalized shape vertices, through the buffer cache when a cache key is given and with
|
|
96
|
+
* a transient buffer otherwise
|
|
97
|
+
*/
|
|
98
|
+
private drawShapeGeometry;
|
|
99
|
+
}
|