Use union instead of enum for geometry type
This commit is contained in:
committed by
Andreas Hocevar
parent
04ad0e0c5a
commit
9a6f8493fb
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user