45 #ifdef CHECK_MEMORY_LEAKS 47 #endif // CHECK_MEMORY_LEAKS 72 : myRed(0), myGreen(0), myBlue(0), myAlpha(0) {}
87 RGBColor::set(
unsigned char r,
unsigned char g,
unsigned char b,
unsigned char a) {
97 if (col == RGBColor::RED) {
100 if (col == RGBColor::GREEN) {
101 return os <<
"green";
103 if (col == RGBColor::BLUE) {
106 if (col == RGBColor::YELLOW) {
107 return os <<
"yellow";
109 if (col == RGBColor::CYAN) {
112 if (col == RGBColor::MAGENTA) {
113 return os <<
"magenta";
115 if (col == RGBColor::ORANGE) {
116 return os <<
"orange";
118 if (col == RGBColor::WHITE) {
119 return os <<
"white";
121 if (col == RGBColor::BLACK) {
122 return os <<
"black";
124 if (col == RGBColor::GREY) {
127 os << static_cast<int>(col.
myRed) <<
"," 128 << static_cast<int>(col.
myGreen) <<
"," 129 <<
static_cast<int>(col.
myBlue);
131 os <<
"," <<
static_cast<int>(col.
myAlpha);
151 const unsigned char red = (
unsigned char)(
MIN2(
MAX2(
myRed + change, 0), 255));
154 int changed = ((int)red - (
int)
myRed) + ((
int)blue - (int)
myBlue) + ((int)green - (
int)
myGreen);
156 if (changed == toChange * change) {
158 }
else if (changed == 0) {
161 const int maxedColors = (red !=
myRed + change ? 1 : 0) + (blue != myBlue + change ? 1 : 0) + (green !=
myGreen + change ? 1 : 0);
162 if (maxedColors == 3) {
165 const int toChangeNext = 3 - maxedColors;
166 return result.
changedBrightness((
int)((toChange * change - changed) / toChangeNext), toChangeNext);
173 std::transform(coldef.begin(), coldef.end(), coldef.begin(), tolower);
174 if (coldef ==
"red") {
177 if (coldef ==
"green") {
180 if (coldef ==
"blue") {
183 if (coldef ==
"yellow") {
186 if (coldef ==
"cyan") {
189 if (coldef ==
"magenta") {
192 if (coldef ==
"orange") {
195 if (coldef ==
"white") {
198 if (coldef ==
"black") {
201 if (coldef ==
"grey" || coldef ==
"gray") {
207 unsigned char a = 255;
208 if (coldef[0] ==
'#') {
210 if (coldef.length() == 7) {
211 r =
static_cast<unsigned char>((coldesc & 0xFF0000) >> 16);
212 g =
static_cast<unsigned char>((coldesc & 0x00FF00) >> 8);
214 }
else if (coldef.length() == 9) {
215 r =
static_cast<unsigned char>((coldesc & 0xFF000000) >> 24);
216 g =
static_cast<unsigned char>((coldesc & 0x00FF0000) >> 16);
217 b =
static_cast<unsigned char>((coldesc & 0x0000FF00) >> 8);
224 if (st.size() == 3 || st.size() == 4) {
229 if (st.size() == 4) {
232 if (r <= 1 && g <= 1 && b <= 1 && (st.size() == 3 || a <= 1)) {
239 if (st.size() == 4) {
253 const std::string& coldef,
const std::string& objecttype,
254 const char* objectid,
bool report,
bool& ok) {
262 std::ostringstream oss;
263 oss <<
"Attribute 'color' in definition of ";
269 oss <<
" '" << objectid <<
"'";
271 oss <<
" is not a valid color.";
285 const unsigned char r = (
unsigned char)((
int)minColor.
myRed + (((int)maxColor.
myRed - (
int)minColor.
myRed) * weight));
286 const unsigned char g = (
unsigned char)((
int)minColor.
myGreen + (((int)maxColor.
myGreen - (
int)minColor.
myGreen) * weight));
287 const unsigned char b = (
unsigned char)((
int)minColor.
myBlue + (((int)maxColor.
myBlue - (
int)minColor.
myBlue) * weight));
288 const unsigned char a = (
unsigned char)((
int)minColor.
myAlpha + (((int)maxColor.
myAlpha - (
int)minColor.
myAlpha) * weight));
307 const unsigned char m =
static_cast<unsigned char>(v * (1 - s) * 255. + 0.5);
308 const unsigned char n =
static_cast<unsigned char>(v * (1 - s * f) * 255. + 0.5);
309 const unsigned char vv =
static_cast<unsigned char>(v * 255. + 0.5);
325 return RGBColor(255, 255, 255, 255);
static int _hex2int(const E *const data)
converts a char-type array with a hex value into the integer value described by it ...
static const RGBColor BLUE
static RGBColor parseColor(std::string coldef)
Parses a color information.
static RGBColor fromHSV(SUMOReal h, SUMOReal s, SUMOReal v)
Converts the given hsv-triplet to rgb.
static SUMOReal _2SUMOReal(const E *const data)
converts a char-type array into the SUMOReal value described by it
static const RGBColor WHITE
static RGBColor parseColorReporting(const std::string &coldef, const std::string &objecttype, const char *objectid, bool report, bool &ok)
Parses a color information.
bool operator==(const RGBColor &c) const
static const RGBColor ORANGE
static RGBColor interpolate(const RGBColor &minColor, const RGBColor &maxColor, SUMOReal weight)
Interpolates between two colors.
friend std::ostream & operator<<(std::ostream &os, const RGBColor &col)
Writes the color to the given stream.
static const RGBColor BLACK
#define UNUSED_PARAMETER(x)
unsigned char blue() const
Returns the blue-amount of the color.
bool operator!=(const RGBColor &c) const
static const RGBColor GREEN
static const RGBColor GREY
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
unsigned char myRed
The color amounts.
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
assigns new values
static const RGBColor DEFAULT_COLOR
The default color (for vehicle types and vehicles)
unsigned char alpha() const
Returns the alpha-amount of the color.
static const RGBColor MAGENTA
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
std::vector< std::string > getVector()
static const RGBColor YELLOW
static int _2int(const E *const data)
converts a char-type array into the integer value described by it
static const RGBColor RED
static const RGBColor CYAN
unsigned char green() const
Returns the green-amount of the color.
unsigned char red() const
Returns the red-amount of the color.
static const std::string DEFAULT_COLOR_STRING
The string description of the default color.