2013-07-26 22:38:34 +02:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// STL includes
|
|
|
|
#include <ctime>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
// Local includes
|
2013-11-11 10:00:37 +01:00
|
|
|
#include <utils/ColorRgb.h>
|
2013-07-26 22:38:34 +02:00
|
|
|
|
2016-09-25 21:59:31 +02:00
|
|
|
// QT includes
|
|
|
|
#include <QString>
|
|
|
|
|
2013-07-26 22:38:34 +02:00
|
|
|
// Forward class declarations
|
|
|
|
namespace Json { class Value; }
|
|
|
|
|
2015-01-01 19:31:04 +01:00
|
|
|
/// Enumeration containing the possible orders of device color byte data
|
2020-06-28 23:05:32 +02:00
|
|
|
enum class ColorOrder
|
2015-01-01 19:31:04 +01:00
|
|
|
{
|
2015-02-23 16:11:33 +01:00
|
|
|
ORDER_RGB, ORDER_RBG, ORDER_GRB, ORDER_BRG, ORDER_GBR, ORDER_BGR
|
2015-01-01 19:31:04 +01:00
|
|
|
};
|
|
|
|
|
2016-09-25 21:59:31 +02:00
|
|
|
inline QString colorOrderToString(const ColorOrder colorOrder)
|
2015-02-23 16:11:33 +01:00
|
|
|
{
|
|
|
|
switch (colorOrder)
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_RGB:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "rgb";
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_RBG:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "rbg";
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_GRB:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "grb";
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_BRG:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "brg";
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_GBR:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "gbr";
|
2020-06-28 23:05:32 +02:00
|
|
|
case ColorOrder::ORDER_BGR:
|
2015-02-23 16:11:33 +01:00
|
|
|
return "bgr";
|
|
|
|
default:
|
|
|
|
return "not-a-colororder";
|
|
|
|
}
|
|
|
|
}
|
2016-09-25 21:59:31 +02:00
|
|
|
inline ColorOrder stringToColorOrder(const QString & order)
|
2015-02-23 16:11:33 +01:00
|
|
|
{
|
|
|
|
if (order == "rgb")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_RGB;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
else if (order == "bgr")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_BGR;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
else if (order == "rbg")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_RBG;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
else if (order == "brg")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_BRG;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
else if (order == "gbr")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_GBR;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
else if (order == "grb")
|
|
|
|
{
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_GRB;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
|
2016-09-25 21:59:31 +02:00
|
|
|
std::cout << "Unknown color order defined (" << order.toStdString() << "). Using RGB." << std::endl;
|
2020-06-28 23:05:32 +02:00
|
|
|
return ColorOrder::ORDER_RGB;
|
2015-02-23 16:11:33 +01:00
|
|
|
}
|
|
|
|
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// The Led structure contains the definition of the image portion used to determine a single led's
|
|
|
|
/// color.
|
2013-09-09 22:35:28 +02:00
|
|
|
/// @verbatim
|
2013-09-06 21:26:58 +02:00
|
|
|
/// |--------------------image--|
|
|
|
|
/// | minX maxX |
|
|
|
|
/// | |-----|minY |
|
|
|
|
/// | | | |
|
|
|
|
/// | |-----|maxY |
|
|
|
|
/// | |
|
|
|
|
/// | |
|
|
|
|
/// | |
|
|
|
|
/// |---------------------------|
|
2013-09-09 22:35:28 +02:00
|
|
|
/// @endverbatim
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
2013-07-26 22:38:34 +02:00
|
|
|
struct Led
|
|
|
|
{
|
2013-09-06 21:26:58 +02:00
|
|
|
/// The minimum vertical scan line included for this leds color
|
2013-07-26 22:38:34 +02:00
|
|
|
double minX_frac;
|
2013-09-06 21:26:58 +02:00
|
|
|
/// The maximum vertical scan line included for this leds color
|
2013-07-26 22:38:34 +02:00
|
|
|
double maxX_frac;
|
2013-09-06 21:26:58 +02:00
|
|
|
/// The minimum horizontal scan line included for this leds color
|
2013-07-26 22:38:34 +02:00
|
|
|
double minY_frac;
|
2013-09-06 21:26:58 +02:00
|
|
|
/// The maximum horizontal scan line included for this leds color
|
2013-07-26 22:38:34 +02:00
|
|
|
double maxY_frac;
|
2015-01-01 19:31:04 +01:00
|
|
|
/// the color order
|
|
|
|
ColorOrder colorOrder;
|
2013-07-26 22:38:34 +02:00
|
|
|
};
|
|
|
|
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// The LedString contains the image integration information of the leds
|
|
|
|
///
|
2013-07-26 22:38:34 +02:00
|
|
|
class LedString
|
|
|
|
{
|
|
|
|
public:
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// Constructs the LedString with no leds
|
|
|
|
///
|
2013-07-26 22:38:34 +02:00
|
|
|
LedString();
|
|
|
|
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// Destructor of this LedString
|
|
|
|
///
|
2013-07-26 22:38:34 +02:00
|
|
|
~LedString();
|
|
|
|
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// Returns the led specifications
|
|
|
|
///
|
|
|
|
/// @return The list with led specifications
|
|
|
|
///
|
2013-08-13 11:10:45 +02:00
|
|
|
std::vector<Led>& leds();
|
|
|
|
|
2013-09-06 21:26:58 +02:00
|
|
|
///
|
|
|
|
/// Returns the led specifications
|
|
|
|
///
|
|
|
|
/// @return The list with led specifications
|
|
|
|
///
|
2013-07-26 22:38:34 +02:00
|
|
|
const std::vector<Led>& leds() const;
|
|
|
|
|
|
|
|
private:
|
2013-09-06 21:26:58 +02:00
|
|
|
/// The list with led specifications
|
2013-07-26 22:38:34 +02:00
|
|
|
std::vector<Led> mLeds;
|
|
|
|
};
|