From c707b4c74688e571f5bb5d86817d473ceedbc755 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 17 Jul 2018 16:18:30 +0200 Subject: [PATCH] Use extends and super for geom --- src/ol/geom/Circle.js | 22 ++- src/ol/geom/Geometry.js | 249 +++++++++++++++--------------- src/ol/geom/GeometryCollection.js | 14 +- src/ol/geom/LineString.js | 19 +-- src/ol/geom/LinearRing.js | 19 +-- src/ol/geom/MultiLineString.js | 22 ++- src/ol/geom/MultiPoint.js | 19 +-- src/ol/geom/MultiPolygon.js | 22 ++- src/ol/geom/Point.js | 16 +- src/ol/geom/Polygon.js | 31 ++-- src/ol/geom/SimpleGeometry.js | 9 +- 11 files changed, 204 insertions(+), 238 deletions(-) diff --git a/src/ol/geom/Circle.js b/src/ol/geom/Circle.js index a3528fd277..e5c9e59074 100644 --- a/src/ol/geom/Circle.js +++ b/src/ol/geom/Circle.js @@ -1,7 +1,6 @@ /** * @module ol/geom/Circle */ -import {inherits} from '../util.js'; import {createOrUpdate, forEachCorner, intersects} from '../extent.js'; import GeometryType from '../geom/GeometryType.js'; import SimpleGeometry from '../geom/SimpleGeometry.js'; @@ -11,18 +10,19 @@ import {deflateCoordinate} from '../geom/flat/deflate.js'; * @classdesc * Circle geometry. * - * @constructor - * @extends {!module:ol/geom/SimpleGeometry} - * @param {!module:ol/coordinate~Coordinate} center Center. (For internal use, - * flat coordinates in combination with `opt_layout` and no `opt_radius` are - * also accepted.) - * @param {number=} opt_radius Radius. - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ -class Circle { +class Circle extends SimpleGeometry { + + /** + * @param {!module:ol/coordinate~Coordinate} center Center. + * For internal use, flat coordinates in combination with `opt_layout` and no + * `opt_radius` are also accepted. + * @param {number=} opt_radius Radius. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + */ constructor(center, opt_radius, opt_layout) { - SimpleGeometry.call(this); + super(); if (opt_layout !== undefined && opt_radius === undefined) { this.setFlatCoordinates(opt_layout, center); } else { @@ -212,8 +212,6 @@ class Circle { } } -inherits(Circle, SimpleGeometry); - /** * Transform each coordinate of the circle from one coordinate reference system diff --git a/src/ol/geom/Geometry.js b/src/ol/geom/Geometry.js index 7df226d66a..80fbc90641 100644 --- a/src/ol/geom/Geometry.js +++ b/src/ol/geom/Geometry.js @@ -1,7 +1,6 @@ /** * @module ol/geom/Geometry */ -import {inherits} from '../util.js'; import BaseObject from '../Object.js'; import {createEmpty, getHeight, returnOrUpdate} from '../extent.js'; import {FALSE} from '../functions.js'; @@ -26,73 +25,71 @@ const tmpTransform = createTransform(); * To get notified of changes to the geometry, register a listener for the * generic `change` event on your geometry instance. * - * @constructor * @abstract - * @extends {module:ol/Object} * @api */ -class Geometry { +class Geometry extends BaseObject { constructor() { - BaseObject.call(this); + super(); /** - * @private - * @type {module:ol/extent~Extent} - */ + * @private + * @type {module:ol/extent~Extent} + */ this.extent_ = createEmpty(); /** - * @private - * @type {number} - */ + * @private + * @type {number} + */ this.extentRevision_ = -1; /** - * @protected - * @type {Object.} - */ + * @protected + * @type {Object.} + */ this.simplifiedGeometryCache = {}; /** - * @protected - * @type {number} - */ + * @protected + * @type {number} + */ this.simplifiedGeometryMaxMinSquaredTolerance = 0; /** - * @protected - * @type {number} - */ + * @protected + * @type {number} + */ this.simplifiedGeometryRevision = 0; } /** - * Make a complete copy of the geometry. - * @abstract - * @return {!module:ol/geom/Geometry} Clone. - */ + * Make a complete copy of the geometry. + * @abstract + * @return {!module:ol/geom/Geometry} Clone. + */ clone() {} /** - * @abstract - * @param {number} x X. - * @param {number} y Y. - * @param {module:ol/coordinate~Coordinate} closestPoint Closest point. - * @param {number} minSquaredDistance Minimum squared distance. - * @return {number} Minimum squared distance. - */ + * @abstract + * @param {number} x X. + * @param {number} y Y. + * @param {module:ol/coordinate~Coordinate} closestPoint Closest point. + * @param {number} minSquaredDistance Minimum squared distance. + * @return {number} Minimum squared distance. + */ closestPointXY(x, y, closestPoint, minSquaredDistance) {} /** - * Return the closest point of the geometry to the passed point as - * {@link module:ol/coordinate~Coordinate coordinate}. - * @param {module:ol/coordinate~Coordinate} point Point. - * @param {module:ol/coordinate~Coordinate=} opt_closestPoint Closest point. - * @return {module:ol/coordinate~Coordinate} Closest point. - * @api - */ + * Return the closest point of the geometry to the passed point as + * {@link module:ol/coordinate~Coordinate coordinate}. + * @param {module:ol/coordinate~Coordinate} point Point. + * @param {module:ol/coordinate~Coordinate=} opt_closestPoint Closest point. + * @return {module:ol/coordinate~Coordinate} Closest point. + * @api + */ getClosestPoint(point, opt_closestPoint) { const closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN]; this.closestPointXY(point[0], point[1], closestPoint, Infinity); @@ -100,30 +97,30 @@ class Geometry { } /** - * Returns true if this geometry includes the specified coordinate. If the - * coordinate is on the boundary of the geometry, returns false. - * @param {module:ol/coordinate~Coordinate} coordinate Coordinate. - * @return {boolean} Contains coordinate. - * @api - */ + * Returns true if this geometry includes the specified coordinate. If the + * coordinate is on the boundary of the geometry, returns false. + * @param {module:ol/coordinate~Coordinate} coordinate Coordinate. + * @return {boolean} Contains coordinate. + * @api + */ intersectsCoordinate(coordinate) { return this.containsXY(coordinate[0], coordinate[1]); } /** - * @abstract - * @param {module:ol/extent~Extent} extent Extent. - * @protected - * @return {module:ol/extent~Extent} extent Extent. - */ + * @abstract + * @param {module:ol/extent~Extent} extent Extent. + * @protected + * @return {module:ol/extent~Extent} extent Extent. + */ computeExtent(extent) {} /** - * Get the extent of the geometry. - * @param {module:ol/extent~Extent=} opt_extent Extent. - * @return {module:ol/extent~Extent} extent Extent. - * @api - */ + * Get the extent of the geometry. + * @param {module:ol/extent~Extent=} opt_extent Extent. + * @return {module:ol/extent~Extent} extent Extent. + * @api + */ getExtent(opt_extent) { if (this.extentRevision_ != this.getRevision()) { this.extent_ = this.computeExtent(this.extent_); @@ -133,103 +130,103 @@ class Geometry { } /** - * Rotate the geometry around a given coordinate. This modifies the geometry - * coordinates in place. - * @abstract - * @param {number} angle Rotation angle in radians. - * @param {module:ol/coordinate~Coordinate} anchor The rotation center. - * @api - */ + * Rotate the geometry around a given coordinate. This modifies the geometry + * coordinates in place. + * @abstract + * @param {number} angle Rotation angle in radians. + * @param {module:ol/coordinate~Coordinate} anchor The rotation center. + * @api + */ rotate(angle, anchor) {} /** - * Scale the geometry (with an optional origin). This modifies the geometry - * coordinates in place. - * @abstract - * @param {number} sx The scaling factor in the x-direction. - * @param {number=} opt_sy The scaling factor in the y-direction (defaults to - * sx). - * @param {module:ol/coordinate~Coordinate=} opt_anchor The scale origin (defaults to the center - * of the geometry extent). - * @api - */ + * Scale the geometry (with an optional origin). This modifies the geometry + * coordinates in place. + * @abstract + * @param {number} sx The scaling factor in the x-direction. + * @param {number=} opt_sy The scaling factor in the y-direction (defaults to + * sx). + * @param {module:ol/coordinate~Coordinate=} opt_anchor The scale origin (defaults to the center + * of the geometry extent). + * @api + */ scale(sx, opt_sy, opt_anchor) {} /** - * Create a simplified version of this geometry. For linestrings, this uses - * the the {@link - * https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm - * Douglas Peucker} algorithm. For polygons, a quantization-based - * simplification is used to preserve topology. - * @function - * @param {number} tolerance The tolerance distance for simplification. - * @return {module:ol/geom/Geometry} A new, simplified version of the original - * geometry. - * @api - */ + * Create a simplified version of this geometry. For linestrings, this uses + * the the {@link + * https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm + * Douglas Peucker} algorithm. For polygons, a quantization-based + * simplification is used to preserve topology. + * @function + * @param {number} tolerance The tolerance distance for simplification. + * @return {module:ol/geom/Geometry} A new, simplified version of the original + * geometry. + * @api + */ simplify(tolerance) { return this.getSimplifiedGeometry(tolerance * tolerance); } /** - * Create a simplified version of this geometry using the Douglas Peucker - * algorithm. - * @see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm - * @abstract - * @param {number} squaredTolerance Squared tolerance. - * @return {module:ol/geom/Geometry} Simplified geometry. - */ + * Create a simplified version of this geometry using the Douglas Peucker + * algorithm. + * @see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm + * @abstract + * @param {number} squaredTolerance Squared tolerance. + * @return {module:ol/geom/Geometry} Simplified geometry. + */ getSimplifiedGeometry(squaredTolerance) {} /** - * Get the type of this geometry. - * @abstract - * @return {module:ol/geom/GeometryType} Geometry type. - */ + * Get the type of this geometry. + * @abstract + * @return {module:ol/geom/GeometryType} Geometry type. + */ getType() {} /** - * Apply a transform function to each coordinate of the geometry. - * The geometry is modified in place. - * If you do not want the geometry modified in place, first `clone()` it and - * then use this function on the clone. - * @abstract - * @param {module:ol/proj~TransformFunction} transformFn Transform. - */ + * Apply a transform function to each coordinate of the geometry. + * The geometry is modified in place. + * If you do not want the geometry modified in place, first `clone()` it and + * then use this function on the clone. + * @abstract + * @param {module:ol/proj~TransformFunction} transformFn Transform. + */ applyTransform(transformFn) {} /** - * Test if the geometry and the passed extent intersect. - * @abstract - * @param {module:ol/extent~Extent} extent Extent. - * @return {boolean} `true` if the geometry and the extent intersect. - */ + * Test if the geometry and the passed extent intersect. + * @abstract + * @param {module:ol/extent~Extent} extent Extent. + * @return {boolean} `true` if the geometry and the extent intersect. + */ intersectsExtent(extent) {} /** - * Translate the geometry. This modifies the geometry coordinates in place. If - * instead you want a new geometry, first `clone()` this geometry. - * @abstract - * @param {number} deltaX Delta X. - * @param {number} deltaY Delta Y. - */ + * Translate the geometry. This modifies the geometry coordinates in place. If + * instead you want a new geometry, first `clone()` this geometry. + * @abstract + * @param {number} deltaX Delta X. + * @param {number} deltaY Delta Y. + */ translate(deltaX, deltaY) {} /** - * Transform each coordinate of the geometry from one coordinate reference - * system to another. The geometry is modified in place. - * For example, a line will be transformed to a line and a circle to a circle. - * If you do not want the geometry modified in place, first `clone()` it and - * then use this function on the clone. - * - * @param {module:ol/proj~ProjectionLike} source The current projection. Can be a - * string identifier or a {@link module:ol/proj/Projection~Projection} object. - * @param {module:ol/proj~ProjectionLike} destination The desired projection. Can be a - * string identifier or a {@link module:ol/proj/Projection~Projection} object. - * @return {module:ol/geom/Geometry} This geometry. Note that original geometry is - * modified in place. - * @api - */ + * Transform each coordinate of the geometry from one coordinate reference + * system to another. The geometry is modified in place. + * For example, a line will be transformed to a line and a circle to a circle. + * If you do not want the geometry modified in place, first `clone()` it and + * then use this function on the clone. + * + * @param {module:ol/proj~ProjectionLike} source The current projection. Can be a + * string identifier or a {@link module:ol/proj/Projection~Projection} object. + * @param {module:ol/proj~ProjectionLike} destination The desired projection. Can be a + * string identifier or a {@link module:ol/proj/Projection~Projection} object. + * @return {module:ol/geom/Geometry} This geometry. Note that original geometry is + * modified in place. + * @api + */ transform(source, destination) { source = getProjection(source); const transformFn = source.getUnits() == Units.TILE_PIXELS ? @@ -251,8 +248,6 @@ class Geometry { } } -inherits(Geometry, BaseObject); - /** * @param {number} x X. diff --git a/src/ol/geom/GeometryCollection.js b/src/ol/geom/GeometryCollection.js index d7a85c4a6e..b06c0bc3ec 100644 --- a/src/ol/geom/GeometryCollection.js +++ b/src/ol/geom/GeometryCollection.js @@ -1,7 +1,6 @@ /** * @module ol/geom/GeometryCollection */ -import {inherits} from '../util.js'; import {listen, unlisten} from '../events.js'; import EventType from '../events/EventType.js'; import {createOrUpdateEmpty, closestSquaredDistanceXY, extend, getCenter} from '../extent.js'; @@ -13,15 +12,16 @@ import {clear} from '../obj.js'; * @classdesc * An array of {@link module:ol/geom/Geometry} objects. * - * @constructor - * @extends {module:ol/geom/Geometry} - * @param {Array.=} opt_geometries Geometries. * @api */ -class GeometryCollection { +class GeometryCollection extends Geometry { + + /** + * @param {Array.=} opt_geometries Geometries. + */ constructor(opt_geometries) { - Geometry.call(this); + super(); /** * @private @@ -281,8 +281,6 @@ class GeometryCollection { } } -inherits(GeometryCollection, Geometry); - /** * @param {Array.} geometries Geometries. diff --git a/src/ol/geom/LineString.js b/src/ol/geom/LineString.js index 69faab0d62..9a61e850dc 100644 --- a/src/ol/geom/LineString.js +++ b/src/ol/geom/LineString.js @@ -1,7 +1,6 @@ /** * @module ol/geom/LineString */ -import {inherits} from '../util.js'; import {extend} from '../array.js'; import {closestSquaredDistanceXY} from '../extent.js'; import GeometryLayout from '../geom/GeometryLayout.js'; @@ -20,18 +19,18 @@ import {douglasPeucker} from '../geom/flat/simplify.js'; * @classdesc * Linestring geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.|Array.} coordinates - * Coordinates. (For internal use, flat coordinates in combination with - * `opt_layout` are also accepted). - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ -class LineString { +class LineString extends SimpleGeometry { + + /** + * @param {Array.|Array.} coordinates Coordinates. + * For internal use, flat coordinates in combination with `opt_layout` are also accepted. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + */ constructor(coordinates, opt_layout) { - SimpleGeometry.call(this); + super(); /** * @private @@ -240,7 +239,5 @@ class LineString { } } -inherits(LineString, SimpleGeometry); - export default LineString; diff --git a/src/ol/geom/LinearRing.js b/src/ol/geom/LinearRing.js index 9cb2c5149f..6f21242d1f 100644 --- a/src/ol/geom/LinearRing.js +++ b/src/ol/geom/LinearRing.js @@ -1,7 +1,6 @@ /** * @module ol/geom/LinearRing */ -import {inherits} from '../util.js'; import {closestSquaredDistanceXY} from '../extent.js'; import GeometryLayout from '../geom/GeometryLayout.js'; import GeometryType from '../geom/GeometryType.js'; @@ -17,18 +16,18 @@ import {douglasPeucker} from '../geom/flat/simplify.js'; * Linear ring geometry. Only used as part of polygon; cannot be rendered * on its own. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.|Array.} coordinates - * Coordinates. (For internal use, flat coordinates in combination with - * `opt_layout` are also accepted.) - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ -class LinearRing { +class LinearRing extends SimpleGeometry { + + /** + * @param {Array.|Array.} coordinates Coordinates. + * For internal use, flat coordinates in combination with `opt_layout` are also accepted. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + */ constructor(coordinates, opt_layout) { - SimpleGeometry.call(this); + super(); /** * @private @@ -139,7 +138,5 @@ class LinearRing { } } -inherits(LinearRing, SimpleGeometry); - export default LinearRing; diff --git a/src/ol/geom/MultiLineString.js b/src/ol/geom/MultiLineString.js index ab9e92b952..669ea2b3f0 100644 --- a/src/ol/geom/MultiLineString.js +++ b/src/ol/geom/MultiLineString.js @@ -1,7 +1,6 @@ /** * @module ol/geom/MultiLineString */ -import {inherits} from '../util.js'; import {extend} from '../array.js'; import {closestSquaredDistanceXY} from '../extent.js'; import GeometryLayout from '../geom/GeometryLayout.js'; @@ -19,19 +18,20 @@ import {douglasPeuckerArray} from '../geom/flat/simplify.js'; * @classdesc * Multi-linestring geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.|module:ol/geom~MultiLineString>|Array.} coordinates - * Coordinates or LineString geometries. (For internal use, flat coordinates in - * combination with `opt_layout` and `opt_ends` are also accepted.) - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. - * @param {Array.} opt_ends Flat coordinate ends for internal use. * @api */ -class MultiLineString { +class MultiLineString extends SimpleGeometry { + + /** + * @param {Array.|module:ol/geom~MultiLineString>|Array.} coordinates + * Coordinates or LineString geometries. (For internal use, flat coordinates in + * combination with `opt_layout` and `opt_ends` are also accepted.) + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + * @param {Array.} opt_ends Flat coordinate ends for internal use. + */ constructor(coordinates, opt_layout, opt_ends) { - SimpleGeometry.call(this); + super(); /** * @type {Array.} @@ -270,7 +270,5 @@ class MultiLineString { } } -inherits(MultiLineString, SimpleGeometry); - export default MultiLineString; diff --git a/src/ol/geom/MultiPoint.js b/src/ol/geom/MultiPoint.js index b366817415..834ea037ad 100644 --- a/src/ol/geom/MultiPoint.js +++ b/src/ol/geom/MultiPoint.js @@ -1,7 +1,6 @@ /** * @module ol/geom/MultiPoint */ -import {inherits} from '../util.js'; import {extend} from '../array.js'; import {closestSquaredDistanceXY, containsXY} from '../extent.js'; import GeometryType from '../geom/GeometryType.js'; @@ -15,17 +14,17 @@ import {squaredDistance as squaredDx} from '../math.js'; * @classdesc * Multi-point geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.|Array.} coordinates - * Coordinates. (For internal use, flat coordinates in combination with - * `opt_layout` are also accepted) - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ -class MultiPoint { +class MultiPoint extends SimpleGeometry { + + /** + * @param {Array.|Array.} coordinates Coordinates. + * For internal use, flat coordinates in combination with `opt_layout` are also accepted. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + */ constructor(coordinates, opt_layout) { - SimpleGeometry.call(this); + super(); if (opt_layout && !Array.isArray(coordinates[0])) { this.setFlatCoordinates(opt_layout, coordinates); } else { @@ -168,7 +167,5 @@ class MultiPoint { } } -inherits(MultiPoint, SimpleGeometry); - export default MultiPoint; diff --git a/src/ol/geom/MultiPolygon.js b/src/ol/geom/MultiPolygon.js index a5bb32c476..0235a6e175 100644 --- a/src/ol/geom/MultiPolygon.js +++ b/src/ol/geom/MultiPolygon.js @@ -1,7 +1,6 @@ /** * @module ol/geom/MultiPolygon */ -import {inherits} from '../util.js'; import {extend} from '../array.js'; import {closestSquaredDistanceXY} from '../extent.js'; import GeometryLayout from '../geom/GeometryLayout.js'; @@ -24,20 +23,19 @@ import {quantizeMultiArray} from '../geom/flat/simplify.js'; * @classdesc * Multi-polygon geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {Array.>>|Array.} coordinates - * Coordinates. (For internal use, flat coordinats in combination with - * `opt_layout` and `opt_endss` are also accepted). - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. - * @param {Array.} opt_endss Array of ends for internal use with flat - * coordinates. * @api */ -class MultiPolygon { +class MultiPolygon extends SimpleGeometry { + + /** + * @param {Array.>>|Array.} coordinates Coordinates. + * For internal use, flat coordinats in combination with `opt_layout` and `opt_endss` are also accepted. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + * @param {Array.} opt_endss Array of ends for internal use with flat coordinates. + */ constructor(coordinates, opt_layout, opt_endss) { - SimpleGeometry.call(this); + super(); /** * @type {Array.>} @@ -373,7 +371,5 @@ class MultiPolygon { } } -inherits(MultiPolygon, SimpleGeometry); - export default MultiPolygon; diff --git a/src/ol/geom/Point.js b/src/ol/geom/Point.js index e93b7a5514..af6277bca0 100644 --- a/src/ol/geom/Point.js +++ b/src/ol/geom/Point.js @@ -1,7 +1,6 @@ /** * @module ol/geom/Point */ -import {inherits} from '../util.js'; import {createOrUpdateFromCoordinate, containsXY} from '../extent.js'; import GeometryType from '../geom/GeometryType.js'; import SimpleGeometry from '../geom/SimpleGeometry.js'; @@ -12,15 +11,16 @@ import {squaredDistance as squaredDx} from '../math.js'; * @classdesc * Point geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {module:ol/coordinate~Coordinate} coordinates Coordinates. - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. * @api */ -class Point { +class Point extends SimpleGeometry { + + /** + * @param {module:ol/coordinate~Coordinate} coordinates Coordinates. + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + */ constructor(coordinates, opt_layout) { - SimpleGeometry.call(this); + super(); this.setCoordinates(coordinates, opt_layout); } @@ -101,7 +101,5 @@ class Point { } } -inherits(Point, SimpleGeometry); - export default Point; diff --git a/src/ol/geom/Polygon.js b/src/ol/geom/Polygon.js index 87fa4215c0..14a6634eef 100644 --- a/src/ol/geom/Polygon.js +++ b/src/ol/geom/Polygon.js @@ -1,7 +1,6 @@ /** * @module ol/geom/Polygon */ -import {inherits} from '../util.js'; import {extend} from '../array.js'; import {closestSquaredDistanceXY, getCenter} from '../extent.js'; import GeometryLayout from '../geom/GeometryLayout.js'; @@ -25,24 +24,24 @@ import {modulo} from '../math.js'; * @classdesc * Polygon geometry. * - * @constructor - * @extends {module:ol/geom/SimpleGeometry} - * @param {!Array.>|!Array.} coordinates - * Array of linear rings that define the polygon. The first linear ring of the - * array defines the outer-boundary or surface of the polygon. Each subsequent - * linear ring defines a hole in the surface of the polygon. A linear ring is - * an array of vertices' coordinates where the first coordinate and the last are - * equivalent. (For internal use, flat coordinates in combination with - * `opt_layout` and `opt_ends` are also accepted.) - * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. - * @param {Array.=} opt_ends Ends (for internal use with flat - * coordinates). * @api */ -class Polygon { +class Polygon extends SimpleGeometry { + + /** + * @param {!Array.>|!Array.} coordinates + * Array of linear rings that define the polygon. The first linear ring of the + * array defines the outer-boundary or surface of the polygon. Each subsequent + * linear ring defines a hole in the surface of the polygon. A linear ring is + * an array of vertices' coordinates where the first coordinate and the last are + * equivalent. (For internal use, flat coordinates in combination with + * `opt_layout` and `opt_ends` are also accepted.) + * @param {module:ol/geom/GeometryLayout=} opt_layout Layout. + * @param {Array.=} opt_ends Ends (for internal use with flat coordinates). + */ constructor(coordinates, opt_layout, opt_ends) { - SimpleGeometry.call(this); + super(); /** * @type {Array.} @@ -330,8 +329,6 @@ class Polygon { } } -inherits(Polygon, SimpleGeometry); - export default Polygon; diff --git a/src/ol/geom/SimpleGeometry.js b/src/ol/geom/SimpleGeometry.js index e456a5e2ef..0ac4a68662 100644 --- a/src/ol/geom/SimpleGeometry.js +++ b/src/ol/geom/SimpleGeometry.js @@ -1,7 +1,6 @@ /** * @module ol/geom/SimpleGeometry */ -import {inherits} from '../util.js'; import {FALSE} from '../functions.js'; import {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js'; import Geometry from '../geom/Geometry.js'; @@ -14,15 +13,13 @@ import {clear} from '../obj.js'; * Abstract base class; only used for creating subclasses; do not instantiate * in apps, as cannot be rendered. * - * @constructor * @abstract - * @extends {module:ol/geom/Geometry} * @api */ -class SimpleGeometry { +class SimpleGeometry extends Geometry { constructor() { - Geometry.call(this); + super(); /** * @protected @@ -257,8 +254,6 @@ class SimpleGeometry { } } -inherits(SimpleGeometry, Geometry); - /** * @param {number} stride Stride.