2023-03-04 20:44:05 +01:00
|
|
|
#include "patternmaker.h"
|
2023-03-05 00:20:34 +01:00
|
|
|
#include <QColor>
|
|
|
|
#include <cmath>
|
2023-02-20 00:36:55 +01:00
|
|
|
|
2023-03-04 20:44:05 +01:00
|
|
|
void PatternMaker::setController(DmxController *controller)
|
2023-02-20 00:36:55 +01:00
|
|
|
{
|
|
|
|
if (m_controller == controller)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (m_controller)
|
|
|
|
{
|
2023-02-22 23:18:09 +01:00
|
|
|
// disconnect(m_controller, &DmxController::presetInserted,
|
|
|
|
// this, &PresetsModel::otherPresetInserted);
|
2023-02-20 00:36:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
m_controller = controller;
|
|
|
|
|
|
|
|
if (m_controller)
|
|
|
|
{
|
2023-02-22 23:18:09 +01:00
|
|
|
// connect(m_controller, &DmxController::presetInserted,
|
|
|
|
// this, &PresetsModel::otherPresetInserted);
|
2023-02-20 00:36:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
emit controllerChanged(m_controller);
|
|
|
|
}
|
|
|
|
|
2023-03-05 02:08:44 +01:00
|
|
|
void PatternMaker::setAllFaders(quint8 value)
|
2023-02-20 00:36:55 +01:00
|
|
|
{
|
|
|
|
if (!m_controller)
|
|
|
|
{
|
|
|
|
qDebug() << "hilfe" << __LINE__;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const auto &devices = m_controller->lightProject().devices;
|
|
|
|
|
|
|
|
sliders_state_t sliderStates;
|
|
|
|
sliderStates.reserve(devices.size());
|
|
|
|
|
|
|
|
for (const auto &device : devices)
|
|
|
|
{
|
2023-02-20 02:53:48 +01:00
|
|
|
std::vector<quint8> sliderState;
|
2023-02-20 00:36:55 +01:00
|
|
|
|
|
|
|
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)
|
2023-03-05 02:08:44 +01:00
|
|
|
sliderState.push_back(value);
|
2023-02-20 00:36:55 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sliderStates.push_back(std::move(sliderState));
|
|
|
|
}
|
|
|
|
|
|
|
|
m_controller->setSliderStates(std::move(sliderStates));
|
|
|
|
}
|
|
|
|
|
2023-03-04 20:44:05 +01:00
|
|
|
void PatternMaker::setPattern(int n, int k, DeviceTypeRegisterType registerType, quint8 value)
|
2023-02-20 22:36:25 +01:00
|
|
|
{
|
|
|
|
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 bool test = i++ % n == k;
|
|
|
|
|
|
|
|
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)
|
|
|
|
sliderState.push_back(test && register_.type == registerType ? value : 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sliderStates.push_back(std::move(sliderState));
|
|
|
|
}
|
|
|
|
|
|
|
|
m_controller->setSliderStates(std::move(sliderStates));
|
|
|
|
}
|
2023-03-05 00:20:34 +01:00
|
|
|
|
2023-03-05 00:32:29 +01:00
|
|
|
void PatternMaker::setRainbow(float phase, float advancePerLamp, int advanceEveryNLamp)
|
2023-03-05 00:20:34 +01:00
|
|
|
{
|
|
|
|
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 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));
|
2023-03-05 00:32:29 +01:00
|
|
|
|
|
|
|
//qWarning() << "i=" << i << " advanceEveryNLamp=" << advanceEveryNLamp << " phase=" << phase;
|
|
|
|
|
|
|
|
if(++i >= advanceEveryNLamp){
|
|
|
|
i = 0;
|
|
|
|
phase += advancePerLamp;
|
|
|
|
}
|
2023-03-05 00:20:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
m_controller->setSliderStates(std::move(sliderStates));
|
|
|
|
}
|