diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index 83f3cb1c57..5edd39a0a5 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -117,16 +117,10 @@ import {squaredDistance as squaredCoordinateDistance} from '../coordinate.js'; */ /** + * @typedef {'Point' | 'LineString' | 'Polygon' | 'Circle'} Mode * Draw mode. This collapses multi-part geometry types with their single-part * cousins. - * @enum {string} */ -const Mode = { - POINT: 'Point', - LINE_STRING: 'LineString', - POLYGON: 'Polygon', - CIRCLE: 'Circle', -}; /** * @enum {string} @@ -311,7 +305,7 @@ class Draw extends PointerInteraction { */ this.minPoints_ = options.minPoints ? options.minPoints - : this.mode_ === Mode.POLYGON + : this.mode_ === 'Polygon' ? 3 : 2; @@ -322,7 +316,7 @@ class Draw extends PointerInteraction { * @private */ this.maxPoints_ = - this.mode_ === Mode.CIRCLE + this.mode_ === 'Circle' ? 2 : options.maxPoints ? options.maxPoints @@ -348,7 +342,7 @@ class Draw extends PointerInteraction { let geometryFunction = options.geometryFunction; if (!geometryFunction) { const mode = this.mode_; - if (mode === Mode.CIRCLE) { + if (mode === 'Circle') { /** * @param {!LineCoordType} coordinates The coordinates. * @param {import("../geom/SimpleGeometry.js").default|undefined} geometry Optional geometry. @@ -377,11 +371,11 @@ class Draw extends PointerInteraction { }; } else { let Constructor; - if (mode === Mode.POINT) { + if (mode === 'Point') { Constructor = Point; - } else if (mode === Mode.LINE_STRING) { + } else if (mode === 'LineString') { Constructor = LineString; - } else if (mode === Mode.POLYGON) { + } else if (mode === 'Polygon') { Constructor = Polygon; } /** @@ -392,7 +386,7 @@ class Draw extends PointerInteraction { */ geometryFunction = function (coordinates, geometry, projection) { if (geometry) { - if (mode === Mode.POLYGON) { + if (mode === 'Polygon') { if (coordinates[0].length) { // Add a closing coordinate to match the first geometry.setCoordinates( @@ -554,8 +548,7 @@ class Draw extends PointerInteraction { // Avoid context menu for long taps when drawing on mobile event.originalEvent.preventDefault(); } - this.freehand_ = - this.mode_ !== Mode.POINT && this.freehandCondition_(event); + this.freehand_ = this.mode_ !== 'Point' && this.freehandCondition_(event); let move = event.type === MapBrowserEventType.POINTERMOVE; let pass = true; if ( @@ -673,7 +666,7 @@ class Draw extends PointerInteraction { this.finishDrawing(); } else if ( !this.freehand_ && - (!startingToDraw || this.mode_ === Mode.POINT) + (!startingToDraw || this.mode_ === 'Point') ) { if (this.atFinish_(event.pixel)) { if (this.finishCondition_(event)) { @@ -739,13 +732,13 @@ class Draw extends PointerInteraction { let potentiallyDone = false; let potentiallyFinishCoordinates = [this.finishCoordinate_]; const mode = this.mode_; - if (mode === Mode.POINT) { + if (mode === 'Point') { at = true; - } else if (mode === Mode.CIRCLE) { + } else if (mode === 'Circle') { at = this.sketchCoords_.length === 2; - } else if (mode === Mode.LINE_STRING) { + } else if (mode === 'LineString') { potentiallyDone = this.sketchCoords_.length > this.minPoints_; - } else if (mode === Mode.POLYGON) { + } else if (mode === 'Polygon') { const sketchCoords = /** @type {PolyCoordType} */ (this.sketchCoords_); potentiallyDone = sketchCoords[0].length > this.minPoints_; potentiallyFinishCoordinates = [ @@ -823,9 +816,9 @@ class Draw extends PointerInteraction { start.push(0); } this.finishCoordinate_ = start; - if (this.mode_ === Mode.POINT) { + if (this.mode_ === 'Point') { this.sketchCoords_ = start.slice(); - } else if (this.mode_ === Mode.POLYGON) { + } else if (this.mode_ === 'Polygon') { this.sketchCoords_ = [[start.slice(), start.slice()]]; this.sketchLineCoords_ = this.sketchCoords_[0]; } else { @@ -864,9 +857,9 @@ class Draw extends PointerInteraction { while (coordinate.length < stride) { coordinate.push(0); } - if (this.mode_ === Mode.POINT) { + if (this.mode_ === 'Point') { last = this.sketchCoords_; - } else if (this.mode_ === Mode.POLYGON) { + } else if (this.mode_ === 'Polygon') { coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0]; last = coordinates[coordinates.length - 1]; if (this.atFinish_(map.getPixelFromCoordinate(coordinate))) { @@ -888,7 +881,7 @@ class Draw extends PointerInteraction { const sketchPointGeom = this.sketchPoint_.getGeometry(); sketchPointGeom.setCoordinates(coordinate); } - if (geometry.getType() === 'Polygon' && this.mode_ !== Mode.POLYGON) { + if (geometry.getType() === 'Polygon' && this.mode_ !== 'Polygon') { this.createOrUpdateCustomSketchLine_(/** @type {Polygon} */ (geometry)); } else if (this.sketchLineCoords_) { const sketchLineGeom = this.sketchLine_.getGeometry(); @@ -908,7 +901,7 @@ class Draw extends PointerInteraction { let done; let coordinates; const mode = this.mode_; - if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) { + if (mode === 'LineString' || mode === 'Circle') { this.finishCoordinate_ = coordinate.slice(); coordinates = /** @type {LineCoordType} */ (this.sketchCoords_); if (coordinates.length >= this.maxPoints_) { @@ -920,7 +913,7 @@ class Draw extends PointerInteraction { } coordinates.push(coordinate.slice()); this.geometryFunction_(coordinates, geometry, projection); - } else if (mode === Mode.POLYGON) { + } else if (mode === 'Polygon') { coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0]; if (coordinates.length >= this.maxPoints_) { if (this.freehand_) { @@ -955,7 +948,7 @@ class Draw extends PointerInteraction { const projection = this.getMap().getView().getProjection(); let coordinates; const mode = this.mode_; - if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) { + if (mode === 'LineString' || mode === 'Circle') { coordinates = /** @type {LineCoordType} */ (this.sketchCoords_); coordinates.splice(-2, 1); if (coordinates.length >= 2) { @@ -968,7 +961,7 @@ class Draw extends PointerInteraction { if (geometry.getType() === 'Polygon' && this.sketchLine_) { this.createOrUpdateCustomSketchLine_(/** @type {Polygon} */ (geometry)); } - } else if (mode === Mode.POLYGON) { + } else if (mode === 'Polygon') { coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0]; coordinates.splice(-2, 1); const sketchLineGeom = this.sketchLine_.getGeometry(); @@ -1002,11 +995,11 @@ class Draw extends PointerInteraction { let coordinates = this.sketchCoords_; const geometry = sketchFeature.getGeometry(); const projection = this.getMap().getView().getProjection(); - if (this.mode_ === Mode.LINE_STRING) { + if (this.mode_ === 'LineString') { // remove the redundant last point coordinates.pop(); this.geometryFunction_(coordinates, geometry, projection); - } else if (this.mode_ === Mode.POLYGON) { + } else if (this.mode_ === 'Polygon') { // remove the redundant last point in ring /** @type {PolyCoordType} */ (coordinates)[0].pop(); this.geometryFunction_(coordinates, geometry, projection); @@ -1083,9 +1076,9 @@ class Draw extends PointerInteraction { } /** @type {LineCoordType} */ let sketchCoords; - if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) { + if (mode === 'LineString' || mode === 'Circle') { sketchCoords = /** @type {LineCoordType} */ (this.sketchCoords_); - } else if (mode === Mode.POLYGON) { + } else if (mode === 'Polygon') { sketchCoords = this.sketchCoords_ && this.sketchCoords_.length ? /** @type {PolyCoordType} */ (this.sketchCoords_)[0] @@ -1276,15 +1269,15 @@ function getMode(type) { switch (type) { case 'Point': case 'MultiPoint': - return Mode.POINT; + return 'Point'; case 'LineString': case 'MultiLineString': - return Mode.LINE_STRING; + return 'LineString'; case 'Polygon': case 'MultiPolygon': - return Mode.POLYGON; + return 'Polygon'; case 'Circle': - return Mode.CIRCLE; + return 'Circle'; default: throw new Error('Invalid type: ' + type); }