add single step rainbow generator
This commit is contained in:
@ -212,6 +212,30 @@ ColumnLayout {
|
|||||||
onPressed: patternMaker.setPattern(nSpinBox.value, kSpinBox.value, registerTypeComboBox.currentValue, valueSlider.value)
|
onPressed: patternMaker.setPattern(nSpinBox.value, kSpinBox.value, registerTypeComboBox.currentValue, valueSlider.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
DoubleSpinBox {
|
||||||
|
id: phaseAdvanceSlider
|
||||||
|
Layout.preferredWidth: 120
|
||||||
|
realFrom: 1
|
||||||
|
realTo: 360
|
||||||
|
realValue: 60
|
||||||
|
}
|
||||||
|
|
||||||
|
SpinBox {
|
||||||
|
id: generateSteps
|
||||||
|
Layout.preferredWidth: 120
|
||||||
|
from: 1
|
||||||
|
to: 1000
|
||||||
|
value: 360
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: qsTr('Rainbow')
|
||||||
|
onPressed: patternMaker.setRainbow(0, phaseAdvanceSlider.realValue / 360.)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
#include "patternmaker.h"
|
#include "patternmaker.h"
|
||||||
|
#include <QColor>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
void PatternMaker::setController(DmxController *controller)
|
void PatternMaker::setController(DmxController *controller)
|
||||||
{
|
{
|
||||||
@ -138,3 +140,60 @@ void PatternMaker::setPattern(int n, int k, DeviceTypeRegisterType registerType,
|
|||||||
|
|
||||||
m_controller->setSliderStates(std::move(sliderStates));
|
m_controller->setSliderStates(std::move(sliderStates));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PatternMaker::setRainbow(float phase, float advancePerLamp)
|
||||||
|
{
|
||||||
|
if (!m_controller)
|
||||||
|
{
|
||||||
|
qDebug() << "hilfe" << __LINE__;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &devices = m_controller->lightProject().devices;
|
||||||
|
|
||||||
|
sliders_state_t sliderStates;
|
||||||
|
sliderStates.reserve(devices.size());
|
||||||
|
|
||||||
|
int i{};
|
||||||
|
for (const auto &device : devices)
|
||||||
|
{
|
||||||
|
const auto current_i = i++;
|
||||||
|
|
||||||
|
const auto color = QColor::fromHsvF(fmod(phase,1.),1.,1.);
|
||||||
|
|
||||||
|
std::vector<quint8> sliderState;
|
||||||
|
|
||||||
|
if (device.deviceTypeId != -1)
|
||||||
|
{
|
||||||
|
const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId);
|
||||||
|
if (!deviceTypePtr)
|
||||||
|
qWarning() << "hilfe" << __LINE__;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const auto &deviceType = *deviceTypePtr;
|
||||||
|
sliderState.reserve(deviceType.registers.size());
|
||||||
|
|
||||||
|
for (const auto ®ister_ : deviceType.registers){
|
||||||
|
switch (register_.type) {
|
||||||
|
case DeviceTypeRegisterType::Red:
|
||||||
|
sliderState.push_back(color.red());
|
||||||
|
break;
|
||||||
|
case DeviceTypeRegisterType::Green:
|
||||||
|
sliderState.push_back(color.green());
|
||||||
|
break;
|
||||||
|
case DeviceTypeRegisterType::Blue:
|
||||||
|
sliderState.push_back(color.blue());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sliderState.push_back(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sliderStates.push_back(std::move(sliderState));
|
||||||
|
phase += advancePerLamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_controller->setSliderStates(std::move(sliderStates));
|
||||||
|
}
|
||||||
|
@ -21,6 +21,7 @@ public:
|
|||||||
Q_INVOKABLE void setAllFadersLow();
|
Q_INVOKABLE void setAllFadersLow();
|
||||||
Q_INVOKABLE void setAllFadersMax();
|
Q_INVOKABLE void setAllFadersMax();
|
||||||
Q_INVOKABLE void setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value);
|
Q_INVOKABLE void setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value);
|
||||||
|
Q_INVOKABLE void setRainbow(float phase, float advancePerLamp);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void controllerChanged(DmxController *controller);
|
void controllerChanged(DmxController *controller);
|
||||||
|
Reference in New Issue
Block a user