Use union instead of enum for geometry type

This commit is contained in:
Tim Schaub
2021-09-04 17:39:54 -06:00
committed by Andreas Hocevar
parent 04ad0e0c5a
commit 9a6f8493fb
35 changed files with 296 additions and 378 deletions

View File

@@ -3,7 +3,6 @@
*/
import Feature from '../Feature.js';
import GeometryLayout from '../geom/GeometryLayout.js';
import GeometryType from '../geom/GeometryType.js';
import {
LineString,
MultiLineString,
@@ -45,7 +44,7 @@ const tmpTransform = createTransform();
*/
class RenderFeature {
/**
* @param {import("../geom/GeometryType.js").default} type Geometry type.
* @param {import("../geom/Geometry.js").Type} type Geometry type.
* @param {Array<number>} flatCoordinates Flat coordinates. These always need
* to be right-handed for polygons.
* @param {Array<number>|Array<Array<number>>} ends Ends or Endss.
@@ -72,7 +71,7 @@ class RenderFeature {
/**
* @private
* @type {import("../geom/GeometryType.js").default}
* @type {import("../geom/Geometry.js").Type}
*/
this.type_ = type;
@@ -125,7 +124,7 @@ class RenderFeature {
getExtent() {
if (!this.extent_) {
this.extent_ =
this.type_ === GeometryType.POINT
this.type_ === 'Point'
? createOrUpdateFromCoordinate(this.flatCoordinates_)
: createOrUpdateFromFlatCoordinates(
this.flatCoordinates_,
@@ -283,7 +282,7 @@ class RenderFeature {
/**
* Get the type of this feature's geometry.
* @return {import("../geom/GeometryType.js").default} Geometry type.
* @return {import("../geom/Geometry.js").Type} Geometry type.
* @api
*/
getType() {

View File

@@ -2,7 +2,6 @@
* @module ol/render/canvas/Builder
*/
import CanvasInstruction from './Instruction.js';
import GeometryType from '../../geom/GeometryType.js';
import Relationship from '../../extent/Relationship.js';
import VectorContext from '../VectorContext.js';
import {asColorLike} from '../../colorlike.js';
@@ -260,7 +259,7 @@ class CanvasBuilder extends VectorContext {
let offset;
switch (type) {
case GeometryType.MULTI_POLYGON:
case 'MultiPolygon':
flatCoordinates =
/** @type {import("../../geom/MultiPolygon.js").default} */ (
geometry
@@ -299,11 +298,11 @@ class CanvasBuilder extends VectorContext {
inflateMultiCoordinatesArray,
]);
break;
case GeometryType.POLYGON:
case GeometryType.MULTI_LINE_STRING:
case 'Polygon':
case 'MultiLineString':
builderEnds = [];
flatCoordinates =
type == GeometryType.POLYGON
type == 'Polygon'
? /** @type {import("../../geom/Polygon.js").default} */ (
geometry
).getOrientedFlatCoordinates()
@@ -334,8 +333,8 @@ class CanvasBuilder extends VectorContext {
inflateCoordinatesArray,
]);
break;
case GeometryType.LINE_STRING:
case GeometryType.CIRCLE:
case 'LineString':
case 'Circle':
flatCoordinates = geometry.getFlatCoordinates();
builderEnd = this.appendFlatLineCoordinates(
flatCoordinates,
@@ -362,7 +361,7 @@ class CanvasBuilder extends VectorContext {
inflateCoordinates,
]);
break;
case GeometryType.MULTI_POINT:
case 'MultiPoint':
flatCoordinates = geometry.getFlatCoordinates();
builderEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);
@@ -385,7 +384,7 @@ class CanvasBuilder extends VectorContext {
]);
}
break;
case GeometryType.POINT:
case 'Point':
flatCoordinates = geometry.getFlatCoordinates();
this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);
builderEnd = this.coordinates.length;

View File

@@ -5,7 +5,6 @@
// FIXME need to handle large thick features (where pixel size matters)
// FIXME add offset and end to ol/geom/flat/transform~transform2D?
import GeometryType from '../../geom/GeometryType.js';
import VectorContext from '../VectorContext.js';
import {asColorLike} from '../../colorlike.js';
import {
@@ -549,46 +548,46 @@ class CanvasImmediateRenderer extends VectorContext {
drawGeometry(geometry) {
const type = geometry.getType();
switch (type) {
case GeometryType.POINT:
case 'Point':
this.drawPoint(
/** @type {import("../../geom/Point.js").default} */ (geometry)
);
break;
case GeometryType.LINE_STRING:
case 'LineString':
this.drawLineString(
/** @type {import("../../geom/LineString.js").default} */ (geometry)
);
break;
case GeometryType.POLYGON:
case 'Polygon':
this.drawPolygon(
/** @type {import("../../geom/Polygon.js").default} */ (geometry)
);
break;
case GeometryType.MULTI_POINT:
case 'MultiPoint':
this.drawMultiPoint(
/** @type {import("../../geom/MultiPoint.js").default} */ (geometry)
);
break;
case GeometryType.MULTI_LINE_STRING:
case 'MultiLineString':
this.drawMultiLineString(
/** @type {import("../../geom/MultiLineString.js").default} */ (
geometry
)
);
break;
case GeometryType.MULTI_POLYGON:
case 'MultiPolygon':
this.drawMultiPolygon(
/** @type {import("../../geom/MultiPolygon.js").default} */ (geometry)
);
break;
case GeometryType.GEOMETRY_COLLECTION:
case 'GeometryCollection':
this.drawGeometryCollection(
/** @type {import("../../geom/GeometryCollection.js").default} */ (
geometry
)
);
break;
case GeometryType.CIRCLE:
case 'Circle':
this.drawCircle(
/** @type {import("../../geom/Circle.js").default} */ (geometry)
);

View File

@@ -3,7 +3,6 @@
*/
import CanvasBuilder from './Builder.js';
import CanvasInstruction from './Instruction.js';
import GeometryType from '../../geom/GeometryType.js';
import TextPlacement from '../../style/TextPlacement.js';
import {asColorLike} from '../../colorlike.js';
import {
@@ -179,27 +178,27 @@ class CanvasTextBuilder extends CanvasBuilder {
if (
textState.placement === TextPlacement.LINE &&
(geometryType == GeometryType.LINE_STRING ||
geometryType == GeometryType.MULTI_LINE_STRING ||
geometryType == GeometryType.POLYGON ||
geometryType == GeometryType.MULTI_POLYGON)
(geometryType == 'LineString' ||
geometryType == 'MultiLineString' ||
geometryType == 'Polygon' ||
geometryType == 'MultiPolygon')
) {
if (!intersects(this.getBufferedMaxExtent(), geometry.getExtent())) {
return;
}
let ends;
flatCoordinates = geometry.getFlatCoordinates();
if (geometryType == GeometryType.LINE_STRING) {
if (geometryType == 'LineString') {
ends = [flatCoordinates.length];
} else if (geometryType == GeometryType.MULTI_LINE_STRING) {
} else if (geometryType == 'MultiLineString') {
ends = /** @type {import("../../geom/MultiLineString.js").default} */ (
geometry
).getEnds();
} else if (geometryType == GeometryType.POLYGON) {
} else if (geometryType == 'Polygon') {
ends = /** @type {import("../../geom/Polygon.js").default} */ (geometry)
.getEnds()
.slice(0, 1);
} else if (geometryType == GeometryType.MULTI_POLYGON) {
} else if (geometryType == 'MultiPolygon') {
const endss =
/** @type {import("../../geom/MultiPolygon.js").default} */ (
geometry
@@ -240,33 +239,33 @@ class CanvasTextBuilder extends CanvasBuilder {
} else {
let geometryWidths = textState.overflow ? null : [];
switch (geometryType) {
case GeometryType.POINT:
case GeometryType.MULTI_POINT:
case 'Point':
case 'MultiPoint':
flatCoordinates =
/** @type {import("../../geom/MultiPoint.js").default} */ (
geometry
).getFlatCoordinates();
break;
case GeometryType.LINE_STRING:
case 'LineString':
flatCoordinates =
/** @type {import("../../geom/LineString.js").default} */ (
geometry
).getFlatMidpoint();
break;
case GeometryType.CIRCLE:
case 'Circle':
flatCoordinates =
/** @type {import("../../geom/Circle.js").default} */ (
geometry
).getCenter();
break;
case GeometryType.MULTI_LINE_STRING:
case 'MultiLineString':
flatCoordinates =
/** @type {import("../../geom/MultiLineString.js").default} */ (
geometry
).getFlatMidpoints();
stride = 2;
break;
case GeometryType.POLYGON:
case 'Polygon':
flatCoordinates =
/** @type {import("../../geom/Polygon.js").default} */ (
geometry
@@ -276,7 +275,7 @@ class CanvasTextBuilder extends CanvasBuilder {
}
stride = 3;
break;
case GeometryType.MULTI_POLYGON:
case 'MultiPolygon':
const interiorPoints =
/** @type {import("../../geom/MultiPolygon.js").default} */ (
geometry

View File

@@ -3,7 +3,6 @@
*/
import CanvasImmediateRenderer from './Immediate.js';
import GeometryType from '../../geom/GeometryType.js';
import IconAnchorUnits from '../../style/IconAnchorUnits.js';
import {Icon} from '../../style.js';
import {clamp} from '../../math.js';
@@ -121,10 +120,10 @@ export function createHitDetectionImageData(
if (!byGeometryType) {
byGeometryType = {};
featuresByZIndex[zIndex] = byGeometryType;
byGeometryType[GeometryType.POLYGON] = [];
byGeometryType[GeometryType.CIRCLE] = [];
byGeometryType[GeometryType.LINE_STRING] = [];
byGeometryType[GeometryType.POINT] = [];
byGeometryType['Polygon'] = [];
byGeometryType['Circle'] = [];
byGeometryType['LineString'] = [];
byGeometryType['Point'] = [];
}
byGeometryType[geometry.getType().replace('Multi', '')].push(
geometry,