@deck.gl-community/editable-layers 9.0.0-alpha.1 → 9.0.2
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/LICENSE +19 -0
- package/README.md +2 -81
- package/dist/constants.js +4 -1
- package/dist/edit-modes/composite-mode.d.ts +1 -1
- package/dist/edit-modes/composite-mode.js +4 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-90degree-polygon-mode.js +29 -24
- package/dist/edit-modes/draw-circle-by-diameter-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-by-diameter-mode.js +7 -4
- package/dist/edit-modes/draw-circle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-circle-from-center-mode.js +7 -4
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-by-bounding-box-mode.js +3 -0
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-ellipse-using-three-points-mode.js +3 -0
- package/dist/edit-modes/draw-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/draw-line-string-mode.js +19 -16
- package/dist/edit-modes/draw-point-mode.d.ts +1 -1
- package/dist/edit-modes/draw-point-mode.js +7 -4
- package/dist/edit-modes/draw-polygon-by-dragging-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-by-dragging-mode.js +10 -5
- package/dist/edit-modes/draw-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/draw-polygon-mode.js +20 -16
- package/dist/edit-modes/draw-rectangle-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-mode.js +3 -0
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.d.ts +1 -1
- package/dist/edit-modes/draw-rectangle-using-three-points-mode.js +8 -5
- package/dist/edit-modes/draw-square-from-center-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-from-center-mode.js +3 -0
- package/dist/edit-modes/draw-square-mode.d.ts +1 -1
- package/dist/edit-modes/draw-square-mode.js +3 -0
- package/dist/edit-modes/duplicate-mode.d.ts +1 -1
- package/dist/edit-modes/duplicate-mode.js +3 -0
- package/dist/edit-modes/edit-mode.js +3 -1
- package/dist/edit-modes/elevation-mode.d.ts +2 -2
- package/dist/edit-modes/elevation-mode.js +8 -5
- package/dist/edit-modes/extend-line-string-mode.d.ts +1 -1
- package/dist/edit-modes/extend-line-string-mode.js +9 -6
- package/dist/edit-modes/extrude-mode.d.ts +1 -1
- package/dist/edit-modes/extrude-mode.js +10 -7
- package/dist/edit-modes/geojson-edit-mode.d.ts +1 -1
- package/dist/edit-modes/geojson-edit-mode.js +18 -15
- package/dist/edit-modes/immutable-feature-collection.d.ts +2 -1
- package/dist/edit-modes/immutable-feature-collection.js +25 -20
- package/dist/edit-modes/measure-angle-mode.d.ts +1 -1
- package/dist/edit-modes/measure-angle-mode.js +8 -8
- package/dist/edit-modes/measure-area-mode.d.ts +1 -1
- package/dist/edit-modes/measure-area-mode.js +7 -5
- package/dist/edit-modes/measure-distance-mode.d.ts +1 -1
- package/dist/edit-modes/measure-distance-mode.js +17 -14
- package/dist/edit-modes/modify-mode.d.ts +1 -1
- package/dist/edit-modes/modify-mode.js +17 -14
- package/dist/edit-modes/resize-circle-mode.d.ts +2 -2
- package/dist/edit-modes/resize-circle-mode.js +3 -1
- package/dist/edit-modes/rotate-mode.d.ts +1 -1
- package/dist/edit-modes/rotate-mode.js +8 -5
- package/dist/edit-modes/scale-mode.d.ts +1 -1
- package/dist/edit-modes/scale-mode.js +8 -5
- package/dist/edit-modes/snappable-mode.d.ts +1 -1
- package/dist/edit-modes/snappable-mode.js +8 -5
- package/dist/edit-modes/split-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/split-polygon-mode.js +12 -9
- package/dist/edit-modes/three-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/three-click-polygon-mode.js +9 -6
- package/dist/edit-modes/transform-mode.d.ts +1 -1
- package/dist/edit-modes/transform-mode.js +4 -1
- package/dist/edit-modes/translate-mode.d.ts +1 -1
- package/dist/edit-modes/translate-mode.js +7 -4
- package/dist/edit-modes/two-click-polygon-mode.d.ts +1 -1
- package/dist/edit-modes/two-click-polygon-mode.js +9 -6
- package/dist/edit-modes/types.d.ts +1 -1
- package/dist/edit-modes/types.js +3 -0
- package/dist/edit-modes/utils.d.ts +1 -1
- package/dist/edit-modes/utils.js +21 -19
- package/dist/edit-modes/view-mode.js +3 -0
- package/dist/editable-layers/editable-geojson-layer.d.ts +4 -4
- package/dist/editable-layers/editable-geojson-layer.js +27 -26
- package/dist/editable-layers/editable-h3-cluster-layer.d.ts +2 -2
- package/dist/editable-layers/editable-h3-cluster-layer.js +6 -3
- package/dist/editable-layers/editable-layer.d.ts +5 -5
- package/dist/editable-layers/editable-layer.js +18 -15
- package/dist/editable-layers/editable-path-layer.d.ts +1 -1
- package/dist/editable-layers/editable-path-layer.js +10 -7
- package/dist/editable-layers/elevated-edit-handle-layer.d.ts +1 -1
- package/dist/editable-layers/elevated-edit-handle-layer.js +6 -3
- package/dist/editable-layers/junction-scatterplot-layer.d.ts +2 -2
- package/dist/editable-layers/junction-scatterplot-layer.js +10 -7
- package/dist/editable-layers/selection-layer.d.ts +1 -1
- package/dist/editable-layers/selection-layer.js +5 -2
- package/dist/index.cjs +65 -537
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +19 -20
- package/dist/index.js +20 -18
- package/dist/lib/constants.js +3 -0
- package/dist/lib/deck-renderer/deck-cache.d.ts +1 -1
- package/dist/lib/deck-renderer/deck-cache.js +1 -1
- package/dist/lib/deck-renderer/deck-drawer.d.ts +2 -3
- package/dist/lib/deck-renderer/deck-drawer.js +12 -12
- package/dist/lib/feature.d.ts +4 -4
- package/dist/lib/feature.js +4 -1
- package/dist/lib/layer-mouse-event.d.ts +2 -2
- package/dist/lib/layer-mouse-event.js +4 -1
- package/dist/lib/layers/junctions-layer.d.ts +4 -4
- package/dist/lib/layers/junctions-layer.js +10 -7
- package/dist/lib/layers/segments-layer.d.ts +4 -4
- package/dist/lib/layers/segments-layer.js +11 -8
- package/dist/lib/layers/texts-layer.d.ts +3 -3
- package/dist/lib/layers/texts-layer.js +8 -5
- package/dist/lib/math.d.ts +1 -1
- package/dist/lib/math.js +3 -0
- package/dist/lib/{nebula.d.ts → nebula-core.d.ts} +2 -2
- package/dist/lib/{nebula.js → nebula-core.js} +7 -4
- package/dist/lib/nebula-layer.d.ts +2 -2
- package/dist/lib/nebula-layer.js +4 -1
- package/dist/lib/style.js +5 -2
- package/dist/mode-handlers/composite-mode-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-90degree-polygon-handler.js +13 -10
- package/dist/mode-handlers/draw-circle-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-circle-from-center-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-by-bounding-box-handler.js +3 -0
- package/dist/mode-handlers/draw-ellipse-using-three-points-handler.js +5 -2
- package/dist/mode-handlers/draw-line-string-handler.js +7 -4
- package/dist/mode-handlers/draw-point-handler.js +4 -1
- package/dist/mode-handlers/draw-polygon-handler.d.ts +1 -1
- package/dist/mode-handlers/draw-polygon-handler.js +10 -7
- package/dist/mode-handlers/draw-rectangle-handler.js +3 -0
- package/dist/mode-handlers/draw-rectangle-using-three-points-handler.js +11 -8
- package/dist/mode-handlers/duplicate-handler.js +3 -0
- package/dist/mode-handlers/elevation-handler.d.ts +2 -2
- package/dist/mode-handlers/elevation-handler.js +8 -5
- package/dist/mode-handlers/extrude-handler.js +10 -7
- package/dist/mode-handlers/mode-handler.d.ts +1 -1
- package/dist/mode-handlers/mode-handler.js +17 -14
- package/dist/mode-handlers/modify-handler.d.ts +2 -2
- package/dist/mode-handlers/modify-handler.js +18 -15
- package/dist/mode-handlers/rotate-handler.d.ts +1 -1
- package/dist/mode-handlers/rotate-handler.js +4 -1
- package/dist/mode-handlers/scale-handler.d.ts +1 -1
- package/dist/mode-handlers/scale-handler.js +5 -2
- package/dist/mode-handlers/snappable-handler.d.ts +1 -1
- package/dist/mode-handlers/snappable-handler.js +6 -3
- package/dist/mode-handlers/split-polygon-handler.js +11 -8
- package/dist/mode-handlers/three-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/translate-handler.d.ts +1 -1
- package/dist/mode-handlers/translate-handler.js +4 -1
- package/dist/mode-handlers/two-click-polygon-handler.js +3 -0
- package/dist/mode-handlers/view-handler.d.ts +1 -1
- package/dist/mode-handlers/view-handler.js +3 -0
- package/dist/shaderlib/color/color.d.ts +7 -6
- package/dist/shaderlib/color/color.js +7 -4
- package/dist/shaderlib/utils/utils.d.ts +2 -2
- package/dist/shaderlib/utils/utils.js +5 -2
- package/dist/{curve-utils.js → utils/curve-utils.js} +7 -4
- package/dist/{geojson-types.d.ts → utils/geojson-types.d.ts} +2 -25
- package/dist/utils/geojson-types.js +4 -0
- package/dist/{memoize.d.ts → utils/memoize.d.ts} +1 -1
- package/dist/{memoize.js → utils/memoize.js} +4 -1
- package/dist/{translateFromCenter.js → utils/translate-from-center.js} +4 -1
- package/dist/utils/types.js +4 -0
- package/dist/{utils.js → utils/utils.js} +8 -6
- package/package.json +10 -10
- package/src/constants.ts +5 -1
- package/src/edit-modes/composite-mode.ts +9 -5
- package/src/edit-modes/draw-90degree-polygon-mode.ts +38 -34
- package/src/edit-modes/draw-circle-by-diameter-mode.ts +16 -12
- package/src/edit-modes/draw-circle-from-center-mode.ts +15 -11
- package/src/edit-modes/draw-ellipse-by-bounding-box-mode.ts +8 -4
- package/src/edit-modes/draw-ellipse-using-three-points-mode.ts +9 -5
- package/src/edit-modes/draw-line-string-mode.ts +29 -25
- package/src/edit-modes/draw-point-mode.ts +13 -9
- package/src/edit-modes/draw-polygon-by-dragging-mode.ts +16 -16
- package/src/edit-modes/draw-polygon-mode.ts +28 -23
- package/src/edit-modes/draw-rectangle-from-center-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-mode.ts +6 -2
- package/src/edit-modes/draw-rectangle-using-three-points-mode.ts +12 -8
- package/src/edit-modes/draw-square-from-center-mode.ts +7 -3
- package/src/edit-modes/draw-square-mode.ts +7 -3
- package/src/edit-modes/duplicate-mode.ts +7 -3
- package/src/edit-modes/edit-mode.ts +5 -1
- package/src/edit-modes/elevation-mode.ts +13 -9
- package/src/edit-modes/extend-line-string-mode.ts +16 -12
- package/src/edit-modes/extrude-mode.ts +22 -18
- package/src/edit-modes/geojson-edit-mode.ts +37 -33
- package/src/edit-modes/immutable-feature-collection.ts +28 -22
- package/src/edit-modes/measure-angle-mode.ts +66 -59
- package/src/edit-modes/measure-area-mode.ts +13 -10
- package/src/edit-modes/measure-distance-mode.ts +37 -33
- package/src/edit-modes/modify-mode.ts +36 -32
- package/src/edit-modes/resize-circle-mode.ts +8 -5
- package/src/edit-modes/rotate-mode.ts +22 -18
- package/src/edit-modes/scale-mode.ts +29 -23
- package/src/edit-modes/snappable-mode.ts +19 -15
- package/src/edit-modes/split-polygon-mode.ts +25 -21
- package/src/edit-modes/three-click-polygon-mode.ts +15 -11
- package/src/edit-modes/transform-mode.ts +15 -11
- package/src/edit-modes/translate-mode.ts +15 -11
- package/src/edit-modes/two-click-polygon-mode.ts +15 -11
- package/src/edit-modes/types.ts +5 -1
- package/src/edit-modes/utils.ts +33 -30
- package/src/edit-modes/view-mode.ts +5 -1
- package/src/editable-layers/editable-geojson-layer.ts +44 -41
- package/src/editable-layers/editable-h3-cluster-layer.ts +17 -14
- package/src/editable-layers/editable-layer.ts +42 -32
- package/src/editable-layers/editable-path-layer.ts +12 -8
- package/src/editable-layers/elevated-edit-handle-layer.ts +11 -7
- package/src/editable-layers/junction-scatterplot-layer.ts +15 -11
- package/src/editable-layers/selection-layer.ts +11 -7
- package/src/index.ts +68 -65
- package/src/lib/constants.ts +4 -0
- package/src/lib/deck-renderer/deck-cache.ts +1 -1
- package/src/lib/deck-renderer/deck-drawer.ts +28 -28
- package/src/lib/feature.ts +7 -3
- package/src/lib/layer-mouse-event.ts +7 -6
- package/src/lib/layers/junctions-layer.ts +14 -10
- package/src/lib/layers/segments-layer.ts +24 -20
- package/src/lib/layers/texts-layer.ts +18 -14
- package/src/lib/math.ts +5 -1
- package/src/lib/{nebula.ts → nebula-core.ts} +8 -4
- package/src/lib/nebula-layer.ts +9 -5
- package/src/lib/style.ts +6 -2
- package/src/mode-handlers/composite-mode-handler.ts +6 -6
- package/src/mode-handlers/draw-90degree-polygon-handler.ts +22 -18
- package/src/mode-handlers/draw-circle-by-bounding-box-handler.ts +10 -6
- package/src/mode-handlers/draw-circle-from-center-handler.ts +10 -6
- package/src/mode-handlers/draw-ellipse-by-bounding-box-handler.ts +9 -5
- package/src/mode-handlers/draw-ellipse-using-three-points-handler.ts +12 -8
- package/src/mode-handlers/draw-line-string-handler.ts +12 -8
- package/src/mode-handlers/draw-point-handler.ts +9 -5
- package/src/mode-handlers/draw-polygon-handler.ts +16 -12
- package/src/mode-handlers/draw-rectangle-handler.ts +8 -4
- package/src/mode-handlers/draw-rectangle-using-three-points-handler.ts +17 -13
- package/src/mode-handlers/duplicate-handler.ts +8 -4
- package/src/mode-handlers/elevation-handler.ts +14 -10
- package/src/mode-handlers/extrude-handler.ts +15 -11
- package/src/mode-handlers/mode-handler.ts +26 -28
- package/src/mode-handlers/modify-handler.ts +29 -25
- package/src/mode-handlers/rotate-handler.ts +13 -17
- package/src/mode-handlers/scale-handler.ts +13 -13
- package/src/mode-handlers/snappable-handler.ts +28 -24
- package/src/mode-handlers/split-polygon-handler.ts +22 -18
- package/src/mode-handlers/three-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/translate-handler.ts +12 -8
- package/src/mode-handlers/two-click-polygon-handler.ts +6 -2
- package/src/mode-handlers/view-handler.ts +7 -3
- package/src/shaderlib/color/color.ts +10 -5
- package/src/shaderlib/utils/utils.ts +6 -2
- package/src/{curve-utils.ts → utils/curve-utils.ts} +11 -7
- package/src/{geojson-types.ts → utils/geojson-types.ts} +16 -31
- package/src/{memoize.ts → utils/memoize.ts} +5 -1
- package/src/{translateFromCenter.ts → utils/translate-from-center.ts} +8 -4
- package/src/{types.ts → utils/types.ts} +4 -0
- package/src/{utils.ts → utils/utils.ts} +14 -11
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.d.ts +0 -4
- package/dist/editable-layers/path-marker-layer/arrow-2d-geometry.js +0 -55
- package/dist/editable-layers/path-marker-layer/create-path-markers.d.ts +0 -16
- package/dist/editable-layers/path-marker-layer/create-path-markers.js +0 -75
- package/dist/editable-layers/path-marker-layer/path-marker-layer.d.ts +0 -40
- package/dist/editable-layers/path-marker-layer/path-marker-layer.js +0 -121
- package/dist/editable-layers/path-marker-layer/polyline.d.ts +0 -18
- package/dist/editable-layers/path-marker-layer/polyline.js +0 -37
- package/dist/editable-layers/path-outline-layer/path-outline-layer.d.ts +0 -26
- package/dist/editable-layers/path-outline-layer/path-outline-layer.js +0 -106
- package/dist/geojson-types.js +0 -2
- package/dist/shaderlib/outline/outline.d.ts +0 -8
- package/dist/shaderlib/outline/outline.js +0 -97
- package/dist/types.js +0 -1
- package/src/editable-layers/path-marker-layer/arrow-2d-geometry.ts +0 -61
- package/src/editable-layers/path-marker-layer/create-path-markers.ts +0 -107
- package/src/editable-layers/path-marker-layer/path-marker-layer.ts +0 -179
- package/src/editable-layers/path-marker-layer/polyline.ts +0 -40
- package/src/editable-layers/path-outline-layer/path-outline-layer.ts +0 -147
- package/src/shaderlib/outline/outline.ts +0 -101
- /package/dist/{curve-utils.d.ts → utils/curve-utils.d.ts} +0 -0
- /package/dist/{translateFromCenter.d.ts → utils/translate-from-center.d.ts} +0 -0
- /package/dist/{types.d.ts → utils/types.d.ts} +0 -0
- /package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import {PolygonLayer} from '@deck.gl/layers';
|
|
2
|
+
import {point, polygon} from '@turf/helpers';
|
|
3
3
|
import turfBbox from '@turf/bbox';
|
|
4
4
|
import turfBboxPolygon from '@turf/bbox-polygon';
|
|
5
5
|
import turfBuffer from '@turf/buffer';
|
|
6
6
|
import turfDifference from '@turf/difference';
|
|
7
7
|
import turfDistance from '@turf/distance';
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import {Color} from '../../utils/types';
|
|
10
10
|
|
|
11
11
|
const POLYGON_LINE_COLOR = [0, 255, 0, 255];
|
|
12
12
|
const POLYGON_FILL_COLOR = [255, 255, 255, 90];
|
|
@@ -20,10 +20,10 @@ const LAYER_ID_PICK = 'DeckDrawerPick';
|
|
|
20
20
|
export const SELECTION_TYPE = {
|
|
21
21
|
NONE: null,
|
|
22
22
|
RECTANGLE: 'rectangle',
|
|
23
|
-
POLYGON: 'polygon'
|
|
23
|
+
POLYGON: 'polygon'
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
export
|
|
26
|
+
export class DeckDrawer {
|
|
27
27
|
nebula: Record<string, any>;
|
|
28
28
|
usePolygon: boolean;
|
|
29
29
|
validPolygon: boolean;
|
|
@@ -47,14 +47,14 @@ export default class DeckDrawer {
|
|
|
47
47
|
|
|
48
48
|
_selectFromPickingInfos(pickingInfos: Record<string, any>[]) {
|
|
49
49
|
const objects = pickingInfos.map(
|
|
50
|
-
({
|
|
50
|
+
({layer, index, object}) =>
|
|
51
51
|
object.original || layer.props.nebulaLayer.deckCache.originals[index]
|
|
52
52
|
);
|
|
53
53
|
this.nebula.props.onSelection(objects);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
_getBoundingBox(): Record<string, any> {
|
|
57
|
-
const {
|
|
57
|
+
const {mousePoints} = this;
|
|
58
58
|
const allX = mousePoints.map((mousePoint) => mousePoint[0]);
|
|
59
59
|
const allY = mousePoints.map((mousePoint) => mousePoint[1]);
|
|
60
60
|
const x = Math.min(...allX);
|
|
@@ -62,7 +62,7 @@ export default class DeckDrawer {
|
|
|
62
62
|
const maxX = Math.max(...allX);
|
|
63
63
|
const maxY = Math.max(...allY);
|
|
64
64
|
|
|
65
|
-
return {
|
|
65
|
+
return {x, y, width: maxX - x, height: maxY - y};
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
_selectRectangleObjects() {
|
|
@@ -75,7 +75,7 @@ export default class DeckDrawer {
|
|
|
75
75
|
y: Math.min(y1, y2),
|
|
76
76
|
width: Math.abs(x2 - x1),
|
|
77
77
|
height: Math.abs(y2 - y1),
|
|
78
|
-
layerIds: this._getLayerIds()
|
|
78
|
+
layerIds: this._getLayerIds()
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
this._selectFromPickingInfos(pickingInfos);
|
|
@@ -84,14 +84,14 @@ export default class DeckDrawer {
|
|
|
84
84
|
_selectPolygonObjects() {
|
|
85
85
|
const pickingInfos = this.nebula.deckgl.pickObjects({
|
|
86
86
|
...this._getBoundingBox(),
|
|
87
|
-
layerIds: [LAYER_ID_PICK, ...this._getLayerIds()]
|
|
87
|
+
layerIds: [LAYER_ID_PICK, ...this._getLayerIds()]
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
this._selectFromPickingInfos(pickingInfos.filter((item) => item.layer.id !== LAYER_ID_PICK));
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
_getMousePosFromEvent(event: Record<string, any>): [number, number] {
|
|
94
|
-
const {
|
|
94
|
+
const {offsetX, offsetY} = event;
|
|
95
95
|
return [offsetX, offsetY];
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -100,7 +100,7 @@ export default class DeckDrawer {
|
|
|
100
100
|
event: Record<string, any>,
|
|
101
101
|
lngLat: [number, number],
|
|
102
102
|
selectionType: number
|
|
103
|
-
): {
|
|
103
|
+
): {redraw: boolean; deactivate: boolean} {
|
|
104
104
|
// capture all events (mouse-up is needed to prevent us stuck in moving map)
|
|
105
105
|
if (event.type !== 'mouseup') event.stopPropagation();
|
|
106
106
|
|
|
@@ -110,7 +110,7 @@ export default class DeckDrawer {
|
|
|
110
110
|
let redraw = false;
|
|
111
111
|
let deactivate = false;
|
|
112
112
|
|
|
113
|
-
const {
|
|
113
|
+
const {usePolygon, landPoints, mousePoints} = this;
|
|
114
114
|
|
|
115
115
|
if (event.type === 'mousedown') {
|
|
116
116
|
if (usePolygon && landPoints.length) {
|
|
@@ -153,7 +153,7 @@ export default class DeckDrawer {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
return {
|
|
156
|
+
return {redraw, deactivate};
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
reset() {
|
|
@@ -180,18 +180,18 @@ export default class DeckDrawer {
|
|
|
180
180
|
[x1, y2],
|
|
181
181
|
[x2, y2],
|
|
182
182
|
[x2, y1],
|
|
183
|
-
[x1, y1]
|
|
183
|
+
[x1, y1]
|
|
184
184
|
].map((mousePos) => this.nebula.unprojectMousePosition(mousePos));
|
|
185
185
|
data.push({
|
|
186
186
|
polygon: selPolygon,
|
|
187
187
|
lineColor: POLYGON_LINE_COLOR,
|
|
188
|
-
fillColor: POLYGON_FILL_COLOR
|
|
188
|
+
fillColor: POLYGON_FILL_COLOR
|
|
189
189
|
});
|
|
190
190
|
} else if (this.usePolygon && this.landPoints.length) {
|
|
191
191
|
data.push({
|
|
192
192
|
polygon: this.landPoints,
|
|
193
193
|
lineColor: POLYGON_LINE_COLOR,
|
|
194
|
-
fillColor: POLYGON_FILL_COLOR
|
|
194
|
+
fillColor: POLYGON_FILL_COLOR
|
|
195
195
|
});
|
|
196
196
|
|
|
197
197
|
// Hack: use a polygon to hide the outside, because pickObjects()
|
|
@@ -206,7 +206,7 @@ export default class DeckDrawer {
|
|
|
206
206
|
bigPolygon = turfDifference(bigBuffer, landPointsPoly);
|
|
207
207
|
dataPick.push({
|
|
208
208
|
polygon: bigPolygon.geometry.coordinates,
|
|
209
|
-
fillColor: [0, 0, 0, 1]
|
|
209
|
+
fillColor: [0, 0, 0, 1]
|
|
210
210
|
});
|
|
211
211
|
this.validPolygon = true;
|
|
212
212
|
} catch (e) {
|
|
@@ -221,15 +221,15 @@ export default class DeckDrawer {
|
|
|
221
221
|
data.push({
|
|
222
222
|
polygon: this._makeStartPointHighlight(this.landPoints[0]),
|
|
223
223
|
lineColor: [0, 0, 0, 0],
|
|
224
|
-
fillColor: POLYGON_LINE_COLOR
|
|
224
|
+
fillColor: POLYGON_LINE_COLOR
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
// Hack to make the PolygonLayer() stay active,
|
|
229
229
|
// otherwise it takes 3 seconds (!) to init!
|
|
230
230
|
// TODO: fix this
|
|
231
|
-
data.push({
|
|
232
|
-
dataPick.push({
|
|
231
|
+
data.push({polygon: [[0, 0]]});
|
|
232
|
+
dataPick.push({polygon: [[0, 0]]});
|
|
233
233
|
|
|
234
234
|
return [
|
|
235
235
|
new PolygonLayer({
|
|
@@ -243,21 +243,21 @@ export default class DeckDrawer {
|
|
|
243
243
|
lineDashJustified: true,
|
|
244
244
|
// TODO(v9) Add extension
|
|
245
245
|
// getLineDashArray: (x) => POLYGON_DASHES,
|
|
246
|
-
getLineColor: (obj: {
|
|
247
|
-
getFillColor: (obj: {
|
|
248
|
-
getPolygon: (o: {
|
|
246
|
+
getLineColor: (obj: {lineColor?: Color}) => obj.lineColor || [0, 0, 0, 255],
|
|
247
|
+
getFillColor: (obj: {fillColor?: Color}) => obj.fillColor || [0, 0, 0, 255],
|
|
248
|
+
getPolygon: (o: {polygon?: any}) => o.polygon
|
|
249
249
|
}),
|
|
250
250
|
new PolygonLayer({
|
|
251
251
|
id: LAYER_ID_PICK,
|
|
252
252
|
data: dataPick,
|
|
253
|
-
getLineColor: (obj: {
|
|
254
|
-
getFillColor: (obj: {
|
|
253
|
+
getLineColor: (obj: {lineColor?: Color}) => obj.lineColor || [0, 0, 0, 255],
|
|
254
|
+
getFillColor: (obj: {fillColor?: Color}) => obj.fillColor || [0, 0, 0, 255],
|
|
255
255
|
fp64: false,
|
|
256
256
|
opacity: 1.0,
|
|
257
257
|
stroked: false,
|
|
258
258
|
pickable: true,
|
|
259
|
-
getPolygon: (o: {
|
|
260
|
-
})
|
|
259
|
+
getPolygon: (o: {polygon?: any}) => o.polygon
|
|
260
|
+
})
|
|
261
261
|
];
|
|
262
262
|
}
|
|
263
263
|
}
|
package/src/lib/feature.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
2
4
|
|
|
3
|
-
import {
|
|
5
|
+
import {Feature as GeoJson} from '../utils/geojson-types';
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
import {Style} from '../utils/types';
|
|
8
|
+
|
|
9
|
+
export class Feature {
|
|
6
10
|
// geo json coordinates
|
|
7
11
|
geoJson: GeoJson;
|
|
8
12
|
style: Style;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
import {Position} from '../utils/geojson-types';
|
|
6
|
+
|
|
7
|
+
export class LayerMouseEvent {
|
|
4
8
|
canceled: boolean = false;
|
|
5
9
|
// original item that this event is related to
|
|
6
10
|
data: Record<string, any>;
|
|
@@ -13,10 +17,7 @@ export default class LayerMouseEvent {
|
|
|
13
17
|
// reference to nebula
|
|
14
18
|
nebula: Record<string, any>;
|
|
15
19
|
|
|
16
|
-
constructor(
|
|
17
|
-
nativeEvent: MouseEvent,
|
|
18
|
-
{ data, groundPoint, nebula, metadata }: Record<string, any>
|
|
19
|
-
) {
|
|
20
|
+
constructor(nativeEvent: MouseEvent, {data, groundPoint, nebula, metadata}: Record<string, any>) {
|
|
20
21
|
this.nativeEvent = nativeEvent;
|
|
21
22
|
|
|
22
23
|
this.data = data;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import JunctionScatterplotLayer from '../../editable-layers/junction-scatterplot-layer';
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
import {NebulaLayer} from '../nebula-layer';
|
|
6
|
+
import {toDeckColor} from '../../utils/utils';
|
|
7
|
+
import {DeckCache} from '../deck-renderer/deck-cache';
|
|
8
|
+
import {JunctionScatterplotLayer} from '../../editable-layers/junction-scatterplot-layer';
|
|
9
|
+
|
|
10
|
+
export class JunctionsLayer extends NebulaLayer {
|
|
7
11
|
deckCache: DeckCache<any, any>;
|
|
8
12
|
|
|
9
13
|
constructor(config: Record<string, any>) {
|
|
@@ -12,9 +16,9 @@ export default class JunctionsLayer extends NebulaLayer {
|
|
|
12
16
|
this.enablePicking = true;
|
|
13
17
|
}
|
|
14
18
|
|
|
15
|
-
render({
|
|
19
|
+
render({nebula}: Record<string, any>) {
|
|
16
20
|
const defaultColor: [number, number, number, number] = [0x0, 0x0, 0x0, 0xff];
|
|
17
|
-
const {
|
|
21
|
+
const {objects, updateTrigger} = this.deckCache;
|
|
18
22
|
|
|
19
23
|
return new JunctionScatterplotLayer({
|
|
20
24
|
id: `junctions-${this.id}`,
|
|
@@ -31,10 +35,10 @@ export default class JunctionsLayer extends NebulaLayer {
|
|
|
31
35
|
depthCompare: 'always'
|
|
32
36
|
},
|
|
33
37
|
|
|
34
|
-
updateTriggers: {
|
|
38
|
+
updateTriggers: {all: updateTrigger},
|
|
35
39
|
|
|
36
|
-
// @ts-
|
|
37
|
-
nebulaLayer: this
|
|
40
|
+
// @ts-expect-error TODO
|
|
41
|
+
nebulaLayer: this
|
|
38
42
|
});
|
|
39
43
|
}
|
|
40
44
|
}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {ArrowStyles, DEFAULT_STYLE, MAX_ARROWS} from '../style';
|
|
6
|
+
import {NebulaLayer} from '../nebula-layer';
|
|
7
|
+
import {toDeckColor} from '../../utils/utils';
|
|
8
|
+
import {DeckCache} from '../deck-renderer/deck-cache';
|
|
9
|
+
import {PathMarkerLayer} from '@deck.gl-community/layers';
|
|
6
10
|
|
|
7
11
|
const NEBULA_TO_DECK_DIRECTIONS = {
|
|
8
|
-
[ArrowStyles.NONE]: {
|
|
9
|
-
[ArrowStyles.FORWARD]: {
|
|
10
|
-
[ArrowStyles.BACKWARD]: {
|
|
11
|
-
[ArrowStyles.BOTH]: {
|
|
12
|
+
[ArrowStyles.NONE]: {forward: false, backward: false},
|
|
13
|
+
[ArrowStyles.FORWARD]: {forward: true, backward: false},
|
|
14
|
+
[ArrowStyles.BACKWARD]: {forward: false, backward: true},
|
|
15
|
+
[ArrowStyles.BOTH]: {forward: true, backward: true}
|
|
12
16
|
};
|
|
13
17
|
|
|
14
|
-
export
|
|
18
|
+
export class SegmentsLayer extends NebulaLayer {
|
|
15
19
|
deckCache: DeckCache<any, any>;
|
|
16
20
|
noBlend: boolean;
|
|
17
21
|
highlightColor: [number, number, number, number];
|
|
@@ -41,7 +45,7 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
_calcMarkerPercentages(nf: Record<string, any>): number[] {
|
|
44
|
-
const {
|
|
48
|
+
const {arrowPercentages} = nf.style;
|
|
45
49
|
if (arrowPercentages) {
|
|
46
50
|
return arrowPercentages;
|
|
47
51
|
}
|
|
@@ -53,10 +57,10 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
53
57
|
return [[0.5], [0.33, 0.66], [0.25, 0.5, 0.75]][arrowCount - 1];
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
_getHighlightedObjectIndex({
|
|
57
|
-
const {
|
|
60
|
+
_getHighlightedObjectIndex({nebula}: Record<string, any>): number {
|
|
61
|
+
const {deckglMouseOverInfo} = nebula;
|
|
58
62
|
if (deckglMouseOverInfo) {
|
|
59
|
-
const {
|
|
63
|
+
const {originalLayer, index} = deckglMouseOverInfo;
|
|
60
64
|
if (originalLayer === this) {
|
|
61
65
|
return index;
|
|
62
66
|
}
|
|
@@ -66,9 +70,9 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
66
70
|
return -1;
|
|
67
71
|
}
|
|
68
72
|
|
|
69
|
-
render({
|
|
73
|
+
render({nebula}: Record<string, any>) {
|
|
70
74
|
const defaultColor: [number, number, number, number] = [0x0, 0x0, 0x0, 0xff];
|
|
71
|
-
const {
|
|
75
|
+
const {objects, updateTrigger} = this.deckCache;
|
|
72
76
|
|
|
73
77
|
return new PathMarkerLayer<any>({
|
|
74
78
|
id: `segments-${this.id}`,
|
|
@@ -81,7 +85,7 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
81
85
|
sizeScale: this.arrowSize || 6,
|
|
82
86
|
parameters: {
|
|
83
87
|
depthCompare: 'always',
|
|
84
|
-
blendColorOperation: this.noBlend ? undefined : 'max'
|
|
88
|
+
blendColorOperation: this.noBlend ? undefined : 'max'
|
|
85
89
|
},
|
|
86
90
|
getPath: (nf: any) => nf.geoJson.geometry.coordinates,
|
|
87
91
|
getColor: (nf: any) => toDeckColor(nf.style.lineColor, defaultColor),
|
|
@@ -91,9 +95,9 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
91
95
|
getMarkerColor: (nf: any) => toDeckColor(nf.style.arrowColor, defaultColor),
|
|
92
96
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
93
97
|
getMarkerPercentages: this._calcMarkerPercentages,
|
|
94
|
-
updateTriggers: {
|
|
98
|
+
updateTriggers: {all: updateTrigger},
|
|
95
99
|
|
|
96
|
-
highlightedObjectIndex: this._getHighlightedObjectIndex({
|
|
100
|
+
highlightedObjectIndex: this._getHighlightedObjectIndex({nebula}),
|
|
97
101
|
highlightColor: toDeckColor(this.highlightColor),
|
|
98
102
|
|
|
99
103
|
dashJustified: this.dashed,
|
|
@@ -102,7 +106,7 @@ export default class SegmentsLayer extends NebulaLayer {
|
|
|
102
106
|
this.markerLayerProps ||
|
|
103
107
|
(PathMarkerLayer as Record<string, any>).defaultProps.markerLayerProps,
|
|
104
108
|
|
|
105
|
-
nebulaLayer: this
|
|
109
|
+
nebulaLayer: this
|
|
106
110
|
});
|
|
107
111
|
}
|
|
108
112
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {TextLayer} from '@deck.gl/layers';
|
|
6
|
+
import {NebulaLayer} from '../nebula-layer';
|
|
7
|
+
import {toDeckColor} from '../../utils/utils';
|
|
8
|
+
import {PROJECTED_PIXEL_SIZE_MULTIPLIER} from '../constants';
|
|
9
|
+
import {DeckCache} from '../deck-renderer/deck-cache';
|
|
10
|
+
import {Color} from '../../utils/types';
|
|
11
|
+
|
|
12
|
+
export class TextsLayer extends NebulaLayer {
|
|
9
13
|
deckCache: DeckCache<any, any>;
|
|
10
14
|
|
|
11
15
|
constructor(config: Record<string, any>) {
|
|
@@ -13,11 +17,11 @@ export default class TextsLayer extends NebulaLayer {
|
|
|
13
17
|
this.deckCache = new DeckCache(config.getData, (data) => config.toNebulaFeature(data));
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
render({
|
|
20
|
+
render({nebula}: Record<string, any>): TextLayer {
|
|
17
21
|
const defaultColor: Color = [0x0, 0x0, 0x0, 0xff];
|
|
18
|
-
const {
|
|
22
|
+
const {objects, updateTrigger} = this.deckCache;
|
|
19
23
|
|
|
20
|
-
const {
|
|
24
|
+
const {zoom} = nebula.props.viewport;
|
|
21
25
|
|
|
22
26
|
return new TextLayer({
|
|
23
27
|
id: `texts-${this.id}`,
|
|
@@ -28,16 +32,16 @@ export default class TextsLayer extends NebulaLayer {
|
|
|
28
32
|
|
|
29
33
|
getText: (nf: any) => nf.style.text,
|
|
30
34
|
getPosition: (nf: any) => nf.geoJson.geometry.coordinates,
|
|
31
|
-
getColor: (nf: {
|
|
35
|
+
getColor: (nf: {style: {fillColor: Color}}) =>
|
|
32
36
|
toDeckColor(nf.style.fillColor) || defaultColor,
|
|
33
37
|
|
|
34
38
|
// TODO: layer should offer option to scale with zoom
|
|
35
39
|
sizeScale: 1 / Math.pow(2, 20 - zoom),
|
|
36
40
|
getSize: PROJECTED_PIXEL_SIZE_MULTIPLIER,
|
|
37
41
|
|
|
38
|
-
updateTriggers: {
|
|
42
|
+
updateTriggers: {all: updateTrigger},
|
|
39
43
|
|
|
40
|
-
nebulaLayer: this
|
|
44
|
+
nebulaLayer: this
|
|
41
45
|
});
|
|
42
46
|
}
|
|
43
47
|
}
|
package/src/lib/math.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {Position} from '../utils/geojson-types';
|
|
2
6
|
|
|
3
7
|
export function toDegree(radian: number): number {
|
|
4
8
|
return (radian * 180) / Math.PI;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import {EventEmitter} from 'eventemitter3';
|
|
2
6
|
import {WebMercatorViewport} from '@deck.gl/core';
|
|
3
7
|
|
|
4
|
-
import DeckDrawer from './deck-renderer/deck-drawer';
|
|
5
|
-
import LayerMouseEvent from './layer-mouse-event';
|
|
6
|
-
import NebulaLayer from './nebula-layer';
|
|
8
|
+
import {DeckDrawer} from './deck-renderer/deck-drawer';
|
|
9
|
+
import {LayerMouseEvent} from './layer-mouse-event';
|
|
10
|
+
import {NebulaLayer} from './nebula-layer';
|
|
7
11
|
|
|
8
12
|
const LOGGER_PREFIX = 'Nebula: ';
|
|
9
13
|
|
|
10
|
-
export
|
|
14
|
+
export class NebulaCore {
|
|
11
15
|
init(props: Record<string, any>) {
|
|
12
16
|
this.props = props;
|
|
13
17
|
this.wmViewport = new WebMercatorViewport(this.props.viewport);
|
package/src/lib/nebula-layer.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
|
-
import
|
|
5
|
+
import {EventEmitter} from 'eventemitter3';
|
|
6
|
+
import {v4} from 'uuid';
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
import {Feature} from './feature';
|
|
9
|
+
|
|
10
|
+
export class NebulaLayer extends EventEmitter {
|
|
7
11
|
getData: () => Record<string, any>[];
|
|
8
12
|
toNebulaFeature: (data: Record<string, any>) => Feature;
|
|
9
13
|
id: string;
|
|
@@ -15,7 +19,7 @@ export default class NebulaLayer extends EventEmitter {
|
|
|
15
19
|
enableSelection = false;
|
|
16
20
|
//
|
|
17
21
|
|
|
18
|
-
constructor({
|
|
22
|
+
constructor({getData, on, toNebulaFeature}: Record<string, any>) {
|
|
19
23
|
super();
|
|
20
24
|
this.id = v4();
|
|
21
25
|
this.getData = getData;
|
package/src/lib/style.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
// Describes the arrow style of polylines
|
|
2
6
|
export const ArrowStyles = {
|
|
3
7
|
NONE: 0,
|
|
4
8
|
FORWARD: 1,
|
|
5
9
|
BACKWARD: 2,
|
|
6
|
-
BOTH: 3
|
|
10
|
+
BOTH: 3
|
|
7
11
|
};
|
|
8
12
|
|
|
9
13
|
export const DEFAULT_ARROWS = 1;
|
|
@@ -18,5 +22,5 @@ export const DEFAULT_STYLE = {
|
|
|
18
22
|
lineWidthMeters: 5,
|
|
19
23
|
outlineRadiusMeters: 0,
|
|
20
24
|
opacity: 1,
|
|
21
|
-
zLevel: 0
|
|
25
|
+
zLevel: 0
|
|
22
26
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {FeatureCollection, Feature, Position} from '../utils/geojson-types';
|
|
2
2
|
import {
|
|
3
3
|
ClickEvent,
|
|
4
4
|
PointerMoveEvent,
|
|
5
5
|
StartDraggingEvent,
|
|
6
|
-
StopDraggingEvent
|
|
6
|
+
StopDraggingEvent
|
|
7
7
|
} from '../edit-modes/types';
|
|
8
|
-
import {
|
|
8
|
+
import {ModeHandler, EditAction, EditHandle} from './mode-handler';
|
|
9
9
|
|
|
10
10
|
// TODO edit-modes: delete handlers once EditMode fully implemented
|
|
11
11
|
export class CompositeModeHandler extends ModeHandler {
|
|
@@ -32,7 +32,7 @@ export class CompositeModeHandler extends ModeHandler {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
return result
|
|
35
|
+
return result;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
setFeatureCollection(featureCollection: FeatureCollection): void {
|
|
@@ -83,7 +83,7 @@ export class CompositeModeHandler extends ModeHandler {
|
|
|
83
83
|
) as any; // TODO
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
getCursor({
|
|
87
|
-
return this._coalesce((handler) => handler.getCursor({
|
|
86
|
+
getCursor({isDragging}: {isDragging: boolean}): string {
|
|
87
|
+
return this._coalesce((handler) => handler.getCursor({isDragging})) as any; // TODO
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
// deck.gl-community
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
1
5
|
import destination from '@turf/destination';
|
|
2
6
|
import bearing from '@turf/bearing';
|
|
3
7
|
import lineIntersect from '@turf/line-intersect';
|
|
4
8
|
import turfDistance from '@turf/distance';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
+
import {point, lineString} from '@turf/helpers';
|
|
10
|
+
import {Polygon, Position} from '../utils/geojson-types';
|
|
11
|
+
import {generatePointsParallelToLinePoints} from '../utils/utils';
|
|
12
|
+
import {ClickEvent, PointerMoveEvent} from '../edit-modes/types';
|
|
9
13
|
import {
|
|
10
14
|
EditAction,
|
|
11
15
|
EditHandle,
|
|
12
16
|
ModeHandler,
|
|
13
17
|
getPickedEditHandle,
|
|
14
|
-
getEditHandlesForGeometry
|
|
18
|
+
getEditHandlesForGeometry
|
|
15
19
|
} from './mode-handler';
|
|
16
20
|
|
|
17
21
|
// TODO edit-modes: delete handlers once EditMode fully implemented
|
|
@@ -35,12 +39,12 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
35
39
|
return handles;
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
handlePointerMove({
|
|
42
|
+
handlePointerMove({mapCoords}: PointerMoveEvent): {
|
|
39
43
|
editAction: EditAction | null | undefined;
|
|
40
44
|
cancelMapPan: boolean;
|
|
41
45
|
} {
|
|
42
46
|
const clickSequence = this.getClickSequence();
|
|
43
|
-
const result = {
|
|
47
|
+
const result = {editAction: null, cancelMapPan: false};
|
|
44
48
|
|
|
45
49
|
if (clickSequence.length === 0) {
|
|
46
50
|
// nothing to do yet
|
|
@@ -71,8 +75,8 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
71
75
|
type: 'Feature',
|
|
72
76
|
geometry: {
|
|
73
77
|
type: 'LineString',
|
|
74
|
-
coordinates: [...clickSequence, p3]
|
|
75
|
-
}
|
|
78
|
+
coordinates: [...clickSequence, p3]
|
|
79
|
+
}
|
|
76
80
|
});
|
|
77
81
|
} else {
|
|
78
82
|
// Draw a Polygon connecting all the clicked points with the hovered point
|
|
@@ -80,8 +84,8 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
80
84
|
type: 'Feature',
|
|
81
85
|
geometry: {
|
|
82
86
|
type: 'Polygon',
|
|
83
|
-
coordinates: [[...clickSequence, p3, clickSequence[0]]]
|
|
84
|
-
}
|
|
87
|
+
coordinates: [[...clickSequence, p3, clickSequence[0]]]
|
|
88
|
+
}
|
|
85
89
|
});
|
|
86
90
|
}
|
|
87
91
|
|
|
@@ -91,7 +95,7 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
91
95
|
handleClick(event: ClickEvent): EditAction | null | undefined {
|
|
92
96
|
super.handleClick(event);
|
|
93
97
|
|
|
94
|
-
const {
|
|
98
|
+
const {picks} = event;
|
|
95
99
|
const tentativeFeature = this.getTentativeFeature();
|
|
96
100
|
|
|
97
101
|
let editAction: EditAction | null | undefined = null;
|
|
@@ -109,7 +113,7 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
109
113
|
// They clicked the first or last point (or double-clicked), so complete the polygon
|
|
110
114
|
const polygonToAdd: Polygon = {
|
|
111
115
|
type: 'Polygon',
|
|
112
|
-
coordinates: this.finalizedCoordinates([...polygon.coordinates[0]])
|
|
116
|
+
coordinates: this.finalizedCoordinates([...polygon.coordinates[0]])
|
|
113
117
|
};
|
|
114
118
|
|
|
115
119
|
this.resetClickSequence();
|
|
@@ -127,7 +131,7 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
127
131
|
pointerDownPicks: null,
|
|
128
132
|
pointerDownScreenCoords: null,
|
|
129
133
|
pointerDownMapCoords: null,
|
|
130
|
-
sourceEvent: null
|
|
134
|
+
sourceEvent: null
|
|
131
135
|
} as unknown as PointerMoveEvent;
|
|
132
136
|
|
|
133
137
|
this.handlePointerMove(fakePointerMoveEvent);
|
|
@@ -164,7 +168,7 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
164
168
|
const p4 = coordinates[coordinates.length - 4];
|
|
165
169
|
const angle2 = bearing(p3, p4);
|
|
166
170
|
|
|
167
|
-
const angles = {
|
|
171
|
+
const angles = {first: [] as number[], second: [] as number[]};
|
|
168
172
|
// calculate 3 right angle points for first and last points in lineString
|
|
169
173
|
[1, 2, 3].forEach((factor) => {
|
|
170
174
|
const newAngle1 = angle1 + factor * 90;
|
|
@@ -180,17 +184,17 @@ export class Draw90DegreePolygonHandler extends ModeHandler {
|
|
|
180
184
|
[0, 1, 2].forEach((indexFirst) => {
|
|
181
185
|
const line1 = lineString([
|
|
182
186
|
p1,
|
|
183
|
-
destination(p1, distance, angles.first[indexFirst]).geometry.coordinates
|
|
187
|
+
destination(p1, distance, angles.first[indexFirst]).geometry.coordinates
|
|
184
188
|
]);
|
|
185
189
|
[0, 1, 2].forEach((indexSecond) => {
|
|
186
190
|
const line2 = lineString([
|
|
187
191
|
p3,
|
|
188
|
-
destination(p3, distance, angles.second[indexSecond]).geometry.coordinates
|
|
192
|
+
destination(p3, distance, angles.second[indexSecond]).geometry.coordinates
|
|
189
193
|
]);
|
|
190
194
|
const fc = lineIntersect(line1, line2);
|
|
191
195
|
if (fc && fc.features.length) {
|
|
192
196
|
// found the intersect point
|
|
193
|
-
pt = fc.features[0].geometry.coordinates
|
|
197
|
+
pt = fc.features[0].geometry.coordinates;
|
|
194
198
|
}
|
|
195
199
|
});
|
|
196
200
|
});
|