From 5578db893ea27797761e77eeb9cafbd53641c436 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Wed, 9 Jun 2021 21:38:01 +0530 Subject: [PATCH] #374 Polygon number-of-sides cannot be edited after placed --- .../extensions/ext-polystar/ext-polystar.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/editor/extensions/ext-polystar/ext-polystar.js b/src/editor/extensions/ext-polystar/ext-polystar.js index e70f9753..b20179c3 100644 --- a/src/editor/extensions/ext-polystar/ext-polystar.js +++ b/src/editor/extensions/ext-polystar/ext-polystar.js @@ -145,6 +145,35 @@ export default { }); $id("polySides").addEventListener("change", (event) => { setAttr("sides", event.target.value); + const sides = event.target.value; + let i = selElems.length; + while (i--) { + const elem = selElems[i]; + let xpos = 0; + let ypos = 0; + if (elem.points) { + const list = elem.points; + const len = list.numberOfItems; + for (let i = 0; i < len; ++i) { + const pt = list.getItem(i); + xpos += parseFloat(pt.x); + ypos += parseFloat(pt.y); + } + const cx = xpos / len; + const cy = ypos / len; + const edg = elem.getAttribute('edge'); + const inradius = (edg / 2) * cot(Math.PI / sides); + const circumradius = inradius * sec(Math.PI / sides); + let points = ""; + for (let s = 0; sides >= s; s++) { + const angle = (2.0 * Math.PI * s) / sides; + const x = circumradius * Math.cos(angle) + cx; + const y = circumradius * Math.sin(angle) + cy; + points += x + "," + y + " "; + } + elem.setAttribute("points", points); + } + } }); }, mouseDown(opts) {