diff --git a/assets/webconfig/js/content_leds.js b/assets/webconfig/js/content_leds.js index 0b159fe8..c457262b 100755 --- a/assets/webconfig/js/content_leds.js +++ b/assets/webconfig/js/content_leds.js @@ -2515,10 +2515,18 @@ function nanoleafGeneratelayout(panelLayout, panelOrderTopDown, panelOrderLeftRi var degreesToRotate = 0; if (globalOrientation) { - degreesToRotate = -globalOrientation.value; + degreesToRotate = globalOrientation.value; } + + //Align rotation degree to 15 degree steps + const degreeSteps = 15; + var degreeRounded = ((Math.round(degreesToRotate / degreeSteps) * degreeSteps) + 360) % 360; + + //Nanoleaf orientation is counter-clockwise + degreeRounded *= -1; + // Convert degrees to radians - var radians = (degreesToRotate * Math.PI) / 180; + const radians = (degreeRounded * Math.PI) / 180; //Reduce the capture area const areaSizeFactor = 0.5; @@ -2536,9 +2544,9 @@ function nanoleafGeneratelayout(panelLayout, panelOrderTopDown, panelOrderLeftRi panel.areaHeight = shapeTypes[panel.shapeType].sideLengthY * areaSizeFactor; if (radians !== 0) { - var rotatedXY = rotateCoordinates(panel.x, panel.y, radians) - panel.x = rotatedXY.x; - panel.y = rotatedXY.y; + var rotatedXY = rotateCoordinates(panel.x, panel.y, radians); + panel.x = Math.round(rotatedXY.x); + panel.y = Math.round(rotatedXY.y); } panel.maxX = panel.x + panel.areaWidth; diff --git a/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp b/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp index 3e509490..b3a1816b 100644 --- a/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp +++ b/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp @@ -90,6 +90,9 @@ namespace { const char SSDP_FILTER_HEADER[] = "ST"; const char SSDP_NANOLEAF[] = "nanoleaf:nl*"; const char SSDP_LIGHTPANELS[] = "nanoleaf_aurora:light"; + + const int ROTATION_STEPS_DEGREE = 15; + } //End of constants // Nanoleaf Panel Shapetypes @@ -250,7 +253,15 @@ bool LedDeviceNanoleaf::initLedsConfiguration() QJsonObject jsonPanelLayout = jsonAllPanelInfo[API_PANELLAYOUT].toObject(); const QJsonObject globalOrientation = jsonPanelLayout[PANEL_GLOBALORIENTATION].toObject(); - double radians = (-1 * globalOrientation[PANEL_GLOBALORIENTATION_VALUE].toInt() * std::acos(-1)) / 180; + int degreesToRotate = globalOrientation[PANEL_GLOBALORIENTATION_VALUE].toInt(); + + //Align rotation degree to 15 degree steps + int degreeRounded = static_cast(((round(degreesToRotate / ROTATION_STEPS_DEGREE) * ROTATION_STEPS_DEGREE) + 360)) % 360; + + //Nanoleaf orientation is counter-clockwise + degreeRounded *= -1; + + double radians = (degreeRounded * std::acos(-1)) / 180; QJsonObject jsonLayout = jsonPanelLayout[PANEL_LAYOUT].toObject(); @@ -276,8 +287,8 @@ bool LedDeviceNanoleaf::initLedsConfiguration() int panelY; if (radians != 0) { - panelX = static_cast(posX * cos(radians) - posY * sin(radians)); - panelY = static_cast(posX * sin(radians) + posY * cos(radians)); + panelX = round(posX * cos(radians) - posY * sin(radians)); + panelY = round(posX * sin(radians) + posY * cos(radians)); } else {