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)
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)
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
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::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
std::vector< std::string > getVector()
static const RGBColor YELLOW
static int _2int(const E *const data)
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.