Remove no longer needed checks for coordinates.length

This commit is contained in:
Andreas Hocevar
2020-12-03 23:29:33 +01:00
parent 651c1aa6c4
commit ec53d4fc57
2 changed files with 89 additions and 98 deletions

View File

@@ -43,30 +43,28 @@ function addInteraction() {
} else if (value === 'Star') { } else if (value === 'Star') {
value = 'Circle'; value = 'Circle';
geometryFunction = function (coordinates, geometry) { geometryFunction = function (coordinates, geometry) {
if (coordinates.length) { const center = coordinates[0];
const center = coordinates[0]; const last = coordinates[coordinates.length - 1];
const last = coordinates[coordinates.length - 1]; const dx = center[0] - last[0];
const dx = center[0] - last[0]; const dy = center[1] - last[1];
const dy = center[1] - last[1]; const radius = Math.sqrt(dx * dx + dy * dy);
const radius = Math.sqrt(dx * dx + dy * dy); const rotation = Math.atan2(dy, dx);
const rotation = Math.atan2(dy, dx); const newCoordinates = [];
const newCoordinates = []; const numPoints = 12;
const numPoints = 12; for (let i = 0; i < numPoints; ++i) {
for (let i = 0; i < numPoints; ++i) { const angle = rotation + (i * 2 * Math.PI) / numPoints;
const angle = rotation + (i * 2 * Math.PI) / numPoints; const fraction = i % 2 === 0 ? 1 : 0.5;
const fraction = i % 2 === 0 ? 1 : 0.5; const offsetX = radius * fraction * Math.cos(angle);
const offsetX = radius * fraction * Math.cos(angle); const offsetY = radius * fraction * Math.sin(angle);
const offsetY = radius * fraction * Math.sin(angle); newCoordinates.push([center[0] + offsetX, center[1] + offsetY]);
newCoordinates.push([center[0] + offsetX, center[1] + offsetY]);
}
newCoordinates.push(newCoordinates[0].slice());
if (!geometry) {
geometry = new Polygon([newCoordinates]);
} else {
geometry.setCoordinates([newCoordinates]);
}
return geometry;
} }
newCoordinates.push(newCoordinates[0].slice());
if (!geometry) {
geometry = new Polygon([newCoordinates]);
} else {
geometry.setCoordinates([newCoordinates]);
}
return geometry;
}; };
} }
draw = new Draw({ draw = new Draw({

View File

@@ -59,7 +59,8 @@ import {squaredDistance as squaredCoordinateDistance} from '../coordinate.js';
* polygon rings and `2` for line strings. * polygon rings and `2` for line strings.
* @property {import("../events/condition.js").Condition} [finishCondition] A function * @property {import("../events/condition.js").Condition} [finishCondition] A function
* that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
* boolean to indicate whether the drawing can be finished. * boolean to indicate whether the drawing can be finished. Not used when drawing
* POINT or MULTI_POINT geometries.
* @property {import("../style/Style.js").StyleLike} [style] * @property {import("../style/Style.js").StyleLike} [style]
* Style for sketch features. * Style for sketch features.
* @property {GeometryFunction} [geometryFunction] * @property {GeometryFunction} [geometryFunction]
@@ -317,25 +318,20 @@ class Draw extends PointerInteraction {
* @return {import("../geom/SimpleGeometry.js").default} A geometry. * @return {import("../geom/SimpleGeometry.js").default} A geometry.
*/ */
geometryFunction = function (coordinates, geometry, projection) { geometryFunction = function (coordinates, geometry, projection) {
if (coordinates.length) { const circle = geometry
const circle = geometry ? /** @type {Circle} */ (geometry)
? /** @type {Circle} */ (geometry) : new Circle([NaN, NaN]);
: new Circle([NaN, NaN]); const center = fromUserCoordinate(coordinates[0], projection);
const center = fromUserCoordinate(coordinates[0], projection); const squaredLength = squaredCoordinateDistance(
const squaredLength = squaredCoordinateDistance( center,
center, fromUserCoordinate(coordinates[coordinates.length - 1], projection)
fromUserCoordinate( );
coordinates[coordinates.length - 1], circle.setCenterAndRadius(center, Math.sqrt(squaredLength));
projection const userProjection = getUserProjection();
) if (userProjection) {
); circle.transform(projection, userProjection);
circle.setCenterAndRadius(center, Math.sqrt(squaredLength));
const userProjection = getUserProjection();
if (userProjection) {
circle.transform(projection, userProjection);
}
return circle;
} }
return circle;
}; };
} else { } else {
let Constructor; let Constructor;
@@ -895,7 +891,8 @@ class Draw extends PointerInteraction {
} }
/** /**
* Remove last point of the feature currently being drawn. * Remove last point of the feature currently being drawn. Does not do anything when
* drawing POINT or MULTI_POINT geometries.
* @api * @api
*/ */
removeLastPoint() { removeLastPoint() {
@@ -1150,34 +1147,32 @@ function getDefaultStyleFunction() {
*/ */
export function createRegularPolygon(opt_sides, opt_angle) { export function createRegularPolygon(opt_sides, opt_angle) {
return function (coordinates, opt_geometry, projection) { return function (coordinates, opt_geometry, projection) {
if (coordinates.length) { const center = fromUserCoordinate(
const center = fromUserCoordinate( /** @type {LineCoordType} */ (coordinates)[0],
/** @type {LineCoordType} */ (coordinates)[0], projection
projection );
); const end = fromUserCoordinate(
const end = fromUserCoordinate( /** @type {LineCoordType} */ (coordinates)[coordinates.length - 1],
/** @type {LineCoordType} */ (coordinates)[coordinates.length - 1], projection
projection );
); const radius = Math.sqrt(squaredCoordinateDistance(center, end));
const radius = Math.sqrt(squaredCoordinateDistance(center, end)); const geometry = opt_geometry
const geometry = opt_geometry ? /** @type {Polygon} */ (opt_geometry)
? /** @type {Polygon} */ (opt_geometry) : fromCircle(new Circle(center), opt_sides);
: fromCircle(new Circle(center), opt_sides);
let angle = opt_angle; let angle = opt_angle;
if (!opt_angle && opt_angle !== 0) { if (!opt_angle && opt_angle !== 0) {
const x = end[0] - center[0]; const x = end[0] - center[0];
const y = end[1] - center[1]; const y = end[1] - center[1];
angle = Math.atan2(y, x); angle = Math.atan2(y, x);
}
makeRegular(geometry, center, radius, angle);
const userProjection = getUserProjection();
if (userProjection) {
geometry.transform(projection, userProjection);
}
return geometry;
} }
makeRegular(geometry, center, radius, angle);
const userProjection = getUserProjection();
if (userProjection) {
geometry.transform(projection, userProjection);
}
return geometry;
}; };
} }
@@ -1190,36 +1185,34 @@ export function createRegularPolygon(opt_sides, opt_angle) {
*/ */
export function createBox() { export function createBox() {
return function (coordinates, opt_geometry, projection) { return function (coordinates, opt_geometry, projection) {
if (coordinates.length) { const extent = boundingExtent(
const extent = boundingExtent( /** @type {LineCoordType} */ ([
/** @type {LineCoordType} */ ([ coordinates[0],
coordinates[0], coordinates[coordinates.length - 1],
coordinates[coordinates.length - 1], ]).map(function (coordinate) {
]).map(function (coordinate) { return fromUserCoordinate(coordinate, projection);
return fromUserCoordinate(coordinate, projection); })
}) );
); const boxCoordinates = [
const boxCoordinates = [ [
[ getBottomLeft(extent),
getBottomLeft(extent), getBottomRight(extent),
getBottomRight(extent), getTopRight(extent),
getTopRight(extent), getTopLeft(extent),
getTopLeft(extent), getBottomLeft(extent),
getBottomLeft(extent), ],
], ];
]; let geometry = opt_geometry;
let geometry = opt_geometry; if (geometry) {
if (geometry) { geometry.setCoordinates(boxCoordinates);
geometry.setCoordinates(boxCoordinates); } else {
} else { geometry = new Polygon(boxCoordinates);
geometry = new Polygon(boxCoordinates);
}
const userProjection = getUserProjection();
if (userProjection) {
geometry.transform(projection, userProjection);
}
return geometry;
} }
const userProjection = getUserProjection();
if (userProjection) {
geometry.transform(projection, userProjection);
}
return geometry;
}; };
} }