@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,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draw factors for retained-mode rendering (size and opacity)
|
|
3
|
+
*
|
|
4
|
+
* A retained batch bakes its vertex data, so changing dimensions or colors
|
|
5
|
+
* would normally require rebuilding it. Per-frame adjustments such as "make it
|
|
6
|
+
* slightly thinner and fainter as the zoom changes" can, however, be done with
|
|
7
|
+
* a uniform that is multiplied into the baked values at draw time. This module
|
|
8
|
+
* only defines the shape in which those factors are passed around.
|
|
9
|
+
*
|
|
10
|
+
* Conventions:
|
|
11
|
+
*
|
|
12
|
+
* - The default is `NEUTRAL_DRAW_FACTORS` (1x scale, opacity 1), so calls that
|
|
13
|
+
* pass no factors (Store rendering, immediate mode) look exactly as before,
|
|
14
|
+
* down to the pixel
|
|
15
|
+
* - A uniform is per-program residual state, so even rendering paths that do
|
|
16
|
+
* not use the factors must write 1 (a value left over from a previous draw
|
|
17
|
+
* makes another draw come out thinner; this is the same family of accident as
|
|
18
|
+
* forgetting to restore the blend state)
|
|
19
|
+
* - The factors are a per-dataset adjustment and do not propagate to the
|
|
20
|
+
* Store (the drawn features)
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Factors multiplied in at draw time
|
|
24
|
+
*/
|
|
25
|
+
export interface RetainedDrawFactors {
|
|
26
|
+
/**
|
|
27
|
+
* Size factor (applies to point diameter, line width and outline width). 1 keeps the
|
|
28
|
+
* former look
|
|
29
|
+
*/
|
|
30
|
+
scale: number;
|
|
31
|
+
/** Opacity factor (0..1). 1 keeps the former look */
|
|
32
|
+
opacity: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* No factors (the former look)
|
|
36
|
+
*/
|
|
37
|
+
export declare const NEUTRAL_DRAW_FACTORS: RetainedDrawFactors;
|
|
38
|
+
/**
|
|
39
|
+
* Round factors that came from outside into a safe range
|
|
40
|
+
*
|
|
41
|
+
* This is a defense so that rendering is not broken when a caller's function
|
|
42
|
+
* returns NaN, infinity or a negative value. Only positive finite numbers are
|
|
43
|
+
* accepted for scale (anything else becomes 1), and opacity is clamped to
|
|
44
|
+
* 0..1.
|
|
45
|
+
*/
|
|
46
|
+
export declare function sanitizeDrawFactors(factors: {
|
|
47
|
+
scale: number;
|
|
48
|
+
opacity: number;
|
|
49
|
+
} | null | undefined): RetainedDrawFactors;
|
|
50
|
+
/**
|
|
51
|
+
* The draw-time factors of a Store layer (its opacity)
|
|
52
|
+
*
|
|
53
|
+
* `Layer.opacity` is a look-only setting, so it is applied at draw time rather than baked into
|
|
54
|
+
* the vertex data: a change of the value does not rebuild a retained batch. The size is not
|
|
55
|
+
* touched (scale 1). A missing layer, and an opacity of 1, give `NEUTRAL_DRAW_FACTORS` itself;
|
|
56
|
+
* a value outside 0..1 or not finite is rounded the same way as `sanitizeDrawFactors`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function layerDrawFactors(layer: {
|
|
59
|
+
readonly opacity?: number;
|
|
60
|
+
} | null | undefined): RetainedDrawFactors;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* No factors (the former look)
|
|
5
|
+
*/
|
|
6
|
+
export const NEUTRAL_DRAW_FACTORS = { scale: 1, opacity: 1 };
|
|
7
|
+
/**
|
|
8
|
+
* Round factors that came from outside into a safe range
|
|
9
|
+
*
|
|
10
|
+
* This is a defense so that rendering is not broken when a caller's function
|
|
11
|
+
* returns NaN, infinity or a negative value. Only positive finite numbers are
|
|
12
|
+
* accepted for scale (anything else becomes 1), and opacity is clamped to
|
|
13
|
+
* 0..1.
|
|
14
|
+
*/
|
|
15
|
+
export function sanitizeDrawFactors(factors) {
|
|
16
|
+
if (!factors)
|
|
17
|
+
return NEUTRAL_DRAW_FACTORS;
|
|
18
|
+
const scale = Number.isFinite(factors.scale) && factors.scale > 0 ? factors.scale : 1;
|
|
19
|
+
const opacity = Number.isFinite(factors.opacity) ? Math.min(1, Math.max(0, factors.opacity)) : 1;
|
|
20
|
+
return { scale, opacity };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The draw-time factors of a Store layer (its opacity)
|
|
24
|
+
*
|
|
25
|
+
* `Layer.opacity` is a look-only setting, so it is applied at draw time rather than baked into
|
|
26
|
+
* the vertex data: a change of the value does not rebuild a retained batch. The size is not
|
|
27
|
+
* touched (scale 1). A missing layer, and an opacity of 1, give `NEUTRAL_DRAW_FACTORS` itself;
|
|
28
|
+
* a value outside 0..1 or not finite is rounded the same way as `sanitizeDrawFactors`.
|
|
29
|
+
*/
|
|
30
|
+
export function layerDrawFactors(layer) {
|
|
31
|
+
const opacity = layer?.opacity;
|
|
32
|
+
if (opacity === undefined || opacity === 1)
|
|
33
|
+
return NEUTRAL_DRAW_FACTORS;
|
|
34
|
+
return sanitizeDrawFactors({ scale: 1, opacity });
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { generateCirclePolygon } from '../../shared/math/index.js';
|
|
4
|
+
import { hexToColor } from '../../shared/utils/color.js';
|
|
5
|
+
import { getCircleRadius, getCreatedZoom } from '../../shared/utils/property.js';
|
|
6
|
+
import { StyleRuleCache } from '../cache/style-rule.js';
|
|
7
|
+
import { applyRuleColor } from '../style-rule.js';
|
|
8
|
+
import { layerDrawFactors } from './draw-factors.js';
|
|
9
|
+
import { resolvePointStyle } from './point/point-style.js';
|
|
10
|
+
import { FillShaderManager } from './polygon/fill.js';
|
|
11
|
+
/**
|
|
12
|
+
* The feature rendering class
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export class FeatureDrawer {
|
|
17
|
+
constructor(deps) {
|
|
18
|
+
Object.defineProperty(this, "map", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: void 0
|
|
23
|
+
});
|
|
24
|
+
/** Evaluated style rules of the draw instance, keyed by feature id */
|
|
25
|
+
Object.defineProperty(this, "styleRules", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: void 0
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(this, "sdfLineRenderer", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: void 0
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(this, "pointShapeRenderer", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(this, "imageRenderer", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: void 0
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(this, "featureStyle", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
configurable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
value: void 0
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(this, "fillShaderManager", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true,
|
|
59
|
+
value: void 0
|
|
60
|
+
});
|
|
61
|
+
this.map = deps.map;
|
|
62
|
+
this.sdfLineRenderer = deps.sdfLineRenderer;
|
|
63
|
+
this.pointShapeRenderer = deps.pointShapeRenderer;
|
|
64
|
+
this.imageRenderer = deps.imageRenderer;
|
|
65
|
+
this.featureStyle = deps.featureStyle;
|
|
66
|
+
this.styleRules = deps.styleRules ?? new StyleRuleCache();
|
|
67
|
+
this.fillShaderManager = new FillShaderManager(deps.gl, deps.terrain);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Make sure the shader exists
|
|
71
|
+
*/
|
|
72
|
+
ensureShader(shaderData) {
|
|
73
|
+
this.fillShaderManager.ensureShader(shaderData);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set the uniforms for offset mode
|
|
77
|
+
*/
|
|
78
|
+
setOffsetUniforms(uniforms) {
|
|
79
|
+
this.fillShaderManager.setOffsetUniforms(uniforms);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Draw a feature
|
|
83
|
+
*
|
|
84
|
+
* @param layer The layer it belongs to (used to evaluate style rules, and its opacity is
|
|
85
|
+
* multiplied into the drawing; no rules and no factor when omitted)
|
|
86
|
+
*/
|
|
87
|
+
drawFeature(feature, projectionData, zoom, layer) {
|
|
88
|
+
const opacity = layerDrawFactors(layer).opacity;
|
|
89
|
+
if (feature.type === 'Point') {
|
|
90
|
+
const coord = feature.coordinates;
|
|
91
|
+
const pointStyle = pointWithOpacity(this.getPointStyle(feature, layer), opacity);
|
|
92
|
+
this.drawPointShape(coord, pointStyle, zoom, feature.id);
|
|
93
|
+
}
|
|
94
|
+
else if (feature.type === 'LineString') {
|
|
95
|
+
const coords = feature.coordinates;
|
|
96
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
97
|
+
const strokeStyle = strokeWithOpacity(this.getLineStringStrokeStyle(feature, layer), opacity);
|
|
98
|
+
this.drawLineStringStroke(coords, strokeStyle, projectionData, zoom, createdZoom, feature.id);
|
|
99
|
+
}
|
|
100
|
+
else if (feature.type === 'Polygon') {
|
|
101
|
+
const rings = feature.coordinates;
|
|
102
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
103
|
+
const { fillColor, strokeStyle } = polygonWithOpacity(this.getPolygonStyles(feature, layer), opacity);
|
|
104
|
+
this.drawPolygonWithStroke(rings, fillColor, strokeStyle, projectionData, zoom, createdZoom, feature.id);
|
|
105
|
+
}
|
|
106
|
+
else if (feature.type === 'MultiPoint') {
|
|
107
|
+
// Draw a point for each part (the style is shared across the feature)
|
|
108
|
+
const parts = feature.coordinates;
|
|
109
|
+
const pointStyle = pointWithOpacity(this.getPointStyle(feature, layer), opacity);
|
|
110
|
+
for (const coord of parts) {
|
|
111
|
+
this.drawPointShape(coord, pointStyle, zoom, feature.id);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (feature.type === 'MultiLineString') {
|
|
115
|
+
// Draw a line for each part
|
|
116
|
+
const parts = feature.coordinates;
|
|
117
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
118
|
+
const strokeStyle = strokeWithOpacity(this.getLineStringStrokeStyle(feature, layer), opacity);
|
|
119
|
+
for (let i = 0; i < parts.length; i++) {
|
|
120
|
+
this.drawLineStringStroke(parts[i], strokeStyle, projectionData, zoom, createdZoom, `${feature.id}:part:${i}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (feature.type === 'MultiPolygon') {
|
|
124
|
+
// Draw a hole-aware polygon for each part
|
|
125
|
+
const parts = feature.coordinates;
|
|
126
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
127
|
+
const { fillColor, strokeStyle } = polygonWithOpacity(this.getPolygonStyles(feature, layer), opacity);
|
|
128
|
+
for (let i = 0; i < parts.length; i++) {
|
|
129
|
+
this.drawPolygonWithStroke(parts[i], fillColor, strokeStyle, projectionData, zoom, createdZoom, `${feature.id}:part:${i}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (feature.type === 'Image') {
|
|
133
|
+
this.imageRenderer.draw(feature, projectionData, zoom, () => this.map.triggerRepaint(), opacity);
|
|
134
|
+
}
|
|
135
|
+
else if (feature.type === 'Circle') {
|
|
136
|
+
this.drawCircle(feature, projectionData, zoom, layer, opacity);
|
|
137
|
+
}
|
|
138
|
+
else if (feature.type === 'Freehand') {
|
|
139
|
+
// Freehand uses the same rendering logic as LineString
|
|
140
|
+
const coords = feature.coordinates;
|
|
141
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
142
|
+
const strokeStyle = strokeWithOpacity(this.getLineStringStrokeStyle(feature, layer), opacity);
|
|
143
|
+
this.drawLineStringStroke(coords, strokeStyle, projectionData, zoom, createdZoom, feature.id);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Resolve the effective style
|
|
148
|
+
*
|
|
149
|
+
* The precedence is "per-feature color > the layer's style rule > the default color".
|
|
150
|
+
* The result of evaluating the rules is cached by feature ID and invalidated when the
|
|
151
|
+
* feature is updated and when the layer rules change (done by CustomLayer, which
|
|
152
|
+
* subscribes to the Store).
|
|
153
|
+
*/
|
|
154
|
+
resolveStyle(feature, layer, channel) {
|
|
155
|
+
if (!feature)
|
|
156
|
+
return undefined;
|
|
157
|
+
const style = feature.style;
|
|
158
|
+
const ruleColor = this.styleRules.resolve(feature, layer?.styleRule);
|
|
159
|
+
return applyRuleColor(style, ruleColor, channel);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get the style of a Point (merges feature.style, the layer rules and the defaults)
|
|
163
|
+
*
|
|
164
|
+
* Every built-in path reads the style of a point here (instanced and immediate drawing, the
|
|
165
|
+
* classification of the retained runs, the datasets), so the shape a feature
|
|
166
|
+
* names (`pointShape`) wins over the default of the instance on all of them.
|
|
167
|
+
*
|
|
168
|
+
* @param feature The target feature
|
|
169
|
+
* @param layer The layer it belongs to (used to evaluate style rules; no rules when omitted)
|
|
170
|
+
*/
|
|
171
|
+
getPointStyle(feature, layer) {
|
|
172
|
+
return resolvePointStyle(this.resolveStyle(feature, layer, 'point'), this.featureStyle.point.point);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get the stroke style of a LineString
|
|
176
|
+
*
|
|
177
|
+
* @param feature The target feature
|
|
178
|
+
* @param layer The layer it belongs to (used to evaluate style rules; no rules when omitted)
|
|
179
|
+
*/
|
|
180
|
+
getLineStringStrokeStyle(feature, layer) {
|
|
181
|
+
const defaultStyle = this.featureStyle.lineString.stroke;
|
|
182
|
+
const style = this.resolveStyle(feature, layer, 'stroke');
|
|
183
|
+
if (!style)
|
|
184
|
+
return defaultStyle;
|
|
185
|
+
// Apply strokeOpacity when it is specified, even if strokeColor is not set
|
|
186
|
+
// strokeOpacity is set directly rather than multiplied into the default alpha value
|
|
187
|
+
const color = style.strokeColor
|
|
188
|
+
? hexToColor(style.strokeColor, style.strokeOpacity ?? 1)
|
|
189
|
+
: style.strokeOpacity !== undefined
|
|
190
|
+
? [defaultStyle.color[0], defaultStyle.color[1], defaultStyle.color[2], style.strokeOpacity]
|
|
191
|
+
: defaultStyle.color;
|
|
192
|
+
return {
|
|
193
|
+
...defaultStyle,
|
|
194
|
+
color,
|
|
195
|
+
width: style.strokeWidth ?? defaultStyle.width,
|
|
196
|
+
// The opacity is already folded into color, so opacity is set to 1
|
|
197
|
+
opacity: 1,
|
|
198
|
+
lineStyle: style.lineStyle ?? defaultStyle.lineStyle,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get the style of a Polygon (fill + stroke)
|
|
203
|
+
*
|
|
204
|
+
* The color from a style rule is applied to the fill (fillColor). The outline is
|
|
205
|
+
* determined by the per-feature style and the default color.
|
|
206
|
+
*
|
|
207
|
+
* @param feature The target feature
|
|
208
|
+
* @param layer The layer it belongs to (used to evaluate style rules; no rules when omitted)
|
|
209
|
+
*/
|
|
210
|
+
getPolygonStyles(feature, layer) {
|
|
211
|
+
const defaultFillColor = this.featureStyle.polygon.fill.color;
|
|
212
|
+
const defaultStrokeStyle = this.featureStyle.polygon.stroke;
|
|
213
|
+
const style = this.resolveStyle(feature, layer, 'fill');
|
|
214
|
+
if (!style) {
|
|
215
|
+
return { fillColor: defaultFillColor, strokeStyle: defaultStrokeStyle };
|
|
216
|
+
}
|
|
217
|
+
// Apply fillOpacity when it is specified, even if fillColor is not set
|
|
218
|
+
// fillOpacity is set directly rather than multiplied into the default alpha value
|
|
219
|
+
// When fillOpacity is not set, the default polygon fill alpha (from the config) is used.
|
|
220
|
+
// So that a feature with only fillColor specified does not become opaque (alpha 1),
|
|
221
|
+
// it follows the alpha component of the default color rather than a hardcoded 1.
|
|
222
|
+
const fillColor = style.fillColor
|
|
223
|
+
? hexToColor(style.fillColor, style.fillOpacity ?? defaultFillColor[3])
|
|
224
|
+
: style.fillOpacity !== undefined
|
|
225
|
+
? [defaultFillColor[0], defaultFillColor[1], defaultFillColor[2], style.fillOpacity]
|
|
226
|
+
: defaultFillColor;
|
|
227
|
+
// Apply strokeOpacity when it is specified, even if strokeColor is not set
|
|
228
|
+
// strokeOpacity is set directly rather than multiplied into the default alpha value
|
|
229
|
+
const strokeColor = style.strokeColor
|
|
230
|
+
? hexToColor(style.strokeColor, style.strokeOpacity ?? 1)
|
|
231
|
+
: style.strokeOpacity !== undefined
|
|
232
|
+
? [
|
|
233
|
+
defaultStrokeStyle.color[0],
|
|
234
|
+
defaultStrokeStyle.color[1],
|
|
235
|
+
defaultStrokeStyle.color[2],
|
|
236
|
+
style.strokeOpacity,
|
|
237
|
+
]
|
|
238
|
+
: defaultStrokeStyle.color;
|
|
239
|
+
const strokeStyle = {
|
|
240
|
+
...defaultStrokeStyle,
|
|
241
|
+
color: strokeColor,
|
|
242
|
+
width: style.strokeWidth ?? defaultStrokeStyle.width,
|
|
243
|
+
// The opacity is already folded into color, so opacity is set to 1
|
|
244
|
+
opacity: 1,
|
|
245
|
+
lineStyle: style.lineStyle ?? defaultStrokeStyle.lineStyle,
|
|
246
|
+
};
|
|
247
|
+
return { fillColor, strokeStyle };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Draw a Point shape
|
|
251
|
+
*/
|
|
252
|
+
drawPointShape(coord, style, zoom, featureId) {
|
|
253
|
+
this.pointShapeRenderer.draw(coord, style, zoom, featureId);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Draw the stroke of a LineString (computed on the GPU)
|
|
257
|
+
*/
|
|
258
|
+
drawLineStringStroke(coords, style, projectionData, zoom, createdZoom, featureId) {
|
|
259
|
+
if (coords.length < 2)
|
|
260
|
+
return;
|
|
261
|
+
// Compute widthPixels = style.width * 2^(zoom - createdZoom) on the GPU
|
|
262
|
+
this.sdfLineRenderer.draw(coords, style, { widthUnit: 'pixels', closed: false, featureId, createdZoom }, zoom, projectionData);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Draw a Polygon with a fill and a stroke
|
|
266
|
+
*/
|
|
267
|
+
drawPolygonWithStroke(rings, fillColor, strokeStyle, projectionData, zoom, createdZoom, featureId) {
|
|
268
|
+
if (rings.length === 0)
|
|
269
|
+
return;
|
|
270
|
+
const outerRing = rings[0];
|
|
271
|
+
if (outerRing.length < 3)
|
|
272
|
+
return;
|
|
273
|
+
// Fill (inner rings are punched out as holes)
|
|
274
|
+
if (fillColor[3] > 0) {
|
|
275
|
+
this.fillShaderManager.drawPolygonRings(rings, fillColor, projectionData, zoom);
|
|
276
|
+
}
|
|
277
|
+
// Stroke (computed on the GPU): the outer ring and each inner ring are drawn as closed paths
|
|
278
|
+
if (strokeStyle.opacity > 0) {
|
|
279
|
+
for (let i = 0; i < rings.length; i++) {
|
|
280
|
+
const ring = rings[i];
|
|
281
|
+
if (ring.length < 3)
|
|
282
|
+
continue;
|
|
283
|
+
this.sdfLineRenderer.drawClosed(ring, strokeStyle, {
|
|
284
|
+
widthUnit: 'pixels',
|
|
285
|
+
featureId: featureId ? `${featureId}:stroke:${i}` : undefined,
|
|
286
|
+
createdZoom,
|
|
287
|
+
}, zoom, projectionData);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Draw a Circle
|
|
293
|
+
*/
|
|
294
|
+
drawCircle(feature, projectionData, zoom, layer, opacity = 1) {
|
|
295
|
+
const center = feature.coordinates;
|
|
296
|
+
const radiusMeters = getCircleRadius(feature);
|
|
297
|
+
if (!radiusMeters || radiusMeters <= 0)
|
|
298
|
+
return;
|
|
299
|
+
const createdZoom = getCreatedZoom(feature) ?? zoom;
|
|
300
|
+
const { fillColor, strokeStyle } = polygonWithOpacity(this.getPolygonStyles(feature, layer), opacity);
|
|
301
|
+
// Convert the circle into a polygon
|
|
302
|
+
const circleCoords = generateCirclePolygon(center, radiusMeters);
|
|
303
|
+
// Fill
|
|
304
|
+
if (fillColor[3] > 0) {
|
|
305
|
+
this.fillShaderManager.drawPolygon(circleCoords, fillColor, projectionData, zoom);
|
|
306
|
+
}
|
|
307
|
+
// Stroke
|
|
308
|
+
if (strokeStyle.opacity > 0) {
|
|
309
|
+
this.sdfLineRenderer.drawClosed(circleCoords, strokeStyle, {
|
|
310
|
+
widthUnit: 'pixels',
|
|
311
|
+
featureId: feature.id ? `${feature.id}:stroke` : undefined,
|
|
312
|
+
createdZoom,
|
|
313
|
+
}, zoom, projectionData);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Release the resources
|
|
318
|
+
*/
|
|
319
|
+
dispose() {
|
|
320
|
+
this.fillShaderManager.dispose();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/** A point style with an opacity factor multiplied in (the same object at 1) */
|
|
324
|
+
function pointWithOpacity(style, opacity) {
|
|
325
|
+
if (opacity === 1)
|
|
326
|
+
return style;
|
|
327
|
+
return {
|
|
328
|
+
...style,
|
|
329
|
+
fillOpacity: style.fillOpacity * opacity,
|
|
330
|
+
strokeOpacity: style.strokeOpacity * opacity,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/** A stroke style with an opacity factor multiplied in (the same object at 1) */
|
|
334
|
+
function strokeWithOpacity(style, opacity) {
|
|
335
|
+
return opacity === 1 ? style : { ...style, opacity: style.opacity * opacity };
|
|
336
|
+
}
|
|
337
|
+
/** Polygon styles with an opacity factor multiplied into the fill and the outline */
|
|
338
|
+
function polygonWithOpacity(styles, opacity) {
|
|
339
|
+
if (opacity === 1)
|
|
340
|
+
return styles;
|
|
341
|
+
const { fillColor, strokeStyle } = styles;
|
|
342
|
+
return {
|
|
343
|
+
fillColor: [fillColor[0], fillColor[1], fillColor[2], fillColor[3] * opacity],
|
|
344
|
+
strokeStyle: strokeWithOpacity(strokeStyle, opacity),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|