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();