From c1e75ac127a6f9b17346c075cbe4270db2ddcbfb Mon Sep 17 00:00:00 2001 From: Brandon502 <105077712+Brandon502@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:12:28 -0400 Subject: [PATCH 1/2] Expand1D Arc - No holes --- wled00/FX_fcn.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 2e8e0528..98e793d5 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -870,7 +870,8 @@ uint16_t Segment::virtualLength() const { break; case M12_pCorner: case M12_pArc: - vLen = max(vW,vH); // get the longest dimension + vLen = sqrt16(vW * vW + vH * vH); + if (vW != vH) vLen++; // round up break; case M12_jMap: //WLEDMM jMap if (jMap) From e37afd0cb82d8c6e4e698267d43cb7def8246227 Mon Sep 17 00:00:00 2001 From: Brandon502 <105077712+Brandon502@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:12:56 -0400 Subject: [PATCH 2/2] Expand1D Corner Fix, Arc gPC fix. Only matripix is not working correctly on arc. Effect starts at the end of the strip and use gPC to fill to beginning. --- wled00/FX_fcn.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 98e793d5..099e618c 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -869,6 +869,8 @@ uint16_t Segment::virtualLength() const { vLen = vH; break; case M12_pCorner: + vLen = max(vW,vH); // get the longest dimension + break; case M12_pArc: vLen = sqrt16(vW * vW + vH * vH); if (vW != vH) vLen++; // round up @@ -1219,11 +1221,18 @@ uint32_t __attribute__((hot)) Segment::getPixelColor(int i) const if (vStrip>0) return getPixelColorXY(vStrip - 1, vH - i -1); else return getPixelColorXY(0, vH - i -1); break; - case M12_pArc: case M12_pCorner: - // use longest dimension - return vW>vH ? getPixelColorXY(i, 0) : getPixelColorXY(0, i); + case M12_pArc: { + if (i < max(vW, vH)) { + return vW>vH ? getPixelColorXY(i, 0) : getPixelColorXY(0, i); // Corner and Arc + break; + } + int length = virtualLength(); + int x = i * vW / length; + int y = i * vH / length; + return getPixelColorXY(x, y); // Not 100% accurate break; + } case M12_jMap: //WLEDMM jMap if (jMap) return ((JMapC *)jMap)->getPixelColor(i);