diff --git a/examples/regularshape.html b/examples/regularshape.html index 59cbf4b762..138ae58ac4 100644 --- a/examples/regularshape.html +++ b/examples/regularshape.html @@ -12,3 +12,6 @@ docs: > tags: "vector, symbol, regularshape, style, square, rectangle, cross, star, triangle, x" ---
+
+ +
diff --git a/examples/regularshape.js b/examples/regularshape.js index 91279aea76..5fa56f8edb 100644 --- a/examples/regularshape.js +++ b/examples/regularshape.js @@ -129,3 +129,14 @@ const map = new Map({ zoom: 2, }), }); + +const colors = ['blue', 'green', 'yellow', 'aqua', 'red']; +let currentColor = 0; + +document.getElementById('color-changer').addEventListener('click', function () { + styles.square + .getImage() + .setFill(new Fill({color: colors[currentColor % colors.length]})); + vectorLayer.changed(); + currentColor++; +}); diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index e04f0bc579..06564fb5e5 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -200,6 +200,16 @@ class RegularShape extends ImageStyle { return this.fill_; } + /** + * Set the fill style. + * @param {import("./Fill.js").default} fill Fill style. + * @api + */ + setFill(fill) { + this.fill_ = fill; + this.render(); + } + /** * @return {HTMLCanvasElement} Image element. */ @@ -309,6 +319,16 @@ class RegularShape extends ImageStyle { return this.stroke_; } + /** + * Set the stroke style. + * @param {import("./Stroke.js").default} stroke Stroke style. + * @api + */ + setStroke(stroke) { + this.stroke_ = stroke; + this.render(); + } + /** * @param {function(import("../events/Event.js").default): void} listener Listener function. */ diff --git a/test/rendering/cases/regularshape-style-setters/expected.png b/test/rendering/cases/regularshape-style-setters/expected.png new file mode 100644 index 0000000000..291026fdd4 Binary files /dev/null and b/test/rendering/cases/regularshape-style-setters/expected.png differ diff --git a/test/rendering/cases/regularshape-style-setters/main.js b/test/rendering/cases/regularshape-style-setters/main.js new file mode 100644 index 0000000000..5e97d7e624 --- /dev/null +++ b/test/rendering/cases/regularshape-style-setters/main.js @@ -0,0 +1,48 @@ +import Feature from '../../../../src/ol/Feature.js'; +import Fill from '../../../../src/ol/style/Fill.js'; +import Map from '../../../../src/ol/Map.js'; +import Point from '../../../../src/ol/geom/Point.js'; +import RegularShape from '../../../../src/ol/style/RegularShape.js'; +import Stroke from '../../../../src/ol/style/Stroke.js'; +import Style from '../../../../src/ol/style/Style.js'; +import VectorLayer from '../../../../src/ol/layer/Vector.js'; +import VectorSource from '../../../../src/ol/source/Vector.js'; +import View from '../../../../src/ol/View.js'; + +const vectorSource = new VectorSource({ + features: [ + new Feature({ + geometry: new Point([0, 0]), + }), + ], +}); + +const regularShapeStyle = new RegularShape({ + fill: new Fill({color: 'red'}), + stroke: new Stroke({color: 'blue'}), + points: 4, + radius: 10, +}); + +const vectorLayer = new VectorLayer({ + source: vectorSource, + style: new Style({ + image: regularShapeStyle, + }), +}); + +const map = new Map({ + target: 'map', + layers: [vectorLayer], + view: new View({ + center: [0, 0], + resolution: 1, + }), +}); +map.renderSync(); + +regularShapeStyle.setFill(new Fill({color: 'green'})); +regularShapeStyle.setStroke(new Stroke({color: 'yellow'})); +vectorLayer.changed(); + +render();